HarmonyOS-鸿蒙app开发 —基于java短音播放开发指导

HarmonyOS-鸿蒙app开发 —基于java短音播放开发指导

场景介绍

短音播放主要负责管理音频资源的加载与播放、tone音的生成与播放以及系统音播放。

接口说明

短音播放开放能力分为音频资源、tone音和系统音三部分,均定义在SoundPlayer类。

表1 音频资源的加载与播放类SoundPlayer的主要接口

接口名

描述

SoundPlayer(int taskType)

构造函数,仅用于音频资源。

createSound(String path)

从指定的路径加载音频数据生成短音资源。

createSound​(Context context, int resourceId)

根据应用程序上下文合音频资源ID加载音频数据生成短音资源。

createSound​(AssetFD assetFD)

从指定的AssetFD实例加载音频数据生成短音资源。

createSound​(java.io.FileDescriptor fd, long offset, long length)

根据文件描述符从文件加载音频数据生成音频资源。

createSound​(java.lang.String path, AudioRendererInfo rendererInfo)

根据从指定路径和播放信息加载音频数据生成短音资源。

setOnCreateCompleteListener​(SoundPlayer.OnCreateCompleteListener listener)

设置声音创建完成的回调。

setOnCreateCompleteListener​(SoundPlayer.OnCreateCompleteListener listener, boolean isDiscarded)

设置用于声音创建完成的回调,并根据指定的isDiscarded标志位确定是否丢弃队列中的原始回调通知消息。

deleteSound(int soundID)

删除短音同时释放短音所占资源。

pause(int taskID)

根据播放任务ID暂停对应的短音播放。

play(int soundID)

使用默认参数播放短音。

play(int soundID, SoundPlayerParameters parameters)

使用指定参数播放短音。

resume(int taskID)

恢复短音播放任务。

setLoop(int taskID, int loopNum)

设置短音播放任务的循环次数。

setPlaySpeedRate(int taskID, float speedRate)

设置短音播放任务的播放速度。

setPriority(int taskID, int priority)

设置短音播放任务的优先级。

setVolume(int taskID, AudioVolumes audioVolumes)

设置短音播放任务的播放音量。

setVolume(int taskID, float volume)

设置短音播放任务的所有音频声道的播放音量。

stop(int taskID)

停止短音播放任务。

pauseAll​()

暂停所有正在播放的任务。

resumeAll()

恢复虽有已暂停的播放任务。

表2 tone音的生成与播放API接口功能介绍

接口名

描述

SoundPlayer()

构造函数,仅用于tone音。

createSound(ToneDescriptor.ToneType type, int durationMs)

创建具有音调频率描述和持续时间(毫秒)的tone音。

createSound​(AudioStreamInfo.StreamType streamType, float volume)

根据音量和音频流类型创建tone音。

play​(ToneDescriptor.ToneType toneType, int durationMs)

播放指定时长和tone音类型的tone音。

pause()

暂停tone音播放。

play()

播放创建好的tone音。

release()

释放tone音资源。

表3 系统音的播放API接口功能介绍

接口名

描述

SoundPlayer(String packageName)

构造函数,仅用于系统音。

playSound(SoundType type)

播放系统音。

playSound(SoundType type, float volume)

指定音量播放系统音。

音频资源的加载与播放

  1. 通过SoundPlayer(int)构造方法获取SoundPlayer类的实例化对象,其中入参taskType的取值范围和含义参考枚举类AudioManager.AudioStreamType的定义。
  2. 调用createSound(String)方法从指定路径加载音频资源,并生成短音ID,后续可使用通过短音ID进行短音资源的播放和删除等操作。
  3. 使用默认播放参数的play(int)方法进行播放,并通过播放成功后返回任务ID进行音量、循环次数、播放速度和优先级等参数的设置。
  4. 短音资源使用完毕需要调用deleteSound(int)完成对资源的释放。
    下面的样例展示音频资源的加载与播放:

public void demo() {
// 步骤1:实例化对象
SoundPlayer soundPlayer = new SoundPlayer(AudioManager.AudioVolumeType.STREAM_MUSIC.getValue());
// 步骤2:指定音频资源加载并创建短音
int soundId = soundPlayer.createSound(“/system/xxx”);
soundPlayer.setOnCreateCompleteListener((soundPlayer1, cacheId, status) -> {
// 步骤3:短音播放,设置音量、循环次数和播放速度
if (status == 0) {
int taskId = soundPlayer.play(cacheId);
soundPlayer.setVolume(taskId, 1.0f);
soundPlayer.setLoop(taskId, -1); // “-1”表示一直循环播放
soundPlayer.setPlaySpeedRate(taskId, 1.0f);
}
});
// 步骤4:释放短音资源
soundPlayer.deleteSound(soundId);
}

tone音的生成与播放

  1. 通过SoundPlayer()构造方法获取SoundPlayer类的实例化对象。
  2. 使用SoundPlayer的实例化对象,通过createSound(ToneDescriptor.ToneType, int)方法,指定tone音类型和tone音播放时长来创建tone音资源。
  3. 使用SoundPlayer的实例化对象,通过play、pause、release方法完成tone音播放、暂停和资源释放。
    下面的样例展示tone音的生成与播放:

public void demo() {
// 步骤1:实例化对象
SoundPlayer soundPlayer = new SoundPlayer();
// 步骤2:创建DTMF_0(高频1336Hz,低频941Hz)持续时间1000ms的tone音
soundPlayer.createSound(ToneDescriptor.ToneType.DTMF_0, 1000);
// 步骤3:tone音播放、暂停和资源释放
soundPlayer.play();
soundPlayer.pause();
soundPlayer.release();
}

系统音的播放

  1. 通过SoundPlayer(String)构造方法获取SoundPlayer类的实例化对象。
  2. 使用SoundPlayer的实例化对象,通过playSound(SoundType)或playSound(SoundType, float)方法指定系统音类型和音量,并进行系统音播放。
    下面的样例展示系统音的播放:

public void demo() {
// 步骤1:实例化对象
SoundPlayer soundPlayer = new SoundPlayer(“packageName”);
// 步骤2:播放键盘敲击音,音量为1.0
soundPlayer.playSound(SoundPlayer.SoundType.KEY_CLICK, 1.0f);
}

🚀 如未找到文章请搜索栏搜素 | Ctrl+D收藏本站 | 联系邮箱:15810050733@qq.com