获取两个wav文件的左右声道并将它们连接成一个单独的立体声文件

时间:2015-07-04 20:54:07

标签: matlab audio octave sox

我有两个立体声wav文件,我想采取第一个音频文件的左声道,并采取第二个音频文件的右声道,并将它们连接成一个新的波形文件。

这是我想要做的事情的图像。

http://i.imgur.com/Rwe5jWHl.jpg

我知道我可以将文件读入matlab / octave并使用下面的代码获得单独的左右声道:

[imported_sig_1, fs_rate, nbitsraw] = wavread(strcat('/tmp/01a.wav'));
imported_sig_L=imported_sig_1(:,1)';

[imported_sig_2, fs_rate, nbitsraw] = wavread(strcat('/tmp/02a.wav'));
imported_sig_R=imported_sig_2(:,2)';

然后我可以使用代码

编写我想要的新频道
wavwrite([(imported_sig_L)' (imported_sig_R)'] ,fs_rate,16,'newfile.wav'); %

我遇到的问题是导入文件所需的时间以及wave文件占用的数组大小。我导入的文件大约需要1-4个小时,导入需要一段时间,数组中需要大量内存才能导入完整文件,然后导出它们?

我在Ubuntu 14.04上使用octave 3.8.1,就像matlab一样,但我也可以访问sox

1 个答案:

答案 0 :(得分:0)

我认为瓶颈是你的硬盘驱动器,你的系统有足够的内存来同时将所有的文件保存在内存中。如果是这样,你就不会获得只读一个频道的速度。使用16位wav,您的硬盘必须跳过2个字节,读取2个字节,跳过2个字节,读取2个字节...对于这样的读取操作,将完整文件复制到内存并删除不需要的通道要快得多然后。