【发布时间】:2012-01-31 15:55:36
【问题描述】:
这是对我之前的问题的跟进:Rendering some sound data into one new sound data?
我正在创建一个程序,它将处理包含声音库和时间偏移的文件,以标记何时必须播放声音并从中生成波形文件。
所以我认为 FMOD_OUTPUTTYPE_WAVWRITER 非常适合这项工作。
对于声音库,在文件中想象这样的内容:
0 kick.wav
1 hit.wav
2 flute.wav
其中左边的数字描述了右边声音文件名的声音ID, 和时间偏移:
1000 0
2000 1
3000 2
左边的数字告诉程序何时必须以毫秒为单位播放声音,右边的数字是声音 ID。
因此,当我启动程序时,FMOD 将生成一个波形文件,其中包含第一秒的踢球(来自 kick.wav),第二秒的打击,第三秒的长笛,我会必须等待至少 3 秒才能完成任务。
但是,如果我想渲染更长的音乐,比如 5 分钟,那么我必须至少等待 5 分钟才能完成任务,因为我让它依赖于系统计时器来播放声音文件中的指定偏移量和用于更新 FMOD::System 的 while(true) 循环。我认为必须有一种方法可以更快地渲染,而无需等待程序在指定时间实际渲染声音,因为我在 DAW 程序中看到,比如 Sony ACID,可以非常快地渲染音轨。
然后我看了一下API参考,有FMOD_OUTPUTTYPE_WAVWRITER_NRT,然后我认为这可能是解决方案,所以我尝试立即更改输出设备而不修改任何其他内容,生成的波形文件听起来很乱!我听到很多重复的声音、长时间的延迟等。
那么,如何正确使用非实时版本呢?在我的案例中使用 NRT 时更新 fmod 系统的正确方法是什么?
我在 fmod 文档本身中找不到关于 NRT 输出类型用法的明确解释。
无论如何,我在 Windows 环境中使用 C++。
谢谢。
【问题讨论】:
标签: fmod