在 MidiOutput 代理上调用 "send" 时出现类型错误
type error when calling "send" on MidiOutput proxy
显然 dart 中的 navigator.requestMIDIAccess() 方法有问题。 https://code.google.com/p/dart/issues/detail?id=21805
所以我尝试了使用 javascript 代理的解决方法。
在调音台上列出 MIDI 端口是没有问题的。
但是,当我尝试发送 MIDI 音符时,出现错误:'Type Error'
我不知道如何传递 'note-on' 参数? output.callMethod('send', [[144 , 60, 127]]);
outputs[0] 给我 "Microsoft GS Wavetable Synth"
import 'dart:html';
import 'dart:js';
void main() {
final JsObject w = new JsObject.fromBrowserObject(window);
final JsObject n = w['navigator'];
if (n.hasProperty('requestMIDIAccess')) {
n.callMethod('requestMIDIAccess').callMethod('then', [(JsObject midiAccess) {
JsObject inputs = new JsObject.jsify(midiAccess.callMethod('outputs'));
for (JsObject input in inputs) {
print(input['name']);
}
;
sendMiddleC(midiAccess, 1);
}]);
}
}
void sendMiddleC(midiAccess, portID) {
JsObject outputs = midiAccess.callMethod('outputs');
JsObject output = outputs[0];
output.callMethod('send', [[144 , 60, 127]]);
}
传递给send
方法的数据数组需要从Dart数组转换为Javascript数组,使用dart:js
如下:
output.callMethod('send', [new JsArray.from([144 , 60, 127])]);
显然 dart 中的 navigator.requestMIDIAccess() 方法有问题。 https://code.google.com/p/dart/issues/detail?id=21805
所以我尝试了使用 javascript 代理的解决方法。 在调音台上列出 MIDI 端口是没有问题的。 但是,当我尝试发送 MIDI 音符时,出现错误:'Type Error'
我不知道如何传递 'note-on' 参数? output.callMethod('send', [[144 , 60, 127]]);
outputs[0] 给我 "Microsoft GS Wavetable Synth"
import 'dart:html';
import 'dart:js';
void main() {
final JsObject w = new JsObject.fromBrowserObject(window);
final JsObject n = w['navigator'];
if (n.hasProperty('requestMIDIAccess')) {
n.callMethod('requestMIDIAccess').callMethod('then', [(JsObject midiAccess) {
JsObject inputs = new JsObject.jsify(midiAccess.callMethod('outputs'));
for (JsObject input in inputs) {
print(input['name']);
}
;
sendMiddleC(midiAccess, 1);
}]);
}
}
void sendMiddleC(midiAccess, portID) {
JsObject outputs = midiAccess.callMethod('outputs');
JsObject output = outputs[0];
output.callMethod('send', [[144 , 60, 127]]);
}
传递给send
方法的数据数组需要从Dart数组转换为Javascript数组,使用dart:js
如下:
output.callMethod('send', [new JsArray.from([144 , 60, 127])]);