如何使用Javascript / PHP录制用户的声音?[已关闭]

2022-08-30 22:24:23

我目前正在尝试制作一个测试网站,允许用户录制语音笔记并将其保存到他们的帐户中。使用PHP或JavaScript执行此操作的最佳方法是什么?

我希望此过程的步骤是:

1)用户单击记录按钮。2)启动记录序列。3) 停止序列。4)命名文件并将其发送到服务器。

我的主要查询集中在第二步,我需要一些与用户的麦克风交互以录制语音的机制。我对Web开发本身还很陌生,我不知道如何使用JavaScript调用录音。

在Google中搜索时,我在StackOverflow中发现了一些解决类似问题的链接,但答案没有帮助。很多解决方案都指向Flash,但我想尽可能避免这种情况。所以我的问题可以归结为“是否可以使用JavaScript录制语音?如果是,如何?

提前致谢。


答案 1

HTML5 Audio API在浏览器中没有得到广泛支持,我认为它可以在Chrome中工作,Firefox最近将其添加到其nightlies中......在此阶段需要浏览器前缀,但常规 API 是...

navigator.getUserMedia({audio: true}, function(stream) { /* do stuff */ });

因此,这将是针对Chrome和Firefox的。webkitGetUserMediamozGetUserMedia

您现在更一致的选项是通过浏览器插件(如Flash或Java)或创建用户需要安装的桌面客户端。

关于getUserMedia感兴趣的资源:

以下问题可能会对您进一步帮助:

关于使用flash或java servlet将麦克风数据从浏览器上传到服务器的教程?


答案 2

现在,您可以通过创建将本地 MediaStream 连接到 ScriptProcessingNode 的音频图形,从麦克风进行录制:

navigator.webkitGetUserMedia({video: true, audio: true}, function(stream) {
    var audioContext = new webkitAudioContext,
        mediaStreamSource = context.createMediaStreamSource(stream),
        processor = context.createJavaScriptNode(4096, 2, 2);

    processor.onaudioprocess = function(e) {
        // Process the audio data found in e.inputBuffer
    };

    mediaStreamSource.connect(processor);
    processor.connect(context.destination);
});

(使用 Chrome 供应商前缀)

您可以将其连接到Websockets甚至普通的XHR以将块发送到您的服务器,服务器可以将其处理为音频文件。您需要将每个频道从

非交错式 IEEE 32 位线性 PCM,标称范围为 -1 -> +1

转换为您选择的格式。

可以在此处找到录制音频,将其编码为wav文件并保存(所有客户端)的类似示例:

https://github.com/muaz-khan/WebRTC-Experiment/tree/master/RecordRTC

有关 AudioContext 的更多详细信息:

http://docs.webplatform.org/wiki/apis/webaudio/AudioContext