精华内容
下载资源
问答
  • Python读取wav格式文件
    千次阅读
    2019-04-09 17:42:12

    转:https://blog.ailemon.me/2017/08/29/python-read-wav-files/

    https://www.cnblogs.com/xingshansi/p/6799994.html

    我们经常需要处理wav格式的文件,读取其中的声音信号和相关参数,来做一些事情。如果我们使用C++来做,那么需要对文件的底层存储格式有一个透彻的了解才行,而且考虑不周还有可能出Bug;如果使用MatLab来做,虽然只有一行代码就可以读取文件,但是MatLab语言自身的局限性使得写出的代码难以在实际中投入使用。因此,兼顾简介易用和实用性,用Python来做就显得比较好了。

     

    首先,自然地,我们需要导入Python包:

    1. import wave

    这个Pyhton包提供了一个方便的WAV格式文件读写的接口。

    它支持单声道与立体声,但是不支持压缩和解压缩。

     

    wave类的方法函数:

    open(file, [mode])
    打开一个wave文件流对象,返回该对象。

    参数:
    file: 如果file是一个字符串,那么就打开文件,否则就把它当做一个类文件对象。
    mode: 可缺省,如果输入的参数是一个类文件对象,那么file.mode将会作为mode的值。

    mode可选参数如下:
    只读模式:  ‘r’, ‘rb’
    只写模式:  ‘w’, ‘wb’

    注意:不能同时完成读/写操作

    close()
    关闭该流,使得该实例不可用,它会自动调用对象收集机制。

    getnchannels()
    返回音频的声道数(1是单声道,2是立体声)。

    getsampwidth()
    返回该实例每一帧的字节宽度。

    getframerate()
    返回实例的频率(单位:Hz)。

    getnframes()
    返回音频的帧数。

    getcomtype()
    返回压缩类型(仅支持’NONE’)。

    getcompname()
    是getcomtype()的人类可读的版本,通常用’not compressed’表示’NONE’。

    getparams()
    返回一个元组tuple (nchannels, sampwidth, framerate, nframes, comptype, compname),包含了以上的方法取得的几个值。

    readframes(n)
    从流的当前指针位置一次读出音频的n个帧,并且指针后移n个帧,返回一个字节数组。

    rewind()
    倒带,将该文件指针指向音频流的最开始位置。

     

    其次,我们需要使用numpy中的shape来改变数组的形状,主要是为了解决立体声即双轨声道时候的信号能量表示问题。

    1. import numpy as np
    2. arr = np.array([[1,2,3],[4,5,6]])
    3. arr.shape = 3,2

    可以将原为2*3的数组(矩阵)转为3*2数组(矩阵)。当某数轴的参数为-1时,可根据元素个数,自动计算另一轴的最大长度。

    实例代码:

    1. #!/usr/bin/env python3
    2. # -*- coding: utf-8 -*-
    3.  
    4. def read_wav_data(filename):
    5. '''
    6. 读取一个wav文件,返回声音信号的时域谱矩阵和播放时间
    7. '''
    8. wav = wave.open(filename,"rb") # 打开一个wav格式的声音文件流
    9. num_frame = wav.getnframes() # 获取帧数
    10. num_channel=wav.getnchannels() # 获取声道数
    11. framerate=wav.getframerate() # 获取帧速率
    12. num_sample_width=wav.getsampwidth() # 获取实例的比特宽度,即每一帧的字节数
    13. str_data = wav.readframes(num_frame) # 读取全部的帧
    14. wav.close() # 关闭流
    15. wave_data = np.fromstring(str_data, dtype = np.short) # 将声音文件数据转换为数组矩阵形式
    16. wave_data.shape = -1, num_channel # 按照声道数将数组整形,单声道时候是一列数组,双声道时候是两列的矩阵
    17. wave_data = wave_data.T # 将矩阵转置
    18. wave_data = wave_data
    19. return wave_data, framerate
    20.  
    21. def wav_show(wave_data, fs): # 显示出来声音波形
    22. time = np.arange(0, len(wave_data)) * (1.0/fs) # 计算声音的播放时间,单位为秒
    23. # 画声音波形
    24. plt.plot(time, wave_data)
    25. plt.show()
    26.  
    27. if(__name__=='__main__'):
    28. wave_data, fs = read_wav_data("1.wav")
    29. wav_show(wave_data[0],fs)
    30. wav_show(wave_data[1],fs) # 如果是双声道则保留这一行,否则删掉这一行
    更多相关内容
  • WAV格式文件分析

    千次阅读 2022-03-16 12:39:23
    目录WAV格式文件分析概述一、WAV格式文件1、波形声音文件格式 WAV2、音频文件参数简介二、文件结构1、WAV文件的文件头2、WAV文件的数据体三、WAV格式文件数据体结构1、RIFF Chunk区块2、Format Chunk区块3、DATA区块...

    WAV格式文件分析


    概述

    WAV格式目前是最常见的音频文件格式之一,是微软公司专门为旗下Windows操作系统开发的一种标准数字音频文件。WAV格式文件最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为*.wav,是WaveForm的简写,也称为波形文件,可直接存储声音波形,且还原的波形曲线十分逼真。

    本质上,WAV文件格式是一种存储声音波形的数字音频格式,是由微软公司和IBM联合设计的,经过了多次修订,可用于Windows,Macintosh,Linux等多种操作系统。WAV支持多种音频数字、取样频率和声道,标准格式化的WAV文件和CD格式一样,也是44.1kHz的取样频率,16位量化数字,因此声音文件质量和CD相差无几。同时,WAV格式文件还有真实记录自然声波形、数据压缩程度低、数据量相对较大等特点。

    在本文中,作者则以多媒体文件的“容器”概念出发,针对WAV格式文件的文件结构、数据组织结构、元数据信息等方面作简要的说明。


    一、WAV格式文件

    1、波形声音文件格式 WAV

    WAV即波形声音文件格式 (Waveform Audio File Format,简称WAVE,因后缀为*.wav故简称WAV文件),其采用RIFF(Resource Interchange File Format,资源互换文件格式)结构,并符合(RIFF)规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持。Wave格式支持MSADPCM、CCITT A律、CCITT μ律和其他压缩算法,支持多种音频位数、采样频率和声道,是PC机上最为流行的声音文件格式;但由于“无损”的特点,WAV文件格式所占用的磁盘空间相对较大(每分钟的音乐大约需要12MB磁盘空间),故此文件格式多用于存储简短的声音片段。同时WAV文件格式通常用来保存PCM格式的原始音频数据,所以通常被称为无损音频。但是严格意义上来讲,WAV也可以存储其它压缩格式的音频数据。

    2、音频文件参数简介

    对于形如44100HZ 16bit stereo 或者 22050HZ 8bit mono参数描述的音频文件,其蕴含的文件参数包括:

    • 采样率:声音信号在“模→数”转换过程中单位时间内采样的次数。
    • 采样值(采样精度):每一次采样周期内声音模拟信号的积分值。
      同时,每个采样数据记录的是振幅, 而采样精度取决于储存空间的大小。

    对于单声道(mono)文件,采样数据为8位的短整数,同时其采样精度有:

    • 1 字节(8bit) 只能记录 256 个数, 也就是只能将振幅划分成 256 个等级;
    • 2 字节(16bit) 可以细到 65536 个数, 即为 CD 标准;
    • 4 字节(32bit) 能把振幅细分到 4294967296 个等级, 实在是没必要了。

    对于双声道立体声(stereo)文件,每次采样数据为一个16位的整数(int),且采样是双份的,也为单声道文件的两倍。采样数据中高八位(左声道)和低八位(右声道)分别代表两个声道。

    由于wav格式文件本质上为音频文件,即可根据文件的大小、采样频率和采样大小估算文件的播放长度。


    二、文件结构

    WAV文件遵循RIFF规则,其数据体以区块(Chunk)为最小单位进行存储,而整个文件则以文件头进行标识。其结构示意如下表与图。

    WAV HeadData Chunk……Data Chunk

    WAV文件整体结构

    1、WAV文件的文件头

    PNG格式文件的文件头是由位固定的字节进行描述,其大小占44个字节。

    char *header = new char[44]; //wav文件头
    

    其中前四字节为资源交换文件标志“RIFF”。

    header[0] ='R';
    header[1] ='I';
    header[2] ='F';
    header[3] ='F';	
    

    后40字节则分别声明音频文件参数,包括:

    int file_size;      //文件大小
    int channel;         //声道数
    int sample_rate;   //采样率
    int bit_rate;      //比特率
    int sample_bit;    //每个采样点的位数
    int data_size;     //pcm数据的大小
    

    2、WAV文件的数据体

    WAV文件的数据体区块一般由3个区块组成:RIFF Chunk、Format Chunk和Data Chunk。示意如下表。另外,文件中还可能包含一些可选的区块,如:Fact Chunk、Cue Points Chunk、Playlist Chunk、Associated Data List Chunk等。

    RIFF ChunkFormat ChunkData Chunk……

    三、WAV格式文件数据体结构

    目前可知,WAV音频文件的内部数据是以数据体为单位在文件头后进行存储,其数据体内部数据由PCM(脉冲编码调制)格式表示的样本组成。每个区块则均有表征数据块特点的ID、Size等码段,同时也有不同码段内容。

    1、RIFF Chunk区块

    RIFF数据块长度为12字节,共有三种码段。如下表所示。

    名称偏移地址字节数内容
    ID0x004RIFF (0x52494646)
    Size0x044fileSize - 8
    Type0x084WAVE(0x57415645)

    其中:

    • RIFF Chunk类型数据块以RIFF的ID部分为标识,说明数据块类型;
    • Size是整个文件的长度减去ID和Size的长度,表征包含Type字段在内的数据块长度;
    • Type是WAVE表示后面需要Format和Data两个子区块。

    2、Format Chunk区块

    名称偏移地址字节数内容
    ID0x004'fmt ’ (0x666D7420)
    Size0x04416
    AudioFormat0x082音频格式
    NumChannels0x0A2声道数
    SampleRate0x0C4采样率
    ByteRate0x104每秒数据字节数
    BlockAlign0x142数据块对齐
    BitsPerSample0x162采样位数

    其中:

    • 此类型数据块以“fmt”的ID为标识,说明数据块类型;
    • Size表示该区块数据不包含ID和Size的长度;
    • AudioFormat表示Data区块存储的音频数据的格式,PCM音频数据的值为1;
    • NumChannels表示音频数据的声道数,其中1表示单声道,2表示双声道;
    • SampleRate表示音频数据的采样率;
    • ByteRate每秒数据字节数,计算公式为

    ByteRate = SampleRate × NumChannels × BitsPerSample / 8

    • BlockAlign每个采样所需的字节数,计算公式为NumChannels*BitsPerSample/8;
    • BitsPerSample每个采样存储的bit数,其中8表示8bit,16表示16bit,32表示32bit。

    3、DATA区块

    DATA区块为音频文件存储实际的数据。

    名称偏移地址字节数内容
    ID0x004‘data’ (0x64617461)
    Size0x044-
    Data0x08-音频数据

    其中:

    • Size表示音频数据的长度,不包含ID和Size数据段,且对于采样率为ByteRate的音频文件数据来说,其计算公式为

    Size = ByteRate × seconds

    • Data为实际存储的完整音频数据。

    总结

    通过对WAV格式文件的文件结构、数据结构以及元数据表示方法的简要学习,作者对WAV格式媒体文件有了进一步的认识。同时,通过分析WAV格式文件内部数据的表示内容,此过程中也对音频文件的各项参数指标有了更深的了解。


    参考及引用材料

    [1] WAV文件格式详解
    [2] WAVE PCM Sound File Format
    [3] wav文件格式分析
    [4] WAV 百度百科

    展开全文
  • 本资源为标准的wav格式的音频资源,wav格式是音频中比较常见的格式,也是高清的音频数据,本资源供大家调试蓝牙音乐使用,如A2DP功能使用,对大家调试会有很大的帮助,欢迎从事音频和喜欢音频调试的朋友一起交流学习...
  • QT播放wav格式文件

    2018-07-11 10:17:45
    QT5界面,播放wav格式文件,可循环播放,按钮启停,简单快捷,wav报警铃声
  • 自己亲自测试,和winhex下16进制数据对比,确实正确!
  • wav格式音频测试文件 2分多
  • wav格式音频文件

    2016-10-12 17:27:06
    主要是几个不同的wav格式音频文件,用于解析wav文件头信息时需要用到,可以参考博客:Qt 之 解析wav文件的头信息(详细分析、对比不同wav文件的数据)...
  • Qt实现录音功能并声称wav格式文件,后续可以使用科大讯飞语音库进行转换成文字
  • 里面是一个简单的类,通过打开文件夹选择想要播放的MP3文件。附带了相应的jar包。
  • 今天小编就为大家分享一篇python pcm音频添加头转成Wav格式文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • wav 文件下载播放功能,一些后台代码,前台js可直接通过路径调用方法
  • android开发,支持amr、wav格式的录音,录音之后,通过列表展示,也可以播放。
  • 在进行alsa和Linux的alsa测试驱动时,需要wav文件结果aplay和tinyplay来使用wav文件来播放,wav文件可以使用Adobe Audition CC 2018生成
  • WAV文件作为最经典的Windows多媒体音频格式,应用非常广泛,使用三个参数来表示声音:采样位数、采样频率和声道数;Windows Media Player和Winamp都可以播放。本文环境:windows10系统、thinkpad t480电脑。WAV文件...

    WAV文件作为最经典的Windows多媒体音频格式,应用非常广泛,使用三个参数来表示声音:采样位数、采样频率和声道数;Windows Media Player和Winamp都可以播放。

    59bbbb8f7a6c721eedaca2434990775f.png

    本文环境:windows10系统、thinkpad t480电脑。

    WAV文件作为最经典的Windows多媒体音频格式,应用非常广泛,使用三个参数来表示声音:采样位数、采样频率和声道数。Windows Media Player 和Winamp都可以播放。

    WAV格式叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用程序广泛支持。WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道。

    扩展资料:

    WAV是接近无损的音乐格式,标准格式化的WAV文件和CD格式一样,也是44.1K的取样频率,16位量化数字,因此在声音文件质量和CD相差无几。

    MP3文件通过对音频进行编码,去掉了某些部分,从而节省了空间。MP3利用精神声学的原理,研究人类如何感知声音。某些频率是人类耳朵无法感知的,因此MP3编码删除了这些频率以节省空间。

    展开全文
  • C#实现简单的音乐播放器(只支持.wav格式文件)--带有2个.wav格式文件
  • WAV格式音频文件,主要是小,方便测试, STM32上可以用来测试音频
  • WAV文件格式详解

    千次阅读 2022-03-19 13:33:36
    WAV文件格式简称WAV格式是一种存储声音波形的数字音频格式,是由微软公司和IBM联合设计的,经过了多次修订,可用于Windows,Macintosh,Linux等多种操作系统。WAV支持多种音频数字、取样频率和声道,标准格式化的WAV...

    WAV文件简介

      WAV文件是在PC机平台上很常见的、最经典的多媒体音频文件,最早于1991年8月出现在Windows3.1操作系统上,文件扩展名为WAV,是WaveForm的简写,也称为波形文件,可直接存储声音波形,还原的波形曲线十分逼真。WAV文件格式简称WAV格式是一种存储声音波形的数字音频格式,是由微软公司和IBM联合设计的,经过了多次修订,可用于Windows,Macintosh,Linux等多种操作系统。WAV支持多种音频数字、取样频率和声道,标准格式化的WAV文件和CD格式一样,也是44.1kHz的取样频率,16位量化数字,因此声音文件质量和CD相差无几。WAV的特点如下:真实记录自然声波形,基本无数据压缩,数据量大。[1]

      一般来说,由WAV文件还原而成的声音的音质取决于声音卡采样样本的尺寸,采样频率越高,音质就越好,但开销就越大,WAV文件也就越大。

    (来源 百度百科)

    WAV文件结构

    结构简述

    WAV文件遵循RIFF规则,其内容以区块(chunk)为最小单位进行存储。WAV文件一般由3个区块组成:RIFF chunk、Format chunk和Data chunk。另外,文件中还可能包含一些可选的区块,如:Fact chunk、Cue points chunk、Playlist chunk、Associated data list chunk等。


    分析时主要关注RIFF chunk、Format chunk和Data chunk。

    RIFF chunk

    名称偏移地址字节数端序内容
    ID0x004Byte大端RIFF (0x52494646)
    Size0x044Byte小端fileSize - 8
    Type0x084Byte大端WAVE(0x57415645)
    • 'RIFF'为标识
    • Size是整个文件的长度减去IDSize的长度
    • TypeWAVE表示后面需要两个子块:Format区块和Data区块

    Format chunk

    名称偏移地址字节数端序内容
    ID0x004Byte大端fmt (0x666D7420)
    Size0x044Byte小端16
    AudioFormat0x082Byte小端音频格式
    NumChannels0x0A2Byte小端声道数
    SampleRate0x0C4Byte小端采样率
    ByteRate0x104Byte小端每秒数据字节数
    BlockAlign0x142Byte小端数据块对齐
    BitsPerSample0x162Byte小端采样位数

    • 以'fmt '为标识
    • Size表示该区块数据的长度(不包含ID和Size的长度)
    • AudioFormat表示Data区块存储的音频数据的格式,PCM音频数据的值为1
    • NumChannels表示音频数据的声道数,1:单声道,2:双声道
    • SampleRate表示音频数据的采样率
    • ByteRate每秒数据字节数 = SampleRate * NumChannels * BitsPerSample / 8
    • BlockAlign每个采样所需的字节数 = NumChannels * BitsPerSample / 8
    • BitsPerSample每个采样存储的bit数,8:8bit,16:16bit,32:32bit
       

    Data chunk

    名称偏移地址字节数端序内容
    ID0x004Byte大端data(0x64617461)
    Size0x044Byte小端N
    Data0x08NByte小端音频数据
    • 'data'为标识
    • Size表示音频数据的长度,N = ByteRate * seconds
    • Data音频数据

    对于Data块,由于声道数和采样率的不同,造成不同的布局(每列1字节):

    1.8bit单声道

    采样1采样2
    数据1数据2

    2.8bit双声道

    采样1采样2
    数据1低字节数据1高字节数据1低字节数据1高字节

    3.16bit单声道

    采样1采样2
    数据1低字节数据1高字节数据1低字节数据1高字节

    4.16bit双声道

    采样1
    声道1数据1低字节声道1数据1高字节声道2数据1低字节声道2数据1高字节
    采样2
    声道1数据2低字节声道1数据2高字节声道2数据2低字节声道2数据2高字节

    实例分析

    RIFF chunk

    名称大小实际数据说明
    ID4Byte和描述一致
    Size4Byte文件大小为2718998字节
    Type4Byte文件类型为WAVE

    Format chunk

    名称字节数实例数据说明
    ID4Byte

    fmt (0x666D7420)

    描述一致

    Size4Byte大小为16
    AudioFormat2Byte音频格式
    NumChannels2Byte

    声道数

    双声道

    SampleRate4Byte采样率为44100
    ByteRate4Byte每秒数据字节数为176400
    BlockAlign2Byte数据块对齐
    BitsPerSample2Byte采样位数16bit

     Data chunk

    名称字节数实际数据说明
    ID4Byte

    data(0x64617461)

    描述一致

    Size4Byte数据大小为2718908字节
    DataNByte实际数据

     参考文献

    [1]WAV文件格式详解

    展开全文
  • 解析wav格式的音频C语言代码,主要是关注wav的头信息解析
  • android 录制.wav格式音频文件

    热门讨论 2013-07-08 22:22:27
    资源里面有个JAVA文件,导入那个类,根据文档描述的去调用那个类,来实现在android上录制wav格式的录音
  • wav格式文件分析

    2013-09-05 10:16:03
    wav音频格式
  • C++读取WAV格式音频文件

    热门讨论 2012-04-02 19:54:44
    这里面主要是用C++读取WAV文件的信息,包括采样率,位数,数据值等信息!
  • 83个常见报警音wav格式
  • 包括ADPCM格式说明;wav文件格式分析详解;WAV文件格式分析与应用;wav音频格式
  • Android录制WAV文件

    热门讨论 2016-02-20 13:58:53
    AudioRecorder录制WAV文件
  • 1KHz 10KHz 20Hz 音频0dB测试文件WAV格式 无损音源测试,不需要太多积分,有需要的拿去
  • wav格式文件的简单修复

    热门讨论 2010-03-20 18:58:36
    大家经常由于录音过程中出现意外,导致辛辛苦苦录制的音频不能打开,这里提供了一个方法,当然还需要有一定的知识的。
  • Python 读取wav格式文件

    千次阅读 2018-11-16 10:28:38
    1、import wave 用于读写wav文件 它提供了一个方便的WAV格式接口。 但是不支持压缩/解压缩,支持单声道/立体声。 读取格式: open(file[, mode]) 如果file是一个字符串,那么就打开文件,不然就把它当做一个类文件...
  • 解析WAV文件,并设计双缓存,用来播放音乐,检测到一个缓存播放完,就填充该缓存,下个播放完,就填充下个
  • WAV格式文件解析成PCM文件

    千次阅读 2017-12-21 08:09:17
    要想解析WAV文件就需要了解WAV文件的结构,我在上一文中简单介绍过这方面的知识点。大家有兴趣可以点击打开链接 实现这个功能也挺简单的,具体的步骤: 1.读取WAV文件的头部,获取一些重要的信息,比如采样率...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 74,325
精华内容 29,730
关键字:

wav格式文件