我的10线音频播放器

时间:2010-11-25 17:13:19

标签: c audio avaudioplayer wav

我只想制作最简单的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上缺少了 什么是实际块大小? 或者我如何获得实际块大小?

3 个答案:

答案 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]。