2015-01-10 68 views
0

我必須使用matlab分析生物聲學音頻文件。最終我希望能夠在音頻中找到異常。這就是我需要找到一種以我可以提取和比較功能的方式來表示音頻的原因。我正在處理高達150 MB的mp3文件。這些文件對於matlab讀取它的內存來說太大了。因此我想使用memmapfile()函數。我使用了下面的代碼和一個小的mp3文件來了解它是如何工作的。在matlab中使用memmapfile讀取和表示mp3文件

[testR, ~] = audioread('test.mp3'); 
testM = memmapfile('test.mp3'); 
disp(testM.Data); 
disp(testR); 

testM.Data和testR的實際值是不同的。 Audioread()返回一個7483391 x 2矩陣和memmapfile()一個4113874 x 1矩陣。 我不是很確定memmapfile()是如何工作的,我期望它相互平等。有沒有辦法以相同的格式讀取mp3文件audioread()使用memmapfile()?在音頻文件的情況下,memmapfile實際返回什麼?也許它在異常檢測的情況下也可用於矢量格式?

在此先感謝!

注意:原始文件採用wav IMA ADPCM格式,大小從1.5到2.5 gb。由於Matlab無法處理該格式和我將它們轉換爲8位mp3文件的文件大小。

回答

0

我認爲問題是mammapfile默認以uint8格式讀取數據,而audioread函數以另一種方式讀取數據。 如何看到here當你用memmapfile讀取數據時,你可以指定數據的格式,所以試着用不同的值「玩」。從documentation我讀到,你可以讀取雙格式的數據,所以嘗試修改memmapfile數據格式和audioread數據格式。
最後,memmapfile總是像「somenumbers x 1」一樣組織矩陣中的數據,所以如果你想要原始數據,你需要使用類似reshape的東西。 無論如何,如果你使用大數據,我建議你嘗試使用不同的memmapfile,因爲它非常非常慢

+0

你說得對,memmapfile不是正確的解決方案。我決定按塊讀取文件。這完美的作品! – pevadi