微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Gstreamer重复2声道音频

如何解决Gstreamer重复2声道音频

我想使用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,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,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,channel-mask=(bitmask)0x1 ! queue ! i.sink_1 i.src ! capssetter caps=audio/x-raw,channels=6,channel-mask=(bitmask)0x3f ! audioconvert ! audioresample ! wavenc ! filesink location=test.wav

因此,下一个技巧是处理奇数输出通道数。即5

  1. 我尝试将输出映射到6个通道,但是使用channel-mask = 0x1f。
  2. 还尝试使用以下命令将输出映射到6个通道:
! audioconvert ! capssetter caps="audio/x-raw,channels=5,channel-mask=(bitmask)0x1f" !

这些都不起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。