当前位置:   article > 正文

electron和vue开发的音乐播放器遇到的一些问题(本地音频文件的播放,文件信息的读取)_electron 打开本地音频文件

electron 打开本地音频文件

        最近在学习electron,尝试开发了一个音乐播放器。在播放器本地音乐的时候遇到了一些问题。
在获取到本地的音频文件路径之后,audio不会向网络路径一样直接去缓存播放。废话不多说,直接上代码。

获取本地视频文件的时长 需要用到一个插件 music-metadata,点击进入。

  1. import fs from 'fs';
  2. import path from 'path';
  3. import {remote} from 'electron';
  4. import * as mm from 'music-metadata';
  5. //...
  6. readLocalFiles() {
  7. //获取文件的一些关键信息
  8. const me = this;
  9. const url = remote.app.getPath('music');//文件夹路径;
  10. fs.readdir(url, function (err, files) {
  11. files.forEach(item => {
  12. if (path.extname(item).toLowerCase() !== '.mp3') return;//遍历每一个文件,遇到非mp3文件直接返回(当然音频文件不止mp3,有需要可以多做判断)
  13. mm.parseFile(path.join(url, item), {//利用music-metadata来获取文件的时长等信息 npm包地址 https://www.npmjs.com/package/music-metadata
  14. duration: true
  15. }).then(metadata => {
  16. console.log(metadata);
  17. me.localList.push({
  18. name:item,
  19. __dir_url:path.join(url, item),
  20. duration:metadata.format.duration});
  21. });
  22. })
  23. })
  24. },

第二个关键部分就是去读取本地文件,本地文件需要用到fs模块。用fs模块读取文件,然后将缓存文件利用new Bolb()转化为bolb;

  1. readFile1(item) {
  2. const me = this;
  3. const buf = fs.readFileSync(item.__dir_url);//读取文件,并将缓存区进行转换
  4. const uint8Buffer = Uint8Array.from(buf);
  5. const bolb = new Blob([uint8Buffer]);//转为一个新的Blob文件流
  6. console.log(bolb);
  7. me.url = window.URL.createObjectURL(bolb); //转换为url地址并直接给到audio
  8. },

这样本地的音频文件就可以利用audio进行读取了。

在查资料的过程中发现了前人的一些解决方案,使用 electron 做个播放器 · Issue #8 · whxaxes/blog · GitHub 。这里边介绍了两种方法。第一种方法不创建audio标签,直接利用

new window.AudioContext().createBufferSource() 去直接播放音频。第二种方法创建一个serve监听音频服务(一直没搞懂怎么实现的,node学得不够)。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/999050
推荐阅读
相关标签
  

闽ICP备14008679号