4

我在调试一些使用 Web Audio API 的简单应用程序时有些困惑。

在开发人员控制台中,我可以执行以下操作:

var ctx = new webkitAudioContext(),
osc = ctx.createOscillator();

osc.connect(ctx.destination);
osc.start(0);

当我这样尝试时,试图让它与 Dart 一起使用会产生以下错误:

AudioContext ctx = new AudioContext();
OscillatorNode osc = ctx.createOscillator();

osc.connect(ctx.destination);
osc.start(0);

//Dart2JS: Uncaught TypeError: Object #<OscillatorNode> has no method 'connect$1' 
//DartVM: Class 'OscillatorNode' has no instance method 'connect' with matching
 arguments. NoSuchMethodError: incorrect number of arguments passed to method 
 named connect' Receiver: Instance of 'OscillatorNode'

单步执行我发现connect方法有两种实现方式。所以我尝试添加一个额外的第二个参数,因为我无法真正理解为什么它需要一个名为“输出”的 int,我想也许是为了音量,我决定了值 1 但这会产生:

//Dart2JS: Uncaught Error: IndexSizeError: DOM Exception 1 flexsynth.html_bootstrap.dart.js:8698 $.main flexsynth.html_bootstrap.dart.js:8698 $$._IsolateContext.eval$1flexsynth.html_bootstrap.dart.js:565 $.startRootIsolate flexsynth.html_bootstrap.dart.js:7181 (anonymous function)

//DartVM: "Dart_IntegerToInt64 expects argument 'integer' to be non-null."

这是我无法弄清楚该怎么做的地方,我认为参数不是空的,它是 1。

谷歌搜索错误只会让我找到实际的 Dart 源代码。

有什么地方可以解释如何使用 dart:web_audio 吗?我究竟做错了什么?

4

1 回答 1

6

这是因为底层实现似乎需要参数input,尽管它是一个可选参数。此代码将起作用:

AudioContext ctx = new AudioContext();
OscillatorNode osc = ctx.createOscillator();

osc.connect(ctx.destination, 0, 0);
osc.start(0);

这是一个已知的错误,您可以在此处加注星标:https ://code.google.com/p/dart/issues/detail?id=6728

于 2013-04-29T11:31:04.030 回答