在上一章中,我们深入探讨了图像处理,例如图像的加载、编辑和保存。接下来,我们将转向音频处理,学习如何在安卓应用中播放、录制和处理音频。音频处理在各种应用中都是至关重要的,特别是在音乐播放器、录音应用和游戏等领域。
1. 音频播放
在安卓中,播放音频可以使用 MediaPlayer
类,该类提供了丰富的接口来管理音频播放。下面是一个基本的音频播放示例。
示例:简单的音频播放
假设我们要播放保存在 res/raw
目录下的音频文件 sound.mp3
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| 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.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
类来处理音频录制。下面是一个简单的音频录制示例。
示例:简单的音频录制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| 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
类。可以添加效果如混响、均衡器等。下面是一个使用均衡器的简单示例。
示例:添加均衡器效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| 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
添加音频效果。这些基本的音频处理功能可以为许多类型的应用提供支持,尤其是那些需要音频交互的应用。
在下一章中,我们将讨论如何对应用进行签名,这一点对于发布应用至关重要。随着我们逐步构建应用,理解正确的签名步骤将为我们提供必要的