- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 241

Thema: wav Dateien: Programieren von Wiedergabe und Aufnahme

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #11
    HaWe
    Gast
    super, dann kann man jetzt den Code vereinfachen und beschleunigen....


    Road-Map:

    Dazu brauchen wir eine andere Programm-Struktur, und dazu muss alles mit "debug" raus.
    Das macht den Code auch überschaubarer.

    1.) Muster-Erstellung

    a) du nimmst eine Reihe von Wort-Samples auf:
    JA.wav
    NEIN.wav
    STOPP.wav

    b) der Micro- bzw. file- input[] array wird als Plot angezeigt
    und dann direkt nach analyse geschickt und noise und Wort-Grenzen ermittelt.

    c) jetzt wird NUR das Wort innerhalb der Wort-Grenzen nach wavbuffer kopiert
    Code:
       memset(wavebuffer, 0, sizeof(wavebuffer) );
       memcpy(wavebuffer, input+(signalstart*sizeof(char)), (signalend-signalstart)*sizeof(int32_t) );
    
    // ich hoffe, ich habe mich jetzt mit memcpy nicht verhauen   
    // ansonsten soll das rauskommen:
    // for (i=0; i<(signalend-signalstart); ++i) wavebuffer[i]=input[i+signalstart];
    d) Der wave-Puffer startet jetzt an Stelle 0 mit dem wav-Wortsignal, der Rest bleibt 0.
    Der neue wav-Puffer wird ebenfalls als Plot angezeigt.

    e) dann wird das "neue" wavebuffer-Muster als .wav Datei gespeichert.
    JA_opt.wav
    NEIN_opt.wav
    STOPP_opt.wav



    Das Plot-Programm könnte so aussehen:

    Code:
    int main() {
    
        // Request a window size of 640*480 with top-left at 20,20
        initWindowSize(20, 20, 640, 480);
        init(&width, &height);                  // Graphics initialization
    
        Start(width, height);                   // Start the picture
        Background(0, 0, 0);                    // Black background
        WindowOpacity(220); // Make the window little opaque
       
        // ...
    
        Finish();  // clean up graph window
    }
    
    void plotArray(int32_t  * array, int32_t  arrlength ) {
    
        Fill(255, 255, 255, 1);                 // White text
        StrokeWidth(1.0);                       // brush width
    
        WindowClear();
    
        Stroke(255, 255, 255, 1.0);    // white lines
        Line(10, 10, 10+255, 10);      // ordinate
        Line(10, 10, 10, 512);         // abszisse
           
        Stroke(0, 255, 0, 1.0);        // green lines: wave pattern    
        for(uint32_t  i=0; i<arrlength; ++i) {
            Line(10+(i/64), 10, 10+(i/64), 10+(array[i]) );    // i=len=32768/64=512, array[i]_hi=255
        }
        
        End();                         // End = paint the the picture    
    
    }



    Wenn du das hast, lade doch bitte die 6 wav files mal hoch, dass ich sie kontrollieren kann (evtl. zum nachbessern).



    wenn alles OK ist, kommt:

    2.) Experimente mit der FFT und der cross correlation


    - - - Aktualisiert - - -


    3.) späteres Anwendungs-Programm:

    a) später bekommen die wav-Muster-Files nur durchgehende Nummern plus einen Namenseintrag in einer Extra-Datei, in der Nummer und Namen miteinander verbunden werden, sodass man danach suchen kann, z.B.
    0 (reserviert)
    1 ja
    2 nein
    3 stopp
    4 vorwärts
    5 rückwärts
    6 seitwarts
    7 ran
    ...




    b) Das abschließende lauffähige Wort-Erkennungs-Programm kann sich von seinem Aufbau her im Prinzip an diesem NXC-Programm orientieren:
    http://www.mindstormsforum.de/viewto...p=53924#p53924

    aber vorher müssen noch etliche FFT-Tests laufen....



    1.1 Für die Bearbeitung von wave-arrays und wave-files brauchen wir dann 5 Funktionen:
    Code:
    a) record_wave(int32_t * array, int32_t length);  // Aufnahme von Tönen über Soundkarte => input-array
    ähnlich wie audioCapture(input, SHRT_MAX, "plughw:1,0", 1, 12000, 8 );
    
    b) save_wave2file(int32_t * array, char * filename);  // speichern eines arrays als .wav File mit header
    => fehlt noch ?
    
    c) wavefile2Array(int32_t * array, char * filename);  // lesen von einem .wav File => in input-array 
    (extrahiert ohne header, nur data, ohne audio-Wiedergabe über Soundkarte) 
    
    d) play_waveArray(int32_t * array, int32_t length); // abspielen eines arrays mit festen Parametern
    ähnlich wie playCaptured(wave, SHRT_MAX, "plughw:1,0", 1, 12000, 8 );
    
    e) play_waveFile(char * filename); // abspielen eines wav-files mit Parametern laut Header-Daten,
    ohne kopieren  in einen temporären Array, ähnlich wie playwave(string waveDatei, string name)
    Soundkarten-Daten getrennt konfigurieren
    
    
    In die Sound-Lib sollte man dann noch zusätzlich aufnehmen diese 2 globalen #defines für Soundkarten:
    
    #define  SoundCard_Intern   "plughw:0,0"
    #define  SoundCard_Extern   "plughw:1,0"

    diese Funktionen müssten dann genau so in deine wav-lib mit rein.


    einverstanden?
    Geändert von HaWe (13.06.2016 um 14:23 Uhr)

Ähnliche Themen

  1. Video Aufnahme (+12std.)
    Von highdef im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 8
    Letzter Beitrag: 03.06.2011, 10:08
  2. led ein/aus programieren
    Von anthony im Forum PIC Controller
    Antworten: 6
    Letzter Beitrag: 15.07.2008, 17:44
  3. hex-dateien in bin-dateien umwandeln
    Von roboterheld im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 02.10.2007, 20:25
  4. Richtiges Drehen einer Flasche/Dose zur Aufnahme
    Von ähM_Key im Forum Mechanik
    Antworten: 2
    Letzter Beitrag: 06.10.2006, 15:43
  5. Automatische Audio-Aufnahme
    Von the_Ghost666 im Forum Software, Algorithmen und KI
    Antworten: 6
    Letzter Beitrag: 11.09.2005, 20:27

Berechtigungen

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

Solar Speicher und Akkus Tests