【问题标题】:Audio waveform with .raw input带有 .raw 输入的音频波形
【发布时间】:2017-04-10 18:40:11
【问题描述】:

我想显示音频波形,我得到了这个代码,它需要 .raw 音频输入并显示音频波形,但是当我输入 .3gp、.mp3 音频时,我得到白噪声,谁能帮助我如何使它与 .3gp 一起工作因为我需要使用 .3gp 音频来运行它。

InputStream 是 =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);
}

【问题讨论】:

    标签: android audio inputstream


    【解决方案1】:

    白噪声是什么意思?

    .3gp,.mp3 是压缩音频,需要解压后才能显示。

    【讨论】:

    • 如何解压?
    • @AbdulSamadKhan 搜索网络如何将 mp3 解码为 PCM 教程 android sdk。 PCM是数字音频(所有音频文件/格式都必须解压为PCM,扬声器才能正常播放,然后你也可以读取字节的值来创建波形)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2016-12-09
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2011-04-30
    • 1970-01-01
    相关资源
    最近更新 更多