使用附加组件 SDK 加载音频文件并使用 Aurora.js 播放
Loading an audio file with the Add-On SDK and playing it with Aurora.js
我目前正在尝试使用附加SDK为Mozilla Firefox编写音乐播放器附加组件。我正在使用 Aurora.js(维基)来处理音频文件的加载/解复用/解码
我目前已经让插件工作,因此您可以选择带有 HTML 文件输入的音频文件,这非常简单。
<input type="file" id="file-selector" />
<script>
var fileSelector = document.getElementById("file-selector");
fileSelector.onchange = function() {
var audioFile = fileSelector.files[0];
var audioPlayer = AV.Player.fromFile(audioFile);
audioPlayer.play();
};
</script>
不过,我目前正在尝试做的是从附加 SDK 返回的文件,而不是从 HTML 页面上的输入中读取文件,然后创建一个 AV。选手。使用 sdk/io/file
和 sdk/io/byte-streams
模块读取文件非常简单。
问题是我不知道如何正确构建AV。来自此数据的播放器。从它的样子:
-
AV.Player.fromFile(x)
的工作原理是从AV.Asset.fromFile(x)
构造AV.Asset
-
AV.Asset.fromFile(x)
构造一个AV.Asset
与AV.FileSource(x)
-
AV.FileSource
是通过创建FileReader
和以 Blob 的形式读取文件中的数据
我一直在试图弄清楚如何使用io/file.read(filePath,"br")返回的字节数组创建一个Blob,但没有运气。我尝试创建一个类似于具有大小、类型和切片方法的 Blob 的对象,但这似乎也不起作用。
由于您将(或至少应该)在某些内容脚本(小部件,面板等)中使用Aurora,因此事情会稍微复杂一些。
- 读取
main.js
中的数据,例如通过您已经提到的file
模块。 - 通过消息传递将该数据传递给内容脚本。
-
在内容脚本中,接收消息,将字节包装在
Uint8Array
中,然后执行 Aurora 操作:addon.port.on("bytes-loaded", function(stream) { var data = new Uint8Array(stream.length); for (var i = 0; i < stream.length; ++i) { data[i] = String.charCodeAt(stream[i]) & 0xff; } avPlayer = AV.Player.fromBuffer(data); });
file
模块并不是很好,因为它是一个同步 API,在读取文件时会阻塞,但至少有一个替代方案。
在此构建器中可以找到一个完整的示例,其中包含NetUtil
异步文件读取,并且无需在 Javascript 土地中将字符串转换为数组,但请确保替换硬编码路径。 ;)
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 如何从Java/scala调用js美化程序
- 如何更改<svg>标记为<img>用js标记
- 如何使用 node.js 比较两个 json 数组
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- Selectize.js:如何对整数值的选项进行排序
- 使用附加组件 SDK 加载音频文件并使用 Aurora.js 播放