代码之家  ›  专栏  ›  技术社区  ›  Warrior

在iphone中读取.wav文件时,数据为空?

  •  1
  • Warrior  · 技术社区  · 13 年前

    char ChunkID[4], Format[4], Subchunk1ID[4],Subchunk2ID[4];
    int ChunkSize,Subchunk1Size, SampleRate, ByteRate,Subchunk2Size;
    short AudioFormat, NumChannels, BlockAlign, BitsPerSample;
    short *Data;
    
    // Read the wave file
    FILE *fhandle=fopen([var UTF8String],"rb");
    fread(ChunkID,1,4,fhandle);
    fread(&ChunkSize,4,1,fhandle);
    fread(Format,1,4,fhandle);
    fread(Subchunk1ID,1,4,fhandle);
    fread(&Subchunk1Size,4,1,fhandle);
    fread(&AudioFormat,2,1,fhandle);
    fread(&NumChannels,2,1,fhandle);
    fread(&SampleRate,4,1,fhandle);
    fread(&ByteRate,4,1,fhandle);
    fread(&BlockAlign,2,1,fhandle);
    fread(&BitsPerSample,2,1,fhandle);
    fread(&Subchunk2ID,1,4,fhandle);
    fread(&Subchunk2Size,4,1,fhandle);
    Data=(short*) malloc (sizeof(short)*Subchunk2Size/(BitsPerSample/8));  // Create an element for every sample
    fread(Data,BitsPerSample/8,Subchunk2Size/(BitsPerSample/8),fhandle); // Reading raw audio data
    fclose(fhandle);
    

    ChunkID给出值“caff”,格式给出“desc”。我看不出数据有什么价值。我错过什么了吗?我想把原始声音数据作为FFT的输入。

    3 回复  |  直到 6 年前
        1
  •  1
  •   halfer Rahul Baradia    6 年前

    AudioToolbox.framework中有用于读取音频文件的例程。

        2
  •  1
  •   Shaggy Frog    13 年前

    我看不出数据有什么价值。

    Data 长度为零?

    Data=(short*) malloc (sizeof(short)*Subchunk2Size/(BitsPerSample/8));  // Create an element for every sample
    

    sizeof(short)*Subchunk2Size/(BitsPerSample/8) ?

    FILE *fhandle=fopen([var UTF8String],"rb");
    

    你确定吗? var 值正确吗?我想是 NSString

    char ChunkID[4], Format[4], Subchunk1ID[4],Subchunk2ID[4];
    ...
    fread(ChunkID,1,4,fhandle);
    fread(Format,1,4,fhandle);
    fread(Subchunk1ID,1,4,fhandle);
    fread(&Subchunk2ID,1,4,fhandle);
    

    有什么理由让你读到 Subchunk2ID 与您以相同方式声明(然后设置)的其他三个变量不同?在我看来这是个打字错误。

    最后,不要在Objective-C中用大写字母开头命名变量。你应该只对类名这么做。这是在Cocoa中编程时应该遵循的风格考虑/约定。

        3
  •  0
  •   hotpaw2    13 年前

    如果初始块ID返回'caff'而不是'RIFF',则说明您没有读取WAV文件,因此所有其他参数(包括长度和数据)可能都是假的。