【发布时间】:2017-10-20 19:40:41
【问题描述】:
我有一个可以从 SoundCloud 流式传输音频的 Ionic 2 应用程序。
这就是我进行流式传输的方式:
public loadSelectedTrack(): void {
SC.get('/tracks/' + this.audio.id, {
filter: 'public'
}).then((track) => {
this.soundCloudCurrentTrack = track;
this.playSelectedTrack();
});
}
public playSelectedTrack(): void {
SC.stream('/tracks/' + this.soundCloudCurrentTrack.id).then((player) => {
this.togglePlayPause();
player.on('buffering_start', () => {
console.log('buffering...');
});
player.on('buffering_end', () => {
console.log('party!');
this.audioLoaded = true;
});
player.on('finish', () => {
this.navCtrl.pop();
});
this.player = player;
player.on('time', () => {
this.updateTrackTime();
this.updateTrackPercent();
});
this.saveUserData();
});
}
现在,我需要知道如何下载音频以及如何在设备中找到它。
我想如果我可以下载音频,我可以用Storage或NativeStorage存储id
但我不知道这是否是最好的方法。有人做过吗?
编辑:嗯,我已经尝试下载音频,但有一个问题。当我按下下载按钮时,我什么也看不到。因此,如果我转到 app 文件夹,我可以看到一个音频文件,但它已损坏,因为它的大小始终为 600 字节,而且我无法手动播放。
我想看看进展,所以经过研究,我发现可以通过一个事件来做到这一点。因此,我尝试通过 toast 通知暂时显示进度,但它向我显示“97”..“98”......然后没有更多的事情发生。如果我使用资源管理器转到应用程序文件夹,我会看到一个音频文件但已损坏。而且它没有显示错误! 这是代码:
public download(audio: any): void {
this.platform.ready().then(() => {
console.log("Clicked to download: " + audio.id);
let url = `https://api.soundcloud.com/tracks/${audio.id}/download?client_id=${this.SC_CLIENT_ID}`;
let pathToSaveTo: string = '';
if (this.platform.is('android')) {
pathToSaveTo = cordova.file.externalApplicationStorageDirectory + audio.id + '.wav';
let fileTransfer = new Transfer();
fileTransfer.onProgress(this.onProgress);
fileTransfer.download(url, pathToSaveTo)
.then((entry) => {
console.log('download complete: ' + entry.toURL());
}, (error) => {
let prompt = this.alertCtrl.create({
title: 'Error',
subTitle: error,
buttons: ['Accept']
});
prompt.present();
});
}
});
}
onProgress = (progressEvent: ProgressEvent) : void => {
this.ngZone.run(() => {
if (progressEvent.lengthComputable) {
let progress: any = Math.round((progressEvent.loaded / progressEvent.total) * 100);
console.log(progress);
let toast = this.toastCtrl.create({
message: progress,
duration: 100
});
toast.present();
}
});
}
【问题讨论】:
-
我刚刚用我的代码编辑了帖子,对不起
-
如果你喜欢看,我添加了我尝试下载音频但有问题的方式。
标签: angular ionic2 storage soundcloud cordova-nativestorage