Python处理音频

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 错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值