Android MediaRecorder 相关
Android MediaRecorder 相关
本篇文章主要介绍下MediaRecorder类.
1:创建对象
MediaRecorder mediaRecorder=new MediaRecorder();
MediaRecorder可以直接通过无参构造直接创建对象.
2: 音频源
通过调用setAudioSource(int audio_source)来设置音频源,可以是麦克风.音频文件等.
具体的可以查看MediaRecorder.AudioSource类.
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
这里注意:
我们需要申请权限android.permission.RECORD_AUDIO
否则直接调用,错误如下:
2024-02-17 10:24:47.670 1396-5717/? E/ServiceUtilities: Request requires android.permission.RECORD_AUDIO
2024-02-17 10:24:47.672 19945-19945/com.test.media E/AndroidRuntime: FATAL EXCEPTION: mainProcess: com.test.media, PID: 19945java.lang.RuntimeException: setAudioSource failed.at android.media.MediaRecorder.setAudioSource(Native Method)at com.test.webtest.MainActivity.onClick(MainActivity.java:40)at android.view.View.performClick(View.java:7570)at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967)at android.view.View.performClickInternal(View.java:7525)at android.view.View.access$3900(View.java:836)at android.view.View$PerformClick.run(View.java:28680)at android.os.Handler.handleCallback(Handler.java:938)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:263)at android.app.ActivityThread.main(ActivityThread.java:8321)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)
3: 输出格式
调用setOutputFormat(int output_format)可以设置音频的输出格式, 可以是AMR,AAC等.
public final class OutputFormat {/* Do not change these values without updating their counterparts* in include/media/mediarecorder.h!*/private OutputFormat() {}public static final int DEFAULT = 0;/** 3GPP media file format*/public static final int THREE_GPP = 1;/** MPEG4 media file format*/public static final int MPEG_4 = 2;/** The following formats are audio only .aac or .amr formats *//*** AMR NB file format* @deprecated Deprecated in favor of MediaRecorder.OutputFormat.AMR_NB*/public static final int RAW_AMR = 3;/** AMR NB file format */public static final int AMR_NB = 3;/** AMR WB file format */public static final int AMR_WB = 4;/** @hide AAC ADIF file format */public static final int AAC_ADIF = 5;/** AAC ADTS file format */public static final int AAC_ADTS = 6;/** @hide Stream over a socket, limited to a single stream */public static final int OUTPUT_FORMAT_RTP_AVP = 7;/** H.264/AAC data encapsulated in MPEG2/TS */public static final int MPEG_2_TS = 8;/** VP8/VORBIS data in a WEBM container */public static final int WEBM = 9;};
测试代码设置为AMR, 设置如下:
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
这里需要注意:
- setOutputFormat需要在setAudioSource()/setVideoSource()后调用,否则会抛出IllegalStateException.
4:输出文件
mediaRecorder.setOutputFile(new File("sdcard/test.mp3"));
public void setOutputFile(File file)
{mPath = null;mFd = null;mFile = file;
}
public void setOutputFile(FileDescriptor fd) throws IllegalStateException{mPath = null;mFile = null;mFd = fd;
}
public void setOutputFile(String path) throws IllegalStateException
{mFd = null;mFile = null;mPath = path;
}
5: 音频编码器
调用setAudioEncoder(int audio_encoder)来设置音频编码器
audio_encoder可查看android.media.MediaRecorder.AudioEncoder,具体的参数如下:
public final class AudioEncoder {/* Do not change these values without updating their counterparts* in include/media/mediarecorder.h!*/private AudioEncoder() {}public static final int DEFAULT = 0;/** AMR (Narrowband) audio codec */public static final int AMR_NB = 1;/** AMR (Wideband) audio codec */public static final int AMR_WB = 2;/** AAC Low Complexity (AAC-LC) audio codec */public static final int AAC = 3;/** High Efficiency AAC (HE-AAC) audio codec */public static final int HE_AAC = 4;/** Enhanced Low Delay AAC (AAC-ELD) audio codec */public static final int AAC_ELD = 5;/** Ogg Vorbis audio codec */public static final int VORBIS = 6;
}
设置如下:
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
需要注意:
- setAudioEncoder需要在setOutputFormat()后调用.
- setAudioEncoder需要在prepare()前调用.
否则,会抛出异常IllegalStateException.
6:准备录制
try {mediaRecorder.prepare();
} catch (IOException e) {e.printStackTrace();
}
prepare()方法需要在setting sources,encoders,files,format, etc. ,之后调用,否则抛出IllegalStateException.
prepare()需要在start()方法之前调用,否则抛出IllegalStateException.
其余错误统一抛出IOException.
7:开始录制
mediaRecorder.start();
start()方法注意:
@throws IllegalStateException if it is called before prepare() or when the camera is already in use by another app.
8:暂停录制
mediaRecorder.pause();
9:结束录制
mediaRecorder.stop();
10:释放资源
mediaRecorder.release();
相关文章:
Android MediaRecorder 相关
Android MediaRecorder 相关 本篇文章主要介绍下MediaRecorder类. 1:创建对象 MediaRecorder mediaRecordernew MediaRecorder();MediaRecorder可以直接通过无参构造直接创建对象. 2: 音频源 通过调用setAudioSource(int audio_source)来设置音频源,可以是麦克风.音频文件…...
Spring中关于事务的一些方方面面
事务隔离级别: 先了解一些事务隔离级别有哪些: 未提交读(Read Uncommitted): 允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed): 只能读取到已经提交的数据。Oracle等多数数据库默…...
LiveQing视频点播流媒体RTMP推流服务功能-支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务
LiveQing视频点播流媒体RTMP推流服务功能支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务 1、配置开启HTTPS1.1、准备https证书1.1.1、选择Nginx类型证书下载 1.2、配置 开启 HTTPS1.2.1 web页面配置1.2.2 配置文件配置 2、验证HTTPS服务3、为什么要开启HTTPS3.1、安全性要求…...
LabVIEW串口通信的激光器模块智能控制
LabVIEW串口通信的激光器模块智能控制 介绍了通过于LabVIEW的VISA串口通信技术在激光器模块控制中的应用。通过研究VISA串口通信的方法和流程,实现了对激光器模块的有效控制,解决了数据发送格式的匹配问题,为激光器模块的智能控制提供了一种…...
全球最受欢迎的DAWFL Studio 21.2.3.4004 中文破解版强悍来袭
1997年是一个「古老」的年代,那时人们还在用「猫」上网,微信、QQ的江湖被ICQ统治,音乐编辑领域 Cool Edit 如日中天。这一年 ,FL Studio 的前身 FruityLoops 在比利时问世,26年来,FL已成长为全球最受欢迎的…...
【uni-app】常用组件和 API
常用组件 uni-app 为开发者提供了一系列基础组件,类似 HTML 里的基础标签元素,但 uni-app 的组件与 HTML 不同,而是与小程序相同,更适合手机端使用。 虽然不推荐使用 HTML 标签,但实际上如果开发者写了div等标签&…...
基于springboot+vue的安康旅游网站(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...
monaco脚本编辑器 在无界中使用 鼠标点击不到
背景A项目使用无界引入B项目 经排查,是B使用的的monaco脚本编辑器无法在A的无界框架中引入的问题。 经查询,需要修改monaco源码来使之能在无界中使用。 解决方案:https://github.com/Tencent/wujie/issues/205。 有三种解决方案: …...
react中修改state中的值无效?
// 初始化state state {personArr:[{name:张三,id:1},{name:李四,id:2},{name:王五,id:3}] }componentDidMount(){const newName 赵六const indexUpdate 1const newArr this.state.personArr.map((item,index)>{if(indexUpdate index){return {...item,name:newName}}e…...
在Node.js中如何实现用户身份验证和授权
当涉及到构建安全的应用程序时,用户身份验证和授权是至关重要的一环。在Node.js中,我们可以利用一些流行的库和技术来实现这些功能,确保我们的应用程序具有所需的安全性。本篇博客将介绍如何在Node.js中实现用户身份验证和授权。 用户身份验…...
QT day2 2.21
1.使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 代码: #include "mywidget.h" #include "ui_mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(pa…...
说说设备像素、css像素、设备独立像素、dpr、ppi 之间的区别
文章目录 一、背景二、介绍CSS像素设备像素设备独立像素dprppi 三、总结参考文献 一、背景 在css中我们通常使用px作为单位,在PC浏览器中css的1个像素都是对应着电脑屏幕的1个物理像素 这会造成一种错觉,我们会认为css中的像素就是设备的物理像素 但实…...
文生视频Sora
Sora:scalable diffusion models with transformers 文生视频模型 Sora:视频生成模型60s,视频中体现一定的物理逻辑 时空patch,是Sora创新的核心。 Sora 到底是不是物理引擎甚至世界模型?数据驱动的物理引擎 帆船在水里…...
汽车常识网:电脑主机如何算功率的计算方法?
今天汽车知识网就给大家讲解一下如何计算一台主机的功率。 它还会解释如何计算计算机主机所需的功率? ? (如何计算电脑主机所需的功率)进行说明。 如果它恰好解决了您现在面临的问题,请不要忘记关注本站。 让我们现在就…...
c语言常见操作符及操作符优先级
目录 概述1. 算术操作符:2. 关系操作符:3. 逻辑操作符:4. 位操作符: *常见操作符优先级* 概述 C语言中有多种操作符,用于执行不同的操作。下面是一些常见的C语言操作符以及示例代码: 1. 算术操作符&…...
IO进程线程:通信
1.定义互斥锁 #include<myhead.h>int num520;//临界资源//1.创建一个互斥锁变量 pthread_mutex_t mutex;//定义任务1函数 void *task1(void *arg) {printf("11111111111111\n");//3.获取锁资源pthread_mutex_lock(&mutex);num1314;sleep(3);pr…...
神经网络系列---常用梯度下降算法
文章目录 常用梯度下降算法随机梯度下降(Stochastic Gradient Descent,SGD):随机梯度下降数学公式:代码演示 批量梯度下降(Batch Gradient Descent)批量梯度下降数学公式:代码演示 小…...
Flink 的历史版本特性介绍(一)
如果你还不了解 Flink 是什么,可以查看我之前的介绍文章:Flink 介绍 如果你想跟着我一起学习 flink,欢迎查看订阅专栏:Flink 专栏 这篇文章列举了 Flink 每次发布的版本中的重要特性,从中可以看出 Flink 是如何一步一步发展到今天的。 Flink 的前身是 Stratosphere 项目…...
【尚硅谷】MybatisPlus 学习笔记(下)
目录 六、插件 6.1、分页插件 6.1.1、添加配置类 6.1.2、测试 6.2、xml自定义分页 6.2.1、UserMapper中定义接口方法 6.2.2、UserMapper.xml中编写SQL 6.2.3、测试 6.3、乐观锁 6.3.1、场景 6.3.2、乐观锁与悲观锁 6.3.3、模拟修改冲突 数据库中增加商品表 添加数…...
408数据结构算法模板
下面这份408数据结构算法模板耗时3天整理,希望对大家有用 408算法题概述 得分要点 会写结构定义(没有就自己写上)写清楚解题的算法思想描述清楚算法实现最后写出时间和空间复杂度 关于改卷 1、改卷老师不会上机试 2、老师改的是扫描卷 3、…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
