gpt4 book ai didi

c++ - 写入WAV文件时定期创建静音

转载 作者:行者123 更新时间:2023-12-03 00:24:30 27 4
gpt4 key购买 nike

我正在尝试获取一个wav文件,并以1秒的间隔在其中创建静默间隙。沉默的间隙不是暂停文件然后再次播放,它们具有“静音”功能,因此,如果输入的wav文件长10秒,那么输出文件的长度也将长10秒。

我可以访问输入的wav文件的所有属性,例如缓冲区大小,恐怕我不知道如何在这种情况下从所说的文件中读取内容。我最好的猜测是这样的:

int gapLength = 1 * sampleRate;

for (int f = 0; f < numOfSamples; f++) {
if (f <= gapLength) {
buffer[f] = silence
}
else {
buffer[f] = sample[f] from audio input
}
}

sf_writef_double(sndFile, buffer, numOfSamples);

取消此操作后,我需要找出如何在第一次之后再次进行for循环检查间隙,以及从输入wav文件中获取sample [f]的某种方法-也许我可以在两个wav文件中进行迭代同时?任何建议都将是一个很大的帮助。

最佳答案

如果您有一个缓冲区,并且所有样本都已装满,则可以使用模运算符确定整个周期中的位置:

int gapLength = 1 * sampleRate;
int repeatLength = 2 * gapLength;

for (int f = 0; f < numOfSamples; f++) {
if (f % repeatLength < gapLength) {
buffer[f] = silence;
}
}

请注意,我将其分为两部分:“间隙”的长度和整个重复周期的长度。假定此周期的第一部分包含沉默,但直接更改此沉默是很直接的。我敢肯定你知道这个主意。

关于c++ - 写入WAV文件时定期创建静音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61861524/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com