also ich finde dass der Code in

https://raw.githubusercontent.com/ti...ter/tinyplay.c

genug Vorlage bildet um es kompakter umzuschreiben aber man muss sich schon einiges C & P bedienen

also aus dem tinyplay.c mal kondensiert und an deine Vorlage angepasst

Code:
unsigned int device = 0;
unsigned int card = 0;
unsigned int period_size = 1024;
unsigned int period_count = 4;
unsigned int channels = 2;
unsigned int rate = 48000;
unsigned int bits = 16;
unsigned int is_raw = 0; /* Default wav file */

struct riff_wave_header riff_wave_header;
struct chunk_header chunk_header;
struct chunk_fmt chunk_fmt;

bool_t readWavMeta(FILE* file)
{
        int more_chunks = 1;
        fread(&riff_wave_header, sizeof(riff_wave_header), 1, file);
        if ((riff_wave_header.riff_id != ID_RIFF) ||
            (riff_wave_header.wave_id != ID_WAVE)) {
            fprintf(stderr, "Error: '%s' is not a riff/wave file\n", filename);
            fclose(file);
            return false;
        }
        do {
            fread(&chunk_header, sizeof(chunk_header), 1, file);
            switch (chunk_header.id) {
            case ID_FMT:
                fread(&chunk_fmt, sizeof(chunk_fmt), 1, file);
                /* If the format header is larger, skip the rest */
                if (chunk_header.sz > sizeof(chunk_fmt))
                    fseek(file, chunk_header.sz - sizeof(chunk_fmt), SEEK_CUR);
                break;
            case ID_DATA:
                /* Stop looking for chunks */
                more_chunks = 0;
                break;
            default:
                /* Unknown chunk, skip bytes */
                fseek(file, chunk_header.sz, SEEK_CUR);
            }
        } while (more_chunks);
        playSetup.channels = chunk_fmt.num_channels;
        playSetup.rate = chunk_fmt.sample_rate;
        playSetup.bits = chunk_fmt.bits_per_sample;
        return true;
}


    FILE *file;
    char *filename;

    filename = "something.wav";
    file = fopen(filename, "rb");
    if (!file) {
        fprintf(stderr, "Unable to open file '%s'\n", filename);
        return 1;
    }

    if(readWavMeta(file)) play_sample(file, card, device, channels, rate, bits, period_size, period_count);

    fclose(file);
mit etwas mehr mühe hätt ich jetzt die meta daten noch in ein struct geworfen, aber das würde gerade zu lange dauern