鸿蒙OS 短音播放开发指导
场景介绍
短音播放主要负责管理音频资源的加载与播放、tone 音的生成与播放以及系统音播放。
接口说明
短音播放开放能力分为音频资源、tone 音和系统音三部分,均定义在 SoundPlayer 类。
接口名 | 描述 |
---|---|
SoundPlayer(int taskType) | 构造函数,仅用于音频资源。 |
int createSound(String path) | 从指定的路径加载音频数据生成短音资源。 |
int createSound(Context context, int resourceId) | 根据应用程序上下文合音频资源 ID 加载音频数据生成短音资源。 |
int createSound(AssetFD assetFD) | 从指定的 AssetFD 实例加载音频数据生成短音资源。 |
int createSound(java.io.FileDescriptor fd, long offset, long length) | 根据文件描述符从文件加载音频数据生成音频资源。 |
int createSound(java.lang.String path, AudioRendererInfo rendererInfo) | 根据从指定路径和播放信息加载音频数据生成短音资源。 |
boolean setOnCreateCompleteListener(SoundPlayer.OnCreateCompleteListener listener) | 设置声音创建完成的回调。 |
boolean setOnCreateCompleteListener(SoundPlayer.OnCreateCompleteListener listener, boolean isDiscarded) | 设置用于声音创建完成的回调,并根据指定的isDiscarded标志位确定是否丢弃队列中的原始回调通知消息。 |
boolean deleteSound(int soundID) | 删除短音同时释放短音所占资源。 |
boolean pause(int taskID) | 根据播放任务ID暂停对应的短音播放。 |
int play(int soundID) | 使用默认参数播放短音。 |
int play(int soundID, SoundPlayerParameters parameters) | 使用指定参数播放短音。 |
boolean resume(int taskID) | 恢复短音播放任务。 |
boolean setLoop(int taskID, int loopNum) | 设置短音播放任务的循环次数。 |
boolean setPlaySpeedRate(int taskID, float speedRate) | 设置短音播放任务的播放速度。 |
boolean setPriority(int taskID, int priority) | 设置短音播放任务的优先级。 |
boolean setVolume(int taskID, AudioVolumes audioVolumes) | 设置短音播放任务的播放音量。 |
boolean setVolume(int taskID, float volume) | 设置短音播放任务的所有音频声道的播放音量。 |
boolean stop(int taskID) | 停止短音播放任务。 |
boolean pauseAll() | 暂停所有正在播放的任务。 |
boolean resumeAll() | 恢复虽有已暂停的播放任务。 |
接口名 | 描述 |
---|---|
SoundPlayer() | 构造函数,仅用于 tone 音。 |
boolean createSound(ToneDescriptor.ToneType type, int durationMs) | 创建具有音调频率描述和持续时间(毫秒)的 tone 音。 |
boolean createSound(AudioStreamInfo.StreamType streamType, float volume) | 根据音量和音频流类型创建 tone 音。 |
boolean play(ToneDescriptor.ToneType toneType, int durationMs) | 播放指定时长和 tone 音类型的 tone 音。 |
boolean pause() | 暂停 tone 音播放。 |
boolean play() | 播放创建好的 tone 音。 |
boolean release() | 释放 tone 音资源。 |
接口名 | 描述 |
---|---|
SoundPlayer(String packageName) | 构造函数,仅用于系统音。 |
boolean playSound(SoundType type) | 播放系统音。 |
boolean playSound(SoundType type, float volume) | 指定音量播放系统音。 |
音频资源的加载与播放
- 通过 SoundPlayer(int taskType)构造方法获取 SoundPlayer 类的实例化对象,其中入参 taskType 的取值范围和含义参考枚举类 AudioManager.AudioStreamType 的定义。
- 调用 createSound(String path) 方法从指定路径加载音频资源,并生成短音 ID,后续可使用通过短音 ID 进行短音资源的播放和删除等操作。
- (可选)提供单独对音量,循环次数,播放速度和优先级进行的设置的方法,支持在短音播放过程中进行实时调整。
- 短音播放提供两种方法,一种是包含播放参数设置的 play(int soundID, SoundPlayerParameters parameters) 方法,用户可以在 SoundPlayerParameters 数据结构中定义音量,循环次数,播放速度和优先级,另一种是使用默认播放参数的 play(int soundID) 方法。短音播放成功后返回任务 ID,供后续对任务的管理。
- 通过任务 ID,可以对短音播放任务进行暂停,恢复和停止。
- 短音资源使用完毕需要调用 deleteSound(int soundID)完成对资源的释放。
下面的样例展示音频资源的加载与播放:
public void demo() {
// 步骤1:实例化对象
SoundPlayer soundPlayer = new SoundPlayer(AudioManager.AudioVolumeType.STREAM_MUSIC.getValue());
// 步骤2:指定音频资源加载并创建短音
int soundId = soundPlayer.createSound("/system/xxx");
// 步骤3:指定音量,循环次数和播放速度
SoundPlayerParameters parameters = new SoundPlayerParameters();
parameers.setVolumes(new AudioVolumes());
parameters.setLoop(10);
parameters.setSpeed(1.0f);
// 步骤4:短音播放
soundPlayer.play(soundId, parameters);
// 步骤5:停止播放
soundPlayer.stop(soundId);
// 步骤6:释放短音资源
soundPlayer.deleteSound(soundId);
}
tone 音的生成与播放
- 通过 SoundPlayer() 构造方法获取 SoundPlayer 类的实例化对象。
- 使用 SoundPlayer 的实例化对象,通过 createSound(ToneDescriptor.ToneType type, int durationMs)方法,指定 tone 音类型和 tone 音播放时长来创建 tone 音资源。
- 使用 SoundPlayer 的实例化对象,通过 play、pause、release 方法完成 tone 音播放,tone 音暂停和 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();
}
系统音的播放
- 通过 SoundPlayer(String packageName) 构造方法获取 SoundPlaye r类的实例化对象。
- 使用 SoundPlayer 的实例化对象,通过 playSound(SoundType type) 或 playSound(SoundType type, float volume) 方法指定系统音类型和音量,并进行系统音播放。
下面的样例展示系统音的播放:
public void demo() {
// 步骤1:实例化对象
SoundPlayer soundPlayer = new SoundPlayer("packageName");
// 步骤2:播放键盘敲击音,音量为1.0
soundPlayer.playSound(SoundType.KEY_CLICK, 1.0f);
}