标题:读取.wav文件中的double数据块
取消只看楼主
a045000zql
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-6-28
结帖率:100%
已结贴  问题点数:20 回复次数:3 
读取.wav文件中的double数据块
读取.wav文件中的数据,前44B是文件头,跳过这44字节后面的就是振幅数据块,按照在MATLAB中的显示是double型的数据,所以我用以下程序读写,发现读出的数据完全不对,不知道问题出在哪里,还请各位大神指教。那个sample_size和sample_count都是计算过的,并且文件大小是44144,去除文件头的44字节,正好是数据大小44100.本人对C语言处于刚学阶段,如果有更好的方法,可以告诉我该怎么读取这块的数据吗,万分感谢!
positional_mix21.rar (266.8 KB)


#include "stdlib.h"
#include "stdio.h"

int main()
{
    FILE *fp;
    FILE *fout;

    int i;
    int sample_size;
    int sample_count;
    double value[220500];

    sample_size = 2;
    sample_count = 220500;


    fp=fopen("positional_mix21.wav","rb");
 
    if((fp=fopen("positional_mix21.wav","rb"))==NULL)
    {
        printf("can't open this file\n");
        exit(0);
    }

    fseek(fp,44L,0);
   
    for (i = 0; i < sample_count; i++)
    {
        fread(&value[i], sizeof(double), 1, fp);
    }
   
    fout = fopen("fileToSave.txt", "w");
    for (i = 0; i < sample_count; i++)
    {
        fprintf(fout, "%lf\n", value[i]);
    }
    fclose(fp);
    fclose(fout);
}

[此贴子已经被作者于2017-7-6 18:52编辑过]

搜索更多相关主题的帖子: 读取 wav 文件 double 数据 
2017-07-06 16:32
a045000zql
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-6-28
得分:0 
回复 3楼 rjsp
MATLAB里显示确实是double型的数据,我用二进制读取出来想直接用double型写到另一个文件里。我也得知一个数据2字节,我在sample_size已经表明是2了,所以这也是我所疑惑的地方,既然不可能是double型,为什么MATLAB读出11025*2的double型数据,这岂不是比文件本身大很多。真实伤脑筋,这么多天了,数据就在眼前,但是就是提取不出来。
2017-07-06 18:40
a045000zql
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-6-28
得分:0 
我附一张MATLAB读取这个文件得到的数据吧
c.rar (16.16 KB)
2017-07-06 18:48
a045000zql
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-6-28
得分:0 
现在一个数也读不出来了
2017-07-06 19:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-479216-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.210554 second(s), 9 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved