gpt4 book ai didi

excel - 通过 Midi Controller 控制 Excel

转载 作者:行者123 更新时间:2023-12-01 16:55:34 26 4
gpt4 key购买 nike

我有其中之一 nanoKontrol's
(来源:netdna-cdn.com)

并且想用它上面的 slider 来控制Excel,就像Excel表单控制滚动条之一一样。

我已成功修改this code对于VBA,但它极不稳定。谁能帮我稳定一下吗?我认为函数 MidiIn_Event 如果返回速度不够快可能会崩溃,但我可能是错的。

提前致谢。

Public Const CALLBACK_FUNCTION = &H30000
Public Declare Function midiInOpen Lib "winmm.dll"
(lphMidiIn As Long,
ByVal uDeviceID As Long, ByVal dwCallback As Any,
ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Public Declare Function midiInClose Lib "winmm.dll"
(ByVal hMidiIn As Long) As Long
Public Declare Function midiInStart Lib "winmm.dll"
(ByVal hMidiIn As Long) As Long
Public Declare Function midiInStop Lib "winmm.dll"
(ByVal hMidiIn As Long) As Long
Public Declare Function midiInReset Lib "winmm.dll"
(ByVal hMidiIn As Long) As Long
Private ri As Long

Public Sub StartMidiFunction()
Dim lngInputIndex As Long
lngInputIndex=0
Call midiInOpen(ri, lngInputIndex, AddressOf MidiIn_Event,
0, CALLBACK_FUNCTION)
Call midiInStart(ri)
End Function

Public Sub EndMidiRecieve()
Call midiInReset(ri)
Call midiInStop(ri)
Call midiInClose(ri)
End Sub

Public Function MidiIn_Event(ByVal MidiInHandle As Long,
ByVal Message As Long, ByVal Instance As Long,
ByVal dw1 As Long, ByVal dw2 As Long) As Long

'dw1 contains the midi code
If dw1 > 255 Then 'Ignore time codes
Call MsgBox(dw1) 'This part is unstable
End If
End Function

最佳答案

问题可能是MsgBox :

  • 由于 MIDI 事件使用回调,因此它们很可能是从另一个线程运行的。 VBA 本质上是单线程的(例如 Multi-threading in VBA ),因此尝试从另一个线程显示模式对话框可能会导致问题(未定义的行为、崩溃、其他任何情况......)
  • MIDI 通常会触发大量事件( slider 或旋钮的最微小移动就会触发事件),因此明显移动某物可能会导致数百个事件。在每个事件中显示一个对话框(需要单击“确定”)可能会出现问题。

为了进行测试,请尝试替换 Call MsgBox(dw1)Debug.Print dw1这样这些值就打印在立即窗口中,这应该更加稳定。如果您尝试执行一些简单的操作(例如更新单元格中的值、滚动窗口),只要每次调用MidiIn_Event,您可能就能摆脱它。在下一个事件之前完成。

一个更复杂但稳定的解决方案可能是将数据点推送到事件处理程序中的队列中,并在 VBA 中使用重复计时器从队列中弹出项目并在 VBA 线程上执行某些操作。

关于excel - 通过 Midi Controller 控制 Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14095315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com