2012-12-06 63 views
2

我搜索了[DartLang和Beep],並且只找到了需要聲音文件的各種HTML5解決方案。我想在不使用聲音文件的情況下儘可能做到基本和普遍的「貝爾」聲音。 (我正在使用Ubuntu,並有一個系統蜂鳴聲功能,當我用-h調用它時報告以下內容:如何在飛鏢中發出嘟嘟聲?

用法: 蜂鳴聲[-f頻率] [-l長度] [-r代表] [ - d延遲] [-D延遲] [-s] [-c] [--verbose | --debug] [-e設備]

但是,我只是想在簡單和普遍的。辦法儘可能

還有這樣的線索:

7 00/07 07 07 BEL(CTRL-G)BELL(嗶)

...但我用print()函數做的任何事情都不會引起蜂鳴聲。

在此先感謝!

+0

爲什麼你不想使用聲音文件? – Blender

回答

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(); 
+0

print()不適用於我,但毫無疑問,由於我的系統(Ubuntu)的設置方式。我想要最低限度的代碼和沒有文件來將可能的問題和開銷保持在最低水平 - 我的注意力是在不查看100條調試行的情況下知道至少有一個嚴重錯誤。好吧。並感謝您的額外努力! (當我開始使用其他文件時,我將重新考慮添加AudioElement()調用。) –

0

如果您正在編寫控制檯應用程序,則可以打印'\a'這是一個ASCII鈴聲字符。

這可能無法在所有終端上播放聲音。例如,GNU屏幕可能會使屏幕顏色暫時翻轉並打印消息「Wuff,Wuff !!」而不是播放聲音。各種終端仿真程序將允許您禁用ASCII鈴聲,並且可以在系統設置中修改播放的特定聲音。

此外,這不會在瀏覽器中工作。爲此,您必須使用聲音文件。

+0

不能說'\ a'是錯誤的,但它是我在發佈這個問題之前嘗試的東西之一,並且它在我的機器上不起作用。 –

4

您可以使用音頻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的瀏覽器上,也就是說。

+0

我編輯了您的帖子,以便它可以在Dart 1.0中使用。 – GameAlchemist