NAudio.Midi 延迟与 MidiIn

Posted

技术标签:

【中文标题】NAudio.Midi 延迟与 MidiIn【英文标题】:NAudio.Midi Delay with MidiIn 【发布时间】:2016-04-10 14:26:07 【问题描述】:

在我的 MIDI 应用程序中,我使用 NAudio。 (太棒了!)但如果我在我的 MIDI 键盘上弹奏,总会有延迟。这是我的代码:

private MidiOut @out = new MidiOut(0);
private void InitMidiOut()

    MidiIn midiIn = new MidiIn(0);
    midiIn.MessageReceived += midiIn_MessageReceived;
   midiIn.Start();


private void midiIn_MessageReceived(object sender, MidiInMessageEventArgs e)

    if (e.MidiEvent.CommandCode == MidiCommandCode.NoteOn) 
        @out.Send(e.RawMessage);
    

我知道 WaveOut 有延迟,但为什么是 MidiOut? 有没有办法减少延迟?

【问题讨论】:

您使用什么组件(软件或硬件)将 MIDI 转换为实际声音? 目前Windows 7内置quartz.dll。 该 DLL 不包含 MIDI 合成器。你用的是什么输出设备? 软件是内置的“Microsoft GS Wavetable Synth”。输出设备是 Creative Xmod。 【参考方案1】:

这与 NAudio 无关。

Microsoft 的内置软件合成器最初是为播放 MIDI 文件而编写的,不需要实时响应,因此它使用高延迟来降低丢失的风险。

您必须将其替换为允许以较低延迟运行的其他合成器(例如,VirtualMIDISynth)。

【讨论】:

感谢您的回答。我已经安装了 VirtualMIDISynth 和一些不错的 Soundfonts。现在声音好多了。但是延迟是一样的。 你配置了什么延迟? 谢谢!!我没有注意到,我可以在 VirtulaMIDISynth 中配置延迟。我将它设置为 0,现在不再有延迟。【参考方案2】:

可以在几个阶段引入延迟。但是 NAudio 是midi... Windows API 的一个相当薄的包装器,所以我希望接收和发送会很快发生。你用什么来实际产生声音?

【讨论】:

目前是内置的“Microsoft GS Wavetable Synth”。 感谢您的回答。看我的cmets到CL。我使用音乐符号应用程序(“capella”)并且没有延迟,无论我使用“Microsoft GS Wavetable Synth”还是 CL 推荐的 VirtualMIDISynth。

以上是关于NAudio.Midi 延迟与 MidiIn的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 NAudio.Midi 播放音符

传播延迟与传输延迟[关闭]

iOS 设置 延迟执行 与 取消延迟执行 方法 以及对 run loop 初步认识

延迟与缓存

将不同的源与每个源的延迟时间联系起来

角度 5 延迟加载与动态加载