- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 36

Thema: Soundverarbeitung mit dem Raspi

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Hallo,

    naja ein Programm (z.B. aplay) ist recht einfach zu starten.

    Welche Parameter Du da abfragen willst, weiß ich nicht. Am besten den Mixer vorher einmalig einstellen. Dann braucht man das nicht mit aplay machen.

    Z.B. eine USB-Soundkarte als Standard setzen: Die Datei /etc/modprobe.d/alsa-base.conf edititieren. Der USB-Eintrag muss auf 0, alle anderen auf -2 stehen. Dann ist nach einem Neustart eine evtl. vorhandene USB-Soundkarte immer Standard für Mixer und aplay.
    Code:
    options snd-usb-audio index=0
    Dann am besten in einem Autostart-Script (z.B. /etc/rc.local) den Mixer korrekt einstellen. Ich stelle die Lautstärke oft auf 80 Prozent, da hört man weniger Nebengeräusche. Sonst hört man evtl. durch den USB-Lautsprecher den Raspi arbeiten.
    Code:
    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.
    
    # Print the IP address
    _IP=$(hostname -I) || true
    if [ "$_IP" ]; then
      printf "My IP address is %s\n" "$_IP"
    fi
    # export WIRINGPI_GPIOMEM=1
    
    amixer cset numid=3 1
    amixer -c 0 cset numid=2 on,off
    amixer set PCM 80%
    
    exit 0
    Dann halt aplay von einem C-Programm aus fernsteuern. Ich nutze im Beispiel als Eingabe eine USB-Multimediatastaur.

    Code:
    //Kompilieren: GCC -o /var/aptest/aptest /var/aptest/aptest.c  -L/usr/local/lib -lpthread
    //Aufrufen mittels: nice -1 /var/aptest/aptest < /dev/input/event0 & 
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <stdint.h>
    #include <sys/sysinfo.h>
    #include <time.h>
    #include <linux/input.h>
    #include <pthread.h>
    
    int ziffer=0;
    int beenden=2;
    int zeit=0;
    int shiftl=0;
    int shiftr=0;
    int strgl=0;
    int strgr=0;
    int capsl=0;
    int apid=0;
    FILE* aplaypipe;         /* Filehandle fuer die Pipe */
    
    void stopp()
    {
        char befehl[12] ="";
        strcpy (befehl,"pkill aplay");
        system(befehl);
    }
    
    void wiedergabe(char dateiname[])
    {
        char befehl[1024] ="";
        strcpy (befehl,"nice -1 aplay /var/musik/");
        strcat(befehl,dateiname);
        strcat(befehl," &");
        stopp();
        aplaypipe=popen(befehl, "r");
        printf("pipe: %d\n",aplaypipe);
        pclose(aplaypipe);
    }
    
    void tastatur(void *name)
    {
        struct input_event event;
        while ((read(0, &event, sizeof(event)) > 0) && (beenden==2) ) {
            if (event.type != EV_KEY) continue;
    //        if (event.value != EV_KEY) continue; //Nur Tastendrücke erkennen, kein Loslassen. 0=losgelassen, 1=gedrückt, 2=Wiederholung(lang gedrückt)
        printf("Typ: %d; Wert: %d; Code: %d\n",event.type,event.value,event.code);
            if(event.value != EV_KEY){
                switch (event.code) {
                    case 164:wiedergabe("girlfriend.wav");break;//Play
                    case 166:stopp();break;//Stop
                    case 62:stopp();beenden=0;break; //Close
                }
            }
        }
        beenden=0;
        pthread_exit((void *) 0);
    }
    
    int main(int argc, char** argv)
    {
        pthread_t t1;
        if(pthread_create(&t1, NULL, (void *)&tastatur, (void *)"Tastatur") != 0)
        {
          fprintf(stderr, "Fehler bei Tastatur......\n");
          exit(0);
        }  
        
        while (beenden > 0)
            {     sleep(1);
                zeit++;
                if (zeit==30)
                {
                    zeit=0;
                    printf("Wieder 30 Sekunden um.\n");
                }
        } 
        usleep(50);
        printf("***********Ende************\n");
        return 0;
    }
    Die WAV-Datei liegt bei mir unter /var/musik und heißt girlfriend.wav Die Rechte sollten auf 644 stehen.


    Edit:
    Der Code wurd auf das Wesentliche gekürzt und enthält evtl. noch ungenutzte Variablen und Verweise.

    Edit2:
    Evtl. Fehler werden nicht abgefangen. (Z.B. falsch geschriebener Dateiname, falsche Dateirechte, etc)
    Geändert von peterfido (29.05.2016 um 13:49 Uhr)
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Ähnliche Themen

  1. Pixy Cam an RasPi per C/C++?
    Von HaWe im Forum Raspberry Pi
    Antworten: 0
    Letzter Beitrag: 20.04.2016, 09:34
  2. ARM TrustZone und Raspi 3B
    Von Hellmut im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 0
    Letzter Beitrag: 12.04.2016, 15:06
  3. Raspi Kaufberatung?
    Von hirnfrei im Forum Raspberry Pi
    Antworten: 33
    Letzter Beitrag: 08.03.2016, 08:14
  4. Antworten: 63
    Letzter Beitrag: 18.02.2016, 07:43
  5. [ERLEDIGT] Raspi Club?
    Von pofoklempner im Forum Raspberry Pi
    Antworten: 16
    Letzter Beitrag: 09.07.2015, 06:20

Berechtigungen

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

12V Akku bauen