本文目录一览:
- 1、python怎么把一个32bit float编码的pcm数据转换成wav文件,或者说setsampwidth的参数应该是什么
- 2、为什么python转换的wav不能播放,必须用sox转换
- 3、python中引入pyttsx3包然后用这个包实现文本转换成的语音engine.say()怎么存储成WAV文件
- 4、谁知道如何在python中用处理wav文件,并且对他的频谱进行分析的程序
- 5、python 播放 wav
- 6、Python pydub音频处理
python怎么把一个32bit float编码的pcm数据转换成wav文件,或者说setsampwidth的参数应该是什么
就一般情况而言,大多数的wav音频文件就是pcm编码的,所以不用转。
所以你应该把问题描述清楚:你想把pcm编码转成什么编码?
为什么python转换的wav不能播放,必须用sox转换
格式不支持。python转换的wav只可用于储存格式,不可用于读取(播放)格式,想要播放必须使用sox插件进行转换。
python中引入pyttsx3包然后用这个包实现文本转换成的语音engine.say()怎么存储成WAV文件
pyttsx 是一个Python的第三方包,支持在Mac OS X, Windows, Linux 实现文字转语言( text-to-speech)~
谁知道如何在python中用处理wav文件,并且对他的频谱进行分析的程序
1.读取wav文件
# -*- coding: utf-8 -*-
import wave
import pylab as pl
import numpy as np
# 打开WAV文档
f = wave.open(r"c:\WINDOWS\Media\ding.wav", "rb")
# 读取格式信息
# (nchannels, sampwidth, framerate, nframes, comptype, compname)
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
# 读取波形数据
str_data = f.readframes(nframes)
f.close()
#将波形数据转换为数组
wave_data = np.fromstring(str_data, dtype=np.short)
wave_data.shape = -1, 2
wave_data = wave_data.T
time = np.arange(0, nframes) * (1.0 / framerate)
# 绘制波形
pl.subplot(211)
pl.plot(time, wave_data[0])
pl.subplot(212)
pl.plot(time, wave_data[1], c="g")
pl.xlabel("time (seconds)")
pl.show()
2.观察信号频谱
# -*- coding: utf-8 -*-
import numpy as np
import pylab as pl
sampling_rate = 8000
fft_size = 512
t = np.arange(0, 1.0, 1.0/sampling_rate)
x = np.sin(2*np.pi*156.25*t) + 2*np.sin(2*np.pi*234.375*t)
xs = x[:fft_size]
xf = np.fft.rfft(xs)/fft_size
freqs = np.linspace(0, sampling_rate/2, fft_size/2+1)
xfp = 20*np.log10(np.clip(np.abs(xf), 1e-20, 1e100))
pl.figure(figsize=(8,4))
pl.subplot(211)
pl.plot(t[:fft_size], xs)
pl.xlabel(u"时间(秒)")
pl.title(u"156.25Hz和234.375Hz的波形和频谱")
pl.subplot(212)
pl.plot(freqs, xfp)
pl.xlabel(u"频率(Hz)")
pl.subplots_adjust(hspace=0.4)
pl.show()
python 播放 wav
这是python的matplotlib里的一个画wav文件的时频分析(specgram)的函数。和matlab里的那个差不多。使用超级方便,自动就做好了短时傅立叶变换(short
time fourier
transform)~函数用法具体可参照
关于短时傅立叶变换的具体内容可google之~下面介绍程序。
#首先import各种library。wave和struct都是安装python2.6自带的。scipy可以在
#下载。pylab可在下载。都是非常#强大的包包啊~~
import wave
import struct
from scipy import *
from pylab import *
#读取wav文件,我这儿读了个自己用python写的音阶的wav
filename = '/Users/rongjin/Desktop/scale.wav'
wavefile = wave.open(filename, 'r') # open for writing
#读取wav文件的四种信息的函数。期中numframes表示一共读取了几个frames,在后面要用到滴。
nchannels = wavefile.getnchannels()
sample_width = wavefile.getsampwidth()
framerate = wavefile.getframerate()
numframes = wavefile.getnframes()
#建一个y的数列,用来保存后面读的每个frame的amplitude。
y = zeros(numframes)
#for循环,readframe(1)每次读一个frame,取其前两位,是左声道的信息。右声道就是后两位啦。
#unpack是struct里的一个函数,用法详见。简单说来
就是把#packed的string转换成原来的数据,无论是什么样的数据都返回一个tuple。这里返回的是长度为一的一个
#tuple,所以我们取它的第零位。
for i in range(numframes):
val =
wavefile.readframes(1)
left =
val[0:2]
#right = val[2:4]
v =
struct.unpack('h', left )[0]
y[i] =
v
#framerate就是44100,文件初读取的值。然后本程序最关键的一步!specgram!实在太简单了。。。
Fs = framerate
specgram(y, NFFT=1024, Fs=Fs, noverlap=900)
show()
好看的specgram就画好了~~x轴是时间,y轴是频率~
Python pydub音频处理
Pydub可以让你用简单的方式处理音频。
Pydub提供了简洁的高层接口,极大的扩展了python处理音频文件的能力。
GitHub链接: pydub-github
GitHub:
pydub的使用必须安装对应的依赖软件 ffmpeg 或 avconv
验证是否安装成功:
Open a WAV file
Open a mp3 file
Open a other file
切割音频
分贝操作
分贝(decibel)是量度两个相同单位之数量比例的计量单位,主要用于度量声音强度,常用dB表示。
音频链接
将一个文件添加到另一个文件的末尾
音频长度
淡入淡出
重复音频
再次淡入淡出
直接保存
所有ffmpeg支持的都支持
用标签保存结果(元数据)
实例:
将mp3文件转换成wav文件:
Python音频处理库 pydub