将一些声音数据渲染成一个新的声音数据?

时间:2011-05-09 15:20:46

标签: c++ audio rendering

我正在创建一个应用程序,它将读取包含声音“bank”的唯一格式以及必须播放声音时的偏移量。

想象一下......

声音库:(左侧的ID和右侧的文件名)

0 kick.wav
1 hit.wav
2 flute.wav

和偏移量:(左侧的时间以毫秒为单位,右侧的声音ID)

1000 0
2000 1
3000 2

应用程序将生成一个新的声音文件(即.wav,以便以后转换为其他格式),在第一秒播放一次,第二秒播放,第三秒播放。

我完全不知道从哪里开始。

我通常使用FMOD进行音频播放,但之前从未做过类似的事情。

我在MSVC ++ Express Edition环境中使用C ++和wxWidgets,而LGPL库也没问题。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你想通过混合音库中的wav来生成一个新的波形文件。您可能根本不需要声音API,特别是如果您的所有输入wavs采用相同的格式。

只需将每个wav文件加载到缓冲区中。对于SampleRate*secondsUntilStartTime样本,对于ActiveList中的每个缓冲区,将buffer[bufferIdx++]添加到输出缓冲区中。如果bufferIdx == bufferLen,则从ActiveList中删除此缓冲区。在StartTime中,将下一个缓冲区添加到ActiveList中,然后重复。

如果FMOD支持输出到文件而不是声音硬件,则可以使用流API执行相同的操作。只需跟踪StreamCallback中已过滤的样本,并在到达其起始偏移时开始混合新文件。