音频存储格式wav介绍与解析

news/2024/11/2 2:26:03/

音频格式

音频格式中 规定了使用多少 bits 来对信号进行编码。

  • 无压缩的格式
  • 无损压缩
  • 有损压缩

1. wav 音频格式介绍

微软 和 IBM 于 1991 年 提出的资源交换的文件格式 RIFF( resource interchange File Format);

wav 是 属于RIFF 中的一个应用实例;

1.1 RIFF 的组成

RIFF的其他实例还包含了其他的音视频格式 AVI, 图像动画ANI;
RIFF 文件由一个表头 header, 多个区块 chunk 组成;

1.2 wav 的组成

打开该网址:

http://soundfile.sapp.org/doc/WaveFormat/

在这里插入图片描述

wav 的 Header : 使用 32 位正整数表示整个文件的大小, 故wav 大小不超过 4 GB;

第一个区块,格式子块,Format chunk: 记录了音频的相关格式信息包括如下:
编码格式, 通道数,采样率,Byte Rate 传输速率(字节每秒), 块对齐,

第二个区块,数据子块,data chunk :开始存储音频的数据,

注意到在数据块中,左通道和右通道的数据有依次间隔存放的,按照 
左通道1,右通道1,左通道2, 右通道2 这样的顺序依次交替存放;

在这里插入图片描述

2. python 读取 wav 文件,

调用 struct module,

https://docs.python.org/3/library/struct.html?highlight=struct#struct.unpack_from

注意,使用 struct.unpack(),

其中,关键点:

  1. 字节顺序 byte order : 区分高位在前还是低位在前;

< 表示, 低位在前;
>表示,高位在前;

  1. 数据类型:
H unsigned short  integer 2  

H 表示无符号的短整形, integer,  占2 个字节;

I unsigned int integer 4

I: 表示无符号的整形, integer占4 个字节;

2.1 struct.unpack() 的使用

注意到根据字节序来判断使用的场景,

byteorder 是big:  即高位在前时, 使用 f.read()直接打开;

byteorder 是little:  即低位在前时, 使用 struct.unpack() 函数打开;

import structf = open("./male_audio.wav",  mode = "rb") # 以二进制的只读模式打开该文件;chunk_id = f.read(4)  #  文件的前4byte 字节代表 RIFF;
print("the chunk id:", chunk_id)# < 代表 低位在前,  I:代表无符号的整数, 4byte;
chunk_size = struct.unpack('<I', f.read(4))[0]
print("the chunk size :", chunk_size)wav_format = f.read(4)
print("the wav format", wav_format)sub_chunck_1_id = f.read(4)
print("the first sub chunk id:", sub_chunck_1_id)sub_chunck_1_size = struct.unpack('<I', f.read(4))[0]
print("the sub chunk 1 size: ", sub_chunck_1_size)# < 代表 低位在前,  H:代表无符号的短整数, 2个字节;
audio_format = struct.unpack('<H', f.read(2))[0]
print("the audio format", audio_format)
#  PCM = 1 (i.e. Linear quantization)
#  Values other than 1 indicate some form of compression.# Mono = 1, Stereo = 2, etc.
num_channel = struct.unpack('<H', f.read(2))[0]
print(" the num  channel of audio:", num_channel)# sampel rate 8000, 44100, etc.
sample_rate = struct.unpack('<I', f.read(4))[0]
print("the sample rate: ", sample_rate)#ByteRate == SampleRate * NumChannels * BitsPerSample / 8
byte_rate = struct.unpack('<I', f.read(4))[0]
print("the byte rate: ", byte_rate)# BlockAlign  == NumChannels * BitsPerSample/8
# The number of bytes for one sample including
#  all channels. I wonder what happens when
#  this number isn't an integer?
block_align = struct.unpack('<H', f.read(2))[0]
print(" the block align:", block_align)# BitsPerSample    8 bits = 8, 16 bits = 16, etc.
bits_per_sample =  struct.unpack('<H', f.read(2))[0]
print("the bits per sample:", bits_per_sample)# ---- the following   data  sub chunk---sub_chunck_2_id = f.read(4)
print("\n the sub chunk 2:", sub_chunck_2_id)sub_chunck_2_size = struct.unpack('<I', f.read(4))[0]
print("the sub chunk_2_size:", sub_chunck_2_size)data0  = struct.unpack('<H', f.read(2))[0]
print("the first data:", data0)# 这里需要注意, 第一个前4 个字节中, 前两个
字节代表左声道, 后两字节代表右声道;

2.2 f.read() 函数的使用:

# ”读“的细节操作
# 1. # f.read(字节数):读取的是字节
# 字节数默认是文件长度;下标会自动后移
# f = open('test.txt','r')
# print(f.read())
# f.close()# 2.f.readline([limit])
# 读取一行数据
# limit
# 限制的最大字节数
# f = open('test.txt', 'r')
#
# content = f.readline()#只读取一行
# print(content)
#
# content = f.readline()#只读取一行
# print(content)
# f.close()# 3.f.readlines()
# 会自动的将文件按照换行符进行处理
# 将处理好的每一行组成一个列表返回
f = open('test.txt', 'r')
cn = f.readlines()
for line in cn:print(line, end='')
f.close()

3. 其他存储格式

RIFF: 由微软和IBM提出;
AIFF : 苹果公司提出;

  • 无损格式: FLAC
     free lossless audio codec;

  • lossy : 有损格式

MP3, mostly for music, based on:
• Modified discrete cosine transform (MDCT)
• Sub-band coding
• Advanced Audio Coding (AAC)
• OPUS
• Speex

http://www.ppmy.cn/news/361260.html

相关文章

wav音频文件格式

在做音频信号采集或音频信号分析时会经常遇到wav格式的文件&#xff0c;本章将介绍wav文件的格式。wav是基于资源交换文件格式&#xff08;RIFF&#xff08;Resource Interchange File Format&#xff09;&#xff09;的应用之一。RIFF是一种带标签的文件结构&#xff0c;其可以…

wav数据格式详解

1. 音频简介 经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等. 44100HZ 16bit stereo: 每秒钟有 44100 次采样, 采样数据用 16 位(2字节)记录, 双声道(立体声); 22050HZ 8bit mono: 每秒钟有 22050 次采样, 采样数据用 8 位(1字节)记录, 单声道; 当然…

WAV音频文件

WAV音频文件 象棋小子 1048272975 WAV是一种保存音频信息的文件格式&#xff0c;广泛应用于Windows及其应用程序中&#xff0c;如今主流的音频播放器都支持WAV音频文件的播放。 1. WAV音频格式 WAV是录音时用的标准Windows文件格式&#xff0c;文件扩展名为”.wav”&…

WAV格式文件分析

WAV格式文件分析 目录 WAV格式文件分析概述一、WAV格式文件1、波形声音文件格式 WAV2、音频文件参数简介 二、文件结构1、WAV文件的文件头2、WAV文件的数据体 三、WAV格式文件数据体结构1、RIFF Chunk区块2、Format Chunk区块3、DATA区块 总结 参考及引用材料 概述 WAV格式目前…

音频格式wav与mp3和wma的区别与音质

MP3 全称是Moving Picture Experts Group Audio Layer III。简单的说&#xff0c;MP3就是一种音频压缩技术&#xff0c;由于这种压缩方式的全称叫MPEG Audio Layer3&#xff0c;所以人们把它简称为MP3。 wma 是微软在制订的音频压缩文件格式&#xff0c;比mp3标准晚&#xf…

wav文件格式分析详解

wav文件格式分析详解 一、综述 WAVE文件作为多媒体中使用的声波文件格式之一&#xff0c;它是以RIFF格式为标准的。RIFF是英文Resource Interchange File Format的缩写&#xff0c;每个WAVE文件的头四个字节便是“RIFF”。 WAVE文件是由若干个Chunk组成的。按照在文件中的…

wav文件格式详解

WAV&#xff08;Waveform audio format&#xff09;是微软与IBM公司所开发的一种声音编码格式&#xff0c;它符合RIFF(Resource Interchange File Format)文件规范&#xff0c;用于保存Windows平台的音频信息资源&#xff0c;被Windows平台及其应用程序所广泛支持&#xff0c;也…

wav音频文件格式解析

wav是微软开发的一种音频文件格式&#xff0c;注意&#xff0c;wav文件格式是无损音频文件格式&#xff0c;相对于其他音频格式文件数据是没有经过压缩的&#xff0c;通常文件也相对比较大些。 文件格式如图所示&#xff1a; 解析代码如下&#xff1a; #include <stdio.h&…