Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 犰狳将wav文件加载到mat_C++_Matlab_Armadillo_Libsndfile - Fatal编程技术网

C++ 犰狳将wav文件加载到mat

C++ 犰狳将wav文件加载到mat,c++,matlab,armadillo,libsndfile,C++,Matlab,Armadillo,Libsndfile,我想读wav文件到mat使用。它看起来像matlab中的函数: [sample_data,sample_rate] = wavread('test.wav'); sample_data = sample_data(1 : sample_rate * 1.5); 似乎犰狳不支持这个,所以我尝试使用lib: 我的问题是: 这样对吗?似乎我只能阅读固定数量的样品。 如何将样本数据转换为mat或vec? 是否有任何方法可以通过冒号范围索引访问矩阵,如以下matlab代码:sample\u data=s

我想读wav文件到mat使用。它看起来像matlab中的函数:

[sample_data,sample_rate] = wavread('test.wav');
sample_data = sample_data(1 : sample_rate * 1.5);
似乎犰狳不支持这个,所以我尝试使用lib:

我的问题是:

这样对吗?似乎我只能阅读固定数量的样品。 如何将样本数据转换为mat或vec? 是否有任何方法可以通过冒号范围索引访问矩阵,如以下matlab代码:sample\u data=sample\u data1:sample\u rate*1.5? 是的,这边是对的。如果您需要获取所有样本,您可以这样做:

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);
例如:

mat m1(vec.size(),sample_chanels);

for( size_t i=0;i<vec.size();i++)
   m1.row(i) = mat(vec[i]).t();
完整的类比不可用,但可以使用std::copy,因为mat有成员函数begin

  arma::vec D(shift);

  if(shift < m1.size())
    std::copy(m1.begin(),m1.begin()+shift,D.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);
例如:

mat m1(vec.size(),sample_chanels);

for( size_t i=0;i<vec.size();i++)
   m1.row(i) = mat(vec[i]).t();
完整的类比不可用,但可以使用std::copy,因为mat有成员函数begin

  arma::vec D(shift);

  if(shift < m1.size())
    std::copy(m1.begin(),m1.begin()+shift,D.begin());
链接到完整示例:

我请你帮我回答另一个关于conv2的问题,你介意吗?在生成代码之前,我需要移植此函数。请您帮我回答另一个有关conv2的问题,您介意吗?我需要在构建代码之前移植这个函数。