阅读(2743) (12)

鸿蒙OS 短音播放开发指导

2020-09-17 09:22:51 更新

场景介绍

短音播放主要负责管理音频资源的加载与播放、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) 指定音量播放系统音。

音频资源的加载与播放

  1. 通过 SoundPlayer(int taskType)构造方法获取 SoundPlayer 类的实例化对象,其中入参 taskType 的取值范围和含义参考枚举类 AudioManager.AudioStreamType 的定义。

  1. 调用 createSound(String path) 方法从指定路径加载音频资源,并生成短音 ID,后续可使用通过短音 ID 进行短音资源的播放和删除等操作。

  1. (可选)提供单独对音量,循环次数,播放速度和优先级进行的设置的方法,支持在短音播放过程中进行实时调整。

  1. 短音播放提供两种方法,一种是包含播放参数设置的 play(int soundID, SoundPlayerParameters parameters) 方法,用户可以在 SoundPlayerParameters 数据结构中定义音量,循环次数,播放速度和优先级,另一种是使用默认播放参数的 play(int soundID) 方法。短音播放成功后返回任务 ID,供后续对任务的管理。

  1. 通过任务 ID,可以对短音播放任务进行暂停,恢复和停止。

  1. 短音资源使用完毕需要调用 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 音的生成与播放

  1. 通过 SoundPlayer() 构造方法获取 SoundPlayer 类的实例化对象。

  1. 使用 SoundPlayer 的实例化对象,通过 createSound(ToneDescriptor.ToneType type, int durationMs)方法,指定 tone 音类型和 tone 音播放时长来创建 tone 音资源。

  1. 使用 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();
   }

系统音的播放

  1. 通过 SoundPlayer(String packageName) 构造方法获取 SoundPlaye r类的实例化对象。

  1. 使用 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);
   }