我搜索了[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)
您可以使用音频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的浏览器上没有任何声音文件的蜂鸣声。