26 多媒体处理之音频处理
在上一章中,我们深入探讨了图像处理,例如图像的加载、编辑和保存。接下来,我们将转向音频处理,学习如何在安卓应用中播放、录制和处理音频。音频处理在各种应用中都是至关重要的,特别是在音乐播放器、录音应用和游戏等领域。
1. 音频播放
在安卓中,播放音频可以使用 MediaPlayer
类,该类提供了丰富的接口来管理音频播放。下面是一个基本的音频播放示例。
示例:简单的音频播放
假设我们要播放保存在 res/raw
目录下的音频文件 sound.mp3
。
import android.media.MediaPlayer;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class AudioActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_audio);
// 初始化 MediaPlayer
mediaPlayer = MediaPlayer.create(this, R.raw.sound);
}
@Override
protected void onDestroy() {
// 释放资源
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
super.onDestroy();
}
// 播放音频
public void playAudio() {
if (mediaPlayer != null) {
mediaPlayer.start();
}
}
// 暂停音频
public void pauseAudio() {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
}
// 停止音频
public void stopAudio() {
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.prepareAsync(); // 准备为下一次播放
}
}
}
在这个示例中,我们通过 MediaPlayer.create()
方法创建了一个 MediaPlayer
实例。然后,我们可以通过调用 start()
、pause()
和 stop()
方法来控制音频的播放。
2. 音频录制
除了播放音频,录制音频也是常见的需求。安卓提供了 AudioRecord
类来处理音频录制。下面是一个简单的音频录制示例。
示例:简单的音频录制
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import androidx.appcompat.app.AppCompatActivity;
import java.io.FileOutputStream;
import java.io.IOException;
public class RecordActivity extends AppCompatActivity {
private static final int RECORDER_AUDIO_SOURCE = MediaRecorder.AudioSource.MIC;
private static final int RECORDER_OUTPUT_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
private static final int RECORDER_SAMPLERATE = 44100;
private static final String FILE_PATH = Environment.getExternalStorageDirectory().getPath() + "/recorded_audio.pcm";
private AudioRecord audioRecord;
private boolean isRecording = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_record);
}
public void startRecording() {
audioRecord = new AudioRecord(RECORDER_AUDIO_SOURCE, RECORDER_SAMPLERATE,
RECORDER_CHANNELS, RECORDER_OUTPUT_FORMAT, AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_OUTPUT_FORMAT));
audioRecord.startRecording();
isRecording = true;
new Thread(new Runnable() {
@Override
public void run() {
writeAudioData();
}
}).start();
}
private void writeAudioData() {
byte[] data = new byte[1024];
try (FileOutputStream os = new FileOutputStream(FILE_PATH)) {
while (isRecording) {
int read = audioRecord.read(data, 0, data.length);
if (read > 0) {
os.write(data, 0, read);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void stopRecording() {
if (audioRecord != null) {
isRecording = false;
audioRecord.stop();
audioRecord.release();
audioRecord = null;
}
}
}
在这个示例中,AudioRecord
类用于录制音频。我们在独立的线程中执行录制操作,以避免阻塞主线程。录制的音频以 PCM 格式保存到指定文件中。
3. 音频效果处理
对于音频效果的处理,安卓提供了一些额外的工具,比如 AudioEffect
类。可以添加效果如混响、均衡器等。下面是一个使用均衡器的简单示例。
示例:添加均衡器效果
import android.media.audiofx.Equalizer;
import android.media.MediaPlayer;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class EqualizerActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
private Equalizer equalizer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_equalizer);
mediaPlayer = MediaPlayer.create(this, R.raw.sound);
equalizer = new Equalizer(0, mediaPlayer.getAudioSessionId());
equalizer.setEnabled(true);
// 设置均衡器频带
for (short i = 0; i < equalizer.getNumberOfBands(); i++) {
equalizer.setBandLevel(i, (short) (equalizer.getBandLevelRange()[1] / 2));
}
}
@Override
protected void onDestroy() {
if (equalizer != null) {
equalizer.release();
}
if (mediaPlayer != null) {
mediaPlayer.release();
}
super.onDestroy();
}
}
在这个示例中,我们创建了一个均衡器,并为每个频带设置了中间的增益水平。这种处理可以增强音频的听感,适用于音乐应用。
4. 小结
在这一章中,我们学习了如何通过 MediaPlayer
播放音频、通过 AudioRecord
进行音频录制,以及如何使用 Equalizer
添加音频效果。这些基本的音频处理功能可以为许多类型的应用提供支持,尤其是那些需要音频交互的应用。
在下一章中,我们将讨论如何对应用进行签名,这一点对于发布应用至关重要。随着我们逐步构建应用,理解正确的签名步骤将为我们提供必要的