我想使用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 iWARNING: 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
  • 我尝试将输出映射到6个通道,但是使用channel-mask = 0x1f。
  • 也尝试将输出映射到6个通道,然后使用:
  • ! audioconvert ! capssetter caps="audio/x-raw,format=S16BE,channels=5,channel-mask=(bitmask)0x1f" !
    
    这些都不起作用。

    07-24 09:47