|
|
1
6
大多数软件合成器根本不使用多个缓冲区。 他们只使用一个不断播放的小铃声缓冲器。 高优先级线程将尽可能经常检查当前播放位置,并用声音数据填充环形缓冲区的空闲部分(例如,自上次线程运行以来已播放的部分)。 这将给您一个恒定的延迟,它只受您的环缓冲区大小和声卡输出延迟的限制(通常不会太大)。 您可以进一步降低延迟: 如果要播放新的音符(例如,用户刚按了一个键),您可以检查环缓冲区中的当前播放位置,添加一些安全示例,然后使用新的声音设置重新渲染声音数据。 如果运行基于时间的效果(延迟线、混响等),这会变得很棘手,但它是可行的。只需每毫秒左右跟踪你的基于时间的效果的最后10个状态。这样可以在10毫秒内返回。 |
|
|
2
1
使用winapi,您只能在延迟方面做到这一点。通常你不能低于40-50毫秒,这是相当讨厌的。解决方案是在应用程序中实现ASIO支持,并让用户在后台运行类似ASIO4all的程序。这将延迟降低到5毫秒,但代价是:其他应用程序不能同时播放声音。 我知道这是因为我是一个佛罗里达的工作室用户。 |