18

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

我希望为此过程采取的步骤是:

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

我的主要查询集中在第二步,我需要一些可以与用户的麦克风交互来录制声音的机制。我对网络开发本身还是新手,我不知道如何使用 JavaScript 调用录音。

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

提前致谢。

4

3 回答 3

10

HTML5 音频 API 在浏览器中没有得到广泛支持,我认为它可以在 Chrome 和 Firefox 中使用,最近将它添加到它的 nightlies 中......现阶段需要浏览器前缀,但通用 API 是......

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

这将webkitGetUserMedia适用于 Chrome 和mozGetUserMediaFirefox。

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

关于 getUserMedia 感兴趣的资源:

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

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

于 2012-08-29T13:13:12.173 回答
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

于 2013-02-27T04:09:46.017 回答
1

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

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

于 2013-08-19T07:26:28.530 回答