如何使用Javascript / PHP录制用户的声音?

时间:2012-08-27 20:52:03

标签: php javascript html flash html5

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

我希望这个过程的步骤是:

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

我的主要查询主要集中在第二步,我需要一些机制与用户的麦克风进行交互以录制语音。我仍然是Web开发人员的新手,我不知道如何使用JavaScript调用录音。

在谷歌搜索时,我在StackOverflow中找到了一些解决类似问题的链接,但答案没有帮助。许多解决方案都指向Flash,但我希望尽可能避免这种情况。所以我的问题归结为“是否有可能使用JavaScript录制语音?如果是,怎么做?”

提前致谢。

3 个答案:

答案 0 :(得分:10)

HTML5音频API在浏览器中不受广泛支持,我认为它可以在Chrome中运行,Firefox最近已将其添加到其夜间...此阶段需要浏览器前缀,但通用API是...

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

因此,Chrome为webkitGetUserMedia,Firefox为mozGetUserMedia

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

关于getUserMedia感兴趣的资源:

以下问题可能会对您有所帮助:

tutorial on using flash or java servlet to upload microphone data from browser to server?

答案 1 :(得分:3)

现在,您可以通过创建将本地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

答案 2 :(得分:1)

在HTML5录音到来之前,你真的需要将一个结合了Flash和移动设备的文件上传的解决方案混在一起。在移动设备上,文件上传屏幕通常具有音频或视频记录器,因此用户可以直接从他们的设备进行记录。

如果设备在文件上传时没有录音机,则应使用录像机,然后将视频转换为服务器上的MP3。我们就是这样做的recordmp3online.com