赞
踩
权限名 | 说明 |
---|---|
ohos.permission.MICROPHONE | 允许应用使用麦克风进行录音 |
ohos.permission.READ_MEDIA | 允许应用读取用户外部存储中的媒体文件信息 |
ohos.permission.WRITE_MEDIA | 允许应用读写用户外部存储中的媒体文件信息 |
接口名 | 描述 |
---|---|
AudioRenderer(AudioRendererInfo audioRendererInfo, PlayMode pm) | 构造函数,设置播放相关音频参数和播放模式,使用默认播放设备 |
AudioRenderer(AudioRendererInfo audioRendererInfo, PlayMode pm, AudioDeviceDescriptor outputDevice) | 构造函数,设置播放相关音频参数、播放模式和播放设备 |
start() | 播放音频流 |
write(byte[] data, int offset, int size) | 将音频数据以byte流写入音频接收器以进行播放 |
write(short[] data, int offset, int size) | 将音频数据以short流写入音频接收器以进行播放 |
write(float[] data, int offset, int size) | 将音频数据以float流写入音频接收器以进行播放 |
write(java.nio.ByteBuffer data, int size) | 将音频数据以ByteBuffer流写入音频接收器以进行播放 |
pause() | 暂停播放音频流 |
stop() | 停止播放音频流 |
release() | 释放播放资源 |
getCurrentDevice() | 获取当前工作的音频播放设备 |
setPlaybackSpeed(float speed) | 设置播放速度 |
setPlaybackSpeed(AudioRenderer.SpeedPara speedPara) | 设置播放速度与音调 |
setVolume(ChannelVolume channelVolume) | 设置指定声道上的输出音量 |
setVolume(float vol) | 设置所有声道上的输出音量 |
getMinBufferSize(int sampleRate, AudioStreamInfo.EncodingFormat format, AudioStreamInfo.ChannelMask channelMask) | 获取Stream播放模式所需的buffer大小 |
getState() | 获取音频播放的状态 |
getRendererSessionId() | 获取音频播放的session ID |
getSampleRate() | 获取采样率 |
getPosition() | 获取音频播放的帧数位置 |
setPosition(int position) | 设置起始播放帧位置 |
getRendererInfo() | 获取音频渲染信息 |
duckVolume() | 降低音量并将音频与另一个拥有音频焦点的应用程序混合 |
unduckVolume() | 恢复音量 |
getPlaybackSpeed() | 获取播放速度、音调参数 |
setSpeed(SpeedPara speedPara) | 设置播放速度、音调参数 |
getAudioTime() | 获取播放时间戳信息 |
flush() | 刷新当前的播放流数据队列 |
getMaxVolume() | 获取播放流可设置的最大音量 |
getMinVolume() | 获取播放流可设置的最小音量 |
getStreamType() | 获取播放流的音频流类型 |
AudioStreamInfo audioStreamInfo = new AudioStreamInfo.Builder()
.sampleRate(AudioStreamInfo.SAMPLE_RATE_UNSPECIFIED)
.audioStreamFlag(AudioStreamInfo.AudioStreamFlag.AUDIO_STREAM_FLAG_NONE)
.encodingFormat(AudioStreamInfo.EncodingFormat.ENCODING_INVALID)
.channelMask(AudioStreamInfo.ChannelMask.CHANNEL_INVALID)
.streamUsage(AudioStreamInfo.StreamUsage.STREAM_USAGE_UNKNOWN)
.build();
AudioStreamInfo audioStreamInfo = new AudioStreamInfo.Builder().sampleRate(44100) // 44.1kHz
.audioStreamFlag(AudioStreamInfo.AudioStreamFlag.AUDIO_STREAM_FLAG_MAY_DUCK) // 混音
.encodingFormat(AudioStreamInfo.EncodingFormat.ENCODING_PCM_16BIT) // 16-bit PCM
.channelMask(AudioStreamInfo.ChannelMask.CHANNEL_OUT_STEREO) // 双声道输出
.streamUsage(AudioStreamInfo.StreamUsage.STREAM_USAGE_MEDIA) // 媒体类音频
.build();
AudioRendererInfo audioRendererInfo = new AudioRendererInfo.Builder().audioStreamInfo(audioStreamInfo)
.audioStreamOutputFlag(AudioRendererInfo.AudioStreamOutputFlag.AUDIO_STREAM_OUTPUT_FLAG_NONE)
.bufferSizeInBytes(0)
.isOffload(false)
.sessionID(AudioRendererInfo.SESSION_ID_UNSPECIFIED)
.build();
AudioRendererInfo audioRendererInfo = new AudioRendererInfo.Builder().audioStreamInfo(audioStreamInfo)
.audioStreamOutputFlag(AudioRendererInfo.AudioStreamOutputFlag.AUDIO_STREAM_OUTPUT_FLAG_DIRECT_PCM) // pcm格式的输出流
.bufferSizeInBytes(100)
.isOffload(false) // false表示分段传输buffer并播放,true表示整个音频流一次性传输到HAL层播放
.build();
AudioRenderer renderer = new AudioRenderer(audioRendererInfo, AudioRenderer.PlayMode.MODE_STREAM);
AudioInterrupt audioInterrupt = new AudioInterrupt();
AudioManager audioManager = new AudioManager();
audioInterrupt.setStreamInfo(streamInfo);
audioInterrupt.setInterruptListener(new AudioInterrupt.InterruptListener() {
@Override
public void onInterrupt(int type, int hint) {
if (type == AudioInterrupt.INTERRUPT_TYPE_BEGIN
&& hint == AudioInterrupt.INTERRUPT_HINT_PAUSE) {
renderer.pause();
} else if (type == AudioInterrupt.INTERRUPT_TYPE_BEGIN
&& hint == AudioInterrupt.INTERRUPT_HINT_NONE) {
} else if (type == AudioInterrupt.INTERRUPT_TYPE_END && (
hint == AudioInterrupt.INTERRUPT_HINT_NONE
|| hint == AudioInterrupt.INTERRUPT_HINT_RESUME)) {
renderer.start();
} else {
HiLog.warn(TAG, "unexpected type or hint");
}
}
});
audioManager.activateAudioInterrupt(audioInterrupt);
接口名 | 描述 |
---|---|
AudioCapturer(AudioCapturerInfo audioCapturerInfo) throws IllegalArgumentException | 构造函数,设置录音相关音频参数,使用默认录音设备 |
AudioCapturer(AudioCapturerInfo audioCapturerInfo, AudioDeviceDescriptor devInfo) throws IllegalArgumentException | 构造函数,设置录音相关音频参数并指定录音设备 |
getMinBufferSize(int sampleRate, int channelCount, int audioFormat) | 获取指定参数条件下所需的最小缓冲区大小 |
addSoundEffect(UUID type, String packageName) | 增加录音的音频音效 |
start() | 开始录音 |
read(byte[] data, int offset, int size) | 读取音频数据 |
read(byte[] data, int offset, int size, boolean isBlocking) | 读取音频数据并写入传入的byte数组中 |
read(float[] data, int offsetInFloats, int sizeInFloats) | 阻塞式读取音频数据并写入传入的float数组中 |
read(float[] data, int offsetInFloats, int sizeInFloats, boolean isBlocking) | 读取音频数据并写入传入的float数组中 |
read(short[] data, int offsetInShorts, int sizeInShorts) | 阻塞式读取音频数据并写入传入的short数组中 |
read(short[] data, int offsetInShorts, int sizeInShorts, boolean isBlocking) | 读取音频数据并写入传入的short数组中 |
read(java.nio.ByteBuffer buffer, int sizeInBytes) | 阻塞式读取音频数据并写入传入的ByteBuffer对象中 |
read(java.nio.ByteBuffer buffer, int sizeInBytes, boolean isBlocking) | 读取音频数据并写入传入的ByteBuffer对象中 |
stop() | 停止录音 |
release() | 释放录音资源 |
getSelectedDevice() | 获取输入设备信息 |
getCurrentDevice() | 获取当前正在录制音频的设备信息 |
getCapturerSessionId() | 获取录音的session ID |
getSoundEffects() | 获取已经激活的音频音效列表 |
getState() | 获取音频采集状态 |
getSampleRate() | 获取采样率 |
getAudioInputSource() | 获取录音的输入设备信息 |
getBufferFrameCount() | 获取以帧为单位的缓冲区大小 |
getChannelCount() | 获取音频采集通道数 |
getEncodingFormat() | 获取音频采集的音频编码格式 |
getAudioTime(Timestamp timestamp, Timestamp.Timebase timebase) | 获取一个即时的捕获时间戳 |
AudioStreamInfo audioStreamInfo = new AudioStreamInfo.Builder()
.sampleRate(AudioStreamInfo.SAMPLE_RATE_UNSPECIFIED)
.audioStreamFlag(AudioStreamInfo.AudioStreamFlag.AUDIO_STREAM_FLAG_NONE)
.encodingFormat(AudioStreamInfo.EncodingFormat.ENCODING_INVALID)
.channelMask(AudioStreamInfo.ChannelMask.CHANNEL_INVALID)
.streamUsage(AudioStreamInfo.StreamUsage.STREAM_USAGE_UNKNOWN)
.build();
AudioStreamInfo audioStreamInfo = new AudioStreamInfo.Builder()
.encodingFormat(AudioStreamInfo.EncodingFormat.ENCODING_PCM_16BIT) // 16-bit PCM
.channelMask(AudioStreamInfo.ChannelMask.CHANNEL_IN_STEREO) // 双声道输入
.sampleRate(44100) // 44.1kHz
.build();
AudioCapturerInfo audioCapturerInfo = new AudioCapturerInfo.Builder().audioStreamInfo(audioStreamInfo)
.build();
private AudioManager audioManager = new AudioManager();
public void main() {
AudioCapturerCallback cb = new AudioCapturerCallback() {
@Override
public void onCapturerConfigChanged(List<AudioCapturerConfig> configs) {
configs.forEach(config -> doSomething(config));
}
};
audioManager.registerAudioCapturerCallback(cb);
}
private void doSomething(AudioCapturerConfig config) {
...
}
接口名 | 描述 |
---|---|
AudioManager() | 构造函数 |
AudioManager(Context context) | 构造函数,由使用者指定应用上下文Context |
AudioManager(String packageName) | 构造函数,由使用者指定包信息 |
activateAudioInterrupt(AudioInterrupt interrupt) | 激活音频中断状态检测 |
deactivateAudioInterrupt(AudioInterrupt interrupt) | 去激活音频中断状态检测 |
getAudioParameter(String key) | 获取音频硬件中指定参数keys所对应的参数值 |
getDevices(DeviceFlag flag) | 获取设备信息 |
getMaxVolume(AudioVolumeType volumeType) | 获取指定音频流音量最大档位 |
getMinVolume(AudioVolumeType volumeType) | 获取指定音频流音量最小档位 |
getRingerMode() | 获取铃声模式 |
getVersion() | 获取音频套件版本 |
getVolume(AudioVolumeType volumeType) | 获取指定音频流的音量档位 |
isDeviceActive(int deviceType) | 判断设备的开关状态 |
isMute(AudioVolumeType volumeType) | 特定的流是否处于静音状态 |
mute(AudioVolumeType volumeType) | 将特定流设置为静音状态 |
setAudioParameter(String key, String value) | 为音频硬件设置可变数量的参数值 |
setDeviceActive(int deviceType, boolean state) | 设置设备的开关状态 |
setRingerMode(AudioRingMode mode) | 设置铃声模式 |
setVolume(AudioVolumeType volumeType, int volume) | 设置特定流的音量档位 |
unmute(AudioVolumeType volumeType) | 将特定流设置为非静音状态 |
setMasterMute(boolean isMute) | 将主音频输出设备设置为静音或取消静音状态 |
setMicrophoneMute(boolean isMute) | 将麦克风设置为静音或取消静音状态 |
isMicrophoneMute() | 判断麦克风是否处于静音状态 |
getActiveCapturerConfigs() | 获取设备当前激活的音频采集任务的配置信息 |
registerAudioCapturerCallback(AudioCapturerCallback cb) | 注册音频采集参数变更回调 |
unregisterAudioCapturerCallback(AudioCapturerCallback cb) | 去注册音频采集参数变更回调 |
getRingerUri(Context context, RingToneType type) | 获取指定铃声类型的Uri |
setRingerUri(Context context, RingToneType type, Uri uri) | 设置指定铃声类型的Uri |
getCommunicationState() | 获取当前的通话模式 |
setCommunicationState(AudioManager.CommunicationState communicationState) | 设置当前的通话模式 |
changeVolumeBy(AudioVolumeType volumeType, int index) | 将当前音量增加或减少一定量 |
connectBluetoothSco() | 连接到蓝牙SCO通道 |
disconnectBluetoothSco() | 断开与蓝牙SCO通道的连接 |
getActiveRendererConfigs() | 获取有关活动音频流信息,包括使用类型、内容类型和标志 |
getMasterOutputFrameCount() | 获取主输出设备缓冲区中的帧数 |
getMasterOutputSampleRate() | 获取主输出设备的采样率 |
isMasterMute() | 检查音频流是否全局静音 |
isStreamActive(AudioVolumeType volumeType) | 检查指定类型的音频流是否处于活动状态 |
makeSessionId() | 创建一个会话ID,AudioRendererInfo.Builder.sessionID(int)将使用该会话ID来设置音频播放参数,而AudioCapturerInfo.Builder.sessionID(int)将使用该会话ID来设置记录参数 |
registerAudioRendererCallback(AudioRendererCallback cb) | 注册音频播放参数变更回调 |
unregisterAudioRendererCallback(AudioRendererCallback cb) | 去注册音频播放参数变更回调 |
接口名 | 描述 |
---|---|
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() | 恢复虽有已暂停的播放任务 |
接口名 | 描述 |
---|---|
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音资源 |
接口名 | 描述 |
---|---|
SoundPlayer(String packageName) | 构造函数,仅用于系统音 |
playSound(SoundType type) | 播放系统音 |
playSound(SoundType type, float volume) | 指定音量播放系统音 |
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);
}
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();
}
public void demo() {
// 步骤1:实例化对象
SoundPlayer soundPlayer = new SoundPlayer("packageName");
// 步骤2:播放键盘敲击音,音量为1.0
soundPlayer.playSound(SoundPlayer.SoundType.KEY_CLICK, 1.0f);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。