有漂浮計算器幾個類似的問題。有不同的用例。
用戶想將.mp3文件轉換爲PCM文件,如.wav文件。
用戶想要訪問.mp3文件中的原始數據(即,不將其視爲壓縮的PCM)。這裏的用例是瞭解MP3和AAC等壓縮方案的工作原理之一。
這個答案是針對第二個,雖然我沒有工作代碼分享或指向。
諸如MP3之類的壓縮方案通常在頻域中工作。作爲一個簡化示例,您可以一次採集一個.wav文件1024個樣本,使用FFT對1024個樣本中的每個塊進行變換,然後將其存儲起來。粗略地說,有損壓縮然後丟棄來自頻域的信息以允許較小的編碼。
純粹的python實現是非常不切實際的,如果你所要做的只是從.mp3轉換爲.wav。但是如果你想探索.mp3和相關方案是如何工作的,即使代碼運行速度比ffmpeg慢1000倍,你可以輕鬆地修改一些東西,這實際上可能是有用的,特別是如果以允許閱讀源代碼以瞭解.mp3壓縮如何工作。例如,請參閱http://bugra.github.io/work/notes/2014-07-12/discre-fourier-cosine-transform-dft-dct-image-compression/以獲取IPython工作簿,瞭解如何在JPEG等圖像壓縮方案中使用頻域轉換。類似MP3壓縮和類似的東西對於學習壓縮的人來說是有用的。
.mp3文件基本上是一系列MP3幀,每個幀都有一個標題和數據組件。接下來的第一項任務是編寫一個Python類(或多個類)來表示這些類,並從.mp3文件中讀取它們。首先在現代機器上以二進制模式(即f = open(filename,「rb」)和data = f.read())讀取文件,因爲.mp3中典型的5min歌曲大約爲5MB,你可能只是一口氣讀完整件事情)。
沿着這些方向寫一個更簡單(效率更低)的編碼方案也是值得的,以探索它的工作原理,逐漸添加像MP3和AAC這樣的技巧方案。例如,將一個PCM輸入文件分成1024個樣本塊,使用FFT或DCT或其他東西,然後再返回,看看你如何得到原始數據。然後探索如何從頻率轉換版本中丟棄數據,並查看轉換回PCM數據後的效果。然後,最終的結果會很糟糕,首先,通過查看問題並查看例如MP3和AAC做的,你可以學到爲什麼這些壓縮方案按照他們的方式做事。
簡而言之,如果您的用例是「完成任務」,那麼您可能不想使用Python。另一方面,如果你的用例是「學習如何完成」的話,那就不一樣了。 (作爲一個粗略的經驗法則,在90年代的Pentium 100上進行優化組裝時可以做些什麼,在現代酷睿i5上使用Python的性能大致相同 - 類似的 - 有一個因素原始性能爲100左右,而使用Python的速度也有類似的下降)。
選中此:http://stackoverflow.com/questions/3049572/how-to-convert-mp3-to-wav-in-python。顯然,最簡單的方法是使用外部程序將mp3轉換爲wav –
短語「原始數據」非常混亂。如果你說原始數據,我認爲你想獲得文件的字節。 (你用'open('your.mp3','rb')''得到的)但我認爲你不想要這種原始數據。 – Kritzefitz
我想要那種原始數據 - 文件的字節。但是沒有文件的所有字節都是音樂的內容。還有一些標籤,也許還有其他一些標籤。所以我想知道是否有任何模塊可以提取它。@ IchUndNichtDu – zhangyangyu