首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >把原始音频写到文件里?

把原始音频写到文件里?
EN

Stack Overflow用户
提问于 2014-08-07 15:15:21
回答 3查看 1.9K关注 0票数 1

我正在为pocketsphinxfreeswitch模块编写一段C代码,以将声音(波形或音频)保存到文件中。我接收音频作为一个void *data和它的unsigned int len,我必须将它保存为一个RAW (或PCM)文件(没有头)。我该怎么做?

我试过这个:

代码语言:javascript
代码运行次数:0
运行
复制
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;

它不起作用(也许我做得不对?)我还找到了libvlclibsndfile,但没有找到任何为我服务的函数。这里有人有关于这个的简单示例/教程吗?

我正在研究C,VS2010,Win8.1 (x64)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-07 15:26:44

sizeof(_data)/sizeof(_data[0])是指针时,不应该使用_data;sizeof(_data)是指针_data所用的字节数

代码语言:javascript
代码运行次数:0
运行
复制
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;

你也可以用

代码语言:javascript
代码运行次数:0
运行
复制
fwrite(data, 1, len, _file);
票数 1
EN

Stack Overflow用户

发布于 2014-08-07 15:19:35

这方面的主要问题是,您使用sizeof(_data) / sizeof(_data[0])作为计算数组长度的尝试。但是,由于_dataint16_t *类型的,即只是一个指针,所以sizeof(_data)将返回指针的大小(在您的例子中,这个大小仅为8)。您需要一些其他方法来传递数组的长度。

票数 0
EN

Stack Overflow用户

发布于 2014-08-07 16:48:58

应用于指针的sizeof不能告诉您“在指针后面”有多少内存(指针不知道是指向一个孤独的事物,还是指向数组的第一个元素)。

相反,它告诉您指针的大小(以chars为单位),这些指针现在通常是4或8个。

因为您知道数据在哪里(data)以及其中有多少数据(len),所以不需要转换或计算任何数据。

使用任何一种

代码语言:javascript
代码运行次数:0
运行
复制
fwrite(data, 1, len, _file);

代码语言:javascript
代码运行次数:0
运行
复制
fwrite(data, len, 1, _file);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25186130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档