Android语音播放:追加、覆盖两种方式

该文章介绍了一个在Android中实现的语音播放器,支持追加模式(将语音资源放入队列按序播放)和覆盖模式(中断当前播放,立即播放新资源)。SoundMaker类使用了MediaPlayer和队列数据结构,通过Handler处理播放消息,同时提供了OnCompletionListener接口监听播放完成事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

经常需要播放一段语音,语音播放需要有追加和覆盖2种模式。追加模式,需要把语音资源放入队列里,按顺序地播放。覆盖模式,直接打断当前的状态,播放最新的语音资源。

具体实现:

package com.ycf.audioplaydemo;

import android.content.Context;
import android.media.MediaPlayer;
import android.os.Handler;
import android.os.Message;
import androidx.annotation.NonNull;
import java.util.LinkedList;
import java.util.Queue;

public class SoundMaker {

    private Context context = null;
    private Queue<Integer> soundQueue = null;
    private MediaPlayer mediaPlayer = null;
    private OnCompletionListener onCompletionListener = null;

    public SoundMaker(Context context){
        this(context, null);
    }

    public SoundMaker(Context context, OnCompletionListener onCompletionListener){
        this.context = context;
        this.onCompletionListener = onCompletionListener;
        this.soundQueue = new LinkedList<Integer>();
    }

    public enum SoundPlayMode{
        SOUND_ADD_MODE, SOUND_OVER_MODE
    }

    public void playSound(int resId, SoundPlayMode mode){

        if(mode == SoundPlayMode.SOUND_ADD_MODE)
        {
            //追加模式
            System.out.println("---------------追加模式-----------------");
            if (mediaPlayer == null) {
                Message message = new Message();
                message.what = 0;
                message.obj = resId;
                handler.sendMessage(message);
            }
            else {
                System.out.println("插入队列---");
                soundQueue.offer(resId);
            }
        }
        else if(mode == SoundPlayMode.SOUND_OVER_MODE)
        {
            //覆盖模式
            System.out.println("---------------覆盖模式-----------------");
            if (mediaPlayer != null) {
                mediaPlayer.stop();
                mediaPlayer.release();
                mediaPlayer = null;
             
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光的味道_2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值