[Voice communications] 让音乐响起来

简介:

出来。而支持 audio 标签的浏览器会忽略标签内任何文本。我们还可以为他加上 autoplay 、loop 等属性,使音频在进入页面之后立即循环播放。

<audio autoplay="autoplay" controls="controls" src="http://qianduannotes.duapp.com/file/tankWar.mp3">
    浏览器不支持 audio 标签。
</audio>
运行代码

controls 属性是用来控制显示音频文件的控制部分的。默认未设置 controls 属性。

2. webRTC mediaStream Media Capture (多谢@Hehe123提醒,RTC属于通信了,此处只是获取 media 流)

利用 getUserMedia 拿到本地的音频流。

// 前缀处理
window.AudioContext = window.AudioContext ||
                  window.webkitAudioContext;
navigator.getUserMedia =  navigator.getUserMedia ||
                      navigator.webkitGetUserMedia ||
                      navigator.mozGetUserMedia ||
                      navigator.msGetUserMedia;

var context = new AudioContext();

navigator.getUserMedia({audio: true}, function(stream) {
  // 获取本地流送入 AudioContext
  var microphone = context.createMediaStreamSource(stream);

  // filter为一个中间处理器,用来过滤音频
  var filter = context.createBiquadFilter();

  // microphone -> filter -> destination.
  microphone.connect(filter);
  filter.connect(context.destination);
}, function(){
    console.log("出了点问题~ 是否在服务器环境下运行?");
});

这里需要注意的是,使用 webRTC 需要在服务器环境下,你可以搭建一个本地服务器,也可以把代码上传到远程服务器上测试。

3. FileSystem

选择本地文件,读取音频流,拿到 Blob 流地址,送入 audio 中

<input type="file" onchange="return run(this.files);" /><br /><br />
<audio controls id="audio"></audio>
<script type="text/javascript">
    function run(files){
        var blob = window.webkitURL.createObjectURL(files[0]);
        audio.src = blob;
        audio.autoplay = "autoplay";
    }
</script>
运行代码

4. 移动设备,还可以使用如下方式

1)HTML Media Capture

<input type="file" accept="audio/*;capture=microphone">

2)device 元素

<device type="media" onchange="update(this.data)"></device>
<audio autoplay></video>
<script>
  function update(stream) {
    document.querySelector('audio').src = stream.url;
  }
</script>

5. 从键盘获取

本质并不是从键盘获取,而是通过键盘获取到我们设定的频率值,然后通过程序创建一段音频。如下面的程序:

下面例子中可以按键盘上中间的一排按键(A到K)来发出不同的声音。

var AudioContext=AudioContext||webkitAudioContext;
var context=new AudioContext;
//为每个键盘位对应一个频率
var s={65:256,83:288,68:320,70:341,71:384,72:426,74:480,75:512};
//为每个频率创建一个Oscillator
for(var i in s)
  value=s[i],
  s[i]=context.createOscillator(),
  s[i].frequency.value=value,
  s[i].start();
//键盘按下时将相应频率的Oscillator连接到输出源上
addEventListener("keydown",function(e){
  if(e=s[e.keyCode])e.connect(context.destination);
});
//键盘松开时将相应频率的Oscillator的连接取消
addEventListener("keyup",function(e){
  if(e=s[e.keyCode])e.disconnect();
});
运行代码

这段代码引自次碳酸钴的博客.

三、小结

本文是个介绍性的文章,提到了 Web Audio API 的相关知识,以及如何在你的 web 程序中引入 音频流。没有写相关 demo,感兴趣的童鞋可以复制代码自己去测试,在后续文章中会给出测试 DEMO。

四、参考文章





本文转自Barret Lee博客园博客,原文链接:http://www.cnblogs.com/hustskyking/p/webAudio-listen.html,如需转载请自行联系原作者
目录
相关文章
LabVIEW播放提示声音或者音乐
使用LabVIEW播放提示声音或者音乐,可在LabVIEW中右键鼠标:函数→声音→输出,选择相应的函数,如下图所示: