首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Webaudio :更改采样率

Webaudio :更改采样率
EN

Stack Overflow用户
提问于 2013-10-16 18:36:44
回答 2查看 1.9K关注 0票数 1

是否可以在不使用第三方软件和网站的情况下以及在js中更改记录的波形文件的采样率?如果recorder.js将频率设置为44100

代码语言:javascript
运行
复制
worker.postMessage ({
      command: 'init',
      config: {
        sampleRate: 44100
      }
} ) ;

如果将文件的长度减少到22050,那么文件的长度将增加2倍,而且复制速度会慢,同时提高播放速度,录音会听起来像fine.Actually --是否可以改变已经包含文件的采样率的问题,以及如何做?

EN

回答 2

Stack Overflow用户

发布于 2013-12-20 17:45:51

到目前为止,我发现的唯一方法是一个小型重采样库xaudio.js,它是speex.js库的一部分。效果很好。我使用它将音频从本机格式转换为8 8Khz。

票数 1
EN

Stack Overflow用户

发布于 2017-07-30 06:25:34

对任何感兴趣的人..。由于类型化数组是可传输的,所以可以将它们发送到web工作者,然后向下发送示例,然后将其发回或发送到服务器或其他地方。

代码语言:javascript
运行
复制
    //get audio from user and send it to a web worker
    function recordUser(argument) {
            //
        var audioCtx = new AudioContext();
        var worker = new Worker('downsampler.js');


        // Create a ScriptProcessorNode with a bufferSize of 512 and a single input and no output channel
        var scriptNode = audioCtx.createScriptProcessor(512, 1, 0);
        console.log(scriptNode.bufferSize);

        // Give the node a function to process audio events
        scriptNode.onaudioprocess = function(audioProcessingEvent) {
            var inputBuffer = audioProcessingEvent.inputBuffer;
            console.log(inputBuffer.getChannelData(0));
            worker.postMessage(inputBuffer.getChannelData(0)); 
        }

        
        navigator.mediaDevices.getUserMedia({ audio: true })
        .then(function(mediaStream) {
            var mediaStreamSource = audioCtx.createMediaStreamSource(mediaStream);
            mediaStreamSource.connect(scriptNode);
        })
        .catch(function(err) { console.log(err.name + ": " + err.message); });
    }

网络工作者就是这样。如果要将其发送到服务器,请使用websocket。否则,使用post消息将数据传输回客户端。您还需要添加一个事件侦听器客户端,所以搜索"mdn WebWorker“就可以了。

代码语言:javascript
运行
复制
    //example worker that sends the data to both a web socket and back to the user
    var ws = new WebSocket('ws://localhost:4321');
    ws.binaryType = 'arraybuffer';

    self.addEventListener('message', function(e) {
        var data = e.data;


        var sendMe = new Float32Array(data.length/16);
        for(var i = 0; i * 16 < data.length; i++) {
            sendMe[i] = data[i*16];
        }


        //send to server
        ws.send(sendMe);

        //or send back to user
        self.postMessage(sendMe)

    }, false);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19411160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档