HarmonyOS学习路之开发篇—多媒体开发(音频开发 二(1)

这篇具有很好参考价值的文章主要介绍了HarmonyOS学习路之开发篇—多媒体开发(音频开发 二(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接口说明
接口名 描述
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) 获取一个即时的捕获时间戳。
开发步骤
  1. 构造音频流参数的数据结构AudioStreamInfo,推荐使用AudioStreamInfo.Builder类来构造,模板如下,模板中设置的均为AudioStreamInfo.Builder类的默认值,根据音频流的具体规格来设置具体参数。

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();

复制

  1. (可选)通过采集的采样率、声道数和数据格式,调用getMinBufferSize方法获取采集任务所需的最小buffer,参照该buffer值设置步骤3中AudioCapturerInfo的bufferSizeInBytes。

  2. 使用步骤1创建的音频流构建音频采集的参数结构AudioCapturerInfo,推荐使用AudioCapturerInfo.Builder类来构造,根据音频采集的具体规格来设置具体参数。以真实的录制pcm流为例:

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();

复制

  1. (可选)设置采集设备,如麦克风、耳机等。通过AudioManager.getDevices(AudioDeviceDescriptor.DeviceFlag.INPUT_DEVICES_FLAG)获取到设备支持的输入设备,然后依照AudioDeviceDescriptor.DeviceType选择要选用的输入设备类型。

  2. 通过构造方法获取AudioCapturer类的实例化对象(构造AudioCapturer类的实例化对象前需先去配置录音权限–ohos.permission.MICROPHONE),其中步骤3的参数为必选参数,通过步骤4获取的指定录音设备为可选参数。

录音权限的申请,需要开发者在config.json文件中的“reqPermissions”字段中声明所需要的权限。

“module”: {
“reqPermissions”: [
{
“name”: “ohos.permission.MICROPHONE”
},
{

}
]
}

复制

增加Ability接口的访问权限控制:

public class MainAbility extends Ability {
@Override
public void onStart(Intent intent) {

requestPermissions(); //在onStart方法中调用申请的权限
}
private void requestPermissions() {
String[] permissions = {
SystemPermission.ohos.permission.MICROPHONE, …,…
};
requestPermissionsFromUser(Arrays.stream(permissions)
.filter(permission -> verifySelfPermission(permission) != IBundleManager.PERMISSION_GRANTED).toArray(String[]::new), 0);
}
}

复制

实例化AudioCapturer对象:

AudioCapturer audioCapturer = new AudioCapturer(audioCapturerInfo);

复制

  1. (可选)设置采集音效,如降噪、回声消除等。使用addSoundEffect(UUID type, String packageName)进行音效设置,其中UUID参考类SoundEffect中提供的静态变量。

  2. (可选)构造音频采集回调,首先继承抽象类AudioCapturerCallback,并实现抽象方法onCapturerConfigChanged(List configs),然后调用AudioManager类的registerAudioCapturerCallback(AudioCapturerCallback cb)方法进行音频采集回调注册。代码示例如下:

private AudioManager audioManager = new AudioManager();

public void main() {
AudioCapturerCallback cb = new AudioCapturerCallback() {
@Override
public void onCapturerConfigChanged(List configs) {
configs.forEach(config -> doSomething(config));
}
};
audioManager.registerAudioCapturerCallback(cb);
}

private void doSomething(AudioCapturerConfig config) {

}

复制

  1. 调用 AudioCapturer实例化对象的start()方法启动采集任务。

  2. 采集的音频数据读取为byte流,循环调用AudioCapturer的read方法进行数据读取。

  3. 调用AudioCapturer实例化对象的stop()方法停止采集。

  4. 采集任务结束后,调用AudioCapturer实例化对象的release()释放资源。

二、音量管理开发
场景介绍

音量管理的主要工作是音量调节,输入/输出设备管理,注册音频中断、音频采集中断的回调等。

接口说明

当前仅系统应用支持设置静音或响铃等模式。

接口名 描述
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。
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) 去注册音频播放参数变更回调。
开发步骤

音量管理提供的都是独立的功能,一般作为音频播放和音频采集的功能补充来使用。开发者根据具体使用场景选择方法即可。

音频中断状态检测和音频采集中断状态检测的使用样例,请参考音频播放和音频采集的开发步骤。

三、短音播放开发
场景介绍

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

接口说明

短音播放开放能力分为音频资源、tone音和系统音三部分,均定义在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) 设置短音播放任务的播放速度。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
HarmonyOS学习路之开发篇—多媒体开发(音频开发 二(1),2024年程序员学习,harmonyos,学习,音视频
HarmonyOS学习路之开发篇—多媒体开发(音频开发 二(1),2024年程序员学习,harmonyos,学习,音视频
HarmonyOS学习路之开发篇—多媒体开发(音频开发 二(1),2024年程序员学习,harmonyos,学习,音视频

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
HarmonyOS学习路之开发篇—多媒体开发(音频开发 二(1),2024年程序员学习,harmonyos,学习,音视频

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!文章来源地址https://www.toymoban.com/news/detail-855830.html

5%以上HarmonyOS鸿蒙开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
[外链图片转存中…(img-aUbs4k59-1712669789999)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

到了这里,关于HarmonyOS学习路之开发篇—多媒体开发(音频开发 二(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 鸿蒙HarmonyOS开发实战—多媒体开发(音频开发 一)

    HarmonyOS音频模块支持音频业务的开发,提供音频相关的功能,主要包括音频播放、音频采集、音量管理和短音播放等。 基本概念 采样 采样是指将连续时域上的模拟信号按照一定的时间间隔采样,获取到离散时域上离散信号的过程。 采样率 采样率为每秒从连续信号中提取并

    2024年01月24日
    浏览(51)
  • Android多媒体功能开发(11)——使用AudioRecord类录制音频

    AudioRecord类优点是能录制到缓冲区,能够实现边录边播(AudioRecord + AudioTrack)以及对音频的实时处理(如QQ电话)。缺点是输出是PCM格式的原始采集数据,如果直接保存成音频文件,不能够被播放器播放,所以必须用代码实现数据编码以及压缩。 使用AudioRecord录音的基本步骤是

    2023年04月09日
    浏览(45)
  • 软考:中级软件设计师:多媒体基础,音频,图像,颜色,多媒体技术的种类,图像音频视频的容量计算,常见的多媒体标准

    提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1)自己的科研经历, 科研内容 ,学习的相关领域知识,要熟悉熟透了 (2)自己的实习经历,做了 什

    2024年02月09日
    浏览(57)
  • 多媒体音频焦点浅析

    多个音源可以同时向同一个输出流进行播放音频,如果没有音频焦点管控,就会出现多个音源同时播放的现象,给用户带来不便;而Android为了避免多个音源同时播放,就引入了音频焦点的概念,所有音频应用都统一按照音频焦点的规定执行,就可以避免该现象发生。 当应用

    2024年02月13日
    浏览(47)
  • 鸿蒙实战多媒体运用:【音频组件】

    音频组件用于实现音频相关的功能,包括音频播放,录制,音量管理和设备管理。 图 1  音频组件架构图 基本概念 采样 采样是指将连续时域上的模拟信号按照一定的时间间隔采样,获取到离散时域上离散信号的过程。 采样率 采样率为每秒从连续信号中提取并组成离散信号

    2024年03月10日
    浏览(84)
  • 零基础入门多媒体音频(6)-alsa(2)

    PCM接口 ALSA的PCM中间层非常有用,每个驱动只需要实现底层的功能来访问硬件。要使用PCM层,你需要先引用 sound/pcm.h头文件。此外,如果你要使用和hw_param相关的函数,sound/pcm_params.h也是必须的。 每个声卡设备最多拥有4个PCM实例。一个PCM实例对应一个PCM设备文件。实例数量的

    2024年04月14日
    浏览(56)
  • Qt 多媒体音频模拟按钮发音(音视频启动)

    ## 项目演示 平台 :windows或者ubuntu  要求 :平台需要支持音频播放功能 文件格式 :.wav 可以使用剪映生成,音频部分,我这里是简短的音乐 # Qt 多媒体简介 Qt QSound是Qt框架中的一个类,用于播放音频文件。它可以在Qt应用程序中实现简单的音频播放功能,包括播放、暂停和停

    2024年02月03日
    浏览(53)
  • 【python】《多媒体技术与应用》实验报告「数字音频处理」

     《多媒体技术与应用》 实验报告 实验名称 数字视频处理 实验时间 2022/4/25 姓名 班级 计非201 学号 成绩 一.  实验目的 1. 掌握数字音频的读取与打开; 2. 掌握数字音频信号的频谱分析; 3. 验证 PCM 编码算法。 二.实验原理 声音是由物体振动而产生的,声波的三要素是频率

    2023年04月16日
    浏览(57)
  • (八)穿越多媒体奇境:探索Streamlit的图像、音频与视频魔法

    欢迎各位读者来到“最全Streamlit教程”专栏系列!如果您正在寻找一种简单而强大的方式来创建交互式数据应用程序,那么Streamlit无疑是您的最佳选择。作为该领域的热门框架,Streamlit让数据科学家、开发者和爱好者能够以前所未有的速度构建出引人入胜的数据可视化工具。

    2024年02月13日
    浏览(47)
  • [前端笔记——多媒体与嵌入] 6.HTML 中的图片+视频+音频内容

    可以用 img 元素来把图片放到网页上。它是一个空元素(它不需要包含文本内容或闭合标签),最少只需要一个 src (一般读作其全称 * *source) * *来使其生效。src 属性包含了指向我们想要引入的图片的路径,可以是相对路径或绝对 URL,就像 a 元素的 href 属性一样。 属性是

    2023年04月25日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包