❶ python3.5scipy包怎樣讀取wav文件
用語音處理的庫
樓主找找
pyb 提供了簡潔的高層介面,極大的擴展了python處理音頻文件的能力,pyb可能不是最強大的Python音頻處理庫,但絕對是Python最簡潔易用的音頻庫只要,非要說有什麼弊端,大概只有高度依賴ffmpeg,Linux安裝起來不太方便吧。
❷ 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文件的庫文件是什麼
是pyaudio。
因為錄音,是由計算機內部音效卡實現的,所以我們需要利用pyaudio庫調用音效卡進行聲音錄制,而保存音頻文件我們可以使用python自帶的wave庫來將音頻保存為wav音頻文件,所以python語言錄制聲音和保存wav文件的庫文件是pyaudio。
語言錄音又稱對白錄音,有聲影片電影錄音的主要工作內容之一,根據影片的內容和藝術要求,把演員的對白、旁白和內心獨白記錄下來的過程。
❺ python 怎麼錄制系統聲音不只是麥克風聲音
#我可以幫你寫一段代碼,能夠錄音形成wav文件,不過要分析錄音文件的波形,你可以另外找#工具,比如cooledit,也很方便。
from sys import byteorder
from array import array
from struct import pack
import pyaudio
import wave
THRESHOLD = 500
CHUNK_SIZE = 1024
FORMAT = pyaudio.paInt16
RATE = 44100
def is_silent(snd_data):
"Returns 'True' if below the 'silent' threshold"
return max(snd_data) < THRESHOLD
def normalize(snd_data):
"Average the volume out"
MAXIMUM = 16384
times = float(MAXIMUM)/max(abs(i) for i in snd_data)
r = array('h')
for i in snd_data:
r.append(int(i*times))
return r
def trim(snd_data):
"Trim the blank spots at the start and end"
def _trim(snd_data):
snd_started = False
r = array('h')
for i in snd_data:
if not snd_started and abs(i)>THRESHOLD:
snd_started = True
r.append(i)
elif snd_started:
r.append(i)
return r
# Trim to the left
snd_data = _trim(snd_data)
# Trim to the right
snd_data.reverse()
snd_data = _trim(snd_data)
snd_data.reverse()
return snd_data
def add_silence(snd_data, seconds):
"Add silence to the start and end of 'snd_data' of length 'seconds' (float)"
r = array('h', [0 for i in xrange(int(seconds*RATE))])
r.extend(snd_data)
r.extend([0 for i in xrange(int(seconds*RATE))])
return r
def record():
"""
Record a word or words from the microphone and
return the data as an array of signed shorts.
Normalizes the audio, trims silence from the
start and end, and pads with 0.5 seconds of
blank sound to make sure VLC et al can play
it without getting chopped off.
"""
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT, channels=1, rate=RATE,
input=True, output=True,
frames_per_buffer=CHUNK_SIZE)
num_silent = 0
snd_started = False
r = array('h')
while 1:
# little endian, signed short
snd_data = array('h', stream.read(CHUNK_SIZE))
if byteorder == 'big':
snd_data.byteswap()
r.extend(snd_data)
silent = is_silent(snd_data)
if silent and snd_started:
num_silent += 1
elif not silent and not snd_started:
snd_started = True
if snd_started and num_silent > 30:
break
sample_width = p.get_sample_size(FORMAT)
stream.stop_stream()
stream.close()
p.terminate()
r = normalize(r)
r = trim(r)
r = add_silence(r, 0.5)
return sample_width, r
def record_to_file(path):
"Records from the microphone and outputs the resulting data to 'path'"
sample_width, data = record()
data = pack('<' + ('h'*len(data)), *data)
wf = wave.open(path, 'wb')
wf.setnchannels(1)
wf.setsampwidth(sample_width)
wf.setframerate(RATE)
wf.writeframes(data)
wf.close()
if __name__ == '__main__':
print("please speak a word into the microphone")
record_to_file('demo.wav')
print("done - result written to demo.wav")
❻ 利用python編寫代碼如何把wav文件轉為mp3文件
using lame (command line), you can encode wav to mp3 like this:
$ lame --preset insane /path/to/file.wav
which would create:
file.wav.mp3
in Python, you could use subprocess to call it:
wav = 'myfile.wav'
cmd = 'lame --preset insane %s' % wav
subprocess.call(cmd, shell=True)
❼ Python播放wav音頻,在Windows系統下
手頭正好一個腳本,在Windows下執行沒有問題。供參考:
importwinsound,time,sys
mp3='qed.wav'
if__name__=='__main__':
iflen(sys.argv)<2:
times=1
else:
times=int(sys.argv[1])
iftimes==0:
while1:
winsound.PlaySound(mp3,winsound.SND_NODEFAULT)
else:
foriinrange(times):
winsound.PlaySound(mp3,winsound.SND_NODEFAULT)
❽ 為什麼python轉換的wav不能播放,必須用sox轉換
格式不支持。python轉換的wav只可用於儲存格式,不可用於讀取(播放)格式,想要播放必須使用sox插件進行轉換。
❾ python怎麼把一個32bit float編碼的pcm數據轉換成wav文件,或者說setsampwidth的參數應該是什麼
就一般情況而言,大多數的wav音頻文件就是pcm編碼的,所以不用轉。
所以你應該把問題描述清楚:你想把pcm編碼轉成什麼編碼?
❿ 怎樣用python畫wav文件的時頻分析圖
這是python的matplotlib里的一個畫wav文件的時頻分析(specgram)的函數。和matlab里的那個差不多。使用超級方便,自動就做好了短時傅立葉變換(short
time fourier
transform)~函數用法具體可參照http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.specgram
關於短時傅立葉變換的具體內容可google之~下面介紹程序。
#首先import各種library。wave和struct都是安裝python2.6自帶的。scipy可以在
#http://www.scipy.org/Download下載。pylab可在http://matplotlib.sourceforge.net/下載。都是非常#強大的包包啊~~
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里的一個函數,用法詳見http://docs.python.org/library/struct.html。簡單說來
就是把#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軸是頻率~