My 10 Line Audio Player - PullRequest
       17

My 10 Line Audio Player

2 голосов
/ 25 ноября 2010

Я просто хочу сделать Simplest WAV Player. Вот мой код.

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

2 голосов
/ 25 ноября 2010

Я думаю, что вы должны сделать какой-то базовый анализ файла wav (плюс, если нужно, конвертировать байты из Little Endian в Big Endian [кстати, это источник шума]) или, по крайней мере,пропустите ту часть, которая вам не интересна, потому что теперь вы даже не представляете размер сэмплов в файле (например, в одном из полученных мной тестовых wav-файлов размер сэмпла составляет 24 байта).

Я рекомендую вам прочитать спецификацию файла WAV .

0 голосов
/ 29 ноября 2010

Как насчет

#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-файл в аудиоустройство, и слышать полезные вещи ... «audio» - это не потребитель WAV, я думаю.

Попробуйте также использовать Data [1024] или Data [16384].

0 голосов
/ 25 ноября 2010

В локальном data нет выделенного хранилища, но ваш код читает и записывает в него.Однако, исходя из размеров, похоже, что вы пытаетесь читать и записывать 16 байтов памяти на каждой итерации цикла.Вместо этого используйте следующее

char data[16];
while(!feof(music)){
    fread(data, sizeof(char), sizeof(data), music);
    fwrite(data, sizeof(char), sizeof(data), speaker);
}
...