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) ?
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.
du müsstest um den unteren eingerückten TEil eventuell noch ein int main() und ein return 0 ans ende setzen und die includes müsstest du dir auch noch aus der tinyplay.c besorgen + der tinyplay API natürlich
du kannst abaer auch hingehen und einfach die tinyplay.c compilieren und dann ./tinyplay mywav.wav ausführen
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
es soll eine Funktion sein, die man so einfach wie hier skizziert verwenden kann, keine Anleitung so dick um ein Schiff zu versenken.
genau darum geht es ja.
also, wie sieht jetzt ein funktionierender Code aus, wo man nur den Dateinamen einsetzen/ändern muss zum Abspielen, und was ist an Vorarbeiten etc. nötig?
Code:#include <audio.h> unsigned char metadata[44]; pFile = fopen ("mysound.wav","r"); readwavmetadata(pFile, * metadata); playwav(pFile, * metadata); fclose (pFile);
edit:
ich HASSE ES dass hier nie die Code-Tags im einfachen Editor gelistet sind!![]()
https://github.com/tinyalsa/tinyalsa
also eigentlich reicht es wenn du dir den github per git befehl runterlädst (oder als zip und dann entpacken) und dann
make
make install
ein makefile ist ja dabei, dann kannst du das tinyplay als binary aufrufen und wenn du magst umschreiben
wenn ich nicht gerade zu Hause im Umzugsstress wäre, würde ich mir die Zeit nehmen es mal für dich passend zu schreiben, aber im Moment muss ich primär erstmal die Doku zu meiner Firmware weiterschreiben und wenn ich nach Hause komme wartet da Zimmer Nummer 2/5 ausgeräumt und Ent-Tapeziert zu werden XD
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
ok, danke, ich werds mal probieren heute nachmittag.
Der nächste Schritt wäre dann: aufnehmen eines Sounds per Microfon.
nun geht es in diesem Thread ja um die USB Soundkarte, hoffentlich kann man dann diese Basis-Funktionen auch damit benutzen.
Dann käme die Spracherkennungs-Geschichte... O.o
ich finde noch nicht mal eine Installationsanleitung für die tinyalsa libs.
Meine Herren, was ein Mist!
Wie geht das?
sudo apt-get WAS?
git clone WAS?
- - - Aktualisiert - - -
update:
das hier schien zu funktionieren:
git clone https://github.com/tinyalsa/tinyalsa.git
cd tinyalsa
make
jetzt bin ich gtespannt, wie man ein wav File damit in einem eigenen C Programm öffnet und automatisch mit den richtigen settings abspielt...
Lesezeichen