Werbung
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
nein, was ich meinte ist:
es gibt keine einfachen C API libs zum selber in C programmieren,
klar haben die Python-Programmierer das in ihrer Python VM irgendwie mit C in "haarklein" hingekriegt.
Man bräuchte diese einfachen wraps eben auch in C zum selber-Programmieren, dann ginge es schon, etwa so (theoretisch, wenn es so eine audio.h gäbe):
stattdessen muss man sich mit so einem aufgeblasenen Mist rumschlagen:Code:#include <audio.h> unsigned char metadata[44]; pFile = fopen ("mysound.wav","r"); readwavmetadata(pFile, * metadata); playwav(pFile, * metadata); fclose (pFile);
http://www.alsa-project.org/alsa-doc/alsa-lib/
http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html
http://www.mega-nerd.com/libsndfile/
https://github.com/cmusphinx/sphinxbase
bzw.
https://github.com/cmusphinx/sphinxb...nxad/ad_alsa.c
um genauer zu sein ;D
und man kann davon je nach Lizens (ha ich jetzt nicht nachgesehn) bestimmt auch Abwandlungen machenCode:int32 ad_read(ad_rec_t * handle, int16 * buf, int32 max)![]()
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
kannst du mal bitte ein code example aufschreiben, wie man dann einen vorhandenen sound file
/path/mysound.wav
in einem eigenen C- Programm auswählt und einfach nur mal eben schnell abspielt (Ausgabe wie üblich via Audio jacks oder HDMI) ?
ja okay abspielen, davon war ja jetzt garnicht die Redeaber ich hab da noch eine API gefunden die mehr auf basis-funktion orientiert ist
https://github.com/tinyalsa/tinyalsa
die hat deine playfunktion und kann aufnehmen und hat sogar schöne Beispiele dabei
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
ok, dann nochmal, dann eben jetzt dafür: https://github.com/tinyalsa/tinyalsa
kannst du mal bitte ein code example aufschreiben, wie man dann einen vorhandenen sound file
/path/mysound.wav
in einem eigenen C- Programm auswählt und einfach nur mal eben schnell abspielt (Ausgabe wie üblich via Audio jacks oder HDMI) ?
etwas in der Art:Selbst wav files abspielen per C API Befehl ist gradezu unzumutbar verquer und aufwändig.
...
was ich meinte ist:...
Man bräuchte diese einfachen wraps eben auch in C zum selber-Programmieren, dann ginge es schon, etwa so (theoretisch, wenn es so eine audio.h gäbe):
Code:#include <audio.h> unsigned char metadata[44]; pFile = fopen ("mysound.wav","r"); readwavmetadata(pFile, * metadata); playwav(pFile, * metadata); fclose (pFile);
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);![]()
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Lesezeichen