我只想制作最简单的WAV播放器。 这是MyCode。
#include <stdio.h>
int main(){
FILE* speaker = fopen("/dev/audio", "wb");
FILE* music = fopen("bugsbunny2.wav", "rb");
char data[16];
while(!feof(music)){
fread(data, sizeof(char), sizeof(data), music);
fwrite(data, sizeof(char), sizeof(data), speaker);
}
return 0;
}
这播放声音然而它太吵了。很难明白。 我想我在Buffer / Chunk Size上缺少了 什么是实际块大小? 或者我如何获得实际块大小?
答案 0 :(得分:2)
我认为,您应该对wav文件进行一些基本的解析(加上,如果需要,将字节从Little Endian转换为Big Endian [BTW,可能,这是噪声的来源])或者,至少,跳过对你不感兴趣的部分,因为现在你甚至不知道文件中样本的大小(例如,在我测试的wav文件中,样本大小为24字节)。
我建议你阅读WAV file specification。
答案 1 :(得分:0)
本地data
没有已分配的存储空间,但您的代码正在读取和写入。根据大小,虽然看起来你试图在循环的每次迭代中读取和写入16个字节的存储空间。请改用以下内容
char data[16];
while(!feof(music)){
fread(data, sizeof(char), sizeof(data), music);
fwrite(data, sizeof(char), sizeof(data), speaker);
}
答案 2 :(得分:0)
怎么样
#include <stdio.h>
int main(){
FILE* speaker = fopen("/dev/audio", "wb");
FILE* music = fopen("bugsbunny2.wav", "rb");
char data[16];
while(!feof(music)){
fwrite(data, sizeof(data),
fread(data, sizeof(char), sizeof(data), music),
speaker);
}
return 0;
}
fread
返回实际读取的字节数。
但是,我不确定你是否可以将任何wav文件填充到音频设备中,并听到有用的东西......“音频”不是我认为的WAV消费者。
尝试使用数据[1024]或数据[16384]。