【发布时间】:2011-03-25 00:39:43
【问题描述】:
有没有办法在 C# 中以几微秒的分辨率触发事件?
我正在构建一个 MIDI 音序器,它需要在每个 MIDI 滴答声中触发一个事件,然后该事件将播放当时注册的任何音符。
在每分钟 120 拍和 120 ppqn(每拍/四分音符的脉冲数)的分辨率下,该事件应每 4.16666 毫秒触发一次。现代音序器具有更高的分辨率,例如 768ppqn,这需要每 651 微秒触发一次该事件。
我发现的短时间事件的最佳分辨率是 1 毫秒。我该如何超越?
这个问题肯定已经被任何 C# MIDI 音序器或 MIDI 文件播放器解决了。 也许我只是没有从正确的角度看待问题。
感谢您的帮助。
【问题讨论】:
-
我不遵循你的数学。如果 120ppqn=41.6666ms,肯定是 768ppqn!=651microsec,但是 768ppqn=1000*41.6666*120/768=6510 microsec?
-
120 bpm = 每 500 毫秒 1 拍,每拍 120 滴答 = 500 毫秒/120 = 4.166 毫秒 & 每拍 768 滴答 = 500 毫秒/768 = 0.651 毫秒 我的第一个数字确实有错字,我现在会纠正它。谢谢。
-
感谢大家抽出宝贵时间帮助我。每个答案都教会了我一些有趣的东西。解决方案确实是放弃毫秒和微秒,而是使用样本。由于 44100Khz 音频的 1 个样本等于 1/44100 秒,因此可以达到 22.67 微秒的精度。
-
@Brice:我知道,这个问题很老,但你找到解决方案了吗?它是什么?我的问题基本上是一样的。例如,120 BPM 的 1/64 音符事件应该每 31.25 毫秒播放一次,或者每 62.5 毫秒播放 1/32 音符。你如何测量半毫秒和四分之一毫秒?你用的是计时器还是秒表?您如何测量样品?