安卓播音的两大利器——AudioTrack&MediaPlayer

1 篇文章 0 订阅

AudioTrack播放音频

AudioTrack播放音频的基本步骤如下:

  1. 初始化AudioTrack对象: 创建一个AudioTrack构造函数所需的配置对象,如AudioAttributesAudioFormat
  2. 创建AudioTrack实例: 使用配置对象初始化AudioTrack
  3. 准备音频数据: 将音频数据加载到一个字节缓冲区中。
  4. 写入音频数据到AudioTrack: 使用write()方法将音频数据写入AudioTrack
  5. 播放音频: 调用play()方法开始播放。
  6. 释放资源: 音频播放完成后,使用release()方法释放资源。

示例:

public class AudioPlayExample {
    
    public static void playAudio(Context context, String audioFilePath) {
        try {
            // 1. 初始化AudioTrack对象
            // 1.1 音频属性
            AudioAttributes attributes = new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_MEDIA)
                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                    .build();
            // 1.2 音频格式
            AudioFormat audioFormat = new AudioFormat.Builder()
                    .setSampleRate(44100) // 采样率
                    .setChannelMask(AudioFormat.CHANNEL_OUT_STEREO) // 声道数
                    .setEncoding(AudioFormat.ENCODING_PCM_16BIT) // 位深
        			.build();
            // 2. 创建AudioTrack实例
            int minBufSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT);
            this.mAudioTrack = new AudioTrack.Builder()
                    .setAudioAttributes(attributes)
                    .setAudioFormat(audioFormat)
                    .setBufferSizeInBytes(minBufSize)
                    .setTransferMode(AudioTrack.MODE_STREAM)
                    .build();
            // 3. 准备音频数据
            File audioFile = new File(audioFilePath);
            FileInputStream fis = new FileInputStream(audioFile);
            byte[] buffer = new byte[1024];
            int read;
            while ((read = fis.read(buffer)) != -1) {
                // 4. 写入音频数据
                audioTrack.write(buffer, 0, read);
            }
            // 5. 播放音频
            audioTrack.play();
            // 等待音频播放完成
            audioTrack.waitForEndOfStream();
            // 6. 释放资源
            audioTrack.release();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

MediaPlayer播放音频

MediaPlayer播放音频的基本步骤如下:

  1. 创建MediaPlayer实例: 创建一个MediaPlayer对象。
  2. 设置数据源: 使用setDataSource()方法设置音频文件的路径。
  3. 准备MediaPlayer: 调用prepare()方法准备播放。这将加载媒体的元数据。
  4. 播放音频: 调用start()方法开始播放音频。
  5. 释放资源: 音频播放完成后,调用release()方法释放MediaPlayer资源。
  6. 处理异常: 在播放过程中,可能会遇到各种异常情况,需要使用try-catch块来处理。
public class AudioPlayExample {

    private MediaPlayer mediaPlayer;

    public void playAudio(String audioFilePath) {
        try {
            // 1. 创建MediaPlayer实例
            mediaPlayer = new MediaPlayer();
            // 2. 设置数据源
            Uri uri = Uri.parse(audioFilePath);
            mediaPlayer.setDataSource(uri.getPath());
            // 3. 准备MediaPlayer
            mediaPlayer.prepare();
            // 4. 播放音频
            mediaPlayer.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void stopAudio() {
        if (mediaPlayer != null) {
            // 5. 释放资源
            mediaPlayer.stop();
            // 6. 处理异常
            mediaPlayer.release();
        }
    }
}
  • 23
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值