赞
踩
目标:
声音物理意义:声音是一种纵波,纵波是质点的振动方向与传播方向同轴的波。如敲锣时,锣的振动方向与波的传播方向就是一致的,所以声波是纵波。纵波是波动的一种(波动分为横波和纵波);
通常对声音进行采样量化后,得到声音的"时间—振幅"信息;
下图是用Adobe Audition打开一段音频数据:
说明:图中上半部分为波形图,下半部分为频谱图;
频谱通过对波形的傅里叶变换,把波形中的每个频率拆开来,再在纵轴上展开,越往上频率越高。频谱是三维的,越亮表示在这个频率上越响,越暗表示越弱;
所以频谱相对于波形图是包含更多信息的,缺点就是无法整体显示音量总和的大小,所以配合查看最佳;
用到Python处理wav文件的包wave,遍历wav信息:
import wave as we
WAVE = we.open('audio.wav')
for item in enumerate(WAVE.getparams()):
print(item)
对于wave.getparams()的描述:
输出信息(声道,采样宽度,帧速率,帧数,唯一标识,无损)
上图打印信息如下:
表示采样点个数为27774,采样的频率为44100HZ;
主要通过三个步骤实现:
导入WAV文件——设置参数——matplotlib绘制波形图
import wave as we import matplotlib.pyplot as plt import numpy as np from scipy.io import wavfile WAVE = we.open('audio.wav') a = WAVE.getparams().nframes # 帧总数 f = WAVE.getparams().framerate # 采样频率 sample_time = 1/f # 采样点的时间间隔 time = a/f # 声音信号的长度 sample_frequency, audio_sequence = wavfile.read('audio.wav') print(audio_sequence) # 声音信号每一帧的大小 x_seq = np.arange(0, time, sample_time) plt.plot(x_seq, audio_sequence, 'red') plt.xlabel("time(s)") plt.show()
通过绘制波形图,可以了解以下信息:
1、Python中wave包可以获取wav文件的几个基础信息,比如文件的声道、声音的采样宽度、帧速率、帧数、是否唯一标识、是否无损,这也是音频数据的基本信息;
2、WAV的文件时间,可以通过帧总数除以采样频率获得;
3、WAV文件将声音信号存储为一个n * 1或者n * 2的矩阵点,区分单声道和多声道;
参考文章:https://www.cnblogs.com/rynerlute/p/8487233.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。