Multiple fixes to indentation beep code, including volume for lower ranged beeps using the gstreamer driver.
This commit is contained in:
@@ -52,10 +52,13 @@ class driver(sound_driver):
|
||||
bus.connect("message", self._on_pipeline_message)
|
||||
|
||||
self._source = Gst.ElementFactory.make("audiotestsrc", "src")
|
||||
self._volume = Gst.ElementFactory.make("volume", "volume")
|
||||
self._sink = Gst.ElementFactory.make("autoaudiosink", "output")
|
||||
self._pipeline.add(self._source)
|
||||
self._pipeline.add(self._volume)
|
||||
self._pipeline.add(self._sink)
|
||||
self._source.link(self._sink)
|
||||
self._source.link(self._volume)
|
||||
self._volume.link(self._sink)
|
||||
self.mainloop = GLib.MainLoop()
|
||||
self.thread = threading.Thread(target=self.mainloop.run)
|
||||
self.thread.start()
|
||||
@@ -117,8 +120,18 @@ class driver(sound_driver):
|
||||
return
|
||||
if interrupt:
|
||||
self.cancel()
|
||||
# Always reset pipeline to prevent volume accumulation
|
||||
self._pipeline.set_state(Gst.State.NULL)
|
||||
duration = duration * 1000
|
||||
self._source.set_property("volume", self.volume * adjust_volume)
|
||||
# Use dedicated volume element for better control
|
||||
# GStreamer volume property behaves very differently than sox for low frequencies
|
||||
if adjust_volume > 0.8: # This indicates low frequency indentation beeps
|
||||
# Extremely aggressive boost - GStreamer really struggles with low frequencies
|
||||
effective_volume = self.volume * adjust_volume * 50.0 # Ridiculous multiplier to match sox
|
||||
else:
|
||||
effective_volume = self.volume * adjust_volume * 3.0
|
||||
self._volume.set_property("volume", effective_volume)
|
||||
self._source.set_property("volume", 1.0) # Set source to full, control via volume element
|
||||
self._source.set_property("freq", frequence)
|
||||
self._pipeline.set_state(Gst.State.PLAYING)
|
||||
GLib.timeout_add(duration, self._on_timeout, self._pipeline)
|
||||
|
||||
Reference in New Issue
Block a user