簡體   English   中英

如何在Python中實現MATLAB函數wavread()?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM