androidstudio ffmpeg 音频转换

news2024/11/28 14:16:32

java-ffmpeg-音频转换

  • 需求描述
  • 功能流程
  • 所需条件
  • 步骤
    • 步骤1
    • 步骤2
    • 步骤3
      • 一些我使用中遇到的异常

需求描述

项目中的语音唤醒后的语音识别人声检测一直是一个很令我头痛的问题,之前因为对各种类型的工具包使用不熟练,以及时间问题,一直没有根治这个人声检测体验不好的问题,之前的解决方案是从帖子上别的大佬那里扒下来的有关vad的代码,拿来用的,其中有两个问题,一个就是人声检测十分敏感,基本有点杂音,背景音都会认为是人声;第二就是关于在什么时候进行音频录制的停止的问题,这个问题我是通过添加一个计时器,超过多少秒vad一直没有检测到声音之后就默认用户是停止接话的状态.因为是自己写的,时间也是凭感觉设置的,使用起来一直处于鸡肋的状态,再加上vad识别的不精准,第二个问题就很容易放大,导致体验变得更差
最近一直在研究某产品关于语音识别技术的文档和代码,发现他们的人声检测以及停止录制的功能十分成熟,于是我决定使用他们的sdk,跳过收费(只要不填写key那些就行),因为如果写上产品的真名,他们后面可能就会限制这个功能,所以这里就不说了
以上,我的解决思路是使用产品已经成熟的语音识别里的vad组件,帮我完成人声检测的功能,然后我根据人声检测之后保存的音频进行处理,即可获取我需要的指定音频格式了

功能流程

语音唤醒–>唤醒成功–>语音识别–>语音识别自动结束–>音频转换–>获取音频路径–>供其他方法调用

所需条件

  1. 某产品的语音识别 AndroidSDK(需要魔改)
  2. 安卓版的ffmpeg(根据需求查看是否有你需要的编码器)
  3. 可能是非必要条件-不同安卓版本之间有关读写内存的权限问题

步骤

步骤1

新建androidstudio项目,把语音识别的AndroidSDK移植到新建的项目中,通过demo或自己在app中创建测试单元,检查语音唤醒以及语音识别是否能够正常使用
语音唤醒功能需要确保创建应用的时候的包名和你新建的项目的包名一致(老生常谈的问题了…)
语音识别新用户会有一定额度的免费调用次数,老用户的话也没事,只要测几次就行了,因为我们需要的是sdk中附带的vad人声检测功能

步骤2

在sdk中有关语音识别的部分中开启vad检测,赶时间可以直接问对应产品的客服或者查看文档
你需要知道

  1. vad检测打开和关闭的地方
  2. 语音识别回调的地方
    一般vad人声检测结束后会走语音识别结果的回调方法
    我的音频转换的功能就是在回调中执行的

步骤3

测试功能没有问题之后需要在项目中引入安卓版的ffmpeg
这里我因为需要使用mp3转amr的功能,而有的ffmpeg没有自带有关amr的编码器,需要自己手动添加安装,时间和技术关系我用了下面的这个ffmpeg,亲测是可用的

https://github.com/tanersener/mobile-ffmpeg

文档里有说明如何引入
在这里插入图片描述
关于引入安卓版的ffmpeg后如何测试的问题,可以在网上查找关于ffmpeg指令的教程
tips: 如果你复制的指令执行后报错,可以试试调换里面参数的位置 比如-i后面尽量跟着原文件路径 转换后的新文件路径

一些我使用中遇到的异常

Option sample_rate not found
这个异常主要就是参数设置的问题,建议多找一些ffmpeg指令多试几次
amr_nb not found
这个就是你当前使用的ffmpeg它不支持amr格式的转换
Output file #0 does not contain any stream
这个异常也遇到过,但是忘了怎么解决的,这个遇到的不太多
我使用的指令有两个
一个是pcm转MP3

-y -f s16be -ac 1 -ar 16.0k -acodec pcm_s16le -i 原文件路径.pcm 新文件路径.mp3

需要注意: 开头不能有空格;每个参数之间尽量保证只有一个空格;-ar后面跟着的参数不能乱填,采样率是有标准和要求的,自己写会报错

一个是MP3转amr

-i 原文件路径.mp3 -ar 8000 -ac 1 新文件路径.amr

基本就是这几步了
因为我的项目运行到真机上怎么都打印不出日志,所以遇到的一些问题都只能是一知半解的解决的
需要注意一下,有关文件写入和读取的问题 安卓不同版本直接对文件读写权限是不一样的, 越高版本限制的越严格,基本都只能在android/data/自己的包名下进行文件读写

剩下的内容就是把这个功能作为一个aar进行打包给其他的地方进行调用了
基本上已经完成了功能…

感谢以下帖子

https://blog.csdn.net/bang152101/article/details/106147264/
https://github.com/dadiyang/jave/issues/24
https://blog.csdn.net/shulianghan/article/details/121268792
https://coding.imooc.com/learn/questiondetail/246831.html
https://blog.csdn.net/xiaokangss/article/details/125539755

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/620337.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不同品牌或型号的单片机

以下是一些常见的单片机品牌和型号: 微控制器(Microchip):PIC系列(如PIC16F877A、PIC18F4550) 瑞萨电子(Renesas):RX系列(如RX231、RX65N)需要资…

Termius 最好用的SSH 连接工具

Termius 最好用的SSH 连接工具 一、环境准备二、配置2.1 terminus 安装2.2 删除自动更新2.3 修改用户信息 三、使用四、页面展示 该工具 mac os 可直接使用 本文只展示 windows 使用步骤,本教程使用的 termius 版本为 7.59.6 一、环境准备 termius 下载 官网下载地址…

ubuntu上安装docker报错

执行docker命令的时候报错如下: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 为了解决这个问题,看了一些帖子有的说重启docker.service服务或者看该服务是否已经正常启动,结果网上…

超实用!新手项目经理掏心窝总结的经验

像项目这样复杂的环境中,往往会出现错误判断、沟通不畅、管理不善以及最常见的错误。因此,项目管理需要项目经理有广泛的经验、洞察力和技能,无论是规划、组织还是有效领导团队,以在规定的时间和预算内实现项目目标。在这种情况下…

基于BAT指令定时备份Oracle并发送邮件

前言 在企业级应用程序中,数据是非常重要的资源。因此,我们需要定期备份数据以确保其安全性和完整性。在Oracle数据库中,我们可以使用多种方法来备份数据,其中一种方法是使用BAT脚本来进行自动化备份。 在本文中,我们…

【AI实时变声器,声音甜甜的小姐姐背后竟是抠脚大汉】

前言 这是一款基于AI算法的实时变声器,如果你不懂AI也没事,直接使用我提供的一键安装包 链接:https://pan.baidu.com/s/1f3X6JdBVOgeTNPf0B3CRKg 提取码:k5v2 变声器安装使用 有两款变声器,都是基于RVC做的&#xf…

ctfshow——web入门 SSRF

web351web352web353web354web355web356web357web358web359web360 web351 通过hackbar post提交 urlhttp://127.0.0.1/flag.php 获得flag web352 将127.0.0.1和localhost给过滤了,但并不影响post提交 post urlhttp://127.0.0.1/flag.php web353 过滤了localhost和1…

python基础学习1

pyhton数据分析的优势: ①语法简单精炼 ②有很强大的库 ③功能强大 ④适用于构建生产系统 ⑤胶水语言 python数据分析常用的类库: ①IPython------科学计算标准工具集的组成部分 ②NumPy------python科学计算的基础包 ③SciPy--------解…

【手撕Spring源码】深度理解SpringBoot

文章目录 Tomcat内嵌容器Tomcat 基本结构创建Tomcat内嵌容器内嵌Tomcat集成Spring 容器 Boot 自动配置什么是自动配置类自动配置类原理Aop自动配置DataSource自动配置MyBatis自动配置事务自动配置MVC自动配置条件装配 附:注解小总EnableConfigurationPropertiesCond…

RWKV配上ChatGPTBox让我们在浏览器中感受AI带来的魅力

这次我们来讲讲RWKV搭配ChatGPTBox结合使用带来的功能体验,这两个项目都是同一个大神创建的,完全可以无缝搭配进行使用。 以下是我之前在本地部署了AI模型RWKV的教程,如果还没有本地部署过AI的童鞋可以查看我之前发布的教程,在自…

在线聊天项目

人事管理项目-在线聊天 后端接口实现前端实现 在线聊天是一个为了方便HR进行快速沟通提高工作效率而开发的功能,考虑到一个公司中的HR并不多,并发量不大,因此这里直接使用最基本的WebSocket来完成该功能。 后端接口实现 要使用WebSocket&…

【NLP】有限自动机的KMP算法

目录 一、说明 二、无策略直接匹配法 2.1 简单粗暴的无脑匹配: 2.2 跳过外循环的思路 2.3 跳过内循环的思路 2.4 KMP算法时间分析 三、KMP有限状态机 四、结论 一、说明 KMP算法问题:给定一个(短)模式和一个(长&#xff…

PCB材料选择与性能比较

PCB板被广泛应用于电子行业,作为电子设备的重要组成部分之一,负责连接各种电子元件。PCB板的性能直接影响着电子设备的质量和稳定性。而PCB板的材料选择则是影响PCB板性能的关键因素之一。本文将对常见PCB材料进行比较分析,以便于选择适合的材…

西电网课UMOOCs《英美概况》1-15单元课后答案

声明:本文CSDN作者原创投稿文章,未经许可禁止任何形式的转载,原文链接 如果图片挂了,可以移步至我的博客西电网课UMOOCs《英美概况》1-15单元课后答案 - 小木槌 文章目录 Quiz for Unit 1Quiz for Unit 2Quiz for Unit 3Quiz for…

C/C++基础补充

1. NULL和nullptr 有如下代码&#xff1a; void func(int a) {cout << "func(int)" << endl; }void func(int* p) {cout << "func(int*)" << endl; }void test() {func(0); // func(int);func(NULL); // func(int);fun…

带你探索400G光模块测试

随着移动互联网、云计算、大数据等技术快速发展&#xff0c;数据中心及云计算资源需求的爆发式地增长&#xff0c;核心网传输带宽需求大幅度的提升&#xff0c;同时也带动了超大规模云数据中心的发展&#xff0c;对数据中心内部和之间的互联的光模块带宽需求呈快速增长&#xf…

ChatGPT 使用 拓展资料:吴恩达大咖 Building Systems with the ChatGPT API 思维链

ChatGPT 使用 拓展资料:吴恩达大咖 Building Systems with the ChatGPT API 思维链 在本节中,我们将重点讨论要处理输出的任务,这些任务通常通过一系列步骤来获取输入并生成有用的输出。有时,在回答特定问题之前,模型详细推理问题是很重要的。如果你参加了我们之前为开发人…

项目管理软件大对比:2023年15款最佳项目管理工具

简单的项目只需要一个电子表格清单可能就管理好了&#xff0c;而复杂的项目则需要适当的规划、任务分配、设定截止日期&#xff0c;以确保每个人都遵守它们、大家进行紧密的协作&#xff0c;并追踪所花费的时间。 让项目量化、可视化&#xff0c;资源合理分配、更容易的协作和…

x265的DCT

文章目录 DCT相关背景知识DCT变换系数矩阵32x32变换矩阵系数其他尺寸变换矩阵系数 变换计算过程流程图 代码实现数据残差变换系数对应残差 我的简单实现实现细节实现代码 x265对应代码实现openHEVC代码实现 DCT相关背景知识 DCT变换系数矩阵 标准提供了32x32的系数矩阵&#…

Leetcode | 39 组合总和

Leetcode | 39 组合总和 题目 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数…