代码之家  ›  专栏  ›  技术社区  ›  Neel Basu

我的10线音频播放器

  •  2
  • Neel Basu  · 技术社区  · 14 年前

    这是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;
    }
    

    这播放的声音,但它太吵了。很难理解。 我想我缺少缓冲区/块大小 实际块大小是多少? 或者如何获得实际的块大小?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Oleg Kuznetsov    14 年前

    我认为,你应该对wav文件做一些基本的解析(另外,如果需要的话,把字节从Little Endian转换成Big Endian[顺便说一下,这可能是噪声的来源]),或者,至少,跳过你不感兴趣的部分,因为现在你甚至不知道文件中样本的大小(例如,在一个测试wav中)文件,我得到的,样本大小是24字节)。

    我建议你读书 WAV file specification .

        2
  •  0
  •   JaredPar    14 年前

    当地的 data

    char data[16];
    while(!feof(music)){
        fread(data, sizeof(char), sizeof(data), music);
        fwrite(data, sizeof(char), sizeof(data), speaker);
    }
    
        3
  •  0
  •   TheBlastOne    14 年前

    怎么样

    #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]。