throw new Error(‘Invalid mimetype, expected string.’)
}
return new Promise((resolve, reject) => {
const chunks = []
stream
.on(‘data’, chunk => chunks.push(chunk))
.once(‘end’, () => {
const blob = mimeType != null
? new Blob(chunks, { type: mimeType })
: new Blob(chunks)
resolve(blob)
})
.once(‘error’, reject)
})
}
转blob
let fileUrl; // blob对象
streamToBlob(stream)
.then(res => {
fileUrl = res;
// console.log(fileUrl);
//将blob对象转成blob链接
let filePath = window.URL.createObjectURL(fileUrl);
// console.log(filePath);
this.wavesurfer.load(filePath);
// 自动播放
this.wavesurfer.play();
this.playing = true;
})
.catch(err => {
console.log(err);
});
这样就实现了加载本地文件播放了
上一首下一首功能
这里的上一首下一首的功能是基于上面获取到的文件的绝对路径,通过node的path模块,path.dirname获取到文件的父级目录。
const dirPath = path.dirname(diskPath);
然后通过fs.readdir读取目录下所有文件,会返回一个文件名数组,找到该目录下正在播放的文件的下标,通过数组下标判断前一首和后一首歌曲的名称,然后再组装成绝对路径,读取资源播放
playFileList(diskPath, pos) {
let isInFiles;
let fileIndex;
let preIndex;
let nextIndex;
let fullPath;
let dirPath = path.dirname(diskPath);
let basename = path.basename(diskPath);
fs.readdir(dirPath, (err, files) => {
isInFiles = files.includes(basename);
if (isInFiles &