- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
WaveOut API 是否对当前播放的缓冲区大小有一些内部限制?我的意思是,如果我提供一个非常小的缓冲区,它是否会以某种方式影响播放到扬声器的声音。当我用小缓冲区生成和播放正弦波时,我遇到了非常奇怪的噪音。像高峰或“BUMP”之类的东西。
完整的故事:
我做了一个可以实时生成窦性声音信号的程序。
可变参数是频率和音量。项目要求最大延迟为 50 毫秒。因此该程序必须能够实时产生具有手动可调音频信号频率的正弦信号。
我使用 Windows WaveOut API、C# 和 P/invoke 来访问 API。
当声音缓冲区为 1000 毫秒时,一切正常。如果我根据延迟要求将缓冲区最小化到 50 毫秒,那么对于我在每个缓冲区结束时遇到的某些频率,会出现噪音或“BUMP”。我不明白生成的声音是否格式错误(我检查过但不是)或者音频芯片发生了什么问题,或者初始化和播放有一些延迟。
当我将制作的音频保存到 .wav 文件时,一切都很完美。
这意味着我的代码中一定有一些错误,或者音频子系统对发送给它的缓冲区 block 有限制。
对于那些不知道 WaveOut 必须首先初始化的人,然后必须为每个缓冲区准备好包含需要播放的字节数的音频头以及指向包含需要播放的音频的内存的指针成为玩家。
更新
以下组合会产生噪音 44100 SamplingRate、16 位、2 channel 、50 ms 缓冲区和生成的 201Hz、202Hz、203Hz、204Hz、205Hz ... 219Hz 的 Sinus 音频信号,
220Hz,240Hz,没问题
为什么相差20,我不知道。
最佳答案
当您需要流畅地输出音频时,需要牢记以下几点:
waveOutXxxx
API 是较低级别 API 之上的遗留/兼容性层,因此它具有更大的开销,当您要达到最小延迟时不建议这样做。请注意,这不太可能是您的主要问题,但这是有助于理解 waveOutXxxx
您不仅限于拥有单个缓冲区,您可以分配多个可重复使用的缓冲区并回收它们D:\>LowLatencyWaveOutPlay.exe 48000 10 3
Format: 48000 Hz, 1 channels, 16 bits per sample
Buffer Count: 10
Buffer Length: 3 ms (288 bytes)
Signal Frequency: 1000 Hz
^C
关于audio - 使用 WaveOUT API 产生无失真的 Tone 声音所需的最小音频缓冲区是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14293749/
我是一名优秀的程序员,十分优秀!