private MediaRecorder mediaRecorder;
private Visualizer visualizer;
private final int VISUALIZER_HEIGHT = 150;

// ...

private void initMediaRecorder() {
        // 初始化 MediaRecorder
        mediaRecorder = new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        mediaRecorder.setOutputFile(getExternalCacheDir().getAbsolutePath() + "/recording.3gp");
        }

private void initVisualizer() {
        // 初始化 Visualizer
        visualizer = new Visualizer(mediaRecorder.getAudioSessionId());
        visualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
        visualizer.setDataCaptureListener(new Visualizer.OnDataCaptureListener() {
@Override
public void onWaveFormDataCapture(Visualizer visualizer, byte[] waveform, int samplingRate) {
        // 实现绘制水波纹效果的逻辑
        // ...
        }

@Override
public void onFftDataCapture(Visualizer visualizer, byte[] fft, int samplingRate) {
        // ...
        }
        }, Visualizer.getMaxCaptureRate() / 2, true, false);
        }

// ...

buttonRecord.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 启动 MediaRecorder try { mediaRecorder.prepare(); mediaRecorder.start(); } catch (IOException e) { e.printStackTrace(); }

    // 启动 Visualizer
    visualizer.setEnabled(true);
}

});

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

// 释放 MediaRecorder
mediaRecorder.release();

// 释放 Visualizer
visualizer.release