前言 本章主要讲述如何通过Android OpenSL 实现录制 PCM 音频数据。开发流程回顾可以看下笔者前面发布过的文章。...${log-lib} ) 2.同时添加静态库依赖的c++文件 add_library( # Sets the name of the library....SHARED native-lib.cpp ) OpenSL ES 录制 PCM 音频数据流程主要有如下: 1、 新建native-lib.cpp文件,...:PCM、2声道、44100HZ、16bit */ SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM, 2, SL_SAMPLINGRATE...pcm功能,文章最后会附送上demo链接,demo生成的pcm数据会保存在 /Android/data/com.pengjie0668.opensles.demo/cache/temp.pcm github
AudioFormat.h: 定义用于分配和读取音频文件中的音频格式元数据的接口。 AudioQueue.h: 定义播放和录制音频的接口。 AudioServices.h: 定义三个接口。...ExtendedAudioFile.h: 定义用于将音频数据从文件直接转化为线性PCM接口,反之亦然。 ---- 接下来我们一个个头文件包含的函数都能干神马,加油!...支持的转换: 1.PCM浮点数/整数/比特深度转换 2.PCM采样率转换 3.PCM交织和去交织 4.编码PCM压缩格式 5.PCM解码压缩格式 注意:一个audioconverter可以执行一个以上的...它提供了一个单一的阅读和写作的编码与未编码的文件统一接口。 以上几个头文件包含的函数的基本作用我们已经了解了. ---- 接下来,我们录制一段声音试试!...: 1.你要告诉系统,你要录制什么类型的音频文件 2.创建一个音频缓冲区填满时的回调函数 3.设置一个专门负责音频录制的队列 4.创建音频缓冲区,添加到队列中去 5.当音频缓冲区填充满时,把缓冲区的数据处理完后
在asr平台实现pcm格式录制的文件增加wav头,发现根据网上给的方法添加wav头的wav文件播放异常,播放没有声音!...bitrate转换不正确; int bit_rate = sample_rate * channels * bits;//(sample_rate * channels * bits)/8; 2、文件总大小填的不正确...; pcm数据大小+44 - 8 = PCM数据大小+36 int file_size = len + 44; //04~07 header[4] = (char) ((...sample_rate * channels * bits)/8; // int sample_bit = bits ; // int data_size = len; //pcm
图1-1 声音的录音和播放过程 数据结构 在ALSA架构下,pcm也被称为设备,所谓的逻辑设备。在linux系统中使用snd_pcm结构表示一个pcm设备。...linux系统中使用snd_pcm_str定义stream, 使用snd_pcm_substream定义substream。...会调用snd_pcm_stream_proc_init函数,根据stream的类型创建pcm0p/pcm0c文件夹,然后会在此文件夹下创建info文件。...info文件的类型会通过snd_pcm_stream_proc_info_read函数获得。代表就不贴出来了。...调用snd_pcm_substream_proc_init函数,创建sub0目录,然后在此目录下创建info, hw_params, sw_params,status等文件。 6.
HLS点播实现(H.264和AAC码流) HLS推流的实现(iOS和OS X系统) iOS在线音频流播放 最近对Audio Unit感兴趣,用几周的业余时间研究,顺利习得Audio Unit播放、录制声音...这是Audio Unit系列的第一篇,用Audio Unit播放PCM文件。 Audio Unit的知识点较多,围绕demo介绍如何使用Audio Unit。...最重要的是stream format,包括采样率、packet information和编码类型;AudioStreamBasicDescriptions (ASBD) 是CoreAudio通用的流结构描述文件...本文主要介绍AudioUnit如何播放声音,后续的两篇文章介绍AudioUnit的录音场景还有配合AudioConvert播放各种格式的文件。
:wav文件中提取pcm数据 作者:HFL 日期:2014-1-12 说明:wav文件就是在pcm数据的基础上加了一文件头。...文件头的大小为44个字节(没有附件字段的情况,如果有附加字段问46个字节) ,剔除文件头,就是纯pcm采样过来的数据。 ...pcm构成要素:采样率 ,声道个数,数据符号特性(一般8位都是无符号的) ***************************************************************...", "wb"))==NULL) { printf("Open the 2.pcm failed\n"); return ; } else { printf("Open the 2.pcm...length-43);/*文件数据段长度等于文件总长度-文件头长度位置*/ fseek(in,44,SEEK_SET); fread(buf,1,length-44,in); fwrite(buf
gpl-shared.zip #再解压把ffmpeg.exe所在路径配置环境变量中 二.命令行执行代码 ffmpeg -i 1.mp3 -f s16be -ar 16000 -ac 1 -acodec pcm_s16be...1.pcm 三.python执行代码 from ffmpy import FFmpeg #将mp3转化没pcm ff = FFmpeg(inputs={r'd:\test\1.mp3':"-i"},...outputs={r'd:\test\1.pcm':"-f s16be -ar 16000 -ac 1 -acodec pcm_s16be"}) print(ff.cmd) ff.run...() #将pcm转化为mp3 ff1 = FFmpeg(inputs={r'd:\test\1.pcm':"-f s16be -ar 16000 -ac 1 -acodec pcm_s16be"},
Termtosvg 是一个用 Python 编写的 Linux/Unix 终端录制器,它可以将你的命令行会话保存为 SVG 动画。它依赖python3,需要版本至少为3.5。...github.com/nbedos/termtosvg安装pip3 install termtosvg pyte python-xlib svgwrite使用直接执行 termtosvg 即可图片查看录制完成后...,在命令行输入exit或者ctrl+d即可退出录制,并在/tmp下生成svg动画文件。...图片将这个svg文件导出到本地,使用chrome等任意浏览器打开即可。
wbyq@wbyq:/mnt/hgfs/linux-share-dir/linux_c/linux_pcm_save$ arecord -L default Playback/recording...\n"); /*创建一个保存PCM数据的文件*/ if((pcm_data_file = fopen(argv[2], "wb")) == NULL) { printf("无法创建%s音频文件...\n",argv[2]); exit(1); } printf("用于录制的音频文件已打开..../*关闭文件流*/ fclose(pcm_data_file); return 0; } 编译方法: gcc linux_pcm_save.c -lasound 运行方法: ..../a.out hw:0 123.pcm 录制过程中如果想要结束录制,直接按下Ctrl+C即可。 成功之后,会在当前目录下生成123.pcm文件。
Asciinema 简介 Asciinema 是一款开源免费的终端录制工具,它可以将命令行输入输出的任何内容加上时间保存在文件中,同时还提供方法在终端或者web浏览器中进行回放。...录制完成时(通过敲击Ctrl-D或键入exit),然后将捕获的输出上传到asciinema.org网站或者通过asciinema命令播放。相比GIF和视频文件体积非常之小,无需缓冲播放。...brew install asciinema Pip安装 sudo pip3 install asciinema CentOS or RedHat yum install asciinema Arch Linux...--append 添加录制到已存在的文件中 --raw 保存原始STDOUT输出,无需定时信息等 --overwrite 如果文件已存在,则覆盖 -c 要记录的命令,默认为$SHELL -e 要捕获的环境变量列表...-s 后边跟数字,表示用几倍的速度来播放录像 -i 后边跟数字,表示在播放录像时空闲时间的最大秒数 asciinema推荐的文件后缀是.cast,输入exit或按ctrl+D组合键退出录制 录制 $
要访问PCM的中间层代码,你首先要包含头文件,另外,如果需要访问一些与 hw_param相关的函数,可能也要包含。...每个声卡最多可以包含4个pcm的实例,每个pcm实例对应一个pcm设备文件。pcm实例数量的这种限制源于linux设备号所占用的位大小,如果以后使用64位的设备号,我们将可以创建更多的pcm实例。...,并且调用各设备的注册回调函数,对于pcm,就是第二步提到的snd_pcm_dev_register函数,该回调函数建立了和用户空间应用程序(alsa-lib)通信所用的设备文件节点:/dev/snd/...]中 最后,调用device_create创建设备节点 4.2 设备文件的建立: 在4.1节的最后,设备文件已经建立,不过4.1节的重点在于snd_minors数组的赋值过程,在本节中,我们把重点放在设备文件中...snd_pcm_f_ops,snd_pcm_f_ops是一个标准的文件系统file_operations结构数组,它的定义在sound/core/pcm_native.c中: const struct
8.2 ALSA架构 ALSA全称是Advanced Linux Sound Architecture,中文音译是Linux高级声音体系。...8.3.3 ALSA Util编译 ALSA Util可以生成用于播放,录制,配置音频的应用可执行文件,测试驱动代码时用处很大,编译过程如下: tar -xvf alsa-utils-1.0.27.2...在LINUX系统中,每个设备文件都是文件。...指定 period size –buffer-size 指定 buffer size 举例: 录制5s,通道数为2, 采样率为16000, 采样精度为16bit, 保存为wav文件 arecord...8.9.1 程序设计 文件列表 序号 文件名 描述 1 AlsaCapture.h 音频录制头文件 2 AlsaCapture.cpp 音频录制程序 成员函数设计 序号 函数名 参数 参数描述 函数描述
8.2 ALSA架构 ALSA全称是Advanced Linux Sound Architecture,中文音译是Linux高级声音体系。...8.3.3 ALSA Util编译 ALSA Util可以生成用于播放,录制,配置音频的应用可执行文件,测试驱动代码时用处很大,编译过程如下: tar -xvf alsa-utils-1.0.27.2...,以下文件 必须被拷贝至对应位置 : while (r > 0) { snd_pcm_wait(handle, 100); do { res = snd_pcm_writei(handle,...### 8.9.1 程序设计 - 文件列表 | 序号 | 文件名 | 描述 | | ---- | --------------- | -----------...--- | | 1 | AlsaCapture.h | 音频录制头文件 | | 2 | AlsaCapture.cpp | 音频录制程序 | - 成员函数设计 | 序号 | 函数名
PCM(Pulse Code Modulation—-脉码调制录音)。所谓PCM录音就是将声音等模拟信号变成符号化的脉冲列,再予以记录。...所有的WAV都有一个文件头,这个文件头音频流的编码参数。WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。...很多朋友没有这个概念,我们拿AVI做个示范,因为AVI和WAV在文件结构上是非常相似的,不过AVI多了一个视频流而已。...同样,WAV也可以使用多种音频编码来压缩其音频流,不过我们常见的都是音频流被PCM编码处理的WAV,但这不表示WAV只能使用PCM编码,MP3编码同样也可以运用在WAV中,和AVI一样,只要安装好了相应的...因此,基于PCM编码的WAV被作为了一种中介的格式,常常使用在其他编码的相互转换之中,例如MP3转换成WMA。 简单一句,PCM就是没有压缩的格式。
目的:指定流进行录制,并设置录制的视频保存时间,超过该时间自动进行删除录制的文件!...背景:经常进行直播录制,视频文件越来越多,手动删除、调用接口等较为麻烦,文件只需保留指定的时间即可,无需永久保存,此时就可以通过这种方法进行操作。...通过指定参数进行设置: &storage_time=600 指定文件保存的时长,单位为秒s,600s &record=mp4&record_interval...=5400 指定录制为mp4,单个文件最大时长5400s 生成推流地址: rtmp://xxx.xxxxxxx.com/live/test123?...storage_time=600&record=mp4&record_interval=5400 推流结束后,会在点播平台生成如下方所示的图片: image.png 通过调用下方的接口,进行查询生成的视频文件的详细信息
引用相关库文件以及头文件 怎么导入OpenSL ES库 「CMake方式」:CMakeList.txt中加入 #找打Android lib库里面的libOpenSLES.so的库 find_library...&format_pcm //输出数据格式 }; 创建录制器 主要是创建录制对象和获取录制相关的接口: SLObjectItf recorder_object...设置开始录制状态,并通过回调函数获取录制的音频 PCM 数据: int8_t *pcm_data; //数据缓存区 //申请一块内存,注意RECORDER_FRAMES是自定义的一个宏,指的是采集的frame...播放PCM文件 Audacity这个工具可以导入pcm原始文件,并且提供了波形图查看和播放功能。...「操作流程是:」 文件 => 导入 => 原始数据 => 设置PCM数据格式 => 导入 「具体效果图如下:」 ?
获取wav文件 若要获得wav文件,需要在PCM基础上增加一个header。可以将PCM文件转换成wav,这里提供一种PCM与wav几乎同时生成的思路。...PCM与wav同时创建,给wav文件一个默认的header。录制线程启动后,同时写PCM与wav。...初始化AudioTrack时,要根据录制时的参数进行设定。 代码示例 工具类WindEar实现音频PCM数据的采集和播放,与读写音频wav文件的功能。...AudioRecordThread 使用AudioRecord录制PCM文件,可选择同时生成wav文件 AudioTrackPlayThread 使用AudioTrack播放PCM或wav音频文件的线程...wav文件的header /** * 音频录制器 * 使用 AudioRecord 和 AudioTrack API 完成音频 PCM 数据的采集和播放,并实现读写音频 wav 文件 * 检查权限
4.2 编译代码的Makefile文件 app: arm-linux-gcc linux_pcm_save.c -o app -lasound -I/home/wbyq/work/alsa-lib-1.2.3.2...\n",argv[2]); exit(1); } printf("用于录制的音频文件已打开....\n",argv[2]); exit(1); } printf("用于录制的音频文件已打开..../app hw:0 123.pcm 音频接口打开成功. 用于录制的音频文件已打开. 硬件参数结构已分配成功. 硬件参数结构初始化成功. 访问类型设置成功. PCM数据格式设置成功....linux_pcm_save.c -lasound $ .
构建waveio包处理WAV文件 这部分将变得稍微高级一些,但从长远来看,它将使在 Python 中处理 WAV 文件变得更加容易。...├── __init__.py ├── encoding.py ├── metadata.py ├── reader.py └── writer.py • encoding 模块将负责归一化幅度值和 PCM...编码样本之间的双向转换 • metadata 模块将表示 WAV 文件头 • reader 读取和解释音频帧 • writer 写入 WAV 文件 枚举编码格式 waveio/encoding.py...管理WAV文件的多个元数据可能很麻烦,因此我们自定义一个数据类,将它们分组在一个命名空间下。..._wav_file.close() 对于较小的文件,可以直接加载到内存: class WAVReader: # ...
Linux下捕获摄像头的数据保存成视频文件: # ffmpeg -f video4linux2 -s 1280x720 -i /dev/video0 test.mp4 参数介绍: -s 指定摄像头输出的图像尺寸...-i 摄像头的设备节点 test.mp4 是保存的视频文件名称 -f video4linux2是指定框架 Linux下捕获声卡的数据保存成音频文件: (1)# ffmpeg -f alsa -ac 2...out.wav 捕获的音频数据保存的文件名称 -f 是指定音频驱动类型。alsa是linux下音频驱动框架。 oss是另外一种音频框架。...选择指定的声卡录制声音示例: (1)....out.mp4 录制MP4格式的视频时,音频采样率设置16000效果比较好一些。
领取专属 10元无门槛券
手把手带您无忧上云