为什么audioread会产生内存不足错误?

时间:2015-04-15 19:32:45

标签: matlab

我想知道的是如何使用另一个函数代替audioread,或者扩展我的可用内存。这是代码:

[y,f] = audioread('myfile.wav');

其中wav文件是60MB。有没有办法可以将我的文件解析成一堆较小的文件并在Matlab中连接它们?或者添加额外的内存?

我知道问题是文件大小,但是不应该读取60MB文件吗?

3 个答案:

答案 0 :(得分:0)

尝试使用wavread('name.wav')而不是audioread('name.wav')。但我认为60 MB真的很大。我的wav文件有100 kB,我得到了长度为60000的向量(使用wavread())。

答案 1 :(得分:0)

问题可能与wav文件中的每个样本由8位或16位(1或2个字节)表示的事实有关,而Matlab中的标准数字格式是64位浮点数{{1 (8字节),所以你需要4到8倍的文件占用磁盘的内存。您可以指示double不使用双值输出,而是使用语法

使用本机输出
wavread

使内存大小与磁盘存储大小相同。缺点是你得到" raw"整数数据类型(y = wavread('myfile.wav', 'native') int8)中的值,而int16通常会将文件中的值范围缩放到[-1,1]。

另一方面,今天的计算机系统仍有480 MB,其中16 GB的主内存已经处于较低的范围内。因此,在读取文件时出现内存不足错误真的很奇怪。尝试关闭其他程序以获得更多免费主内存,或尝试使用wavreadclear清除Matlab中的其他变量。使用操作系统的内存监视器查看有多少可用内存以及哪些进程耗尽它。重新启动操作系统或重新启动Matlab也可能有所帮助。

答案 2 :(得分:0)

以下是我达成的结论:

* 60MB在audioread函数中运行会导致内存不足错误。唯一的解决方法是将音频文件拆分为较小的文件(例如,每个1MB),然后单独处理/读取它们。