我有两个立体声wav文件,我想采取第一个音频文件的左声道,并采取第二个音频文件的右声道,并将它们连接成一个新的波形文件。
这是我想要做的事情的图像。
我知道我可以将文件读入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
答案 0 :(得分:0)
我认为瓶颈是你的硬盘驱动器,你的系统有足够的内存来同时将所有的文件保存在内存中。如果是这样,你就不会获得只读一个频道的速度。使用16位wav,您的硬盘必须跳过2个字节,读取2个字节,跳过2个字节,读取2个字节...对于这样的读取操作,将完整文件复制到内存并删除不需要的通道要快得多然后。