libsndfile を使用して読み込んだ 2 つのオーディオ ファイルがあります。
SNDFILE* file1 = sf_open("D:\\audio1.wav", SFM_READ, &info);
SNDFILE* file2 = sf_open("D:\\audio2.wav", SFM_READ, &info2);
前の手順を実行した後、x 個のサンプルをサンプリングします。
//Buffers that will hold the samples
short* buffer1 = new short[2 * sizeof(short) * 800000];
short* buffer2 = new short[2 * sizeof(short) * 800000];
// Read the samples using libsndfile
sf_readf_short(file1, buffer1, 800000);
sf_readf_short(file2, buffer2, 800000);
今、私はそれらの2つを混ぜたいと思っています。左右のチャンネルを別々に取得してから合計する必要があると読みました。私はこのようにしてみました:
short* mixdown = new short[channels * sizeof(short) * 800000];
for (int t = 0; t < 800000; ++t)
{
mixdown[t] = buffer1[t] + buffer2[t] - ((buffer1[t]*buffer2[t]) / 65535);
t++;
mixdown[t] = buffer1[t] + buffer2[t] - ((buffer1[t]*buffer2[t]) / 65535);
}
その後、ffmpeg を使用して新しいオーディオをエンコードしています。
FILE* process2 = _popen("ffmpeg -y -f s16le -acodec pcm_s16le -ar 44100 -ac 2 -i - -f vob -ac 2 D:\\audioMixdown.wav", "wb");
fwrite(mixdown, 2 * sizeof(short) * 800000, 1, process2);
問題は、バッファ 1 からのオーディオがミックスダウンで問題なく聞こえることですが、ミックスダウンをファイルにエンコードするときに、新しいオーディオに「追加」されるのはノイズ (古いオーディオ録音の場合など) だけです。
2つのうちの1つだけをファイルにエンコードすると、完全に機能します。
なぜうまくいかないのかわかりません。明らかにミキシングと関係があると思いますが、何が間違っているのかわかりません。ここで混合アルゴリズムを取得しましたが、期待した結果が得られません。
同様の質問をしている人々に関するSOに関する他の情報も読みましたが、それらではわかりませんでした。