2012-03-07 20 views
3

私はメディアプレーヤーでアンドロイドビルドを使用してURLで音楽を再生しているプロジェクトに取り組んでいます。私がこれを達成したいことは、ストリーミングデータをSDカード上のファイルに保存できることです。私はメディアレコーダーでアンドロイドビルドを使用してこれをしようとしましたが、メディアプレーヤーから来ている音だけでなく、電話の周りのすべてを記録しています。Androidメディアプレーヤーから音楽を録音する方法

私の質問はこれを達成するための最良の方法ですか?ここで

は、私はすでにテストしてみた例ですが、私はすべてがOKに行ったかどうかを確認するために、その後のmp3ファイルを再生することはできません。

Log.e("URL AGAIN","url : "+url); 
      try { 
       if(!isrecording){ 

        URL urlStream = new URL(url); 
        InputStream inputStream = urlStream.openStream(); 
        Log.d("", "urlStream.openStream()"); 

        String filename = Environment.getExternalStorageDirectory().getAbsolutePath(); 
        filename += "/deliciousradio.mp3"; 

        File outputSource= new File(filename); 
        fileOutputStream = new FileOutputStream(outputSource); 
        Log.d("", "FileOutputStream: " + outputSource); 

        int bytesRead = -1; 
        isrecording = true; 

        byte[] buffer = new byte[30 * 1024]; 
        while ((bytesRead = inputStream.read(buffer)) > 0) { 

         byte[] buffer2 = new byte[bytesRead]; 
         fileOutputStream.write(buffer2); 

         Log.d("","bytes size :"+buffer2.length); 
         Log.d("","bytesRead : "+bytesRead); 

        } 


       } else if(isrecording){ 
        fileOutputStream.close(); 
       } 
      } catch(Exception e){} 

ここでの問題は、私は30を受けていますということですバッファ2の長さとして、私は理由を説明することはできません。

ありがとうございました!

+0

入力と出力の形式は何ですか? – Raffaele

+0

私はいつも 'buffer2.length'と' bytesRead'に同じ数を返します。決して '30'ではありません。ところで、あなたは 'buffer2'を割り当てるべきではありません。 ['OutputStream.write(buffer、start、length)'](http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html#write%28byte%5B%5D 、%20int、%20int%29)。 ストリームをコピーするのに[Apache IO utils](http://commons.apache.org/io/api-1.2/org/apache/commons/io/IOUtils.html#copy%28java.io.InputStream)を使用すると便利です。 、%20java.io.OutputStream%29) – Raffaele

+0

こんにちは@アンドロイドドロイド、私も同じことを(メディアプレーヤーから音楽を録音する方法)を探しています。もしあなたがこのplzヘルプmee..thanksに事前にsugeestionを持っている。 。 – sandeep

答えて

0
Button recstart, recstop,replay; 
//onCreate 
File f; 
    File externalStorage; 
    String path = ""; 
    MediaRecorder recorder; 
    Timer time; 
    String filename1 = ""; 
    boolean s = false; 
externalStorage = Environment.getExternalStorageDirectory(); 
     String sdCardPath = externalStorage.getAbsolutePath(); 
     recorder = new MediaRecorder(); 
     path = sdCardPath + "/"; 

recstart.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       String state = android.os.Environment.getExternalStorageState(); 
       if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) { 
        try { 
         throw new IOException("SD Card is not mounted. It is " 
           + state + "."); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 

       Date dt = new Date(); 
       int hours = dt.getHours(); 
       int minutes = dt.getMinutes(); 
       int seconds = dt.getSeconds(); 
       String curTime = hours + "_" + minutes + "_" + seconds; 

       filename1 = "phonecall_at" + curTime + ".mp4"; 
       if (recorder == null) { 
        recorder = new MediaRecorder(); 
       } 

       f = new File(path, filename1); 
       try { 
        s = f.createNewFile(); 

       } catch (IOException e1) { 
        // TODO Auto-generated catch block 
        // Toast.makeText(AudioRecording.this,"hiiiii...."+e1.getMessage(),2000).show(); 
        e1.printStackTrace(); 
       } 
       // MediaRecorder.AudioSource.VOICE_CALL + 
       // MediaRecorder.AudioSource.MIC 
       // recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_UPLINK 
       // + MediaRecorder.AudioSource.VOICE_DOWNLINK); 
       if (s == true) { 
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

        recorder.setOutputFile(f.getAbsolutePath()); 
        // record.setText("stop"); 
        // record.setBackgroundColor(Color.BLUE); 
        // Toast.makeText(AudioRecording.this, String.valueOf(s), 
        // 3000).show(); 
        try { 
         recorder.prepare(); 
         Toast.makeText(AudioRecording.this, "Recording starts", 
           5000).show(); 
        } catch (IllegalStateException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
         Log.e(".................................", 
           "" + e.toString()); 
        } 
        recorder.start(); 
       } else { 
        Toast.makeText(getApplicationContext(), 
          "No space Left on device", 2000).show(); 
       } 
       /* 
       * try { recorder.prepare(); Toast.makeText(Recordingvoice 
       * .this,"Recording starts",5000).show(); recorder.start(); 
       * 
       * 
       * } catch (IllegalStateException e) { // TODO Auto-generated 
       * catch block e.printStackTrace(); } catch (IOException e) { // 
       * TODO Auto-generated catch block // e.printStackTrace(); } 
       */ 
      } 
     }); 
recstop.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       if (s == true) { 
        Toast.makeText(AudioRecording.this, "Recording stopped", 
          2000).show(); 
        if (recorder == null) { 
         recorder = new MediaRecorder(); 
        } 
        if (recorder != null) { 
         recorder.stop(); 
         recorder.release(); 
        } 
        recorder = null; 
        // time.cancel(); 
        // uploadCode(); 
       } 

      } 
     }); 
replay.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       if (f.exists()) { 
        Toast showMsg = Toast.makeText(getApplicationContext(), "Playing", Toast.LENGTH_SHORT); 
        showMsg.show(); 
        String path = f.getAbsolutePath(); 
        Uri myUri = Uri.parse(path); 
        MediaPlayer mp = new MediaPlayer(); 
        mp.setLooping(false); 
        mp = MediaPlayer.create(AudioRecording.this, myUri); 
        mp.start(); 
       } 
      } 
     }); 
+2

私はあなたが実際にマイクから録音している 'MediaRecorder'クラスを使用していて、他のすべてのサウンドも録音されていることがわかります。 –

+0

MediaRecorderクラスはユーザーが話すメディアファイルを記録します録音など –

+0

私はユーザーの話を録音する必要はありません。メディアプレーヤーからの出力のみを録音したいと思います。 –

関連する問題