malloc&&fread
const char *wavePath = [_filePath UTF8String];
FILE *fh;
int16_t * adbuf;
fh = fopen(wavePath, "rb");
if (fh == NULL) {
NSLog(@"Unable to open input file ");
} //模型需要每16个bit的特征信息
// 获得wav文件的字节数/2,前面44bytes是wav的文件头,去掉 //定位到文件结尾
fseek(fh, , SEEK_END); // 获取文件长度 最后的舍弃
int flen =(int)(ftell(fh)-)/ - ; // 重新定位到开头,准备读入文件内容
fseek(fh, , SEEK_SET); // 申请空间存储读入内容
//代表初始化了flen个16bit即两个byte的内存空间
adbuf = (int16_t *)malloc(sizeof(int16_t)*flen);
//然后每16 16个bit这样读进去,读的次数为flen
fread(adbuf, sizeof(int16_t), flen, fh); // 获得特征信息
csf_float* feature;
NSLog(@"flex:%d",flen);
int number_frames = csf_logfbank(adbuf, flen, , 0.02, 0.01, , , , , 0.97, NULL, &feature, NULL); printf("Number of frames: %d \n", number_frames); for (int i = ; i< *(number_frames - ); i++){ // 舍弃最后几个ms的特征值
[array1 addObject:[NSNumber numberWithFloat:feature[i]]];
} // 释放内存
free(adbuf);
adbuf = NULL;
目的是将录好的wave文件转成CoreMLmodel可以识别的数据。
最后的array1就是wave文件提取的特征值
因为我们提前不知道wave文件有多大,所以用malloc来动态分配内存来处理。
malloc&&fread的更多相关文章
- C.C++把整个文件内容读进一个buffer中
原创文章,未经本人允许禁止转载. //C方式, 调用的函数繁多 //fopen,fseek,ftell,fseek,malloc,fread,fclose,free. void foo() { FIL ...
- 那些年,坑死自己的事之fread/fwrite
今天继续看牛人做过的东西,这个小程序并不大,加上相当多的注释行,才5000多行.这个小程序是在linux下实现的,之前自己也一直用vi来看并加以更加详细的注释,但是效率实在太低.于是将其转移到wind ...
- fread读入优化,寻找速度极限
序: 在之前的测试中,我们比较了四种读入方式,发现使用读入优化是最快的选择,但是我们知道fread()是比它更快的方法.这一次,我们对比四种读入优化,探寻C++读取速度的极限. 分别是getchar( ...
- fread和fwrite的使用
fread和fwrite的使用 fread和fwrite一般用于二进制文件的输入/输出,要不然你打开fwrite写入的文件就是乱码. 1.fread和fwrite函数 数据块I/O fread与fwr ...
- fread函数详解
函数原型: size_t fread( void *buffer, size_t size, size_t count, FILE *stream ) b ...
- C语言fread/fwrite填坑记
坑的描述 用fwrite把数据写入文件,再用fread读取,发现后半部分的数据可能是错的. 原因:原本要写入文件的数据中,有0x0A,如果用的是文本模式打开的文件流,在windows下0x0A会被转换 ...
- open()、fwrite()、fread()函数使用说明与示例
fopen()函数: 1.作用: 在C语言中fopen()函数用于打开指定路径的文件,获取指向该文件的指针. 2.函数原型: FILE * fopen(const char * path,const ...
- fopen()、fwrite()、fread()函数使用说明与示例
fopen()函数: 1.作用: 在C语言中fopen()函数用于打开指定路径的文件,获取指向该文件的指针. 2.函数原型: FILE * fopen(const char * path,const ...
- malloc实现机制、缓冲机制、文件操作、mmap虚拟地址(day06)
一.malloc的实现机制(缓冲机制) 库函数跟系统调用之间的关系 什么是缓冲? 内存分配的原理. 封装 函数A的实现代码中调用了函数B.函数B的功能是函数A主要的功能,这样就说函数A封装了函数B. ...
随机推荐
- Python之实现迭代器协议
什么是迭代器: --迭代器(迭代就是循环) 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator 可迭代对象有: 一类是集合数据类型,如list,tuple,dict,set ...
- ORM:Chloe
ORM的一种:Chloe注意实体类模板特色:多表连接 利用chloe实现对各表的增删查改的管理,判断现有物料是否能够支持生产规模. 一开始报错: IQuery<ProductionPlans&g ...
- git pull的时候发生冲突的解决方法之“error: Your local changes to the following files would be overwritten by merge”
今天在使用git pull 命令的时候发生了以下报错 目前git的报错提示已经相关友好了,可以直观的发现,这里可以通过commit的方式解决这个冲突问题,但还是想看看其他大佬是怎么解决这类问题的 在网 ...
- java.nio.Buffer 中的 flip()方法
在Java NIO编程中,对缓冲区操作常常需要使用 java.nio.Buffer中的 flip()方法. Buffer 中的 flip() 方法涉及到 Buffer 中的capacity.posi ...
- 前端学习(二十六)移动端s(笔记)
===================================================弹性布局rem布局---------------------------------------- ...
- Yum与RPM
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服务器自动下载 ...
- function的各做写法
function(){}()让变量快速初始化结果 var timestamp = function(){ var timestamp = Date.parse(new Date()); return ...
- Java Thread之start和run方法的区别
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11421515.html start 用start方法来启动线程,真正实现了多线程运行,这时无需等待ru ...
- mysql 获取任意一个月的所有天数。
SELECT ADDDATE(y.first, x.d - 1) as dFROM(SELECT 1 AS d UNION ALLSELECT 2 UNION ALLSELECT 3 UNION AL ...
- c++11 中的注意事项
1. C++11标准中让类的析构函数默认也是noexcept(true)的. 但如果显式地为析构函数指定了noexcept,或者类的基类或成员有noexcept(false)的析构函数,析构函数就不会 ...