[英]How can MATLAB function wavread() be implemented in Python?
在Matlab中:
[s, fs] = wavread(file);
由於s中每個元素的值在-1和1之間,因此我們使用其wavread函數導入scikits.audiolab。
from scikits.audiolab import wavread
s, fs, enc = wavread(filename)
但是,當我對相同的輸入wav文件進行紅色處理時,在Matlab和Python中s的值完全不同。 如何獲得與MATLAB中相同的s輸出?
ps wav文件是簡單的16位單聲道文件,以44100Hz采樣。
Matlab wavread()
函數默認返回歸一化數據,即它將所有數據縮放到-1到+1范圍。 如果您的音頻文件為16位格式,則原始數據值將在-32768至+32767的范圍內,該范圍應與scikits.audiolab.wavread()
返回的范圍相匹配。
要將數據標准化為-1到+1范圍內,您需要做的就是將數據數組除以具有最大幅度的值(在這種情況下使用numpy
模塊):
from scikits.audiolab import wavread
import numpy
s, fs, enc = wavread(filename) # s in range -32768 to +32767
s = numpy.array(s)
s = s / max(abs(s)) # s in range -1 to +1
請注意,您也可以在Matlab函數中使用'native'
選項來返回未歸一化的數據值,如horchler在其評論中所建議的那樣。
[s, fs] = wavread(file, 'native');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.