连接两个(或更多)byte[] 的 wav 声音。发出背景噪音
Joining two (or more) byte[] of wav-sound. Gives backgroundnoise
我正在尝试加入 wav 声音的字节数组,它可以工作,但背景噪音除外。任何人都知道添加两个字节数组的声音的任何算法。
这是我目前尝试过的方法
for(int i=0;i<bArr1.length;i++)
{
bArrJoined[i]=bArr1[i] + bArr2[i];
}
也试过除以 2 不至于太大
for(int i=0;i<bArr1.length;i++)
{
bArrJoined[i]=(bArr1[i] + bArr2[i]) / 2;
}
有谁知道如何在没有噪音的情况下进行这项工作?
这里有很多事情可能会导致伪影。不同的音频采样率或数据位大小都可以做到。
假设这些都不是问题,您应该知道您不能在不溢出的情况下将 byte
与另一个 byte
添加(256 将变为 0,等等)。所以在添加之前转换为 int
。如果超过最大音量,就会发生削波,所以除以 2 的操作很聪明,应该可以解决这个问题。除法操作应该在 int
版本中进行。最后才回退到byte
。
但是,如果您不使用 8 位音频,则 byte
不是您的原子单位。例如,16 位音频使用 2 个字节,在对值执行任何数学运算之前,您需要将每两个连续的 bytes
转换为 int
(关于正确的字节顺序)。 32 位音频数据每个单个数值占用 4 个连续字节。仅拥有一个字节数组本身并不能告诉您数据边界在哪里。
我正在尝试加入 wav 声音的字节数组,它可以工作,但背景噪音除外。任何人都知道添加两个字节数组的声音的任何算法。
这是我目前尝试过的方法
for(int i=0;i<bArr1.length;i++)
{
bArrJoined[i]=bArr1[i] + bArr2[i];
}
也试过除以 2 不至于太大
for(int i=0;i<bArr1.length;i++)
{
bArrJoined[i]=(bArr1[i] + bArr2[i]) / 2;
}
有谁知道如何在没有噪音的情况下进行这项工作?
这里有很多事情可能会导致伪影。不同的音频采样率或数据位大小都可以做到。
假设这些都不是问题,您应该知道您不能在不溢出的情况下将 byte
与另一个 byte
添加(256 将变为 0,等等)。所以在添加之前转换为 int
。如果超过最大音量,就会发生削波,所以除以 2 的操作很聪明,应该可以解决这个问题。除法操作应该在 int
版本中进行。最后才回退到byte
。
但是,如果您不使用 8 位音频,则 byte
不是您的原子单位。例如,16 位音频使用 2 个字节,在对值执行任何数学运算之前,您需要将每两个连续的 bytes
转换为 int
(关于正确的字节顺序)。 32 位音频数据每个单个数值占用 4 个连续字节。仅拥有一个字节数组本身并不能告诉您数据边界在哪里。