我想使用audiotestsrc生成2个音频音调,然后在16个通道(即一个音调的8个通道和另一个音调的8个通道)之间复制这两个通道。
我有一个命令可以为2个通道生成2个音调:
gst-launch-1.0 interleave name=i ! audioconvert ! wavenc ! filesink location=file.wav audiotestsrc wave=0 freq=100 volume=0.4 ! decodebin ! audioconvert ! "audio/x-raw,channels=1,channel-mask=(bitmask)0x1" ! queue ! i.sink_0 audiotestsrc wave=1 freq=150 volume=0.4 ! decodebin ! audioconvert ! "audio/x-raw,channels=1,channel-mask=(bitmask)0x2" ! queue ! i.sink_1
我也有一个命令可以在16个通道上产生1个音调:gst-launch-1.0 audiotestsrc wave=0 freq=100 volume=0.4 ! audio/x-raw,rate=48000,format=S16BE ! queue ! capssetter caps="audio/x-raw,channels=16,rate=48000,channel-mask=(bitmask)0xffff" ! audioconvert ! audioresample ! wavenc ! filesink location=test.wav
所以我的问题是:有没有办法组合这两个命令?
我尝试了几种不同的选择,并假定了
需要“0xaaaa”和“0x5555”来“映射”哪些通道获得哪些音调。
但是我一直遇到语法错误或
WARNING: erroneous pipeline: could not link capssetter0 to i
WARNING: erroneous pipeline: could not link queue0 to i
我觉得我已经接近了,但还没到那儿。任何帮助将不胜感激。
最佳答案
看来我找到了至少对均匀输出通道数有效的解决方案:
gst-launch-1.0 interleave name=i audiotestsrc wave=0 freq=100 volume=0.4 ! decodebin ! audioconvert ! audio/x-raw,format=S16BE,channels=1,channel-mask=(bitmask)0x1 ! queue ! i.sink_0 audiotestsrc wave=2 freq=100 volume=0.4 ! decodebin ! audioconvert ! audio/x-raw,format=S16BE,channels=1,channel-mask=(bitmask)0x1 ! queue ! i.sink_1 i.src ! capssetter caps=audio/x-raw,format=S16BE,channels=6,channel-mask=(bitmask)0x3f ! audioconvert ! audioresample ! wavenc ! filesink location=test.wav
因此,下一个技巧是处理奇数输出通道数。即5! audioconvert ! capssetter caps="audio/x-raw,format=S16BE,channels=5,channel-mask=(bitmask)0x1f" !
这些都不起作用。