2017-04-10 8 views
0

オーディオ波形を表示したいのですが、このコードは.rawオーディオ入力とオーディオ波形を表示しますが、.3gpを入力すると、.mp3オーディオは誰でも手助けすることができます。私は.3gpのオーディオを使用してそれを実行する必要があるように.3gpで動作させる。.raw入力のオーディオ波形

InputStream is = getResources()。openRawResource(R.raw.test1);

TEST1は、ファイルの.raw

最終WaveformView mPlaybackView =(WaveformView)findViewById(R.id.playbackWaveformView)です。

short[] samples = null; 
    try { 
     samples = getAudioSample(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    if (samples != null) { 
     final FloatingActionButton playFab = (FloatingActionButton) findViewById(R.id.playFab); 

     mPlaybackThread = new PlaybackThread(samples, new PlaybackListener() { 
      @Override 
      public void onProgress(int progress) { 
       mPlaybackView.setMarkerPosition(progress); 
      } 
      @Override 
      public void onCompletion() { 
       mPlaybackView.setMarkerPosition(mPlaybackView.getAudioLength()); 
       playFab.setImageResource(android.R.drawable.ic_media_play); 
      } 
     }); 
     mPlaybackView.setChannels(1); 
     mPlaybackView.setSampleRate(PlaybackThread.SAMPLE_RATE); 
     mPlaybackView.setSamples(samples); 

     playFab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (!mPlaybackThread.playing()) { 
        mPlaybackThread.startPlayback(); 
        playFab.setImageResource(android.R.drawable.ic_media_pause); 
       } else { 
        mPlaybackThread.stopPlayback(); 
        playFab.setImageResource(android.R.drawable.ic_media_play); 
       } 
      } 
     }); 
    } 
} 

@Override 
protected void onStop() { 
    super.onStop(); 

    mPlaybackThread.stopPlayback(); 
} 

private short[] getAudioSample() throws IOException{ 


    InputStream is =getResources().openRawResource(R.raw.test1); 

    byte[] data; 
    try { 
     data = IOUtils.toByteArray(is); 
    } finally { 
     if (is != null) { 
      is.close(); 
     } 
    } 

    ShortBuffer sb = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer(); 
    short[] samples = new short[sb.limit()]; 
    sb.get(samples); 
    return samples; 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

答えて

1

ホワイトノイズはどういう意味ですか?

.3gp、.mp3は圧縮されたオーディオなので、ストリームを解凍して表示する必要があります。

+0

どのように解凍するのですか? –

+0

@AbdulSamadKhan seach webのための** mp3をPCMチュートリアルアンドロイドSDKにデコードする方法**。 PCMはデジタルオーディオです(スピーカーが正しく再生される前に、すべてのオーディオファイル/フォーマットをPCMに圧縮解除してから、バイトの値を読み取って波形を作成することもできます)。 –