【发布时间】:2010-11-25 17:13:19
【问题描述】:
我只想制作最简单的 WAV 播放器。 这是我的代码。
#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;
}
这会播放声音,但是太吵了。很难理解。 我想我缺少缓冲区/块大小 实际的块大小是多少? 或者我怎样才能得到实际的块大小?
【问题讨论】:
-
what 块的大小? 4 个字节是指针的大小,即 sizeof(data)。我会说你永远不会看到集群大小低于 512 字节的系统,所以创建一个至少有这个大小的缓冲区。
-
另请注意,您最多错过了 3 个字节的 wav...考虑一下...如果您显着增加读取缓冲区的大小并且不先纠正该错误,您将大大错过更多的字节,和 bugs bunny 最终听起来就像一个 BUG :)
-
最简单的 WAV 播放器可能是 Windows 或 Windows shell 可能提供的一个微不足道的“使用此文件名播放 wav”API 函数。
-
@TheBlastOne:对不起,我不明白。您是在谈论检查 WAV 标头吗?顺便说一句,我正在用最近的编辑它。请检查编辑
-
现在我不明白。您不应该 fwrite 与 fread read 一样多的字节(即作为函数结果返回的大小)吗?否则,即使文件的最后一个块是 1 个字节(因为它的大小不能被 16 整除),您也会写入 16 个字节。
标签: c audio avaudioplayer wav