将两个 wav 文件的左右声道合并成一个单独的立体声文件
Taking the left and right channels of two wav files and joining them into one separate stereo file
我有两个立体声 wav 文件,我想将第一个音频文件的左声道和第二个音频文件的右声道合并成一个新的 wave 文件。
这是我正在尝试做的事情的图片。
我知道我可以将文件读入 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'); %
我 运行 遇到的问题是导入文件所需的时间和波形文件占用的数组大小。我正在导入的文件大约有 1-4 小时长,导入需要一段时间,并且在数组中占用大量内存是否可以导入完整文件然后导出它们?
我在 Ubuntu 14.04 上使用 octave 3.8.1,它类似于 matlab,但我也可以访问 sox
我假设瓶颈是您的硬盘驱动器,并且您的系统有足够的内存来同时将所有文件保存在内存中。如果是这样,您将无法仅通过一个频道获得快速阅读。使用 16 位 wav,您的硬盘将不得不跳过 2 个字节,读取 2 个字节,跳过 2 个字节,读取 2 个字节......对于这样的读取操作,将整个文件复制到内存中并删除不需要的通道要快得多然后。
我有两个立体声 wav 文件,我想将第一个音频文件的左声道和第二个音频文件的右声道合并成一个新的 wave 文件。
这是我正在尝试做的事情的图片。
我知道我可以将文件读入 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'); %
我 运行 遇到的问题是导入文件所需的时间和波形文件占用的数组大小。我正在导入的文件大约有 1-4 小时长,导入需要一段时间,并且在数组中占用大量内存是否可以导入完整文件然后导出它们?
我在 Ubuntu 14.04 上使用 octave 3.8.1,它类似于 matlab,但我也可以访问 sox
我假设瓶颈是您的硬盘驱动器,并且您的系统有足够的内存来同时将所有文件保存在内存中。如果是这样,您将无法仅通过一个频道获得快速阅读。使用 16 位 wav,您的硬盘将不得不跳过 2 个字节,读取 2 个字节,跳过 2 个字节,读取 2 个字节......对于这样的读取操作,将整个文件复制到内存中并删除不需要的通道要快得多然后。