如何在Dart中发出哔哔声?

时间:2012-12-06 03:43:33

标签: 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()函数做任何事都会引起哔哔声。

提前致谢!

3 个答案:

答案 0 :(得分:11)

我不知道你为什么要这样做,但这实际上取决于你是想在浏览器上还是在控制台上使用它。

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

main() {
  print(new String.fromCharCodes([0x07]));
}

至少在Windows上,它对我来说是哔哔声。如果终端支持它(它并没有被用户禁用,等等),它应该可以工作。

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

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

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

new AudioElement("path/to/beep.wav")
  ..autoplay = true
  ..load();

答案 1 :(得分:5)

您可以使用Audio API生成音调。例如,当您按下某个键时,以下Dart代码将生成持续50毫秒的蜂鸣声。

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);
     });
  });

}

可能有一种更好的方法来终止生成的音调而不是设置超时 - 可能是通过使用事件监听器(我仍然是API的新手;希望知道更多的人可以编辑上面的代码) - 但结果是在支持Audio API的浏览器上发出声音,没有任何声音文件,即。

答案 2 :(得分:0)

如果您正在编写控制台应用程序,则可以打印'\a'这是一个ASCII铃声字符。

这可能无法在所有终端上播放声音。例如,GNU屏幕可能会暂时使屏幕颜色反转并打印消息“Wuff,Wuff !!”而不是播放声音。各种终端仿真器将允许您禁用ASCII铃声,并且可以在系统设置中修改播放的特定声音。

此外,这在浏览器中不起作用。为此,您必须使用声音文件。