首页 > 其他分享 >音频格式及转换代码

音频格式及转换代码

时间:2023-05-17 17:48:04浏览次数:51  
标签:00 01 转换 字节 音频格式 代码 比特率 16 WAV

音频信号的读写、播放及录音

python已经支持WAV格式的书写,而实时的声音输入输出需要安装pyAudio(http://people.csail.mit.edu/hubert/pyaudio)。最后我们还将使用pyMedia(http://pymedia.org)进行Mp3的解码和播放。

音频信号是模拟信号,我们需要将其保存为数字信号,才能对语音进行算法操作,WAV是Microsoft开发的一种声音文件格式,通常被用来保存未压缩的声音数据。

语音信号有四个重要的参数:声道数、采样频率、量化位数(位深)和比特率。

  • 声道数:可以是单声道、双声道 ...
  • 采样频率(Sample rate):每秒内对声音信号采样样本的总数目,44100Hz采样频率意味着每秒钟信号被分解成44100份。换句话说,每隔144100144100秒就会存储一次,如果采样率高,那么媒体播放音频时会感觉信号是连续的。
  • 量化位数(Bit depth):也称为“位深”,每个采样点中信息的比特(bit)数。1 byte等于8 bit。通常有8bit、16bit、24bit、32bit...
  • 比特率(Bit rate):每秒处理多少个Bit。比如一个单声道,用44.1KHz/16Bit的配置来说,它的比特率就为44100161=705600,单位是bit/s(或者bps),因为通常计算出来的数字都比较大,大家就用kbit/s了,也就是705.6kbit/s。在对音频进行压缩时,比特率就成为了我们的一个要选的选项了,越高的比特率,其音质也就越好。一些常用的比特率有:
    • 32kbit/s: 一般只适用于语音
    • 96kbit/s: 一般用于语音或低质量流媒体
    • 128或160kbit/s: 中等比特率质量
    • 192kbit/s: 中等质量比特率
    • 256kbit/s: 常用的高质量比特率
    • 320kbit/s: MP3标准支持的最高水平
      如果你需要自己录制和编辑声音文件,推荐使用Audacity,它是一款开源的、跨平台、多声道的录音编辑软件。在我的工作中经常使用Audacity进行声音信号的录制,然后再输出成WAV文件供Python程序处理。

如果想要快速看语音波形和语谱图,推荐使用Adobe Audition,他是Adobe公司开发专门处理音频的专业软件,微博关注vposy,下载地址见置顶。他破解了很多adobe公司的软件,包括PS、PR...

音频格式

WAV

WAV格式是微软公司开发的一种无损声音文件格式,也称为波形声音文件,WAV格式支持多种压缩算法、音频位数、采样频率和声道。

WAV 符合 RIFF(Resource Interchange File Format) 规范,所有的WAV都由 44字节 头文件 和 PCM文件 组成,这个文件头包含语音信号的所有参数信息(声道数、采样率、量化位数、比特率....)

44个字节的 头文件由 3个区块组成:

  • RIFF chunk:WAV文件标识
  • Format chunk: 声道数、采样率、量化位数、等信息
  • Data chunk:存放数据
    相反的,在PCM文件头部添加44个字节的WAV文件头,就可以生成WAV格式文件

RIFF区块

规范的WAVE格式遵循RIFF头

名称 字节数 内容
ChunkID 4 "RIFF" 标识符
ChunkSize 4 表示从下个地址开始到文件尾的总字节数更准确的说:等于整个wav文件大小-8更准确的说:等于整个wav文件大小-8
Format 4 "WAVE" 标识符

FORMAT区块

描述声音数据的格式

名称 字节数 内容
Subchunk1ID 4 "fmt " 标识符,最后一位是空格
Subchunk1Size 4 该区块数据的长度(不包含该区块ID和Size的长度)
AudioFormat 2 音频格式,PCM音频数据的值为1
NumChannels 2 通道数
SampleRate 4 采样率
ByteRate 4 每秒数据字节数 = SampleRate * NumChannels * BitsPerSample / 8
BlockAlign 2 每个采样点所需的字节数 = NumChannels * BitsPerSample / 8
BitsPerSample 2 量化位数(bit)

DATA区块

包含数据的大小和实际声音

名称 字节数 内容
Subchunk2ID 4 "data" 标识符
Subchunk2Size 4 该区块数据的长度,(不包含该区块ID和Size的长度),也就是PCM字节数
Data * 音频数据

文件实例:

RIFF区块

  • ChunkID(4字节 52 49 46 46):对应ASCII中的 RIFF,这里是ASCII码对照表。
  • ChunkSize(4字节 76 01 03 00):表示WAV文件的大小,不包含了前面8个字节,所以真正的大小等于文件总字节减去8。76 01 03 00 对应的正序16进制为 00 03 01 76大小为196982
  • Format(4字节 57 41 56 45):对应ASCII中的WAVE

FORMAT区块

  • Subchunkl ID(4字节 66 6d 74 20):对应ASCII中的fmt
  • Subchunkl Size(4字节 10 00 00 00):正序16进制 00 00 00 10 对应16
  • AudioFormat(2字节 01 00):正序16进制 00 01,对应数字1,表示编码格式“WAVE_FORMAT_PCM”
  • NumChannels(2字节 01 00):正序16进制 00 01,对应数字1,表示声道数为1
  • SampleRate(4字节 80 bb 00 00):正序16进制 00 00 bb 80,表示采样率为48000
  • ByteRate(4字节 00 77 01 00):正序16进制 00 01 77 00,表示传输速率为96000
  • BlockAlign(2字节 02 00):正序16进制 00 02,每个采样所需的2字节数
  • BitsPerSample(2字节 10 00):正序16进制 00 10,采样大小为16 Bits

DATA区块

  • Subchunk2ID(4字节 64 61 74 61):表示为ASCII的data,开始数据区
  • Subchunk2 Size(4字节 52 01 03 00):正序16进制 00 03 01 52,PCM字节数,大小为196946
  • wav文件(wav字节-44字节):pcm音频数据

标签:00,01,转换,字节,音频格式,代码,比特率,16,WAV
From: https://www.cnblogs.com/yege/p/17409470.html

相关文章

  • 观察者模式(代码简单介绍)
    观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,这样当一个对象改变状态时,它的所有依赖者都会被通知并自动更新。在这个模式中,改变状态的对象被称为“主题”,依赖者被称为“观察者”。当使用观察者模式时,同样有三个核心角色:主题(Subject)、观察者(Observer)和具体观......
  • VSCode上的代码变量命名工具插件,让你的开发效率倍增!
    本篇文章主要讲解VSCode上的代码变量命名工具插件chtml代码命名工具的使用。日期:2023年5月15日vscode版本1.78及以上转载地址:https://blog.csdn.net/weixin_46078894,已获作者同意!插件说明CHTML是一款在线的代码命名工具,提供变量命名规则库,可以帮助开发者快速选择合适的变......
  • 淘宝关键词搜索 API 接口分析商品价格走势(商品列表,销量,价格接口,分类 ID 精准商品数据
    淘宝OpenAPI(Openapplicationprogramminginterface)是一套REST方式的开放应用程序编程接口。淘宝网根据自己提供的电子商务基础服务,抽象并做成一系列的API接口。通过这些接口,可以让外部用户能够通过程序的方式访问淘宝网的数据和平台。淘宝OpenAPI是淘宝开放平台的重要组......
  • 基于水平集进化的轮廓提取 MATLAB代码 水平集进化(LSE)
    基于水平集进化的轮廓提取MATLAB代码水平集进化(LSE)是一种著名的轮廓提取(确定对象边界)和对象分割的方法。LSE的主要缺点是重新初始化步骤。为了消除提取出的物体边界(轮廓)的不规则性,必须执行该步骤。基本上,水平集必须根据一些基于距离的准则定期重新初始化。ID:928627236002077......
  • 基于前景和背景的图像分割,流行排序模型 MATLAB代码 将图像像素
    基于前景和背景的图像分割,流行排序模型MATLAB代码将图像像素分为前景类和背景类。基于图的流形排序模型的交互式图像分割框架,该模型是一种基于图的半监督学习技术,可以根据输入数据显示的内在结构学习非常光滑的函数。通过克服传统模型中图构造的两个核心问题:图的结构和图的边缘权......
  • S2-#图像处理和特征提取,用于从茎图像中检测植物病害 ,matlab代码
    S2-#图像处理和特征提取,用于从茎图像中检测植物病害,matlab代码这段代码是为了从黄麻植物茎的图像中提取疾病影响部分而实现的。实现并应用了不同的图像处理方法,如基于色彩的分割、形态分析(侵蚀、膨胀等)、斑点检测、最大连通分量、颜色共现方法、纹理分析等。利用多类支持向量......
  • 如何提高你的代码质量?
    1可读性1.1准确命名每种编程语言都有自己的命名规范,不同语言的风格差异有大有小,下面以Java为例:Java整体命名风格为UpperCamelCase或lowerCamelCase形式。不管是类还是变量命名要见名知意,切勿使用缩写或中文;风格统一,尽量使用英文名词,切勿中英文混合;尽量避免和Java自带类库重名......
  • 1.图片去雾MATLAB代码 图像去雾技术 包括全局及局部直方图均衡化
    1.图片去雾MATLAB代码图像去雾技术包括全局及局部直方图均衡化和基于RETINEX理论去雾三种算法局部直方图和retinex(MSR)的参数,懂算法可以自己调节图像亮度含GUI界面只有代码。ID:495615931294745......
  • MATLAB图像增强代码 代码些许复杂,由本人一个朋友编写 是
    MATLAB图像增强代码代码些许复杂,由本人一个朋友编写是机器视觉和图像增强领域的应用,有gui界面,可以载入原图和参照强化的图像,读取参照图像的RGB或者HSV分量,并强化原图像,运行,corrction.m.结果如下图ID:925620010658083......
  • docker-compose部署sonarqube开源代码审计和分析平台
    mkdir-p/docker/sonar/postgres/postgresqlmkdir-p/docker/sonar/postgres/datamkdir-p/docker/sonar/sonarqubechmod777-R/docker/sonar/sonarqubeecho"vm.max_map_count=262144">/etc/sysctl.confsysctl-pversion:'3'servic......