我希望透過一段語音分析語音的強度(響度)。
因為是工科狗而非理科狗,且對於音頻訊號分析是外行,只簡單看了下FFT,所以對於自己分析語音強度的方法沒有安全感。希望這方面的高手能夠指導下。非常感謝! ! !
以下是我取得語音訊號資料的過程。 123.wav語音檔來自於百度合成的mp3轉碼,所以這段語音就算存在噪音也應該是微量的,這裡不用再濾波了(就算濾波也不知道濾波器係數該用什麼)。我猜想到這應該是沒有問題的?
# -*- coding: utf-8 -*-
import numpy as np
import pylab as pl
import wave
f = wave.open("/home/dyan/123.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)
# 在时间轴上画波形图
# 以上nchannels=1, sampwidth=2, framerate=16000
lenth=len(wave_data)
ti=lenth/16000.0
t = np.arange(0, ti, ti/lenth)
pl.plot(t,wave_data)
pl.show()
波形圖(時間長度大約1.8s)
我希望在播放這段語音的時候,通知語音的強度,但是顯然頻率太快了,並不要這麼快,例如0.2s一次統計也許是比較適合的。
我有2個想法,但不確定,沒有安全感:
1、每0.2s求振幅绝对值平均值。
2、每0.2s取振幅绝对值最大值。
不了解音訊訊號處理,所以完全不知道這兩種方案中的一種能不能代表語音強度。或應該用其他的方式。
綜上所述,2個問題:
1、这样获取波形数据wav_data是否正确?
2、怎样表达这段语音的强度(响度)?
聲音就是機械振動波
它的強度就是振幅大小
高音和低音是 頻率