3

我在 [DartLang and Beep] 上进行了搜索,只发现了各种需要声音文件的 HTML5 解决方案。我想在不使用声音文件的情况下做一个尽可能基本和通用的“Bell”声音。(我使用的是 Ubuntu,当我使用 -h 调用它时,有一个系统哔声功能会报告以下内容:

用法:哔声 [-f 频率] [-l 长度] [-r 代表] [-d 延迟] [-D 延迟] [-s] [-c] [--verbose | --debug] [-e 设备]

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

还有这个线索:

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

...但我想不出用 print() 函数做的任何事情都会引起哔哔声。

提前致谢!

4

3 回答 3

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();
于 2012-12-06T13:56:49.813 回答
5

您可以使用音频 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 还是很陌生;希望了解更多的人可以编辑上面的代码) - 但结果是一声哔哔声,没有任何声音文件...在支持音频 API 的浏览器上,也就是说。

于 2012-12-09T02:34:25.147 回答
0

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

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

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

于 2012-12-06T05:48:01.737 回答