我正在将两个文件中的原始音频字节写入一个新的wav文件,以组合这两个文件。创建的结果文件包含两个音频剪辑的内容,但文件中也有很多噪音。

有人能指出一个很好的例子,说明如何将原始音频字节写入文件吗?这是我关注的基本逻辑

SInt32 leftSample1 = ReadSampleFromFile1(music_iter1);
leftSample1 = (SInt32)((float) leftSample1 * 0.7071); //to avoid clipping

SInt32 leftStereoSample2 = ReadLeftSample(music_iter2);
leftStereoSample2 += leftSample1;
if (leftStereoSample2 > 32767)
leftStereoSample2 = 32767;
else if (leftStereoSample2 < -32768
leftStereoSample2 = -32768;
// write leftStereoSample2 to the file
//do the same as left sample to right sample also

++music_iter2;
++music_iter1;

感谢。

有帮助吗?

解决方案

这些回归的次数是多少?

if (leftStereoSample2 > 32767)
leftStereoSample2 = 32767;
else if (leftStereoSample2 < -32768
leftStereoSample2 = -32768;

只是因为你没有剪裁,(因为你不强迫它)并不意味着当你截断波浪时你不会得到伪影(失真)等。我会看到这种情况经常发生。

核心音频有混音器。聪明的人已经编写了代码来处理这类东西,所以我们没有:) MultiChannelMixer是一个进行立体声混音的人。看看吧。

其他提示

您对65535和-65536的测试不正确(需要17位)。 尝试32767和-32768。

我不确定“阻止剪辑”的代码行实际上是在做它的工作;在加入之前你不需要有效地拒绝两个流吗?

尝试组合两个更安静的文件。而不是两个文件上的0.7071,尝试0.5。或者按照Aran的建议使用MultiChannelMixer。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top