Eri*_*tto 3 audio signal-processing
我有两个不同音频剪辑的两个样本数组.如果我只是以编程方式将它们组合在一起,这相当于在音频编辑套件中将一个轨道分层到另一个轨道?就像我有一个贝司的音频剪辑另一个鼓,我希望他们一起玩.
我可能会这样做:
for (int i = 0; i < length_of_array; i++){
final_array[i] = first_array[i] + second_array[i];
}
Run Code Online (Sandbox Code Playgroud)
如果没有这样做,我能否得到一些正确方法的指示?
Dan*_*dor 10
这是一种正确的方法.合并在音频术语中称为MIXING.
但:
如果样本很短(16位有符号) - 您必须使用int(32位有符号)进行添加,然后手动剪切样本.如果你不这样做,你的价值观会被包裹起来,你会听到你的所作所为有很多乐趣:)
代码如下:
short first_array[1024];
short second_array[1024];
short final_array[1024];
for (int i = 0; i < length_of_array; i++)
{
int mixed=(int)first_array[i] + (int)second_array[i];
if (mixed>32767) mixed=32767;
if (mixed<-32768) mixed=-32768;
final_array[i] = (short)mixed;
}
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,您不需要任何其他正常音频样本,因为裁剪将在极少数情况下发生.我是从实践而不是从理论上谈论这个.
如果两个音频剪辑的采样率和所需混音级别相同,则上述合并方法将起作用.如果所需的混合水平不同,那么混合器的稍微更一般的形式将是:
mixed_result[i] = rescale_and_clip_fix( volume1 * input1[i] + volume2 * input2[i] );
Run Code Online (Sandbox Code Playgroud)
其中rescale_and_clip_fix()可能是限制器或压缩器,确保乘法后的比例对于结果的数据类型是正确的.如果结果数组是整数数据类型,那么您可能还希望在缩放时进行舍入或噪声过滤.
如果采样率不同,则需要先在其中一个输入通道上进行采样率转换,然后再对结果进行采样率转换.
归档时间: |
|
查看次数: |
5737 次 |
最近记录: |