gpt4 book ai didi

javascript - 如何使用 ionic Media 插件顺序播放多个音频

转载 作者:行者123 更新时间:2023-12-03 23:42:23 24 4
gpt4 key购买 nike

我正在尝试使用 ionic 媒体插件播放多个音频文件:https://ionicframework.com/docs/native/media .但我很难在不使用超时功能的情况下将其作为播放列表工作。

这是我尝试过的

playOne(track: AudioFile): Promise<any> {


return new Promise(async resolve =>{

const AudFile = await this.media.create(this.file.externalDataDirectory+track.trackUrl);


await resolve(AudFile.play())

});


}

然后玩 All ,我有这个:
async playAll(tracks: AudioFile[]): Promise<any>{
let player = (acc, track:AudioFile) => acc.then(() =>

this.playOne(track)


);

tracks.reduce(player, Promise.resolve());
}

这样他们就可以同时玩了。

但是如果将PlayOne方法包裹在一个超时函数中,则在播放列表中存在超时设置的毫秒间隔,但不一定在另一个开始之前完成,有时会等待很长时间才能播放后续文件是格子的。

超时实现如下所示:
playOne(track: AudioFile): Promise<any> {


return new Promise(async resolve =>{
setTimeout(async ()=>{
const AudFile = await this.media.create(this.file.externalDataDirectory+track.trackUrl);


await resolve(AudFile.play())
},3000)
});


}


深入研究插件的 ionic 包装器,create 方法如下所示:
/**
* Open a media file
* @param src {string} A URI containing the audio content.
* @return {MediaObject}
*/
Media.prototype.create = function (src) {
var instance;
if (checkAvailability(Media.getPluginRef(), null, Media.getPluginName()) ===
true) {
// Creates a new media object
instance = new (Media.getPlugin())(src);
}
return new MediaObject(instance);
};
Media.pluginName = "Media";
Media.repo = "https://github.com/apache/cordova-plugin-media";
Media.plugin = "cordova-plugin-media";
Media.pluginRef = "Media";
Media.platforms = ["Android", "Browser", "iOS", "Windows"];
Media = __decorate([
Injectable()
], Media);
return Media;
}(IonicNativePlugin));

任何建议将不胜感激

最佳答案

您可以通过循环播放轨道并等待 playOne 来使其工作。在每个轨道上。

async playAll(tracks: AudioFile[]): Promise<any> {
for (const track of tracks) {
await this.playOne(track);
}
}

如果我没记错的话 play在播放音频文件完成之前,函数不会阻塞。它也不返回 promise 。一种解决方法是在轨道的持续时间内使用 seTimeout

playOne(track: AudioFile): Promise<any> {
return new Promise((resolve, reject) => {
const audFile = await this.media.create(this.file.externalDataDirectory+track.trackUrl);
const duration = audFile.getDuration(); // duration in seconds

AudFile.play();
setTimeout(() => {
resolve();
},
duration * 1000 // setTimeout expect milliseconds
);
});
}

关于javascript - 如何使用 ionic Media 插件顺序播放多个音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58475416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com