使用matlab中的memmapfile读取并表示mp3文件

时间:2015-01-10 16:04:12

标签: matlab audio machine-learning mp3 large-files

我必须使用matlab分析生物声学音频。最终我希望能够在音频中找到异常。这就是我需要找到一种方式来表示音频的原因,我可以提取和比较功能。我正在处理高达150 MB的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文件。

1 个答案:

答案 0 :(得分:0)

我认为问题是mammapfile默认读取uint8格式的数据,而audioread函数以另一种方式读取数据。 您如何看到here,您可以在使用memmapfile读取数据时指定数据的格式,因此请尝试"播放"有不同的价值观。从documentation我读到你可以读取双格式数据,所以尝试修改memmapfile数据格式和audioread数据格式。
最后,memmapfile总是以矩阵形式组织数据,例如" somenumbers x 1&#34 ;,所以如果你想要原始数据,你需要使用像reshape这样的东西。 无论如何,如果你使用大数据我建议你尝试使用不同的东西而不是memmapfile,因为它非常慢