Audio libsox将多通道wav拆分为单通道

Audio libsox将多通道wav拆分为单通道,audio,split,sox,Audio,Split,Sox,我想将一个多通道(2、8或16)wav文件拆分为其通道,并将每个通道保存在另一个wav文件中 我已经完成了LIbSOX在我的C++,Objject C++项目中运行和运行。 Libsox没有很好的文档记录,关于如何做到这一点,有很多例子:( 我首先打开输入文件 sox_format_t * in, * out; assert(sox_init() == SOX_SUCCESS); assert(in = sox_open_read((const char*)filename.c_str(),NU

我想将一个多通道(2、8或16)wav文件拆分为其通道,并将每个通道保存在另一个wav文件中

<>我已经完成了LIbSOX在我的C++,Objject C++项目中运行和运行。 Libsox没有很好的文档记录,关于如何做到这一点,有很多例子:(

我首先打开输入文件

sox_format_t * in, * out;
assert(sox_init() == SOX_SUCCESS);
assert(in = sox_open_read((const char*)filename.c_str(),NULL,NULL,NULL));
现在我必须找到一种方法来获得这个文件的通道数。然后我必须创建相同数量的输出文件,并将每个通道本身保存在其中

怎么办


谢谢!

我想我会用老式的方式来做

  • 确定文件的通道计数
  • 确定数据块的长度

    Length of Data block / channelCount = Size of each channelBlock
    
  • 通道被保存在WavFile数据块中(对于4通道WavFile) CH1/Ch2/Ch3/Ch4 CH1/Ch2/Ch3/Ch4

  • 我运行数据块提取通道,并将它们放入mono wav文件中

取而代之的是LBSNDFILE。谢谢你的建议,但是我刚刚读到,LIbSNDfile不能这样做。Q5:为什么LIbSNDFILE不进行交织/去交织?这个问题比最初看起来的要大。对于立体声文件来说,简单的交错/去交错可以满足大多数用户是非常安全的。对于超过2个频道的文件,不太可能出现这种情况。如果用户有4个频道的文件,并且希望在立体声输出声卡上播放该文件,他们要么想要前2个频道,要么想要4个频道的混合组合。关于文档,中的示例可能会有所帮助,它们位于
src/exampl中e*c
。还有一个问题,尽管它有点稀疏。@MalawiM似乎FAQ条目实际上并不是指INDELEVEING/DEINTERLEVEING,而是指下混音。从libsndfile数据的m个通道中选择通道n非常容易,就像您在回答中描述的那样。