2013-01-01 4 views
0

Я пытаюсь захватить воспроизведенный файл в MediaPlayer с помощью Visualizer и воспроизвести его с помощью AudioTrack. Но захваченные данные - только шум.Невозможно воспроизвести (используя AudioTrack) Захваченный звук PCM с помощью Visualizer

Вот мой код.

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

попробуйте использовать звуковой пул вместо аудиотрека

 Смежные вопросы

  • Нет связанных вопросов^_^