最近接到一个需求,需要准备大量的音频,其中需要自己录制的音频进行处理。
Python模块:PyAudio PyAudio · PyPI
安装方法: pipwin install pyaudio
注:pipwin 安装时有时会因为网络超时,导致安装失败。可以更换安装源。
可参考: pip安装python包报错的一些解决办法【转】_yuhushangwei的博客-CSDN博客
录制音频基础代码如下:
def audio_record(slef, file_name, rec_time):
chunk = 1024
formate = pyaudio.paInt16 #16bit编码格式(2个字节)
channels = 1 #单声道
rate = 16000 #采样率
p = pyaudio.PyAudio()
stream = p.open(format = formate,
channels= channels,
rate =rate,
input= True,
frames_per_buffer=chunk)
print("开始录制")
#录制的音频数据
frames = []
for i in range(0, int(rate / chunk * rec_time)):
data = stream.read(chunk)
frames.append(data)
#录制完成
stream.stop_stream()
stream.close()
p.terminate()
print("完成录制")
# wave是录音时用的标准的WINDOWS文件格式,文件的扩展名为WAV
# 保存录音
file = wave.open(file_name, "wb")
file.setnchannels(channels)
file.setsampwidth(p.get_sample_size(formate)) #或者sampwidth=2(2个字节16位); file.setsampwidth(sampwidth)
file.setframerate(rate) #帧速率
file.writeframes(b''.join(frames)) #把数据加进去,存到硬盘中
file.close()
音频相关理解:
现实生活中,我们听到的声音都是时间连续的,我们称为这种信号叫模拟信号。模拟信号需要进行数字化以后才能在计算机中使用。
声音处理过程:
采样(将下图中一段音频模拟信息信号转换为数字信号)----> 量化(每个样本的大小)----> 二进制编码

采样率rate:
采样率:1s采集多少次声音,也是所得的数字信号的每秒样本数。采样率越高,声音的还原就越真实自然,但同时它占的资源比较多。常见有 16000、44100
采样位数formate:
而采样位数是指声卡在播放时所使用数字信号的二进制位数,代表声卡处理声音的解析度,客观地反映了数字信号对输入信号描述的准确程度。
简单来讲,就是代表每个采样点(上图中小红点)的大小。一般有8,16可选, 这个数值越大,解析度就越高,声音越真实。
8位代表2的8次方——256,16位则代表2的16次方——64K。比较一下,一段相同的音乐信息
16位声卡能把它分为64K个精度单位进行处理,而8位声卡只能处理256个精度单位,这会造成较
大的信号损失,所以最终的采样效果自然是采样位数越高越好
帧frame per buffer:
音频在量化得到二进制的码字后,需要进行变换,而变换是以块为单位(block)进行的,一个块由多个(120或128)样本组成。而一帧内会包含一个或者多个块。帧的常见大小有960、1024、2048、4096等。一帧记录了一个声音单元,它的长度是样本长度和声道数的乘积。不同的编码方式帧不同,比如AAC规定1024采样sample,mp3为1152采样。
比如:
一个AAC原始帧包含一段时间内1024个采样及相关数据
假如:音频总时长为5s
一个音频帧的时间 = 一个AAC帧对应的采样样本的个数/采样频率
= 1024 / 16000 * 1000 = 64ms
音频总帧数 = 音频总时长time / 一个音频帧的时间 = 5000 / 64 =78.125
音频总帧数 = 采样率rate * 音频总时长time / 帧 frame per buffer
= 音频总采样数 / 每帧采样数
= 16000 * 5 / 1024 = 78.125
单位: 秒
相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭3年前。Improvethisquestion我正处于学习Ruby的阶段,我想查看一些小型库的源代码以了解它们是如何构建的。我不知道什么是小型图书馆,但希望SO能推荐一些易于理解的图书馆来学习。因此,如果有人知道一两个非常小的库,这是新手Rubyists学习的好例子,请推荐!我想使用Manveru'sInnatelib,因为它试图保持在2000LOC以下,但我还不熟悉其中经常使用的Ruby速记。也许大约100-5
由于匿名block和散列block看起来大致相同。我正在玩它。我做了一些严肃的观察,如下所示:{}.class#=>Hash好的,这很酷。空block被视为Hash。print{}.class#=>NilClassputs{}.class#=>NilClass为什么上面的代码和NilClass一样,下面的代码又显示了Hash?puts({}.class)#Hash#=>nilprint({}.class)#Hash=>nil谁能帮我理解上面发生了什么?我完全不同意@Lindydancer的观点你如何解释下面几行:print{}.class#NilClassprint[].class#A
我很难理解Ruby中sender和receiver的实际含义。它们一般是什么意思?到目前为止,我只是将它们理解为方法调用和获取其返回值的调用。但是,我知道我的理解还远远不够。谁能给我一个Ruby中发送者和接收者的具体解释? 最佳答案 面向对象中的一个核心概念是消息传递和早期概念化,这在很大程度上借鉴了计算的Actor模型。艾伦·凯(AlanKay)创造了面向对象一词并发明了最早的OO语言之一SmallTalk,他拥有voicedregretatusingatermwhichputthefocusonobjectsinsteadofo
rails新手。只是想了解\assests目录中的这两个文件。例如,application.js文件有如下行://=requirejquery//=requirejquery_ujs//=require_tree.我理解require_tree。只是将所有JS文件添加到当前目录中。根据上下文,我可以看出requirejquery添加了jQuery库。但是它从哪里得到这些jQuery库呢?我没有在我的Assets文件夹中看到任何jquery.js文件——或者直接在我的整个应用程序中没有看到任何jquery.js文件?同样,我正在按照一些说明安装TwitterBootstrap(http: