犰狳加载wav文件到mat
Armadillo load wav file to mat
我想使用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);
我的问题:
- 这样正确吗?似乎我只能看固定数量的样本。
- 如何将样本数据转换为
mat
或vec
? - 是否有任何方法通过冒号范围索引访问矩阵,如matlab代码:
sample_data = sample_data(1 : sample_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());
链接到完整的示例:http://pastebin.com/X4fgzBrR
相关文章:
- 如果函数使用 OPENCV Mat 作为输入,如何编写头文件?
- 将 matlab 数组(MAT-文件)转换为C++数组
- 犰狳读取MAT文件错误
- 将行附加到Armadillo .mat文件
- 从 MAT 文件中读取 C 应用程序中的自定义类
- 计算 OpenCV 中两个 Mat 文件的相关性
- C ++保存mat文件,构建日志显示"undefined reference to 'H5Tget_member_type'....................."
- 正在从C++中的.mat文件中读取变量
- 在OpenCV中将.mat文件从MATLAB转换为cv::mat矩阵
- 在 Matlab .mat 文件中读取:变量的秩和变暗正确,但数据为 NULL
- 通过 MatIO 读取 Visual c++ 中的 mat 文件的数据
- matPutVariable:尝试将数据输出到mat文件时出错(matrix::serialize::WrongSize
- 使用STL容器从c++中读取.mat文件的Matlab API
- 使用C++从MAT文件导入三维阵列
- 使用Matio库将.mat文件中的字符串读取到C++中
- 读取MatLab (mat)文件与VNL
- 从c++中循环写入.mat文件
- 将.mat文件中的值输入到C++中的数组中
- 如何保存 c++ 可读的 .mat 文件
- 写入MAT文件:508次呼叫成功后访问违规写入位置