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
mit etwas mehr mühe hätt ich jetzt die meta daten noch in ein struct geworfen, aber das würde gerade zu lange dauernCode: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);![]()








Zitieren

Lesezeichen