javascript - 使用 <audio> 元素播放原始音频

标签 javascript html5-audio web-audio-api

我正在开发一个使用 Web Audio API 解密(使用 openpgp.js)和解码服务器端音频文件的小项目。解密后的文件作为原始音频到达客户端。目前我可以使用 source.start(0) 播放音频文件但似乎没有一种简单的方法可以将音频转储到 GUI 以允许用户执行调整音量和搜索音频等操作。

我有一个 AudioContext使用 createBufferSource 解码和缓冲的对象

function playSound(decodedAudio) {
  var source = context.createBufferSource();
  source.buffer = decodedAudio;
  source.connect(context.destination);
  source.start(0);
}

因为接收的是原始音频,所以我不能简单地使用类似 audio.src = ... 的东西带有音频元素。还是我忽略了一些明显的东西?
有没有办法让 Web Audio API 中的解码音频与目的地很好地播放 <audio>元素?

理想的流程看起来像...
1) 用户点击播放一段音频
2) 音频在服务器端解密并作为原始音频发送到客户端
3) 音频解码后可播放、可搜索等。

我喜欢思考的可能解决方案
- 因为音频文件的范围可以从 1 分钟到 60 分钟不等,所以使用文件系统 API 将音频写入文件,然后使用 <audio>实际播放的元素
- 在 Web Audio API 之上编写我自己的暂停、擦洗和音量控制系统

最佳答案

好问题!最简单的解决方案是将解码后的内容存储在 Blob 中。 .

这将允许您设置 src 属性。

var blob = new Blob(decodedData, {type: "correct-mimetype/here"});
var url = URL.createObjectURL(blob);
audio.src = url;

关于javascript - 使用 <audio> 元素播放原始音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17245178/

相关文章:

audio - ScriptProcessorNode内部

javascript - Codecademy 控制台坏了?

javascript - Bootstrap - 减少文本框和标签等表单控件之间的间距

javascript - 为什么这个函数组件在 setState 之后没有重新渲染?

android - 无法在 Android 上播放音频 - Sencha Touch SDK 工具 2.0.0

javascript - 无法使用 Web Audio API 获得 5.1/环绕声

javascript - 当我使用 HTML5 "doesn' 时,空格键 `button` t 在 `contenteditable` 元素中工作。我怎样才能让它工作?

javascript - 如何不间断地连续播放声音?

javascript - 我可以使用 javascript 仅从右/左耳机获得声音吗?

javascript - 重新启动组件上的 Audio() 流已安装