2015-07-10 148 views
1

,所以我喜歡實現音樂播放列表的應用程序,我的音頻被上傳到Parse.com如MP3,我想找回那些音頻..播放音樂Parse.com安卓

final Button btn = (Button) v.findViewById(R.id.button); 
    final ParseFile fileObject = object.getParseFile("music"); 
    if (fileObject != null) { 
     fileObject.getDataInBackground(new GetDataCallback() { 


      @Override 
      public void done(byte[] bytes, com.parse.ParseException e) { 

       final String audioFileURL = fileObject.getUrl(); 
       mediaPlayer = new MediaPlayer(); 
       mediaPlayer.reset(); 
       mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
       btn.setOnClickListener(new OnClickListener() { 

        public void onClick(View arg0) { 
         try { 
          mediaPlayer.setDataSource(audioFileURL); 
          mediaPlayer.prepare(); 
          mediaPlayer.start(); 
         } catch (IllegalArgumentException e1) { 
          e1.printStackTrace(); 
         }//end catch 
         catch (IOException e1) { 
          e1.printStackTrace(); 
         } 
        }//end on click 
       }//end listener 
       ); 
      }//end done 
     });//end get data 
    }//end if 

這是怎麼了我從Parse.com檢索音樂,但這需要很多時間,特別是我有一個音頻列表..我想要一種方式在後臺下載音頻組..所以當我點擊按鈕時,音樂播放如此之快.. 任何幫助將不勝感激。

回答

2

我現在沒有時間理解你的代碼爲什麼不起作用,但你可以在github上提交我的示例應用程序(現在提交),你應該解決你的問題......如果不是,請告訴我。請注意該README.md

https://github.com/fullwipe/ParseAudioFileExample

希望它可以幫助...

編輯
這是我的資源庫的重要組成部分。
記錄並保存:

String outputFile = Environment.getExternalStorageDirectory(). 
         getAbsolutePath() + "/rumor.mp3"; 
myRecorder = new MediaRecorder(); 
       myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
       myRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
       myRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); 
       myRecorder.setOutputFile(outputFile); 

然後,開始記錄...

try { 
          myRecorder.prepare(); 
          myRecorder.start(); 
         } catch (IllegalStateException e) { 
          // start:it is called before prepare() 
          // prepare: it is called after start() or before setOutputFormat() 
          e.printStackTrace(); 
         } catch (IOException e) { 
          // prepare() fails 
          e.printStackTrace(); 
         } 

當你停止錄音,將它保存在Parse.com這樣:

FileInputStream fileInputStream = null; 
         File fileObj = new File(outputFile); 
         byte[] data = new byte[(int) fileObj.length()]; 

         try { 
          //convert file into array of bytes 
          fileInputStream = new FileInputStream(fileObj); 
          fileInputStream.read(data); 
          fileInputStream.close(); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 

         ParseFile parseAudioFile = new ParseFile("audiofile.mp3", data); 
         parseAudioFile.saveInBackground(); 

         ParseObject parseObject = new ParseObject("AudioFileClass"); 
         parseObject.put("audiofile", parseAudioFile); 
         parseObject.saveInBackground(new SaveCallback() { 
          public void done(ParseException e) { 
           if (e == null) { 
            Toast.makeText(getApplicationContext(),"Audio file saved successfully", Toast.LENGTH_SHORT).show(); 
           } else { 
            Toast.makeText(getApplicationContext(),"Error: audio file not saved", Toast.LENGTH_SHORT).show(); 
           } 
          } 
         }); 

和檢索從Parse.com播放非常簡單,我使用了ParseQueryAdapter。這是您獲取mp3文件並播放的部分:

ParseFile descr = object.getParseFile("audiofile"); 
       if (descr != null) { 
        String audioFileURL = descr.getUrl(); 
        MediaPlayer mediaPlayer = new MediaPlayer(); 
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

        try { 
         mediaPlayer.setDataSource(audioFileURL); 
         mediaPlayer.prepare(); 
         mediaPlayer.start(); 
        } 
        ... 
        ... 
+0

這並不是提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – Jost

+0

@Jost是正確的,順便說一句,我編輯了我的答案;) – Kurtis92

+0

@ Kurtis92我認爲你的代碼面臨同樣的問題,打開音頻需要很長時間。 – Rawan