如何在Dart中发出哔哔声?

geo*_*ler 3 dart

我搜索了[DartLang和Beep]并且只找到了需要声音文件的各种HTML5解决方案.我想在不使用声音文件的情况下尽可能做基本和普遍的"贝尔"声音.(我正在使用Ubuntu并且有一个系统蜂鸣功能,当我用-h调用它时报告以下内容:

用法:beep [-f freq] [-l length] [-r reps] [-d delay] [-D delay] [-s] [-c] [--verbose | --debug] [-e device]

但是,我只想以尽可能简单和通用的方式做到这一点.

还有这个线索:

7 00/07 07 07 BEL(Ctrl-G)BELL(哔哔声)

...但是我无法想象用print()函数做什么会引起哔哔声.

提前致谢!

Kai*_*ren 10

我不知道你为什么要这样做,但这实际上取决于你是否希望它在浏览器或控制台上运行.

如果要在控制台上执行此操作,请尝试以下操作:

main() {
  print(new String.fromCharCodes([0x07]));
}
Run Code Online (Sandbox Code Playgroud)

至少在Windows上,它对我来说是哔哔声.它应该在终端支持它时起作用(并且它没有被用户禁用,等等).

如果要在浏览器上执行此操作,则应播放声音文件.

这是一个免费的哔声:http://www.freesound.org/people/SpeedY/sounds/3062/

浏览器上的一个非常简单的示例:

new AudioElement("path/to/beep.wav")
  ..autoplay = true
  ..load();
Run Code Online (Sandbox Code Playgroud)


Ric*_*ler 5

您可以使用音频API生成音调。例如,当您击键时,以下Dart代码将产生持续50 ms的蜂鸣声。

import 'dart:html';
import 'dart:web_audio';
import 'dart:async';

void main() {

  final num LENGTH = 50;

  var ac = new AudioContext();

  window.onKeyUp.listen((KeyboardEvent ke) {

    print("press a key");
    OscillatorNode oscillator = ac.createOscillator();
    oscillator
    ..type = "sine"
    ..frequency.value = 1000
    ..connectNode(ac.destination, 0, 0)
    ..start(0);

    var timer = new Timer(const Duration(milliseconds: LENGTH), () {
          oscillator.disconnect(0);
     });
  });

}
Run Code Online (Sandbox Code Playgroud)

可能有一种比设置超时更好的终止生成的音调的方法-也许使用事件监听器(我对API还是很陌生;希望知道更多的人可以编辑上面的代码)-但是结果是支持音频API的浏览器上没有任何声音文件的蜂鸣声。