gpt4 book ai didi

c - 在c中生成一个.au文件

转载 作者:行者123 更新时间:2023-12-02 22:20:13 24 4
gpt4 key购买 nike

出于病态的好奇心,我一直试图想出一个程序,该程序将在 C 中生成 4 秒 440 A 音符。但是,在 VLC 中播放输出的文件不会产生任何音乐。

使用 Wikipedia 作为此页面上 .au header 的指南:http://en.wikipedia.org/wiki/Au_file_format我想出了这个:

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

#define MAGIC_NUM 0x2e736e64
#define DEFAULT_OFFSET 24
#define UNKNOWN_SIZE 0xffffffff
#define BIT_32_PCM 5
#define STEREO 2
#define SAMPLE_RATE 8000
#define DURATION 4
#define MIDDLE_A 440

int main(int argc, char** argv) {
FILE* sound;

sound = fopen("output.au", "w");

//write header
fputc(MAGIC_NUM, sound);
fputc(DEFAULT_OFFSET, sound);
fputc(UNKNOWN_SIZE, sound);
fputc(BIT_32_PCM, sound);
fputc(SAMPLE_RATE, sound);
fputc(STEREO, sound);

//write a duration of a constant note
int i;
for(i = 0; i <= DURATION * SAMPLE_RATE; i++) {
fputc((int)floor(MIDDLE_A * sin(i)), sound);
}

fclose(sound);

return 0;
}

有谁知道我做错了什么?

最佳答案

您不希望文件以文本形式打开 - 它可能会与任何书面换行符一起做一些有趣的事情。

sound = fopen("output.au", "wb");

你不想写字符 - 使用 fwrite不是 fputc
fwrite(".snd", 1, 4, sound);

另请注意,.au 文件是大端 - 如果您使用的是 x86 或 x86_64,则您的 native 字节顺序是小端,您需要在写入数据之前对其进行转换。

关于c - 在c中生成一个.au文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5483816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com