标签: web-audio-api

使用Chromium WebAudio API的纯javascript生成音调

如何仅使用javascript和Chromium的WebAudio API生成音调(例如纯正弦波)?

我想完成像Firefox一样东西.

铬WebAudio演示这里似乎都使用预先录制的<audio>内容.

谢谢!

audio html5 google-chrome chromium web-audio-api

10
推荐指数
2
解决办法
8237
查看次数

如何使用Web Audio API转换/调制音频缓冲频率

我正在尝试使用Web Audio API,我的目标是创建一个数字吉他,其中每个弦都有一个实际吉他的初始声源,打开弦,然后我想动态生成所有其他音品位置声音.经过对该主题的一些研究(这对我来说都是新手),听起来这可能是通过改变源声音样本的频率来实现的.

问题是我已经看到很多用于改变合成sin波的算法,但没有改变音频样本的频率.以下是我的代码示例,以便更好地了解我是如何实现此目的的:

// Guitar chord buffer    
var chordBuffer = null;

// Create audio context
var context = new webkitAudioContext();

// Load sound sample
var request = new XMLHttpRequest();
request.open('GET', 'chord.mp3', true);
request.responseType = 'arraybuffer';
request.onload = loadChord;
request.send();

// Handle guitar string "pluck"
$('.string').mouseenter(function(e){
    e.preventDefault();

    var source = context.createBufferSource();
    source.buffer = chordBuffer;

    // Create javaScriptNode so we can get at raw audio buffer
    var jsnode = context.createJavaScriptNode(1024, 1, 1);
    jsnode.onaudioprocess = changeFrequency;

    // Connect nodes and play
    source.connect(jsnode); …
Run Code Online (Sandbox Code Playgroud)

javascript audio html5 web-audio-api

10
推荐指数
2
解决办法
5127
查看次数

Web Audio API服务器端?

是否可以使用Web Audio API服务器端(例如在Node.js中)?我想处理"离线"我的音频文件以应用音频效果(/sf/answers/567096841/).

audio html5 webkit node.js web-audio-api

10
推荐指数
2
解决办法
1042
查看次数

为什么Safari或Firefox无法处理MediaElementSource的音频数据?

Safari或Firefox都无法MediaElementSource使用Web Audio API 处理音频数据.

var audioContext, audioProcess, audioSource,
    result = document.createElement('h3'),
    output = document.createElement('span'),
    mp3 = '//www.jonathancoulton.com/wp-content/uploads/encodes/Smoking_Monkey/mp3/09_First_of_May_mp3_3a69021.mp3',
    ogg = '//upload.wikimedia.org/wikipedia/en/4/45/ACDC_-_Back_In_Black-sample.ogg',
    gotData = false, data, audio = new Audio();
 
function connect() {
  audioContext = window.AudioContext ? new AudioContext() : new webkitAudioContext(),
  audioSource  = audioContext.createMediaElementSource( audio ),
  audioScript  = audioContext.createScriptProcessor( 2048 );
 
  audioSource.connect( audioScript );
  audioSource.connect( audioContext.destination );
  audioScript.connect( audioContext.destination );
  audioScript.addEventListener('audioprocess', function(e){
    if ((data = e.inputBuffer.getChannelData(0)[0]*3)) {
      output.innerHTML = Math.abs(data).toFixed(3);
      if (!gotData) gotData = true;
    }
  }, false);
} …
Run Code Online (Sandbox Code Playgroud)

javascript safari firefox html5 web-audio-api

10
推荐指数
1
解决办法
3459
查看次数

未定义的引用错误BufferLoader未定义

尝试学习Audio API,但我得到BufferLoader类的Uncaught引用错误.我正在使用Chrome,它是最新的.本班不应该没有问题吗?

<html>
<head>
<script type=text/javascript>

 window.onload = init;
 var context;
 var bufferLoader;



    function init(){

    context = new webkitAudioContext();
    bufferLoader = new BufferLoader(
          context,
          [
             ' https://dl.dropboxusercontent.com/u/1957768/kdFFO3.wav',
             ' https://dl.dropboxusercontent.com/u/1957768/geniuse%20meodies.wav',
          ],
          finishedLoading 
        );
    bufferLoader.load();
 }

     function finishedLoading(bufferList){
    //make two sources and play them
    var source1 = context.createBufferSource();
    var source2 = context.createBufferSource();
    source1.buffer = bufferList[0];
    source2.buffer = bufferList[1];

    source1.connect(context.destination);
    source2.connect(context.destination);
    source1.start(0);
    source2.start(0);
 }


   </script>
   </head>
   <body>
   </body>
   </html>
Run Code Online (Sandbox Code Playgroud)

javascript html5 html5-audio web-audio-api

10
推荐指数
1
解决办法
5875
查看次数

使用Web Audio API可以输出8个以上的通道吗?

我正在尝试使用Web Audio API来控制多声道设置中交互式音乐的播放.到目前为止,我已经设法在我的12声道声卡上将多达8个振荡器的声音引导到8个不同的声道​​,但是一旦我尝试使用超过8个声道,突然所有声道都被静音.经过大量研究后,我还注意到audioContext.currentTime卡在接近零的值上.

这是我的结果来自MAC OSX 10.8.5谷歌Chrome版本39.0.2171.27 beta(64位)和版本40.0.2192.0 canary(64位).

Safari不允许我处理超过2个频道FireFox找到我的12个频道,audioContext.destination.maxChannelCount但不管我是否尝试将振荡器连接到更高的数字,我都会继续将声音传送到第1和第2频道gain.connect(channelMerger, 0, i).

有没有人遇到类似的东西?有变通方法吗?

这是代码:

var AudioContext = window.AudioContext || window.webkitAudioContext;
var audioContext = new AudioContext();
var maxChannelCount = audioContext.destination.maxChannelCount;

// if set to max 8 it works fine in Chrome, but this line
// breaks the audio if the sound card has got more than 8 channels
audioContext.destination.channelCount = maxChannelCount; 
audioContext.destination.channelCountMode = "explicit";
audioContext.destination.channelInterpretation = "discrete";

var channelMerger = audioContext.createChannelMerger(maxChannelCount);
channelMerger.channelCount = 1;
channelMerger.channelCountMode = …
Run Code Online (Sandbox Code Playgroud)

audio macos web-audio-api

10
推荐指数
1
解决办法
804
查看次数

Web音频合成:如何在攻击或释放阶段处理更改过滤器截止?

我正在使用WebAudio构建Roland Juno-106合成器的仿真.实时WIP版本在这里.

如果截止频率或包络调制量在攻击或释放期间发生变化,同时滤波器同时被包络调制,我就会挂断如何更新滤波器.该代码位于此处.当前的实现并没有像模拟合成器那样响应,但我无法弄清楚如何计算它.

在真正的合成器上,滤波器立即由包络中的频率截止,包络调制量和当前级确定,但是上升或下降也可以平滑地继续.

我该如何模拟这种行为?

javascript audio synthesizer web-audio-api

10
推荐指数
1
解决办法
631
查看次数

使用不同的浏览器,使用getUserMedia获得一致的音频质量

我在做什么

我正在使用getUserMedia API在浏览器中录制音频,然后将此音频发送到websocket服务器.此外,为了测试录音,我在Mac上使用soundflower作为输入设备,因此我可以播放波形文件,而不是说话麦克风.

客户端(JavaScript)

window.AudioContext = window.AudioContext || window.webkitAudioContext;
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

var audioContext = new AudioContext();
var wsClient = new WebSocket("ws://" + WEBSOCKET_URL + ":" + WEBSOCKET_PORT);

navigator.getUserMedia({audio: true}, function (stream) {
    var input = audioContext.createMediaStreamSource(stream);
    var recordNode = audioContext.createScriptProcessor(4096);
    recordNode.onaudioprocess = recorderProcess;
    input.connect(recordNode);
    recordNode.connect(audioContext.destination);
}, function (e) {
    console.error("No live audio input: " + e);
});

function recorderProcess(e) {
    var buffer = e.inputBuffer.getChannelData(0);
    wsClient.send(buffer);
}
Run Code Online (Sandbox Code Playgroud)

服务器端(python)

在服务器端,我只是在文件中写入块:

def onMessage(self, msg, …
Run Code Online (Sandbox Code Playgroud)

javascript audio getusermedia web-audio-api

10
推荐指数
1
解决办法
2221
查看次数

网络音频:如何让移动麦克风从远处获取音频?

通过访问用户的麦克风navigator.getUserMedia非常容易.但是,如果我使用移动浏览器并希望从远处获取音频,例如使用"扬声器"模式,该怎么办?

我将如何实现这一目标?似乎有本机应用程序可以实现这一点,但Web Audio呢?

这样做的目的是使用DTMF在设备之间发送消息.我已经通过我的笔记本电脑实现了这一点,因为它的麦克风可以远距离记录周围的音频,但我可以访问的任何手机似乎只能在"喉舌"附近录制音频,因此我必须将手机保持在非常靠近即使收到消息的可能性很小,也要使用扬声器.除非我能让移动麦克风从远处拾取音频,否则这会失败.

编辑:距离,我的意思是大于几英尺,而不是仅仅几厘米.环境声音,而不是麦克风旁边的声音.

javascript mobile google-chrome getusermedia web-audio-api

10
推荐指数
1
解决办法
938
查看次数

混合两个音频缓冲区,使用web Audio Api将一个放在另一个的背景上

我想通过将一首歌作为另一首歌的背景混合成单个源来混合两个音频源.

例如,我有输入:

<input id="files" type="file" name="files[]" multiple onchange="handleFilesSelect(event)"/>
Run Code Online (Sandbox Code Playgroud)

和脚本解码这个文件:

window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new window.AudioContext();
var sources = [];
var files = [];
var mixed = {};

function handleFilesSelect(event){
    if(event.target.files.length <= 1)
          return false;

     files = event.target.files;
     readFiles(mixAudioSources);
}

function readFiles(index, callback){
    var freader = new FileReader();
    var i = index ? index : 0;

    freader.onload = function (e) {     
        context.decodeAudioData(e.target.result, function (buf) {

            sources[i] = context.createBufferSource();
            sources[i].connect(context.destination);
            sources[i].buffer = buf;

            if(files.length > i+1){
                readFiles(i + …
Run Code Online (Sandbox Code Playgroud)

javascript html5-audio web-audio-api

9
推荐指数
1
解决办法
2610
查看次数