作为一名吉他手,我一直想开发自己的录音、混音软件。我在 Direct Sound、Windows 多媒体(waveOutOpen 等)方面有一些经验。我意识到这将是一个复杂的项目,但纯粹是为了我自己的使用和学习,即没有期限!我打算使用 C++,但还不确定它是最好的 SDK/API。我希望软件是可扩展的,因为我可能希望在将来添加效果。几个前提...
- 在 Windows XP 上运行
- 最小延迟
- VU 表(在所有轨道上) 这让我回避 Direct Sound,因为似乎没有办法从主缓冲区读取音频数据。
- 配音(即在播放现有曲目的同时录制新曲目)。
- 包括节拍器
我最初的想法是使用 WMM 并使用 waveOutWrite 函数来播放音频数据。我想这本质上是一个音频流播放器。为了让事情更简单,我将采样率硬编码为 16 位,44.1kHZ(我的声卡支持的最佳采样率)。我需要的是关于整体架构的一些想法和指导。
例如,假设我的速度是 60 BPM,拍号是 4/4。我希望节拍器在每个小节/小节的开头播放一个咔嗒声。现在假设我已经录制了节奏音轨。播放时,我需要编排(双关语)将哪些数据发送到主声音缓冲区。在某些时候,我可能还想添加乐器、鼓(主要是)。同样,我需要知道如何在正确的时间将正确的音频数据发送到主音频缓冲区。我很欣赏时机是这里的关键。我不确定如何从各个音轨中获取正确的数据以发送到主声音缓冲区。
我最初的想法是有一个定时线程,它会定期询问每个曲目,“我需要数据来覆盖 N 毫秒的播放时间”。其中 N 取决于主缓冲区大小。
我明白这是一个复杂的问题,我只需要一些关于如何解决上述问题的指导。
另一个问题是 WMM 或 DirectSound 更适合我的需要。甚至ASIO?但是,主要问题是如何使用流式传输机制收集正确的轨道数据(来自多个轨道)以发送到主缓冲区,并保持最小的延迟?
任何帮助表示赞赏,
非常感谢
卡尔
感谢您的回复。但是,我的主要问题是如何对所有这些进行计时,以确保每个轨道在正确的时间将适当的数据写入主缓冲区。我当然愿意(免费)图书馆帮助我实现我的主要目标。