<p>多亏了Che Bizarro,我用精灵中的这个简单代码解决了这个问题。在</p>
<pre><code>uses Gst
//adder name=mix ! volume volume=0.1 ! alsasink filesrc location=file1.wav ! wavparse ! audioconvert ! mix. filesrc location=file2.wav ! wavparse ! audioconvert ! mix. filesrc location=file3.wav ! wavparse ! audioconvert ! mix.
class AudioFilesSrc : Gst.Bin
wavparse: Element
src:Element
audioconvert: Element
def OnDynamicPad (element:Element, zz:Pad)
var opad = audioconvert.get_static_pad("sink");
zz.link(opad);
def open(s1:string)
src = Gst.ElementFactory.make("filesrc", "src1");
wavparse = ElementFactory.make("wavparse","wavparse");
audioconvert = ElementFactory.make("audioconvert","audioconvert");
wavparse.pad_added.connect(OnDynamicPad);
this.add_many(src,wavparse,audioconvert);
src.link_many(wavparse,audioconvert);
src.set("location",s1);
class Pipe:GLib.Object
pipeline:Pipeline
adder: Element
sink: Element
def create()
pipeline= new Pipeline("test");
adder = ElementFactory.make("adder","mixer");
var volume= ElementFactory.make("volume","volume");
volume.set("volume",0.1)
sink= ElementFactory.make("autoaudiosink","alsasink");
pipeline.add_many(adder,volume,sink)
adder.link_many(volume,sink)
def conector(bin:Bin)
// Add the new Bin to our pipeline.
pipeline.add(bin)
// search the audioconvert element and get its src for give it to the Bin.
var e=bin.get_by_name("audioconvert")
var srcpad = new Gst.GhostPad("src", e.get_static_pad("src"));
bin.add_pad(srcpad);
// create a new sink pad into the adder element
var ch1_sinkpad = adder.get_request_pad("sink%d")
// Link sources to mixer
bin.get_pad("src").link(ch1_sinkpad)
def play()
pipeline.set_state(Gst.State.PLAYING);
init
Gst.init(ref args);
var pipe= new Pipe()
pipe.create()
var archivos= new list of AudioFilesSrc
for var i=0 to 1
archivos.add(new AudioFilesSrc())
archivos[i].open("file"+(i).to_string()+".wav") // you need several filenames with this format file%d.wav : file0.wav, file1.wav....
pipe.conector(archivos[i])
pipe.play()
new MainLoop().run();
</code></pre>