C 为什么我的.wav文件没有运行?
在不使用结构的情况下,我试图创建一个波形文件,它可以在900赫兹的频率下产生5秒钟的音调。但是,当我运行它时,它不会运行,甚至不会给我采样率或字节数。这是我的密码: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) {
#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”,注意结尾的空格 生成的文件是否包含您期望的字节(您是否尝试过使用十六进制编辑器查看它?)修复了所有问题!非常感谢。