2017-12-18 287 views
0

我已經下scipy.io.wavfile如何在音頻(.wav或.mp3)文件中每秒獲取幀(或樣本)的數量或毫秒數?

其具有44100 per sec or hz一個幀率和總幀是9745238和音頻的持續時間是由220 secs文件屬性,但它應該是220.9804535147392並且具有2通道觀察的音頻文件。

讀取文件之後,它返回我9745238 X 2矩陣的16bit signed int如預期

其中1列是信道1點的數據和2列是相應9745238幀

所以我的問題的信道2點的數據是否有任何強大的方法每秒或毫秒找到這些值(連續1,2個通道,即每行或矩陣)?

任何猜測?

編輯1

我已經提到了一個非常直觀的討論here

,我想我需要的是比特率這是bitrate = sampleRate * bitDepth 但我怎樣才能得到位深度是它sample size/sample width或別的東西。

+1

你確定持續時間正好是220秒? 9745238在44.1Khz將是220.98秒。 –

+0

是的,我想這是我從文件的屬性中看到的持續時間,也許它已經舍入了它。 –

+0

@ greg-449檢查編輯。 –

回答

0

所以,我想比特每秒的數量和做一些研究後,我發現,我需要每一位即比特率,肯定位深度的價格爲樣本的比特數(這是不變)。

要理解這一點,如果我們使用wave模塊來打印文件的第一幀,我們得到類似的東西。

b'\x00\x00\x00\x00' 

,正如你可以看到,它是一個16bit-unicoded串並使用numpy其轉化爲16bit signed int後。

np.fromstring(wav.readframes(1), np.int16)

它會給你[0 0]是在第一幀中的每個信道的8位。

並且因爲frameRate是44100,因此對於每個矢量例如bitrate = frame_rate (44100) * bitDepth (16)。 [0 0],我們將這個值乘以通道數(,在我的情況下爲2),以獲得關於這些位的答案。

編輯1

和採樣率和幀速率是兩種不同的東西,一幀由樣本的數目,並且是sample_width每個樣本的大小。

例如。考慮一個音頻_作爲示例表示,並有3頻道,4幀,那麼它將被表示爲類似的東西。

[_ _ _] [_ _ _] [_ _ _] [_ _ _]

如果您查看使用scipy庫,然後代替_矩陣會有號碼將根據解碼的字符串,並把聲明以另一種方式,我們可以說,它的值,在每一個元素矩陣是一個樣本。

所以有音頻共有12個樣品,如果我們假定這首歌的時間是,1 sec那麼frame_rate4hzsample_rate12hz

你可以參考這些討論的答案更多的信息。

  1. sound.stackexchange
  2. theDontOvelookCommentsSection
  3. this one too
相關問題