本文整理汇总了Python中xpra.sound.sound_pipeline.SoundPipeline类的典型用法代码示例。如果您正苦于以下问题:Python SoundPipeline类的具体用法?Python SoundPipeline怎么用?Python SoundPipeline使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SoundPipeline类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
def __init__(self, src_type=DEFAULT_SRC, src_options={}, codec=MP3, volume=1.0, encoder_options={}):
assert src_type in SOURCES
encoder, fmt = get_encoder_formatter(codec)
SoundPipeline.__init__(self, codec)
self.src_type = src_type
source_str = plugin_str(src_type, src_options)
encoder_str = plugin_str(encoder, encoder_options)
fmt_str = plugin_str(fmt, MUXER_DEFAULT_OPTIONS.get(fmt, {}))
pipeline_els = [source_str]
if AUDIOCONVERT:
pipeline_els += ["audioconvert"]
if AUDIORESAMPLE:
pipeline_els += [
"audioresample",
"audio/x-raw-int,rate=44100,channels=2"]
pipeline_els.append("volume name=volume volume=%s" % volume)
pipeline_els += [encoder_str,
fmt_str,
"appsink name=sink"]
self.setup_pipeline_and_bus(pipeline_els)
self.volume = self.pipeline.get_by_name("volume")
self.sink = self.pipeline.get_by_name("sink")
self.sink.set_property("emit-signals", True)
self.sink.set_property("max-buffers", 10)
self.sink.set_property("drop", False)
self.sink.set_property("sync", True)
self.sink.set_property("qos", False)
try:
#Gst 1.0:
self.sink.connect("new-sample", self.on_new_sample)
self.sink.connect("new-preroll", self.on_new_preroll1)
except:
#Gst 0.10:
self.sink.connect("new-buffer", self.on_new_buffer)
self.sink.connect("new-preroll", self.on_new_preroll0)
示例2: __init__
def __init__(self, src_type=DEFAULT_SRC, src_options={}, codec=MP3, encoder_options={}):
assert src_type in SOURCES
encoder, fmt = get_encoder_formatter(codec)
SoundPipeline.__init__(self, codec)
self.add_signals(self.__generic_signals__)
self.src_type = src_type
source_str = plugin_str(src_type, src_options)
encoder_str = plugin_str(encoder, encoder_options)
pipeline_els = [source_str]
if AUDIOCONVERT:
pipeline_els += ["audioconvert"]
if AUDIORESAMPLE:
pipeline_els += [
"audioresample",
"audio/x-raw-int,rate=44100,channels=2"]
pipeline_els += [encoder_str,
fmt,
"appsink name=sink"]
self.setup_pipeline_and_bus(pipeline_els)
self.sink = self.pipeline.get_by_name("sink")
self.sink.set_property("emit-signals", True)
self.sink.set_property("max-buffers", 10)
self.sink.set_property("drop", False)
self.sink.set_property("sync", True)
self.sink.set_property("qos", False)
self.sink.connect("new-buffer", self.on_new_buffer)
self.sink.connect("new-preroll", self.on_new_preroll)
示例3: cleanup
def cleanup(self):
if self.volume_timer!=0:
glib.source_remove(self.volume_timer)
self.volume_timer = 0
SoundPipeline.cleanup(self)
self.sink_type = ""
self.src = None
示例4: __init__
def __init__(self, sink_type=None, sink_options={}, codecs=CODECS, codec_options={}, volume=1.0):
if not sink_type:
sink_type = DEFAULT_SINK
assert sink_type in SINKS, "invalid sink: %s" % sink_type
matching = [x for x in CODEC_ORDER if (x in codecs and x in CODECS)]
log("SoundSink(..) found matching codecs %s", matching)
assert len(matching) > 0, "no matching codecs between arguments %s and supported list %s" % (codecs, CODECS)
codec = matching[0]
decoder, parser = get_decoder_parser(codec)
SoundPipeline.__init__(self, codec)
self.sink_type = sink_type
decoder_str = plugin_str(decoder, codec_options)
pipeline_els = []
pipeline_els.append(
"appsrc"
+ " name=src"
+ " emit-signals=0"
+ " block=0"
+ " is-live=0"
+ " stream-type=stream"
+ " format=%s" % GST_FORMAT_BUFFERS
)
pipeline_els.append(parser)
pipeline_els.append(decoder_str)
pipeline_els.append("audioconvert")
pipeline_els.append("audioresample")
pipeline_els.append("volume name=volume volume=%s" % volume)
queue_el = [
"queue",
"name=queue",
"min-threshold-time=%s" % QUEUE_MIN_TIME,
"max-size-buffers=0",
"max-size-bytes=0",
"max-size-time=%s" % QUEUE_TIME,
"leaky=%s" % QUEUE_LEAK,
]
if QUEUE_SILENT:
queue_el.append("silent=%s" % QUEUE_SILENT)
pipeline_els.append(" ".join(queue_el))
sink_attributes = SINK_SHARED_DEFAULT_ATTRIBUTES.copy()
from xpra.sound.gstreamer_util import _gst_major_version
sink_attributes.update(SINK_DEFAULT_ATTRIBUTES.get(_gst_major_version, {}).get(sink_type, {}))
sink_attributes.update(sink_options)
sink_str = plugin_str(sink_type, sink_attributes)
pipeline_els.append(sink_str)
self.setup_pipeline_and_bus(pipeline_els)
self.volume = self.pipeline.get_by_name("volume")
self.src = self.pipeline.get_by_name("src")
self.queue = self.pipeline.get_by_name("queue")
self.overruns = 0
self.queue_state = "starting"
if QUEUE_SILENT == 0:
self.queue.connect("overrun", self.queue_overrun)
self.queue.connect("underrun", self.queue_underrun)
self.queue.connect("running", self.queue_running)
self.queue.connect("pushing", self.queue_pushing)
示例5: cleanup
def cleanup(self):
SoundPipeline.cleanup(self)
self.src_type = ""
self.sink = None
self.caps = None
f = self.file
if f:
self.file = None
f.close()
示例6: get_info
def get_info(self):
info = SoundPipeline.get_info(self)
if QUEUE_TIME>0:
clt = self.queue.get_property("current-level-time")
info["queue.used_pct"] = int(min(QUEUE_TIME, clt)*100.0/QUEUE_TIME)
info["queue.overruns"] = self.overruns
info["queue.state"] = self.queue_state
return info
示例7: __init__
def __init__(self, sink_type=DEFAULT_SINK, options={}, codec=MP3, decoder_options={}):
assert sink_type in SINKS, "invalid sink: %s" % sink_type
decoder, parser = get_decoder_parser(codec)
SoundPipeline.__init__(self, codec)
self.sink_type = sink_type
decoder_str = plugin_str(decoder, decoder_options)
pipeline_els = []
pipeline_els.append("appsrc"+
" name=src"+
" max-bytes=32768"+
" emit-signals=0"+
" block=0"+
" is-live=0"+
" stream-type=stream"+
" format=4")
pipeline_els.append(parser)
pipeline_els.append(decoder_str)
pipeline_els.append("audioconvert")
pipeline_els.append("audioresample")
queue_el = ["queue",
"name=queue",
"max-size-buffers=0",
"max-size-bytes=0",
"max-size-time=%s" % QUEUE_TIME,
"leaky=%s" % QUEUE_LEAK]
if QUEUE_SILENT:
queue_el.append("silent=%s" % QUEUE_SILENT)
pipeline_els.append(" ".join(queue_el))
pipeline_els.append(sink_type)
self.setup_pipeline_and_bus(pipeline_els)
self.src = self.pipeline.get_by_name("src")
self.queue = self.pipeline.get_by_name("queue")
self.overruns = 0
self.queue_state = "starting"
if QUEUE_SILENT==0:
self.queue.connect("overrun", self.queue_overrun)
self.queue.connect("underrun", self.queue_underrun)
self.queue.connect("running", self.queue_running)
self.queue.connect("pushing", self.queue_pushing)
if FAKE_OVERRUN>0:
def fake_overrun(*args):
self.emit("overrun", 500)
gobject.timeout_add(FAKE_OVERRUN*1000, fake_overrun)
示例8: get_info
def get_info(self):
info = SoundPipeline.get_info(self)
if self.queue:
info["queue"] = {"cur" : self.queue.get_property("current-level-time")//MS_TO_NS}
if self.buffer_latency:
for x in ("actual-buffer-time", "actual-latency-time"):
v = self.src.get_property(x)
if v>=0:
info[x] = v
return info
示例9: __init__
def __init__(self, sink_type=DEFAULT_SINK, options={}, codec=MP3, decoder_options={}):
assert sink_type in SINKS, "invalid sink: %s" % sink_type
decoder, parser = get_decoder_parser(codec)
SoundPipeline.__init__(self, codec)
self.add_signals(self.__generic_signals__)
self.sink_type = sink_type
decoder_str = plugin_str(decoder, decoder_options)
pipeline_els = []
pipeline_els.append("appsrc"+
" name=src"+
" max-bytes=32768"+
" emit-signals=0"+
" block=0"+
" is-live=0"+
" stream-type=stream"+
" format=4")
pipeline_els.append(parser)
pipeline_els.append(decoder_str)
pipeline_els.append("audioconvert")
pipeline_els.append("audioresample")
queue_el = "queue" + \
" name=queue"+ \
" max-size-buffers=0"+ \
" max-size-bytes=0"+ \
" max-size-time=%s" % QUEUE_TIME+ \
" leaky=%s" % QUEUE_LEAK
if QUEUE_SILENT:
queue_el.append(" silent=%s" % QUEUE_SILENT)
pipeline_els.append(queue_el)
pipeline_els.append(sink_type)
self.setup_pipeline_and_bus(pipeline_els)
self.src = self.pipeline.get_by_name("src")
self.queue = self.pipeline.get_by_name("queue")
self.overruns = 0
self.queue_state = "starting"
if QUEUE_SILENT==0:
self.queue.connect("overrun", self.queue_overrun)
self.queue.connect("underrun", self.queue_underrun)
self.queue.connect("running", self.queue_running)
self.queue.connect("pushing", self.queue_pushing)
示例10: __init__
def __init__(self, sink_type=DEFAULT_SINK, options={}, codec=MP3, decoder_options={}):
assert sink_type in SINKS, "invalid sink: %s" % sink_type
decoder, parser = get_decoder_parser(codec)
SoundPipeline.__init__(self, codec)
self.sink_type = sink_type
decoder_str = plugin_str(decoder, decoder_options)
pipeline_els = []
pipeline_els.append("appsrc name=src")
pipeline_els.append(parser)
pipeline_els.append(decoder_str)
if VOLUME:
pipeline_els.append("volume name=volume")
pipeline_els.append("audioconvert")
pipeline_els.append("audioresample")
if QUEUE:
if QUEUE_TIME>0:
pipeline_els.append("queue name=queue max-size-time=%s leaky=%s" % (QUEUE_TIME, QUEUE_LEAK))
else:
pipeline_els.append("queue leaky=%s" % QUEUE_LEAK)
pipeline_els.append(sink_type)
self.setup_pipeline_and_bus(pipeline_els)
self.volume = self.pipeline.get_by_name("volume")
self.src = self.pipeline.get_by_name("src")
self.src.set_property('emit-signals', True)
self.src.set_property('stream-type', 'stream')
self.src.set_property('block', False)
self.src.set_property('format', 4)
self.src.set_property('is-live', True)
if QUEUE:
self.queue = self.pipeline.get_by_name("queue")
def overrun(*args):
debug("sound sink queue overrun")
def underrun(*args):
debug("sound sink queue underrun")
self.queue.connect("overrun", overrun)
self.queue.connect("underrun", underrun)
else:
self.queue = None
self.src.connect("need-data", self.need_data)
self.src.connect("enough-data", self.on_enough_data)
示例11: __init__
def __init__(self, src_type=DEFAULT_SRC, src_options={}, codec=MP3, encoder_options={}):
assert src_type in SOURCES
encoders = get_encoders(codec)
assert len(encoders)>0, "no encoders found for %s" % codec
SoundPipeline.__init__(self, codec)
self.src_type = src_type
source_str = plugin_str(src_type, src_options)
encoder = encoders[0]
encoder_str = plugin_str(encoder, encoder_options)
pipeline_els = [source_str]
pipeline_els += ["audioconvert",
"audioresample",
encoder_str,
"appsink name=sink"]
self.setup_pipeline_and_bus(pipeline_els)
self.sink = self.pipeline.get_by_name("sink")
self.sink.set_property("emit-signals", True)
self.sink.set_property("max-buffers", 10)
self.sink.set_property("drop", False)
self.sink.set_property("sync", True)
self.sink.set_property("qos", False)
self.sink.connect("new-buffer", self.on_new_buffer)
self.sink.connect("new-preroll", self.on_new_preroll)
示例12: get_info
def get_info(self):
info = SoundPipeline.get_info(self)
if QUEUE_TIME>0:
clt = self.queue.get_property("current-level-time")
qmax = self.queue.get_property("max-size-time")
qmin = self.queue.get_property("min-threshold-time")
updict(info, "queue", {
"min" : qmin//MS_TO_NS,
"max" : qmax//MS_TO_NS,
"cur" : clt//MS_TO_NS,
"pct" : min(QUEUE_TIME, clt)*100//qmax,
"overruns" : self.overruns,
"underruns" : self.underruns,
"state" : self.queue_state})
return info
示例13: get_info
def get_info(self):
info = SoundPipeline.get_info(self)
if QUEUE_TIME > 0:
clt = self.queue.get_property("current-level-time")
updict(
info,
"queue",
{
"time": int(QUEUE_TIME / MS_TO_NS),
"min_time": int(QUEUE_MIN_TIME / MS_TO_NS),
"used_pct": int(min(QUEUE_TIME, clt) * 100.0 / QUEUE_TIME),
"used": int(clt / MS_TO_NS),
"overruns": self.overruns,
"state": self.queue_state,
},
)
return info
示例14: cleanup
def cleanup(self):
SoundPipeline.cleanup(self)
self.sink_type = ""
self.src = None
示例15: __init__
def __init__(self, src_type=None, src_options={}, codecs=get_codecs(), codec_options={}, volume=1.0):
if not src_type:
try:
from xpra.sound.pulseaudio.pulseaudio_util import get_pa_device_options
monitor_devices = get_pa_device_options(True, False)
log.info("found pulseaudio monitor devices: %s", monitor_devices)
except ImportError as e:
log.warn("Warning: pulseaudio is not available!")
log.warn(" %s", e)
monitor_devices = []
if len(monitor_devices)==0:
log.warn("could not detect any pulseaudio monitor devices")
log.warn(" a test source will be used instead")
src_type = "audiotestsrc"
default_src_options = {"wave":2, "freq":100, "volume":0.4}
else:
monitor_device = monitor_devices.items()[0][0]
log.info("using pulseaudio source device:")
log.info(" '%s'", monitor_device)
src_type = "pulsesrc"
default_src_options = {"device" : monitor_device}
src_options = default_src_options
if src_type not in get_source_plugins():
raise InitExit(1, "invalid source plugin '%s', valid options are: %s" % (src_type, ",".join(get_source_plugins())))
matching = [x for x in CODEC_ORDER if (x in codecs and x in get_codecs())]
log("SoundSource(..) found matching codecs %s", matching)
if not matching:
raise InitExit(1, "no matching codecs between arguments '%s' and supported list '%s'" % (csv(codecs), csv(get_codecs().keys())))
codec = matching[0]
encoder, fmt = get_encoder_formatter(codec)
self.queue = None
self.caps = None
self.volume = None
self.sink = None
self.src = None
self.src_type = src_type
self.buffer_latency = False
self.jitter_queue = None
self.file = None
SoundPipeline.__init__(self, codec)
src_options["name"] = "src"
source_str = plugin_str(src_type, src_options)
#FIXME: this is ugly and relies on the fact that we don't pass any codec options to work!
encoder_str = plugin_str(encoder, codec_options or get_encoder_default_options(encoder))
fmt_str = plugin_str(fmt, MUXER_DEFAULT_OPTIONS.get(fmt, {}))
pipeline_els = [source_str]
if SOURCE_QUEUE_TIME>0:
queue_el = ["queue",
"name=queue",
"min-threshold-time=0",
"max-size-buffers=0",
"max-size-bytes=0",
"max-size-time=%s" % (SOURCE_QUEUE_TIME*MS_TO_NS),
"leaky=%s" % GST_QUEUE_LEAK_DOWNSTREAM]
pipeline_els += [" ".join(queue_el)]
if encoder in ENCODER_NEEDS_AUDIOCONVERT or src_type in SOURCE_NEEDS_AUDIOCONVERT:
pipeline_els += ["audioconvert"]
pipeline_els.append("volume name=volume volume=%s" % volume)
pipeline_els += [encoder_str,
fmt_str,
APPSINK]
if not self.setup_pipeline_and_bus(pipeline_els):
return
self.volume = self.pipeline.get_by_name("volume")
self.sink = self.pipeline.get_by_name("sink")
if SOURCE_QUEUE_TIME>0:
self.queue = self.pipeline.get_by_name("queue")
if self.queue:
try:
self.queue.set_property("silent", True)
except Exception as e:
log("cannot make queue silent: %s", e)
try:
if get_gst_version()<(1,0):
self.sink.set_property("enable-last-buffer", False)
else:
self.sink.set_property("enable-last-sample", False)
except Exception as e:
log("failed to disable last buffer: %s", e)
self.skipped_caps = set()
if JITTER>0:
self.jitter_queue = Queue()
try:
#Gst 1.0:
self.sink.connect("new-sample", self.on_new_sample)
self.sink.connect("new-preroll", self.on_new_preroll1)
except:
#Gst 0.10:
self.sink.connect("new-buffer", self.on_new_buffer)
self.sink.connect("new-preroll", self.on_new_preroll0)
self.src = self.pipeline.get_by_name("src")
try:
for x in ("actual-buffer-time", "actual-latency-time"):
#don't comment this out, it is used to verify the attributes are present:
gstlog("initial %s: %s", x, self.src.get_property(x))
self.buffer_latency = True
except Exception as e:
log.info("source %s does not support 'buffer-time' or 'latency-time':", self.src_type)
log.info(" %s", e)
else:
#.........这里部分代码省略.........