Python音频处理勇敢到的操作

本文详细介绍了Python环境下对.wav音频文件的处理,包括批量读取文件名、读取与写入音频、播放音频、加窗分帧以及生成语谱图等操作,重点使用了wave和pyaudio库。
摘要由CSDN通过智能技术生成

前言

本文主要记录python下音频常用的操作,以.wav格式文件为例。其实网上有很多现成的音频工具包,如果仅仅调用,工具包是更方便的。

1、批量读取.wav文件名:

1

2

3

4

5

6

import os

filepath = "./data/" #添加路径

filename= os.listdir(filepath) #得到文件夹下的所有文件名称 

for file in filename:

    print(filepath+file)

  这里用到字符串路径:

1.通常意义字符串(str)
2.原始字符串,以大写R 或 小写r开始,r'',不对特殊字符进行转义
3.Unicode字符串,u'' basestring子类

如:

1

2

3

path = './file/n'

path = r'.\file\n'

path = '.\\file\\n'

  三者等价,右划线\为转义字符,引号前加r表示原始字符串,而不转义(r:raw string).

常用获取帮助的方式:

>>> help(str)
>>> dir(str)
>>> help(str.replace)

2、读取.wav文件

wave.open 用法:

1

wave.open(file,mode)

  mode可以是:

‘rb’,读取文件;

‘wb’,写入文件;

不支持同时读/写操作。

Wave_read.getparams用法:

1

2

3

= wave.open(file,'rb')

params = f.getparams()

nchannels, sampwidth, framerate, nframes = params[:4]

  其中最后一行为常用的音频参数:

nchannels:声道数

sampwidth:量化位数(byte)

framerate:采样频率

nframes:采样点数 

  • 单通道

 对应code:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

import wave

import matplotlib.pyplot as plt

import numpy as np

import os

filepath = "./data/" #添加路径

filename= os.listdir(filepath) #得到文件夹下的所有文件名称 

= wave.open(filepath+filename[1],'rb')

params = f.getparams()

nchannels, sampwidth, framerate, nframes = params[:4]

strData = f.readframes(nframes)#读取音频,字符串格式

waveData = np.fromstring(strData,dtype=np.int16)#将字符串转化为int

waveData = waveData*1.0/(max(abs(waveData)))#wave幅值归一化

# plot the wave

time = np.arange(0,nframes)*(1.0 / framerate)

plt.plot(time,waveData)

plt.xlabel("Time(s)")

plt.ylabel("Amplitude")

plt.title("Single channel wavedata")

plt.grid('on')#标尺,on:有,off:无。

  结果图:

  • 多通道

 这里通道数为3,主要借助np.reshape一下,其他同单通道处理完全一致,对应code:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

# -*- coding: utf-8 -*-

"""

Created on Wed May  3 12:15:34 2017

@author: Nobleding

"""

import wave

import matplotlib.pyplot as plt

import numpy as np

import os

filepath = "./data/" #添加路径

filename= os.listdir(filepath) #得到文件夹下的所有文件名称 

= 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 = waveData*1.0/(max

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值