2017-02-23 63 views
0

我有一個可以從SoundCloud流音頻的Ionic 2應用程序。如何從soundcloud下載音頻

這是我如何做流:

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(); 

     }); 
    } 

現在,我需要知道如何下載音頻,然後,如何找到它的設備。

我想如果我可以下載音頻,我可以存儲的ID與StorageNativeStorage

但我不知道這是否是做的最好辦法。有人在任何時候做過?


編輯:好吧,我試圖下載音頻,但有一個問題。當我按下下載按鈕時,我什麼都看不到。所以如果我去應用程序文件夾,我可以看到一個音頻文件,但它被破壞,因爲總是有600bytes的大小,我不能手動播放它。

我想看看進展情況,所以在研究之後,我發現要做到這一點。所以我試着用吐司通知臨時顯示進度,但是它顯示我「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(); 

      } 
     }); 
    } 
+0

我剛剛用我的代碼編輯了這篇文章,對不起 –

+0

如果你喜歡看,我補充說我如何下載音頻但是有問題。 –

回答

2

您可以輕鬆地下載文件,使用Transfer模塊離子2個報價。 您應該將這些文件下載到不同平臺的其他目錄下,閱讀文檔here 下載文件時,存儲有關文件的數據以備將來使用是非常好的。 您可以使用Storage來存儲您可能需要的關於文件的任何數據(例如它的名稱)。 然後。取決於平臺,您可以再次訪問此文件,有關文件訪問的更多詳細信息,請參閱文檔cordova-plugin-file

+0

不錯!我會研究它.. –

+0

我剛剛編輯我的帖子。你能看到它嗎?謝謝! –