und ich liefere dann heute abend oder morgen die lsmod , dmesg, lsusb ausgaben von meiner USB - Soundkarte dann weiss man schon mal ob die Vermutung richtig ist.
CyA
Druckbare Version
und ich liefere dann heute abend oder morgen die lsmod , dmesg, lsusb ausgaben von meiner USB - Soundkarte dann weiss man schon mal ob die Vermutung richtig ist.
CyA
das grausame ist: fast alles für den Pi ist in Python - oder mit eigenständigen Linuxpogrammen, nicht per C API lib.
Spracherkennung gibt es z.B. auch als Google-Modul, sogar offline, wenn ich mich recht erinnerr - nur als Hinweis...
- selber programmieren müssen möchte ich so etwas aber wirklich nicht.
Selbst wav files abspielen per C API Befehl ist gradezu unzumutbar verquer und aufwändig.
"Einfach" ist was anderes, da lobe ich mir die Arduino API libs....!
HaWe das stimmt so nicht! Die Libs sind in Python, weil Python "so schön einfach ist" ... das geb ich neidlos zu!!!
Aber JEDE Python Lib basiert auf einer C-Lib, sie verrtaten nur nicht auf anhiebn welche :D und das verstehen der API ist manchmal etwas ... gruselig
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 machen :)Code:int32 ad_read(ad_rec_t * handle, int16 * buf, int32 max)
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 Rede :D aber 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
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:Zitat:
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 dauern :)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);
welche Libs muss man vorher wie installieren und #includen, damit man es kompilieren kann?