2017-04-10 100 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搜索网页为**如何解码MP3到PCM教程android sdk **。 PCM是数字音频(所有音频文件/格式必须在音箱正确播放之前解压缩到PCM,然后您还可以读取字节值以创建波形)。 –