2011-01-20 7 views
4

私はときどき様々なフォーマットのサウンドを追加することができる一定のオーディオソース(この場合はaudiotestsrc)を持つオーディオストリームを作成しようとしています。 )をplay_file()メソッドを介して呼び出します。私はその目的のために加算器を使用します。しかし何らかの理由で、私は第2の音を正しく加えることができません。プログラムが正しく音を再生するだけでなく、元のaudiotestsrcも完全に停止します。ここまでのコードはデコードビンを加算器で使用する

import gst; import gobject; gobject.threads_init() 

pipe = gst.Pipeline() 

adder = gst.element_factory_make("adder", "adder") 

first_sink = adder.get_request_pad('sink%d') 
pipe.add(adder) 

test = gst.element_factory_make("audiotestsrc", "test") 
test.set_property('freq', 100) 
pipe.add(test) 
testsrc = test.get_pad("src") 
testsrc.link(first_sink) 

output = gst.element_factory_make("alsasink", "output") 
pipe.add(output) 
adder.link(output) 

pipe.set_state(gst.STATE_PLAYING) 

raw_input('Press key to play sound') 

def play_file(filename): 
    adder_sink = adder.get_request_pad('sink%d') 

    audiofile = gst.element_factory_make('filesrc', 'audiofile') 
    audiofile.set_property('location', filename) 

    decoder = gst.element_factory_make('decodebin', 'decoder') 

    def on_new_decoded_pad(element, pad, last): 
     pad.link(adder_sink) 

    decoder.connect('new-decoded-pad', on_new_decoded_pad) 

    pipe.add(audiofile) 
    pipe.add(decoder) 
    audiofile.link(decoder) 

    pipe.set_state(gst.STATE_PAUSED) 
    pipe.set_state(gst.STATE_PLAYING) 


play_file('sample.wav') 

while True: 
    pass 

答えて

4

#gstreamerのmochのおかげで、すべての加算元が同じ形式になっているはずです。私は上記のスクリプトを変更して、加算器のすべての入力の前に大文字の"audio/x-raw-int, endianness=(int)1234, channels=(int)1, width=(int)16, depth=(int)16, signed=(boolean)true, rate=(int)11025"(例)を置くようにしました。

関連する問題