【问题标题】:Encode audio from getUserMedia() to a .OGG in JavaScript [duplicate]在 JavaScript 中将音频从 getUserMedia() 编码为 .OGG [重复]
【发布时间】:2013-05-25 04:29:55
【问题描述】:

所以我正在处理这个 HTML5 项目,我正在将 iOS 应用程序转换为基于 Web 的应用程序。伴随应用程序内容创建的一部分是录音,我试图在不使用插件的情况下在 JavaScript 中复制它;到目前为止,我已经能够从 getUserMedia() 录制音频,并将其转换为 WAV,这要归功于 Recorder.js。

不过,现在我有点迷茫了。我目前有两个单独的视图,一个用于录制内容,一个用于回放,但我不知道如何将从 Recorder.js 导出的音频导入到我的 JSON 有效负载中进行播放(我想避免强制使用服务器上传或客户端下载)。

所以我想我的具体问题是,我如何获取 Recorder.js 制作的 blob 对象(我几乎一无所知)并将其转换为原始数据,或者以某种方式通过 JSON 发送文件?

更新:我决定尝试使用 speex.js 工具 (https://github.com/jpemartins/speex.js) 来编码 .OGG(比 .WAV 小得多)。但是,我不确定如何使用它。演示页面似乎对我不起作用,并且尝试调用 Speex 对象的 .encode() 函数似乎实际上并未对数据进行编码,我只在对象字段中得到零。有谁知道我可以学习如何使用此类工具的任何资源?

【问题讨论】:

  • 我目前也在尝试用 getUsetMedia 设置一些东西,我尝试了几个教程,但有时我仍然觉得它很有挑战性。用于播放的 JSON 有效负载是什么意思?你有一个<audio> 标签,你想播放录制的音频吗?如果是这样,我认为您不需要recorder.js,您应该能够“以某种方式”将流传递给<audio> 标签。原始数据是什么意思?
  • 如果您想将 Blob 转换为文本,您可以查看 FileReader 对象。此方法将 Blob 作为参数并将其“转换”为我认为的文本。但我不确定如何准确地使用它,或者它是否能做到我认为的那样。还没来得及仔细看。
  • 谢谢,我只是在看 FileReader。我所说的“原始数据”是指录音机导出的.WAV文件中包含的实际数据;因为这最终应该能够在 iPad 和浏览器之间发送,所以能够发送 .WAV 文件将是非常有益的。我遇到的问题是我不知道如何发送 .WAV 文件的实际数据,因为我只有一个具有类型和长度的 blob 对象,没有明显的数据。
  • 作为更新:我已经在 blob/blob 的 URL 上尝试了所有四个 FileReader 函数,它们似乎都返回“未定义”。我是整个文件/媒体 API 的新手,所以我很可能连接错误。
  • 仍有数据附加到 blob 对象,即使您在 javascript 中看不到它。 Blob 包含二进制数据,例如,您可以通过 Web 套接字发送(这就是我正在做的,但我将其发送回服务器......所以我不知道 Web 套接字是否适合在iPad和浏览器)

标签: javascript json html speex getusermedia


【解决方案1】:

有一个库(MIT 许可)应该可以工作,我相信不久前我已经看到这个库被用于从网站上的 getUserMedia 音频流中保存 ogg 文件。我依稀记得图书馆的名字,但我认为是这个:

https://github.com/streamproc/MediaStreamRecorder/blob/master/AudioStreamRecorder/MediaRecorder.js

GitHub 上的整个项目: https://github.com/streamproc/MediaStreamRecorder/

由于实现这一点似乎很难,至少值得一看以了解这些概念 - 但我想说这是我们在这里处理的相当高级的 javascript...

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2020-08-04
相关资源
最近更新 更多