python处理wav音频
获取音频
wav_path = "test.wav"
with wave.open(wav_path, "rb") as f:
f = wave.open(wav_path)
print(f.getparams())
输出结果:
声道,采样宽度,帧速率,帧数,唯一标识,无损
WAV文件中由以下三个部分组成:
1.“RIFF” chunk descriptor
2.The “fmt” sub-chunk
3.The “data” sub-chunk 存这些信息的时候都要要有 “ID”、“大小”、“格式”,这些信息标注了数据的位置,
“WAV”格式由“fmt”和“data”,两个部分组成:
其中“fmt”的存储块用来存音频文件的格式;
“data”的存储块用来存实际听到的声音的信息。
物理上描述的振幅和时间:长度(时间)和振幅,当然人的耳朵听听见的是长度和音调。
显示音频波形图
import wave
import matplotlib.pyplot as plt
import numpy as np
import os
filepath = "./" # 添加路径
filename = os.listdir(filepath) # 得到文件夹下的所有文件名称
f = wave.open(filepath + filename[0], 'rb')
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
strData = f.readframes(nframes) # 读取音频,字符串格式
# waveData = np.fromstring(strData, dtype=np.int16) # 将字符串转化为int
waveData = np.frombuffer(strData, dtype=np.int16) # 将字符串转化为int
waveData = waveData * 1.0 / (max(abs(waveData))) # wave幅值归一化
waveData = np.reshape(waveData, [nframes, nchannels])
f.close()
# plot the wave
time = np.arange(0, nframes) * (1.0 / framerate)
plt.figure()
plt.subplot(5, 1, 1)
plt.plot(time, waveData[:, 0])
plt.xlabel("Time(s)")
plt.ylabel("Amplitude")
plt.title("Ch-1 wavedata")
plt.grid('on') # 标尺,on:有,off:无。
plt.subplot(5, 1, 3)
plt.plot(time, waveData[:, 1])
plt.xlabel("Time(s)")
plt.ylabel("Amplitude")
plt.title("Ch-2 wavedata")
plt.grid('on') # 标尺,on:有,off:无。
plt.subplot(5, 1, 5)
plt.plot(time, waveData[:, 1])
plt.xlabel("Time(s)")
plt.ylabel("Amplitude")
plt.title("Ch-3 wavedata")
plt.grid('on') # 标尺,on:有,off:无。
plt.show()
pygame.mixer.music.play()
开始播放音乐流。
play(loops=0, start=0.0) -> None
该函数用于播放已载入的音乐流。如果音乐已经开始播放,则将会重新开始播放。
loops 参数控制重复播放的次数,例如 play(5) 意味着被载入的音乐将会立即开始播放 1 次并且再重复 5 次,共 6 次。如果 loops = -1,则表示无限重复播放。
start 参数控制音乐从哪里开始播放。开始的位置取决于音乐的格式。MP3 和 OGG 使用时间表示播放位置(以秒为单位)。MOD使用模式顺序编号表示播放位置。如果音乐文件无法设置开始位置,则传递了start参数后会产生一个NotImplementedError 错误。