gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:20:46 25 4
gpt4 key购买 nike

我正在创建一个应用程序,它将读取一种独特的格式,其中包含必须播放声音时的声音“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 库也可以。

最佳答案

如果我没理解错的话,您想通过混合音库中的 wavs 来生成一个新的 wave 文件。为此,您可能根本不需要声音 API,尤其是当您所有的输入 wavs 都采用相同格式时。

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

如果 FMOD 支持输出到文件而不是声音硬件,您可以使用流式 API 做同样的事情。只需在 StreamCallback 中跟踪经过的样本,并在达到新文件的起始偏移量时开始混合。

关于c++ - 将一些声音数据渲染成一个新的声音数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5938972/

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