在libsndfile中一次写入一个通道

问题描述 投票:0回答:2

我正在尝试生成一个正弦波,以1秒的间隔在立体声wav文件的左右声道之间切换,但是我找不到任何方法可以在写入一个声道的同时保持另一个声道的静音。这是我必须写入一个通道的代码:

for (int f = 0; f < numFrames; f++) {
    double time = f * duration / numFrames;
    buffer[f] = sin(2.0 * pi * time * freq);

这是我发现的一些代码,可用于将两个mono wav文件混合在一起:

short* mixdown = new short[2 * sizeof(short) * 800000];
for (int t = 0; t < 800000 * 2; ++t) {
    mixdown[t] = (buffer1[t] + buffer2[t]) / 2;
}

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);

我浏览了http://www.mega-nerd.com/libsndfile/api.html处的libsndfile API,但在写入通道时找不到任何内容。如果有人对实现此目标的最佳方法是什么有任何想法,我很想听听您的意见。

c++ audio buffer wav libsndfile
2个回答
0
投票

您可以通过将零个样本写入“静音”通道来实现此目的,例如(以使右侧通道静音):


0
投票

尝试:

© www.soinside.com 2019 - 2024. All rights reserved.