我正在为pocketsphinx
的freeswitch
模块编写一段C代码,以将声音(波形或音频)保存到文件中。我接收音频作为一个void *data
和它的unsigned int len
,我必须将它保存为一个RAW
(或PCM
)文件(没有头)。我该怎么做?
我试过这个:
FILE *_file;
int16_t *_data;
_data = (int16_t *) data;
_file=fopen("utterance","ab");
fwrite(data, sizeof(_data[0]), sizeof(_data)/sizeof(_data[0]), _file);
fclose(_file);
_file=NULL;
它不起作用(也许我做得不对?)我还找到了libvlc
和libsndfile
,但没有找到任何为我服务的函数。这里有人有关于这个的简单示例/教程吗?
我正在研究C,VS2010,Win8.1 (x64)
发布于 2014-08-07 07:26:44
当sizeof(_data)/sizeof(_data[0])
是指针时,不应该使用_data;sizeof(_data)
是指针_data
所用的字节数
size_t valueCount = sampleCount * channelCount;
FILE *_file;
int16_t *_data;
_data = (int16_t *) data;
_file=fopen("utterance","ab");
fwrite(data, sizeof(_data[0]), valueCount, _file);
fclose(_file);
_file=NULL;
你也可以用
fwrite(data, 1, len, _file);
发布于 2014-08-07 07:19:35
这方面的主要问题是,您使用sizeof(_data) / sizeof(_data[0])
作为计算数组长度的尝试。但是,由于_data
是int16_t *
类型的,即只是一个指针,所以sizeof(_data)
将返回指针的大小(在您的例子中,这个大小仅为8)。您需要一些其他方法来传递数组的长度。
发布于 2014-08-07 08:48:58
应用于指针的sizeof
不能告诉您“在指针后面”有多少内存(指针不知道是指向一个孤独的事物,还是指向数组的第一个元素)。
相反,它告诉您指针的大小(以char
s为单位),这些指针现在通常是4或8个。
因为您知道数据在哪里(data
)以及其中有多少数据(len
),所以不需要转换或计算任何数据。
使用任何一种
fwrite(data, 1, len, _file);
或
fwrite(data, len, 1, _file);
https://stackoverflow.com/questions/25186130
复制相似问题