2013-01-01 10 views
0

Visualizer를 사용하여 MediaPlayer에서 재생 된 파일을 캡처하고 AudioTrack을 사용하여 재생하려고합니다. 그러나 캡쳐 된 데이터는 노이즈입니다.(AudioTrack 사용) 비주얼 라이저를 사용하여 캡처 된 PCM 오디오

여기 내 코드입니다.

mPlayer = MediaPlayer.create(this, R.raw.call_ringtone); 
       mPlayer.setLooping(false); 
       mPlayer.start(); 
       // mPlayer.setVolume(0, 0); 
       int minSize =AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT);   
       mySong = new AudioTrack(AudioManager.STREAM_MUSIC, 44100,AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT, minSize, AudioTrack.MODE_STREAM); 

       mVisualizer = new Visualizer(mPlayer.getAudioSessionId()); 
       mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]); 

      Visualizer.OnDataCaptureListener captureListener = new Visualizer.OnDataCaptureListener() 
      { 
       Boolean toPlay = false; 
       @Override 
       public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, 
         int samplingRate) 
       { 
        myl.add(bytes); 

       } 

       @Override 
       public void onFftDataCapture(Visualizer visualizer, byte[] bytes, 
         int samplingRate) 
       { 
        System.out.println("onFftDataCapture"); 
       } 
      }; 

      mVisualizer.setDataCaptureListener(captureListener, 
        Visualizer.getMaxCaptureRate()/2, true, false); 

      mVisualizer.setEnabled(true); 
      mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
      { 
       @Override 
       public void onCompletion(MediaPlayer mediaPlayer) 
       { 
        mVisualizer.setEnabled(false); 
        stopIt = true; 
       } 
      }); 


      new Thread(new Runnable() { 

       @Override 
       public void run() { 
        // TODO Auto-generated method stub 
        try { 
         Thread.sleep(30000); 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        mySong.play(); 
        int j=0; 
        while(j<myl.size()) 
        { 
        mySong.write(myl.get(j), 0, myl.get(j).length); 
        Log.d("writing", Integer.toString(j)+" : "+Integer.toString(temp.length)); 
        j++; 
        } 
       } 
      }).start(); 

바이트는 단지 원시 백색 잡음을 생성합니다. OnWaveForm 메서드에서 들어오는 데이터는 어떻게 PCM 형식을 가질 수 있습니까? 어떻게해야합니까?

+0

성공 했습니까? 그렇다면 코드를 게시하십시오. 고맙습니다 – user45678

답변

1

audiotrack 대신 사운드 풀 사용 시도