Я пытаюсь воспроизвести несколько аудиофайлов с помощью плагина ionic media: 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())
});
}
Затем, чтобы сыграть Все, у меня есть это:
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)
});
}
Копая в ионную оболочку плагина, метод создания выглядит так:
/**
* 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));
Любое предложение будетцениться