- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 47

Thema: Welche Soundkarte für den Raspi

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    https://github.com/cmusphinx/sphinxbase

    bzw.

    https://github.com/cmusphinx/sphinxb...nxad/ad_alsa.c

    um genauer zu sein ;D

    Code:
    int32 ad_read(ad_rec_t * handle, int16 * buf, int32 max)
    und man kann davon je nach Lizens (ha ich jetzt nicht nachgesehn) bestimmt auch Abwandlungen machen
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  2. #2
    HaWe
    Gast
    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) ?

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    ja okay abspielen, davon war ja jetzt garnicht die Rede 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
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  4. #4
    HaWe
    Gast
    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);

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    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
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    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.

  7. #7
    HaWe
    Gast
    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!

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    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.

  9. #9
    HaWe
    Gast
    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

Ähnliche Themen

  1. Antworten: 63
    Letzter Beitrag: 18.02.2016, 07:43
  2. Soundkarte
    Von oratus sum im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 3
    Letzter Beitrag: 16.04.2008, 14:30
  3. Soundkarte Eingänge
    Von harry3 im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 23.02.2008, 10:57
  4. Oszillograph für die Soundkarte
    Von Malte0815 im Forum Elektronik
    Antworten: 26
    Letzter Beitrag: 22.02.2008, 19:23
  5. Impedanzmessgerät - Soundkarte?
    Von Rage_Empire im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 19.08.2006, 17:30

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress