Armadillo将wav文件加载到垫

时间:2015-07-25 15:42:02

标签: c++ matlab armadillo libsndfile

我想使用Armadillo将wav文件读入mat。在matlab中看起来像wavread函数:

[sample_data,sample_rate] = wavread('test.wav');
sample_data = sample_data(1 : sample_rate * 1.5);

似乎Armadillo不支持这一点,所以我尝试使用libsndfile lib:

SNDFILE     *infile = NULL ;
SF_INFO     sfinfo ;
infile = sf_open(filename, SFM_READ, &sfinfo);

int N = 1024;
double samples[N];
double sample_rate = sfinfo.samplerate;
sf_read_double(infile, samples, N);

我的问题:

  1. 这种方式是否正确?似乎我只能阅读固定数量的样本。
  2. 如何将样本数据转换为matvec
  3. 有没有办法通过冒号范围索引访问矩阵,例如这个matlab代码:sample_data = sample_data(1 : sample_rate * 1.5);

1 个答案:

答案 0 :(得分:4)

  1. 是的,这种方式是正确的。如果您需要获得所有样品,您可以这样做:

    $_GET['username']
  2. 例如:

    'imsop'
  3. 完全类比不可用,但你可以使用std :: copy(),因为mat有成员函数begin()

    auto sample_chanels = sfinfo.channels;
    
    std::vector<std::vector<double>> vec;
    
    std::vector<double> temp(sample_chanels);
    
    while(sf_read_double(infile, temp.data(), sample_chanels))
    vec.push_back(temp);
    
  4. 链接到完整示例: http://pastebin.com/X4fgzBrR