Ankündigung

Einklappen
Keine Ankündigung bisher.

Misterhouse und Squeezebox

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Misterhouse und Squeezebox

    Ich teste momentan Eibd/Misterhouse, erste Logiken funktionieren schon.

    Misterhouse läuft bei mir auf einem Mini-ITX unter Ubuntu-Linux.
    Leider finde ich nichts in der Doku, wie man die Sprachausgabe auf der Squeezebox ausgibt. Benötige ich dafür xAP/xPL? Hat das schonmal jemand realisiert?

    Desweiteren wäre für mich noch interessant durch ein Event getriggert eine vorhandene Playlist auf der Squeezebox zu starten. Gibts da schon was fertiges?


    Gruss,
    katmic
    Viele Grüße,
    Michael

    #2
    Hast du es schon mal mit dem Perl-script mp3_slimserver.pl aus den Code-Beispielen versucht?
    Gruß,
    Marc

    Kommentar


      #3
      oder siehe auch:

      Yahoo! Groups
      Gruß,
      Marc

      Kommentar


        #4
        Zitat von aggie89go Beitrag anzeigen
        oder siehe auch:

        Yahoo! Groups
        Danke, sieht vielversprechend aus, ich werde das mal versuchen!


        Gruss,
        katmic
        Viele Grüße,
        Michael

        Kommentar


          #5
          Nachdem ich 2 Abende mehr oder weniger erfolglos verbracht habe, möchte ich den Thread nochmal aufwärmen.

          Oben genannte Lösungen zur Ansteuerung der Squeezebox über Misterhouse funktionieren über das Web-Interface, das funktioniert zwar, ich hätte aber lieber eine Lösung über xPL/xAP, da damit auch die Sprachausgabe funktionieren soll.

          Meine Konfiguration: SC auf Synology 207+, Misterhouse auf Mini-ITX, Entwicklung unter Windows XP.

          Ich habe xPL im Squeezecenter aktiviert, leider sehe ich mit dem xPLHAL-Manager unter Windows den Squeezecenter-XPL-Node nicht.
          Daraufhin habe ich unter Squeezecenter das xAP-Plugin installiert. Jetzt sehe ich wenigstens mit dem xFx-Viewer unter Windows die xAP-SC-Nachrichten. Den MH-xAP-Hub sehe ich aber immer nicht (den MH-xPL-Hub auch nicht).

          Hat jemand eine funtkionierende Integration MH und Squeezebox mit xPL oder xAP am Laufen? Gibt es vielleicht auch ein kleines Beispiel-Skript, z.B. zur Ausgabe von Text auf der SB mit xPL oder xAP?

          Mit Forumssuche oder Google habe ich leider nichts passendes gefunden.

          Gruss,
          Michael
          Viele Grüße,
          Michael

          Kommentar


            #6
            Hallo Michael,

            bist du in dem Punkt "Sprachausgabe über Squeezebox" in Verbindung mit xPL/xAP weitergekommen? Das würde mich dann mal interessieren
            Gruß Dirk

            Kommentar


              #7
              Hallo Dirk,

              da ich mit xPL/xAp Probleme hatte, habe ich dann grundlegende Funktionen wie Squeezebox An/Aus, Playlist starten, Lautsärke über das CLI Interface realisiert.
              Die Sprachausgabe hatte ich erstmal nach hinten gestellt, auch weil ich momentan nur eine mögliche Ausgabemöglichkeit, nämlich die Squeezebox im Wohnzimmer, habe. Ich plane noch eine Squeezebox für das Bad, da wären dann morgendliche Ansagen ein echter Mehrwert.

              Gruss,
              Michael
              Viele Grüße,
              Michael

              Kommentar


                #8
                Zitat von katmic Beitrag anzeigen
                Ich plane noch eine Squeezebox für das Bad, da wären dann morgendliche Ansagen ein echter Mehrwert.
                Hi Michael,
                genau dafür hätte ich es auch gerne

                Aber das Problem ist wohl, das es kein TTS Plugin für das Squeezecenter gibt. Somit kommt man mit xAp nicht weiter, denke ich. Es sei denn, MH würde die Audiodaten direkt zum Squeezecenter schicken, aber wie? Die Misterhouse Wave-Dateien scheinen mir da nicht die eleganteste Lösung zu sein...

                Schwierig...
                Gruß Dirk

                Kommentar


                  #9
                  Zitat von DirkNienhaus Beitrag anzeigen
                  Hi Michael,
                  Es sei denn, MH würde die Audiodaten direkt zum Squeezecenter schicken, aber wie? Die Misterhouse Wave-Dateien scheinen mir da nicht die eleganteste Lösung zu sein...
                  Warum nicht, ich denke so wird es funktionieren. MH erzeugt mit festival oder mbrola eine Wave-Datei, die dann in das Squeezecenter-Verzeichnis kopiert wird. Dann kann sie per Squeezecenter CLI-Befehl von MH aus abgespielt werden.

                  Ich glaub ich setze mich nächste Woche da mal dran, wenn das Wetter nicht zu schön ist .


                  Gruss
                  Michael
                  Viele Grüße,
                  Michael

                  Kommentar


                    #10
                    HI,

                    ja funktionieren wird es, das denke ich auch. Ich fände es "schick", wenn es im Squeezecenter einen "Kanal" für Misterhouse gäbe, den man einfach aktiv schaltet, sobald MH etwas zu sagen hat.
                    Also Misterhouse als Streamingserver und das Squezzecenter als Client (behandelt wie ein Internetradio-Kanal).

                    Any comments?
                    Gruß Dirk

                    Kommentar


                      #11
                      Da gibt es doch ein paar Unterschiede. Wenn z.B. gerade Musik gehört wird, muss diese ausgeblendet werden, die MH-Durchsage abgespielt werden, danach sollte die ursprüngliche Playlist oder Radiosender weiter gespielt werden. Es ist also etwas mehr Logik notwendig, die in MH realisiert werden muss.
                      Um zu streamen wie beim Internetradio benötigst Du einen eigenen Streaming-Server wie Icecast. Ich denke, da ist der Aufwand deutlich groesser als das Abspielen einer Wave-Datei einzuleiten.

                      Gruss
                      Michael
                      Viele Grüße,
                      Michael

                      Kommentar


                        #12
                        So, jetzt habe ich immerhin schonmal rausbekommen wie ich die mbrola au-Files nach mp3 wandeln kann:

                        Ich habe mbrola wie hier
                        https://knx-user-forum.de/57890-post14.html
                        beschrieben installiert.

                        Das au-file von mbrola kann dann mit
                        Code:
                        sox test.au -t raw -r 32000 - resample |  lame -r -x -s 32 -m m --quiet --tt "$3" --ta "$4" - "$2" 2>/dev/null > test.mp3
                        nach mp3 konvertiert werden.

                        Unter Ubuntu musste ich dann noch eine Lib für Sox nachinstallieren:
                        Code:
                        sudo apt-get install libsox-fmt-base
                        Jetzt muss ich nur noch das mp3 zum Squeezecenter-NAS rüberschieben und dann die CLI-Schnittstelle anpassen. Wenn ich fertig bin poste ich den kompletten Code.

                        Gruss
                        Michael
                        Viele Grüße,
                        Michael

                        Kommentar


                          #13
                          aktueller Stand ?

                          Hallo zusammen,

                          gibts hierzu Updates ?

                          EIB/IP-Router, 3 Dali Gateways, IPS auf: WHS2011 -22" Touch -6xMicroVis II logic -4xSqueezebox + Boxen (Teufel) -Gigabit-Vernetzung -60 Dimmkanäle DALI -UVR1611 mit BL-Net -iPad -4xFoscam FI8905W -4xD-Link DCS-932L -Zennio KES -2x Fingerprinter eKey

                          Kommentar


                            #14
                            Hi,

                            ja, ich hatte die fertige Lösung einige Monate am Laufen. Mittlerweile habe ich das ganze wieder abgestellt, weil die Ansage des Anrufers bei Telefonanrufen zu langsam war. Beim Abnehmen des Telefons wurde immer noch der Name des Anrufers durchgesagt, was eher gestört hat.

                            Hier der Code für eigene Experimente:

                            1.) speak_mbrola.pl
                            Code:
                            # noloop=start
                                my $file_idx     = -1;
                            # noloop=stop
                            
                            my $mbrola_timer = new Timer;
                            
                            sub speak_mbrola {
                                my %parms = @_;
                            
                                print_log "[speak_mbrola] Speak: $parms{text}";
                            
                                # 1. create random number for file name    
                                my $file_idx_new;
                                
                                do {
                                    $file_idx_new = int(rand(100));
                                } while ($file_idx == $file_idx_new); 
                              
                                $file_idx = $file_idx_new;
                                
                                # 2. create mp3 file
                                my $mp3_file = '/audio/mbrola' . $file_idx . '.mp3';
                                my $mp3_file_path = '/data/apacheroot' . $mp3_file;
                                my $mp3_file_url = 'http://hoelderlin' . $mp3_file;
                                
                                my $command  = "/data/mic/dev/eib/my_scripts/mbrola_txt2mp3.sh \"$parms{text}\" $mp3_file_path";
                                system($command);
                                
                                my $speak_command = 'set $t_sc_speak "' . $mp3_file_url . '"';   
                                
                                # 3 send file to squeezecenter
                                set $mbrola_timer 5, $speak_command;
                                
                            }
                            2.) Der Inhalt des Shellscripts sieht so aus:

                            mbrola_txt2mp3.sh
                            Code:
                            #!/bin/sh
                            
                            TEXT="$1"
                            MP3_FILE="$2"
                            
                            ROOT=/usr/local/mbrola
                            RULES=$ROOT/txt2pho/preproc/Rules.lst
                            HADIFIX=$ROOT/txt2pho/preproc/Hadifix.abk
                            DATA=$ROOT/de3/de3
                            
                            echo $TEXT |\
                              preproc $RULES $HADIFIX |\
                              txt2pho |\
                              mbrola $DATA - -.au |\
                              sox -t au - -t raw -r 32000 - resample |\
                              lame -r -x -s 32 -m m --quiet --tt "$3" --ta "$4" - "$2" 2>/dev/null > $MP3_FILE
                            3.) Und hier noch eine Funktion, die das erste mbrola.pl verwendet,
                            s. Aufruf (TTS) ganz am Ende der Datei


                            squeezecenter_control.pl
                            Code:
                            use URI::Escape;
                            
                            # *********************************************************
                            # 1.)  connect to SC
                            # *********************************************************
                            
                            # noloop=start
                                my $host_port="$config_parms{squeezecenter_host_port}";
                                $squeezecenter = new Socket_Item(undef, undef, $host_port,
                                                                'slimserver_cli', 'tcp','record');    
                                &login;
                            # noloop=stop
                            
                            sub login {
                                print_log "[Squeezecenter] login to squeezecenter ..."; 
                                start $squeezecenter;
                                set_echo $squeezecenter 0;
                                sleep 1;
                                my $login="$config_parms{squeezecenter_login}";
                                my $passwd="$config_parms{squeezecenter_passwd}";
                                set $squeezecenter 'login ' . $login . ' ' . $passwd;
                                set $squeezecenter 'subscribe power,play,unknownir';      
                            }
                            
                            sub check_connection {     
                                unless (connected $squeezecenter) { 
                                    # maybe Squeezecenter was restartet, so connect again
                                    print_log "[Squeezecenter] error occured, no connection to squeezecenter!"; 
                                    stop $squeezecenter;
                                    &login;
                                }
                            }
                            
                            # *********************************************************
                            # 2.)  react to notifications from the SC CLI interface
                            # *********************************************************
                            
                            if (my $data = said $squeezecenter) {
                                my $log_src = '[Squeezecenter]';
                                if ($data =~ m/.* power 0 .*$/) {
                                    print_log "$log_src power aus";        
                                } elsif ($data =~ m/.* power 1 .*$/) {
                                    print_log "$log_src power an";        
                                    set $EG_WZ_Multimedia ON;
                                } else {
                                    print_log "$log_src unknown text: $data";
                                }
                            }
                                    
                            # *********************************************************
                            # 3.)  send commands to SC via CLI interface
                            # *********************************************************
                            
                            # noloop=start
                                my $sc_states = "PowerOn,PowerOff,PLGoodMorning,VolMute,Stop";
                                #my $playlist = 'playlist play ' . uri_escape('/volume1/music/Squeeze/playlists/GutenMorgen.m3u');
                                my $playlist = 'playlist play ' . uri_escape( $config_parms{squeezecenter_pl_morning} );
                                my %sc_commands = ('poweron' => 'power 1', 'poweroff' => 'power 0', 'plgoodmorning' => $playlist, 'volmute' => 'mixer muting 0', 'stop' => 'stop');
                                $v_sc_control = new Voice_Cmd("Set the house squeezecenter control to [$sc_states]");
                                $t_sc_speak = new Text_Cmd('Speak (.*)');
                                # Testen mit ./mh/bin/mhsend -run "Speak http://hoelderlin/audio/test.mp3"
                                my $sc_speak_timer = new Timer;
                            # noloop=stop
                            
                            sub sc_control {
                                    my $command = shift;
                                    $command = $sc_commands{lc($command)} if $sc_commands{lc($command)};
                                    print_log "[Squeezecenter] sending: $command ..."; 
                                    
                                    &check_connection;    
                                    set $squeezecenter $command;
                            }
                            
                            sub sc_control_speak {
                                    my $mp3_url = shift;
                                    print_log "[Squeezecenter] play url: $mp3_url ..."; 
                                    
                                    &check_connection;    
                                    
                                    # 1. remember configuration
                                    my $vol_before = 30;
                                    my $path_before = '';
                                    
                                    set $squeezecenter 'mixer volume ?';
                                    if (my $vol_state = said_next $squeezecenter) {
                                        if ($vol_state =~ m/.* mixer volume (.*)$/) {
                                            $vol_before = $1;
                                        }
                                    }    
                                    set $squeezecenter 'path ?';
                                    if (my $path_state = said_next $squeezecenter) {
                                        if ($path_state =~ m/.* path (.*)$/) {
                                            $path_before = $1;
                                        }
                                    }
                                    
                                    # 2. play speech file
                                    set $squeezecenter 'stop';
                                    #sleep(2);
                                    set $squeezecenter 'mixer volume 60';        
                                    set $squeezecenter 'playlist play ' . uri_escape( $mp3_url );
                                    
                                    # 3. restore configuration
                                    my $mixer_cmd = 'set $squeezecenter \'mixer volume ' . $vol_before . '\'';
                                    #set $squeezecenter 'playlist play ' . $path_before;
                                    set $sc_speak_timer 15, $mixer_cmd;
                            }
                            
                            # execute SC commands 
                            if ($state = said $v_sc_control) {
                                sc_control($state);
                            }
                            
                            # play TTS speak message 
                            if (my $mp3_url = said $t_sc_speak) {
                                sc_control_speak($mp3_url);
                            }
                            Viele Grüße,
                            Michael

                            Kommentar

                            Lädt...
                            X