- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 46

Thema: Internetradio

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Da die Software jetzt soweit steht, kümmere ich mich grad um die Hardware. Den Bufferunderrun habe ich wie erwartet bei HDMI nicht. Da das Signal nicht durch den DAC geschickt wird. Das Rauschen ist auch bei HDMI vorhanden, bis die Mixer Settings greifen. Danach absolute Stille und Radio kommt sauber rüber. Da ich jedoch nicht den ganzen Tag den Fernseher anhaben möchte, habe ich mir eben einen HDMI VGA Adapter mit Audioausgang und Netzteil bestellt. Allerdings nicht den billigen, sondern den, der soviel kostet wie der Raspi selbst auch. Wegen dem beigelegten Netzteil und der überwiegend guten Bewertungen bei Amazon.

    Man könnte natürlich auch Softwareseitig dem Bufferunderrun im Analogbetrieb entgegenkommen und einen Player mit Pitch control wählen oder, so wie ich es bisher mache, einfach den Play Befehl nochmal ausführen, dann wird neu gepuffert. Dass der Puffer leer war, habe ich daran erkannt, dass beim neustarten fast keine Verluste waren, also minimal nach der Stelle des neustarten weiterging. Man könnte den Leerlauf - Effekt herauszögern, wenn man einen großen Buffer sowie Mindestgröße einstellt. Dann dauert es aber auch jedesmal beim Erststart, Senderwechsel oder halt Neustart. Das war mir dann auf Dauer zu blöd.

    Ich frage mich gerade, wie ihr das genau mit dem Wiki Artikel meint. Soll es da mehr um Embedded Linux und Software Entwicklung gehen, oder viel mehr auf das spezielle Internetradio eingehen? Ich würde da eher das Internetradio wählen oder halt die Kombination des Raspi mit einem AVR, bzw. allgemein die Kommunikation per UART, da dem Raspi egal ist, wer tatsächlich die Daten abschickt.

    Internetradio wäre mehr ein spezieller Anwendungsfall, wobei er auch ohne Internet als MP3 Player dienen kann. MP3 über LAN (NAS) spielt er schonmal ab. Man könnte auch eine große SD-Karte, einen USB Stick oder USB-Festplatte nehmen. Wobei bei MP3 keine Probleme mit leerlaufenden Puffern auftreten.

    Da braucht es dann nur noch ein Display, ein paar Tasten und natürlich einen Verstärker. Schon hat man eine mobile Jukebox. OK - Die Software fehlt dann auch noch. Oder man bedient den mpd per Smartphone-App oder Browser. Beides habe ich nicht probiert, bin aber bei meinen Recherchen auf die Möglichkeiten gestossen.

    Die Tasten kann man auch durch eine Funktastatur ersetzen. Ich habe hier eine kleine weiße mit Touchpad und einem USB-Empfänger vom Lidl (vor 2 Jahren oder so gekauft), welches unter der gui (startx) sogar funktioniert. So braucht es dann nur noch ein Display für den komfortableren mobilen Betrieb.
    Geändert von peterfido (24.08.2012 um 21:28 Uhr)
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Es geht voran. Den HDMI Analog Adapter habe ich storniert. Die Audioausgabe erfolgt jetzt per ~14 EUR Speedlink USB Stick (Meldet sich als C-Media an), welchen ich noch hinten in meinem NAS stecken hatte. Der Ton ist frei von Knacksern und spielt seit heute Morgen stabil durch. Ich habe noch einen anderen USB Stick probiert (von Medion, mit Lautsprechern bei, etwa 4EUR von ebay), dieser erzeugt nicht ganz so guten Sound. Dadurch, dass er aktiv ist (für die Lautsprecher einen Verstärker integriert hat), ist er eh nicht für den Anschluß an den Line-In Eingang der HiFi - Anlage geeignet.

    Um die Tonausgabe über den USB-Sound-Stick zu schicken, habe ich die /etc/mpd.conf angepasst:

    Code:
    audio_output {
            type            "alsa"
            name            "My ALSA Device"
            auto_resample   "no"
            device          "hw:1,0"        # optional
            format          "44100:16:2"    # optional
            mixer_device    "default"       # optional
            mixer_control   "PCM"           # optional
            mixer_index     "0"             # optional
    }
    sowie

    Code:
    mixer_type                      "software"
    Die Software habe ich um ein paar Befehle erweitert. Die mpd Initialisierung erfolgt jetzt per BASH Script, dass lässt sich schneller anpassen.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Das hört sich ja schon richtig cool an
    Ein Radio würde mir auch gut gefallen....habe im Moment auch das "Problem", dass ich den Fernseher und meine HD-Box anhaben müsste um Radio zu hören. Eventuell steige ich auch mal auf ein Raspberry Pi als Radio um. Von den Möglichkeiten her bietet das natürlich um einiges mehr.
    Kannst du damit auch die Radiosendung aufnehmen? Gibt es da eine entsprechende Funktion?
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Die Idee mit dem USB Adapter kam mir heute Morgen nach dem Aufwachen. Es lohnt sich also manchmal doch eine Nacht darüber zu schlafen. Die Bestellung des HDMI Adapters konnte ich noch rechtzeitig stornieren, was mit einer freundlichen Bestätigungsmail quittiert wurde.

    Gute Frage, das habe ich nicht probiert. Es gibt aber für den mpd einige Plugins. Man kann auch die Ausgabe per RAW Daten an ein Device schicken. Aber auch das habe ich nicht getestet. Radioaufnahmen mache ich mit dem Phonostar Player Plus am PC.

    Jetzt stöbere ich erstmal durchs Wiki und entscheide, wie weit ich da aushole. Eine 2GB SD-Karte habe ich schon bereit liegen. Bin ja mal gespannt, ob alles darauf passt, wenn man es neu macht. Den Artikel selbst werde ich frühestens Morgen angehen, da ich dafür dann doch etwas mehr Ruhe brauche und heute Abend bin ich schon gesellschaftlich verpflichtet.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von peterfido Beitrag anzeigen
    Die Idee mit dem USB Adapter kam mir heute Morgen nach dem Aufwachen. Es lohnt sich also manchmal doch eine Nacht darüber zu schlafen. Die Bestellung des HDMI Adapters konnte ich noch rechtzeitig stornieren, was mit einer freundlichen Bestätigungsmail quittiert wurde.

    Gute Frage, das habe ich nicht probiert. Es gibt aber für den mpd einige Plugins. Man kann auch die Ausgabe per RAW Daten an ein Device schicken. Aber auch das habe ich nicht getestet. Radioaufnahmen mache ich mit dem Phonostar Player Plus am PC.

    Jetzt stöbere ich erstmal durchs Wiki und entscheide, wie weit ich da aushole. Eine 2GB SD-Karte habe ich schon bereit liegen. Bin ja mal gespannt, ob alles darauf passt, wenn man es neu macht. Den Artikel selbst werde ich frühestens Morgen angehen, da ich dafür dann doch etwas mehr Ruhe brauche und heute Abend bin ich schon gesellschaftlich verpflichtet.
    Keine Eile!
    Ja so eine Mütze Schlaf wirkt manchmal wahre Wunder. Mir sind auch schon oft Lösungen für diverse Probleme mitten in der Nacht oder auf der Arbeit wenn ich gerade nicht daran gedacht habe, eingefallen.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    So, der Wiki Artikel ist erstmal fertig. Jetzt lass ich mich überraschen, was da noch geändert wird.
    Damit nichts verloren geht, stelle ich jetzt hier auch nochmal die aktuellen Quellcodes ein.

    empfangen
    Code:
    // Kompilieren mit: GCC /var/scripte/empfangen.c -o /var/scripte/empfangen
    
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <time.h>
    
    
    #define BAUDRATE B19200
    char MODEMDEVICE[]= "/dev/ttyAMA0";                        // Schnittstelle
    
    /*
    Sx          x=0 aktuellen Sender neu abspielen Nach Stop oder zum neu puffern, x>49 Sender x-48 abspielen
    Bx          x=0 abspielen stoppen, x=1 mpd neu starten
    Px            x=0 einen Senderplatz zurück x=1 einen Senderplatz hoch
    Tx            Taste x am Gerät gedrückt
    resetreset     Reboot des Raspi
    */
    char eingang[255]="";
    char d[1]="";
    int anzahl=0;
        
    int laenge=0;
    int logg=0;
    int    fd;                // File descriptor
    int sender;
    int lautst=95;
    long int time_back;
    long int time_ok;
    
    struct    termios newtio={};
    
    unsigned char eingangleer()                            //Eingangstring leeren
    {
        int i;
        for(i=0; i < laenge; i++){
            eingang[i] = 0;
        }
      laenge=0;    
    }
    
    unsigned char platzlautsenden()                        //Lautstärke und Senderplatz auf den kleinen Zahlen ausgeben
    {                                                    //Lautstärke 100% und Senderplatz 3 wird zu 100:03
        char nummer[3];
        int i=0;
        char befehl[255]="";
    
        sprintf(nummer,"%d",lautst);
        strcpy(befehl,"/var/scripte/senden 2");
        if (strlen(nummer)<3){
            strcat(befehl,"0");
        }
        if (strlen(nummer)<2){
            strcat(befehl,"0");
        }
        strcat(befehl,nummer);
        strcat(befehl,":");
        i=sender;
        if(i>99){                                        //Die Anzeige ist 2-Stellig
            i=99;
        }
        sprintf(nummer,"%d",i);
        if (strlen(nummer)<2){
            strcat(befehl,"0");
        }
        strcat(befehl,nummer);
        system(befehl);
    }
    
    unsigned char radioein()                            //gewählten Platz in der Playlist abspielen
    { 
        char nummer[3];
        char befehl[255]="";
    
        sprintf(nummer,"%d",sender);
        strcpy(befehl,"mpc -q play ");
        strcat(befehl,nummer);
        system(befehl);
        platzlautsenden();
    }
    
    unsigned char initmpd()                                //Schnittstelle parametrieren und öffnen
    {
        char befehl[30]="";
        char s[2]="";
        lautst=95;
        system("/var/scripte/radio2.sh");                //InitScript für mpd
        sleep(1);
        system("mpc playlist > /tmp/mpdlist");            //Playlist zwischenspeichern
        sleep(1);
        FILE *f;
        char Text[300]="";
        char Text1[70]="";
        char Text2[7]="volume";
        f = fopen("/tmp/mpdlist","r");
        anzahl=0;                                            //Anzahl Einträge der Senderliste zählen
        if(f!=NULL){
            fgets(Text, sizeof(Text), f);
            if(strlen(Text)<2){
                fclose(f);
                return;
            }else{
                anzahl=1;
                while( fgets(Text, sizeof(Text), f) !=0 ){
                    if(strlen(Text)>2){
                        anzahl++;
                    }
                    if(anzahl>199){                            //Nicht mehr wie 200
                        break;
                    }
                }
            }
            fclose(f);
        }
        strcpy(befehl,"/var/scripte/senden 6");                //kleine Symbole im Display anzeigen lassen
        s[0]=208;                                            //Antennensymbol + FM anzeigen, als Zeichen für Bereit
        strcat(befehl,s);
        system(befehl);
        strcpy(befehl,"/var/scripte/senden 7");                
        s[0]=130;                                            //Stereo anzeigen
        strcat(befehl,s);
        system(befehl);    
    }
    
    unsigned char abspielen()                                //Wiedergabe fortsetzen. Ist noch nichts abgespielt worden, Platz 1 abspielen
    {
        if (anzahl>0){
            if (sender==0){
                sender=1;
            }else{ if(sender>anzahl){
                sender=anzahl;
                }
                radioein();
            }
        }
    }
    
    unsigned char platzplus()                                //Senderplatz um 1 erhöhen
    {                                                        //Bei weniger Sendern in Liste auf Platz 1 zurück
        if (anzahl>0){
            sender++;                                    
            if (sender>anzahl){                            
                sender=1;
            }
            radioein();
        }    
    }
    
    unsigned char platzminus()                                //Senderplatz um 1 verringern
    {                                                        //Bei 0 auf letzten Platz springen
        if (anzahl>0){
            sender--;                                    
            if (sender<1){                                
                sender=anzahl;
            }
            radioein();
        }    
    }
    
    unsigned char lautsetzen()                                //Lautstärke einstellen
    {
        char nummer[3];
        char befehl[255]="";
    
        sprintf(nummer,"%d",lautst);
        strcpy(befehl,"mpc -q volume ");
        strcat(befehl,nummer);
        system(befehl);
        platzlautsenden();
    }
    
    unsigned char lauter()                                    //Senderplatz um 5 Prozentpunkte erhöhen
    {
        if (lautst<96){
            lautst+=5;                                    
            lautsetzen();
        }    
    }
    
    unsigned char leiser()                                    //Senderplatz um 5 Prozentpunkte verringern
    {
        if (lautst>5){
            lautst-=5;                                    
        }else{
            lautst=0;
        }
        lautsetzen();
    }
    
    unsigned char radioaus()                                //Wiedergabe anhalten
    {
        system("mpc -q stop");
        system("/var/scripte/senden 45");
        sleep(1);
    }
    
    unsigned char auswerten()                                //Angekommene Daten auswerten
    { int i;    
      int fd1;
      int zeile;
      char ret;
      char farbe[6]="";
      
      /* Zum Schreiben öffnen */
        if ((strcmp(eingang,"resetreset") ==0 )){
            system("reboot");
        }
        if (eingang[0] == 83){                              // S
            zeile=eingang[1]-48;                            //Werte von 48-255 = 207 mögliche Sender, wird auf 200 limitiert
            if (zeile == 0){                                // bei 0 einfach weiter abspielen oder Platz 1 beginnen
                abspielen();
            }else if (zeile<=anzahl){
                sender=zeile;
                radioein();
            }
          }
        if (eingang[0] == 84){                              // T
            if (eingang[1]>49&&eingang[1]<57){                //Wert soweit OK, Taste 1 = Powertaste und wird vom AVR ausgewertet
                if (eingang[1]==50){                        //2 - OK Taste
                    abspielen();
                }
                if (eingang[1]==51){                        //3 - Wippe rechts
                    lauter();    
                }
                if (eingang[1]==52){                        //4 - BACK Taste
                    radioaus();
                }
                if (eingang[1]==53){                        //5 - Menü Taste
                    system("/var/scripte/senden");
                }
                if (eingang[1]==54){                        //6 - Wippe hoch
                    platzplus();
                }
                if (eingang[1]==55){                        //7 - Wippe links
                    leiser();
                }
                if (eingang[1]==56){                        //8 - Wippe runter
                    platzminus();
                }
            }
        }
        if (eingang[0] == 80){                              // P
            if (eingang[1]==49){                             //1
                platzplus();
            }else{
                platzminus();
            }
          }
        if (eingang[0] == 66){                              // B
            if (eingang[1]==48){                             //0 Wiedergabe stoppen
                radioaus();
            }
            if (eingang[1]==49){                             //1 mpd zurücksetzen
                initmpd();
            }
        }
        eingangleer();
     }
    
    unsigned char receive()                                    //Zeichen empfangen
    {
        int res;
        unsigned char buffer;
    
        res = read(fd, &buffer, 1);
        return buffer;
    }
    
    int init()                                                //Schnittstelle parametrieren und öffnen
    {
        //O_RDONLY, O_WRONLY or O_RDWR -
        //O_NDELAY (geht weiter, wenn keine Daten da sind und gibt "-1" zurueck)
        // man 2 open fuer mehr Infos - see "man 2 open" for more info
        // O_NOCTTY No ControllTeleType 
    
        fd = open(MODEMDEVICE, O_RDONLY | O_NOCTTY);
        if (fd < 0){
            printf("Fehler beim oeffnen von %s\n", MODEMDEVICE);
            exit(-1);
        }
        memset(&newtio, 0, sizeof(newtio));
        newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;    //setzt die neuen Porteinstellungen
        newtio.c_iflag = IGNPAR;
        newtio.c_oflag = 0;
        newtio.c_lflag = 0;         /* set input mode (non-canonical, no echo, ...) */
        newtio.c_cc[VTIME] = 0;     /* inter-character timer unused */
        newtio.c_cc[VMIN] = 1;    /* blocking read until 1 chars received */
    
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd, TCSANOW, &newtio);
        return fd;
    }
    
    int main(int argc, char** argv)        //Programmstart
    {
        char c;
         init();                            //Schnittstelle parametrieren und öffnen
        sleep(5);                         //warten bis mpd gestartet ist
         initmpd();                        //mpd auf definierten Zustand bringen
        while (1)
            {
            c=receive();                //Zeichen holen
            if((c==13)){                //CR als Abschluß einer Zeile
                auswerten();        
            }else if(c>13&&c<128){        //Alles von ASCii 14 bis 127 wird akzetpiert
                eingang[laenge]=c;        
                laenge++;                
                if (laenge >254){        //Bei 254 Zeichen im Puffer wird automatisch ausgewertet
                    auswerten();
                }
            }
        } 
        close (fd);
        return 0;
    }
    senden
    Code:
    // Kompilieren mit: GCC /var/scripte/senden.c -o /var/scripte/senden
     
    //#include <iostream>
    //using namespace std;
    #include <sys/types.h>                        //nicht benötigtes scheint keinen Platz zu verschwenden...
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <time.h>
    
    #define BAUDRATE B19200
    char MODEMDEVICE[]= "/dev/ttyAMA0";    // !!!
    
    int    fd;                // File descriptor
    struct    termios newtio={};
    
    unsigned char send(char c)
    {
        int res=write(fd, &c, 1);
        if (res<0) printf("Fehler beim Senden\n");
        return res;
    }
    
    int init()                                                //Schnittstelle parametrieren und öffnen
    {
        /*** Init ***/
        
        //O_RDONLY, O_WRONLY or O_RDWR -
        //O_NDELAY (geht weiter, wenn keine Daten da sind und gibt "-1" zurueck)
        // man 2 open fuer mehr Infos - see "man 2 open" for more info
        // O_NOCTTY No ControllTeleType 
        fd = open(MODEMDEVICE, O_WRONLY | O_NOCTTY);
        if (fd < 0){
            printf("Fehler beim oeffnen von %s\n", MODEMDEVICE);
            exit(-1);
        }
        memset(&newtio, 0, sizeof(newtio));
        newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;    //setzt die neuen Porteinstellungen
        newtio.c_iflag = IGNPAR;
        newtio.c_oflag = 0;
        newtio.c_lflag = 0;         /* set input mode (non-canonical, no echo, ...) */
        newtio.c_cc[VTIME] = 0;     /* inter-character timer unused */
        newtio.c_cc[VMIN] = 1;    /* blocking read until 1 chars received */
    
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd, TCSANOW, &newtio);
        return fd;
    }
    int einmal()                                //Sucht bereits laufende Instanzen und zählt diese
    {
        int i=0;
        int anzahl=0;
        int laenge=0;
        char *ptr;
        FILE *in;
        extern FILE *popen();
        char buff[30];
    
        if(!(in = popen("pidof senden", "r"))){
            exit(1);
        }
        
        fgets(buff, sizeof(buff), in);
        pclose(in);
        laenge=strlen(buff);
        for(i=0;i<laenge;i++)
        {
            if(buff[i]==' ') anzahl++;
        }
        return anzahl;    
    }
    
    
    int main(int argc, char** argv)                                            //Programmstart
    {
        char vBuf[100]="",*pBuf;
        char buffer [100]="";
        char buffer1 [100]="";
        int i=0;
        int anzahl;
        anzahl=einmal();
        if (anzahl>0){
            anzahl++;
            sleep(anzahl);
        }
         init();
        if (argc == 1) {                                                    //Wenn nichts angegeben, dann Uhrzeit und Datum senden
            time_t rawtime;
            
            struct tm * timeinfo;
            time ( &rawtime );
            timeinfo = localtime ( &rawtime );
            strftime (buffer,80,"U%H:%M:%S",timeinfo);                        //Uhh:mm:ss
            pBuf=buffer;
            strcat(pBuf,"\r");
            while(pBuf && *pBuf)                                            //Zeichen einzeln senden
                send(*pBuf++);
    
            strftime (buffer,80,"D%d.%m.%y",timeinfo);                        //Dtt.mm.yy
            pBuf=buffer;
            strcat(pBuf,"\r");
            sleep(1);
            while(pBuf && *pBuf)                                            //Zeichen einzeln senden
                send(*pBuf++);
        }else{                                                                //Sonst Parameter einlesen und senden    
            if(strlen(argv[1])>75){                                            //Puffer im AVR ist auf 80 gestellt
                strncpy(buffer,argv[1],76);                
                buffer[76]='\0';
            }else{
                strcpy(buffer,argv[1]);
                if (argc >2){
                    for (i=2;i<argc;i++){
                        if(strlen(buffer)+strlen(argv[i])>75){
                            strcat(buffer," ");                                
                            strncat(buffer,argv[i],(76-strlen(buffer)));
                            buffer[76]='\0';
                            break;                                            //exit for in c...
                        }else{
                            strcat(buffer," ");
                            strcat(buffer,argv[i]);
                        }
                    }
                }
            }
            int o=0;                                                    //Umlaute anpassen, ASCii 195 verwerfen
            for(i=0;i<strlen(buffer);i++){
                buffer1[o]=buffer[i];
                if (buffer1[o]==164){                                    //ä
                    buffer1[o]= 228;
                }
                if (buffer1[o]==188){                                    //ü
                    buffer1[o]= 252;
                }
                if (buffer1[o]==182){                                    //ö
                    buffer1[o]= 246;
                }
                if (buffer1[o]==132){                                    //Ä
                    buffer1[o]= 196;
                }
                if (buffer1[o]==156){                                    //Ü
                    buffer1[o]= 220;
                }
                if (buffer1[o]==150){                                    //Ö
                    buffer1[o]= 214;
                }
                if (buffer1[o]==159){                                    //ß
                    buffer1[o]= 223;
                }
                if (buffer1[o]==138){                                    //&
                    buffer1[o]= 38;
                }
                if (buffer1[o] != 195){                                    //Initialisierung Umlaut
                    o++;
                }
            }
            pBuf=buffer1;
            strcat(pBuf,"\r");                                                //CR (ASCii13) anfügen, damit der AVR auswertet        
            while(pBuf && *pBuf){                                            //Zeichen einzeln senden
                send(*pBuf++);
            }
        } 
        close (fd);
        return 0;
    }
    mpcout (Der Überwacher)
    Code:
    // Kompilieren mit: GCC /var/scripte/mpcout.c -o /var/scripte/mpcout
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    char Textalt[75]="";
    int anzahl=0;
    
    int wachhund()                                //Sucht bereits laufende Instanzen und zählt diese
    {
        char *ptr;
        FILE *in;
        extern FILE *popen();
        char buff[30];
    
        if(!(in = popen("pidof mpd", "r"))){
            exit(1);
        }
        
        fgets(buff, sizeof(buff), in);
        pclose(in);
        anzahl=(strlen(buff));
    }
    
    unsigned char aktualisieren()
    {     
        int i=0;    
        int o=0;
        char befehl[255]="";
        FILE *f;
    
        if(!(f = popen("mpc current", "r"))){
            exit(1);
        }
        char Text[300]="";
        char Text1[75]="";
        fgets(Text, sizeof(Text), f);
        fclose(f);
        if(strlen(Text)<2){
            strcpy(Text1,"");
            if((strcmp(Text1, Textalt)) != 0){
                strcpy(Textalt, Text1);
                system("/var/scripte/senden 0");
                system("/var/scripte/senden 45");
            }
        }else{
            o=0;
            for (i=0;i<strlen(Text);i++){
                if (Text[i]==38){                                //&
                    Text1[o]=138;                                //+
                }else{
                    Text1[o]=Text[i];
                }
                o++;
                if (o>74){
                    break;
                }
            }
            Text1[o]='\0';
            if((strcmp(Text1, Textalt)) != 0){
                strcpy(Textalt, Text1);
                    strcpy(befehl,"/var/scripte/senden '1");    // \" funktioniert nicht, ' schon
                    strcat(befehl,Text1);
                    strcat(befehl,"'");
                    system(befehl);
                    system("/var/scripte/senden 44");
            }
        }
    }
    
    int main(int argc, char** argv)
    {    
        while (1)
            {     sleep(2);
                anzahl=0;
                wachhund();
                if (anzahl <2){
                    system("/var/scripte/radio2.sh");
                }
                aktualisieren();
        } 
        return 0;
    }
    radio2.sh (Initialisert den mpd)
    Code:
    #!/bin/bash 
    #
    # Radio starten
    #
    # 
    /etc/init.d/mpd restart     #Versetzt den mpd in einen definierten Zustand
    mpc -q clear                #Nicht nötig, wenn man kein Status File nutzt, schadet aber auch nicht, wenn man keines nutzt...
    mpc -q load radiosender        #lädt die von uns erstellte Playlist
    mpc -q volume 95            #setzt die Lautstärke auf 95 %
    exit 0
    autostart.sh (wird von rc.local aufgerufen)
    Code:
    #!/bin/bash
    #
    # Autostart
    #
    # 
    
    ##sound
    amixer cset numid=3 1 
    amixer -c 0 cset numid=2 on,off
    amixer set PCM 95%
    aplay /var/sounds/start.wav
    nice -1 /var/scripte/empfangen &
    nice -1 /var/scripte/mpcout &
    Geändert von peterfido (27.08.2012 um 19:05 Uhr)
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Nach dem neuesten Update (apt-get update && apt-get upgrade) vom 18.09.2012 sind die Audioaussetzer am analogen Anschluß verwschwunden. Allerdings hört man den Raspi über den Anschluß noch arbeiten, also leises Pulsen. Weiter kommt ein lautes Knacken (auch wenn per "mpc volume 10" die Lautstärke auf gering gesetzt wurde) durch den Anschluß, wenn man den mpd stoppt. Ist also nicht so für den Anschluß an die Hifianlage geeignet. Über eine USB-Soundkarte hat sich, soweit icht das beobachten konnte, nichts geändert.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress