我正在创建一个应用程序,它将读取包含声音“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库也没问题。
答案 0 :(得分:1)
如果我理解正确,你想通过混合音库中的wav来生成一个新的波形文件。您可能根本不需要声音API,特别是如果您的所有输入wavs采用相同的格式。
只需将每个wav文件加载到缓冲区中。对于SampleRate*secondsUntilStartTime
样本,对于ActiveList中的每个缓冲区,将buffer[bufferIdx++]
添加到输出缓冲区中。如果bufferIdx == bufferLen,则从ActiveList中删除此缓冲区。在StartTime中,将下一个缓冲区添加到ActiveList中,然后重复。
如果FMOD支持输出到文件而不是声音硬件,则可以使用流API执行相同的操作。只需跟踪StreamCallback中已过滤的样本,并在到达其起始偏移时开始混合新文件。