C 为什么我的.wav文件没有运行?

C 为什么我的.wav文件没有运行?,c,file,audio,wav,wave,C,File,Audio,Wav,Wave,在不使用结构的情况下,我试图创建一个波形文件,它可以在900赫兹的频率下产生5秒钟的音调。但是,当我运行它时,它不会运行,甚至不会给我采样率或字节数。这是我的密码: #include <stdio.h> #include <stdlib.h> #include <math.h> int main () { FILE* fp; fp = fopen("sine.wav", "wb"); if (fp == NULL) {

在不使用结构的情况下,我试图创建一个波形文件,它可以在900赫兹的频率下产生5秒钟的音调。但是,当我运行它时,它不会运行,甚至不会给我采样率或字节数。这是我的密码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main () {
    FILE* fp;
    fp = fopen("sine.wav", "wb");
    if (fp == NULL) {
        printf("File does not exist.\n");
        return EXIT_FAILURE;
    }
    char ChunkID[4] = "RIFF", Format[4] = "WAVE", Subchunk1ID[4] = "fmt", Subchunk2ID[4] = "data";
    unsigned int ChunkSize, Subchunk1Size, Subchunk2Size;
    unsigned short int AudioFormat, NumChannels, BlockAlign, BitsPerSample;
    int SampleRate, ByteRate;
    Subchunk1Size = 16;
    AudioFormat = 1;
    NumChannels = 1;
    SampleRate = 44100;
    ByteRate = 2 * SampleRate;
    BitsPerSample = 16;
    BlockAlign = NumChannels * BitsPerSample / 8;
    Subchunk2Size = 10 * ByteRate;
    ChunkSize = Subchunk2Size + 41 - 8;
    fwrite(ChunkID, 4, 1, fp);
    fwrite(&ChunkSize, 4, 1, fp);
    fwrite(Format, 4, 1, fp);
    fwrite(Subchunk1ID, 4, 1, fp);
    fwrite(&Subchunk1Size, 4, 1, fp);
    fwrite(&AudioFormat, 2, 1, fp);
    fwrite(&NumChannels, 2, 1, fp);
    fwrite(&SampleRate, 4, 1, fp);
    fwrite(&ByteRate, 4, 1, fp);
    fwrite(&BlockAlign, 2, 1, fp);
    fwrite(&BitsPerSample, 2, 1, fp);
    fwrite(Subchunk2ID, 4, 1, fp);
    fwrite(&Subchunk2Size, 4, 1, fp);
    int i, amplitude = 37000;
    short int audio;
    float w, freq = 900 * 4;
    w = 2.0 * M_PI * freq;
    for(i = 0; i < 5 * SampleRate; i++) {
        if (i < 5 * SampleRate / 4)
            w = 900 * 4;
        else
            w = 0;
        w *= 2.0 * M_PI;
        audio = amplitude * sin(w * i / SampleRate);
        fwrite(&audio, 2, 1, fp);
    }
    fclose(fp);
    return EXIT_SUCCESS;
}
#包括
#包括
#包括
int main(){
文件*fp;
fp=fopen(“正弦波”、“wb”);
如果(fp==NULL){
printf(“文件不存在。\n”);
返回退出失败;
}
char ChunkID[4]=“RIFF”,Format[4]=“WAVE”,Subchunk1ID[4]=“fmt”,Subchunk2ID[4]=“data”;
unsigned int ChunkSize、Subchunk1Size、Subchunk2Size;
无符号短整数音频格式、数字通道、块对齐、位采样;
int取样器,ByteRate;
子块大小=16;
AudioFormat=1;
NumChannels=1;
采样器=44100;
ByteRate=2*取样器;
BitsPerSample=16;
BlockAlign=NumChannels*BitsPerSample/8;
Subchunk2Size=10*ByteRate;
ChunkSize=Subchunk2Size+41-8;
fwrite(ChunkID,4,1,fp);
fwrite(和ChunkSize,4,1,fp);
fwrite(格式,4,1,fp);
fwrite(Subchunk1ID,4,1,fp);
fwrite(和subchunk1尺寸,4,1,fp);
fwrite(和AudioFormat,2,1,fp);
fwrite(和NumChannels,2,1,fp);
fwrite(和采样器,4,1,fp);
fwrite(和ByteRate,4,1,fp);
fwrite(&BlockAlign,2,1,fp);
fwrite(&BitsPerSample,2,1,fp);
fwrite(Subchunk2ID,4,1,fp);
fwrite(和Subchunk2Size,4,1,fp);
int i,振幅=37000;
短int音频;
浮点数w,频率=900*4;
w=2.0*M_PI*freq;
对于(i=0;i<5*采样器;i++){
如果(i<5*取样器/4)
w=900*4;
其他的
w=0;
w*=2.0*M_PI;
音频=振幅*sin(w*i/采样器);
fwrite(和音频,2,1,fp);
}
fclose(fp);
返回退出成功;
}

最明显的问题是
子chunk1id
,您将其作为
的“fmt”


应该是“fmt”,注意结尾的空格

生成的文件是否包含您期望的字节(您是否尝试过使用十六进制编辑器查看它?)修复了所有问题!非常感谢。