|
From: <pf...@us...> - 2012-04-25 17:48:20
|
Revision: 764
http://openautomation.svn.sourceforge.net/openautomation/?rev=764&view=rev
Author: pfry
Date: 2012-04-25 17:48:08 +0000 (Wed, 25 Apr 2012)
Log Message:
-----------
Das Plugin wurde nun auf mpd/pulseaudio optimiert (aplay immer noch moeglich).
MissGoogle.pl ist KEIN Plugin, sondern ein Tool zur Erzeugung der Audiodateien mit angenehmer Stimme per Google Translate.
Modified Paths:
--------------
wiregate/plugin/generic/Ansagen.pl
wiregate/plugin/generic/conf.d/Ansagen.conf
Added Paths:
-----------
wiregate/plugin/generic/MissGoogle.pl
Modified: wiregate/plugin/generic/Ansagen.pl
===================================================================
--- wiregate/plugin/generic/Ansagen.pl 2012-04-25 17:11:27 UTC (rev 763)
+++ wiregate/plugin/generic/Ansagen.pl 2012-04-25 17:48:08 UTC (rev 764)
@@ -9,12 +9,14 @@
use POSIX qw(floor);
# Defaultkonfiguration
-my $logfile='/var/log/Ansagen.log';
-my $speechdir='/var/lib/Ansagen/Sprache/';
+my $speechdir='/var/lib/mpd/music/Ansagen';
+my $mpddir='/var/lib/mpd/music';
my %channels=('default'=>'welcome');
my $beepchannel='paging';
my $beep = "Beep/03d.wav";
my @additional_subscriptions=();
+my %mpdhost=('default'=>'127.0.0.1/6600');
+my $mode='mpd';
# Konfigurationsfile einlesen
my $conf=$plugname; $conf=~s/\.pl$/.conf/;
@@ -22,8 +24,12 @@
my @lines = <FILE>;
close FILE;
eval("@lines");
-return "config error" if $@;
+# speechdir muss im mpddir liegen!
+$speechdir=~s!/$!!;
+$mpddir=~s!/$!!;
+return "config error" if $@ || ($mode eq 'mpd' && $speechdir !~ /^$mpddir/);
+
# Aufrufgrund ermitteln
my $event=undef;
if (!$plugin_initflag)
@@ -41,6 +47,11 @@
my %gas=();
# Erstaufruf - an GAs anmelden, auf die die Muster in %channels zutreffen
+ for my $k (grep /^$plugname\_/, keys %plugin_info)
+ {
+ delete $plugin_info{$k};
+ }
+
for my $ga (keys %eibgaconf)
{
my $name=$eibgaconf{$ga}{'name'};
@@ -90,8 +101,8 @@
# Hole alle verfuegbaren Durchsagedateien
my $find=checkexec('find');
- my @speech=split /\n/, `$find . -name "*.wav"`;
-
+ my @speech=split /\n/, `$find . -name '*.wav'`;
+ map s!^\./!!, @speech; # Pfade relativ zum speechdir
return 'no speech files found' unless @speech;
my @statement=();
@@ -171,7 +182,7 @@
{
push(@statement, number(\@speech, $2));
push(@statement, "Zeiten/Uhr.wav");
- push(@statement, number(\@speech, $3));
+ push(@statement, number(\@speech, $3)) if $3;
}
else
{
@@ -184,9 +195,7 @@
{ return "Datentyp $dpt nicht implementiert"; }
}
# Das komplette Statement in die Ausgabe geben
- speak($channel, $name, @statement);
-
- return $name.' '.$msg{value};
+ return speak($channel, $name, @statement);
}
return;
@@ -386,17 +395,13 @@
my $channel=shift; # ALSA-Channel
my $name=shift; # Name der Ansage (aus eibga.conf) - fuers Log
- open LOG, ">>$logfile";
+ my $retval='';
my $date=checkexec('date');
my $datetime=`$date +"%F %X"`;
$datetime=~s/\s*$//s;
if(@_)
{
- my $aplay=checkexec('aplay');
- my $mpc=checkexec('mpc');
- system $mpc, 'pause';
-
# Nur fuer Russound-Paging: Star Trek 'Beep' vorweg weckt Russound auf
if($channel=~/$beepchannel/)
{
@@ -410,18 +415,54 @@
}
}
- system $aplay, '-c2', "-D$channel", @_;
+ if($mode eq 'aplay')
+ {
+ my $aplay=checkexec('aplay');
+ system $aplay, '-c2', "-D$channel", @_;
-# map s!^.*/(.*?)\.wav!$1!, @_;
- print LOG $datetime.' '.$channel.':'.(join ' ', @_)."\n";
+ map s!^.*/(.*?)\.wav!$1!, @_;
+ $retval.=$channel.':'.(join ' ', @_);
+ }
+ elsif($mode eq 'mpd')
+ {
+ push @_, "silence.wav"; # kurze Pause zwischen Ansagen
- system $mpc, 'toggle';
+ map s!^/*!$speechdir/!, @_; # alle Eintraege relativ zum speechdir
+ map s!^$mpddir/!!, @_; # mpd braucht einen Pfadnamen relativ zum music-Dir
+ map s!/+!/!, @_; # zur Sicherheit
+
+ $mpdhost{$channel}=~m!^\s*(.*)\s*/\s*(.*)\s*$!;
+ my $host=$1; my $port=$2;
+
+ # aus irgendeinem Grund funktioniert %ENV im wiregate-Plugin nicht
+ # also so:
+ my $mpc=checkexec('mpc');
+ $mpc="export MPD_HOST=$host; export MPD_PORT=$port; $mpc";
+ system "$mpc update"; # Aktualisierung verfuegbarer Soundclips
+
+ # wird momentan noch was gespielt?
+ my $playing = grep /playing/, `$mpc`;
+
+ system "$mpc clear" unless $playing; # aufraeumen
+ system "$mpc add \"".(join "\" \"", @_)."\"";
+ system "$mpc play" unless $playing; # nur dann noetig
+
+# $playing=`$mpc; $mpc outputs`;
+# $playing=~s/\s+/ /sg;
+# plugin_log($plugname, $playing);
+ map s!^.*/(.*?)\.wav!$1!, @_;
+ $retval.=$channel.':'.(join ' ', @_);
+ }
+ else
+ {
+ $retval.="$name - no output (mpd or aplay) defined";
+ }
}
else
{
- print LOG "$datetime $name - keine akustische Ansage moeglich\n";
+ $retval.="$name - no audio output possible (file not found)";
}
-
- close LOG;
+
+ return $retval;
}
Added: wiregate/plugin/generic/MissGoogle.pl
===================================================================
--- wiregate/plugin/generic/MissGoogle.pl (rev 0)
+++ wiregate/plugin/generic/MissGoogle.pl 2012-04-25 17:48:08 UTC (rev 764)
@@ -0,0 +1,248 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+system "mkdir", "-p", "/var/lib/mpd/music/Ansagen";
+chdir "/var/lib/mpd/music/Ansagen";
+
+my %text=(
+ "./Achtung, es wurde ein Einbruch detektiert. Die Polizei wird automatisch benachrichtigt.wav"=>"Achtung, es wurde ein Einbruch detektiert. Die Polizei wird automatisch benachrichtigt",
+ "./AufWiedersehen.wav"=>"Auf Wiedersehen",
+ "./Tschuess.wav"=>"tschüss",
+ "./Ciao.wav"=>"tschau",
+ "./Bitte Schluesselbund ans Schluesselbrett haengen.wav"=>"Bitte Schluesselbund ans Schluesselbrett haengen",
+ "./Der Trockner ist fertig.wav"=>"Der Trockner ist fertig",
+ "./Die Alarmanlage ist aktiviert.wav"=>"Die Alarmanlage ist aktiviert",
+ "./Die Alarmanlage ist deaktiviert.wav"=>"Die Alarmanlage ist deaktiviert",
+ "./Die Alarmanlage wird in fuenf Minuten aktiviert.wav"=>"Die Alarmanlage wird in fuenf Minuten aktiviert",
+ "./Die Waschmaschine ist fertig.wav"=>"Die Waschmaschine ist fertig",
+ "./Es liegt neue Post im Briefkasten.wav"=>"Es liegt neue Post im Briefkasten",
+ "./Essen ist fertig.wav"=>"Essen ist fertig",
+ "./Fenster offen.wav"=>"Fenster offen",
+ "./Kaffee ist fertig.wav"=>"Kaffee ist fertig",
+ "./Monate/April.wav"=>"April",
+ "./Monate/August.wav"=>"August",
+ "./Monate/Dezember.wav"=>"Dezember",
+ "./Monate/Februar.wav"=>"Februar",
+ "./Monate/Januar.wav"=>"Januar",
+ "./Monate/Juli.wav"=>"Juli",
+ "./Monate/Juni.wav"=>"Juni",
+ "./Monate/Maerz.wav"=>"Maerz",
+ "./Monate/Mai.wav"=>"Mai",
+ "./Monate/November.wav"=>"November",
+ "./Monate/Oktober.wav"=>"Oktober",
+ "./Monate/September.wav"=>"September",
+ "./Personen/Alois.wav"=>"Alois",
+ "./Personen/Andrea.wav"=>"Andrea",
+ "./Personen/Christoph.wav"=>"Christoph",
+ "./Personen/Chris.wav"=>"Chris",
+ "./Personen/Guenther.wav"=>"Guenther",
+ "./Personen/Helena.wav"=>"Helena",
+ "./Personen/Jakob.wav"=>"Jakob",
+ "./Personen/Jasmin.wav"=>"Jasmin",
+ "./Personen/Julius.wav"=>"Julius",
+ "./Personen/Kim.wav"=>"Kim",
+ "./Personen/Lynn.wav"=>"Lynn",
+ "./Personen/Michael.wav"=>"Michael",
+ "./Personen/Nils.wav"=>"Nils",
+ "./Personen/Rita.wav"=>"Rita",
+ "./Personen/Tanja.wav"=>"Tanja",
+ "./Personen/Uta.wav"=>"Uta",
+ "./Personen/Wigbert.wav"=>"Wigbert",
+ "./Personen/Gast.wav"=>"Gast",
+ "./Rauchalarm.wav"=>"Rauchalarm",
+ "./Raum/A1.wav"=>"Aussenbereich unten",
+ "./Raum/A2.wav"=>"Aussenbereich oben",
+ "./Raum/AT.wav"=>"Aussentreppe",
+ "./Raum/AZ.wav"=>"Arbeitszimmer",
+ "./Raum/BA.wav"=>"Grosses Bad",
+ "./Raum/D1.wav"=>"Dusche Keller",
+ "./Raum/D2.wav"=>"Dusche Erdgeschoss",
+ "./Raum/DA.wav"=>"Dach",
+ "./Raum/EK.wav"=>"Esskueche",
+ "./Raum/E.wav"=>"Eingangsflur",
+ "./Raum/F2.wav"=>"Flur Erdgeschoss",
+ "./Raum/GA.wav"=>"Galerie",
+ "./Raum/GL.wav"=>"Global",
+ "./Raum/G.wav"=>"Garage",
+ "./Raum/HE.wav"=>"Heizung",
+ "./Raum/HW.wav"=>"Hauswirtschaftsraum",
+ "./Raum/K1.wav"=>"K1",
+ "./Raum/K2.wav"=>"K2",
+ "./Raum/K3b.wav"=>"K3",
+ "./Raum/K3.wav"=>"K3",
+ "./Raum/SZ.wav"=>"Schlafzimmer",
+ "./Raum/TE2.wav"=>"Terrasse",
+ "./Raum/TE3.wav"=>"Balkon",
+ "./Raum/TR1.wav"=>"Eingangstreppe",
+ "./Raum/TR2.wav"=>"Galerietreppe",
+ "./Raum/UT.wav"=>"Unter der Treppe",
+ "./Raum/VO.wav"=>"Vorratsraum",
+ "./Raum/WF.wav"=>"Windfang",
+ "./Raum/WZ.wav"=>"Wohnzimmer",
+ "./Sensor/KA.wav"=>"Aufzug",
+ "./Sensor/KF.wav"=>"Fenster",
+ "./Sensor/KO.wav"=>"Kontakt",
+ "./Sensor/KR.wav"=>"Relais",
+ "./Sensor/KS.wav"=>"Stromfluss",
+ "./Sensor/KT.wav"=>"Tuer",
+ "./Sensor/LF.wav"=>"Luftfeuchte",
+ "./Sensor/PM.wav"=>"Praesenz",
+ "./Sensor/TA.wav"=>"Aussentemperatur",
+ "./Sensor/TE.wav"=>"Estrich",
+ "./Sensor/TL.wav"=>"Innentemperatur",
+ "./Sensor/TO.wav"=>"Temperatur",
+ "./Sensor/TP.wav"=>"Taupunkt",
+ "./Sensor/VC.wav"=>"Wok",
+ "./Willkommen.wav"=>"Willkommen",
+ "./Hi.wav"=>"Hai",
+ "./Hallo.wav"=>"Hallo",
+ "./Wochentage/Di.wav"=>"Dienstag",
+ "./Wochentage/Do.wav"=>"Donnerstag",
+ "./Wochentage/Fri.wav"=>"Freitag",
+ "./Wochentage/Fr.wav"=>"Freitag",
+ "./Wochentage/Mi.wav"=>"Mittwoch",
+ "./Wochentage/Mon.wav"=>"Montag",
+ "./Wochentage/Mo.wav"=>"Montag",
+ "./Wochentage/Sat.wav"=>"Samstag",
+ "./Wochentage/Sa.wav"=>"Samstag",
+ "./Wochentage/So.wav"=>"Sonntag",
+ "./Wochentage/Sun.wav"=>"Sonntag",
+ "./Wochentage/Thu.wav"=>"Donnerstag",
+ "./Wochentage/Tue.wav"=>"Dienstag",
+ "./Wochentage/Wed.wav"=>"Mittwoch",
+ "./Woerter/Bett.wav"=>"Bett",
+ "./Woerter/Decke.wav"=>"Decke",
+ "./Woerter/Herd.wav"=>"Herd",
+ "./Woerter/Kamin.wav"=>"Kamin",
+ "./Woerter/links.wav"=>"links",
+ "./Woerter/rechts.wav"=>"rechts",
+ "./Woerter/Spuele.wav"=>"Spuele",
+ "./Woerter/unter_Galerie.wav"=>"unter_Galerie",
+ "./Woerter/unter_Treppe.wav"=>"unter_Treppe",
+ "./Zahlen/an.wav"=>"an",
+ "./Zahlen/auf.wav"=>"auf",
+ "./Zahlen/aus.wav"=>"aus",
+ "./Zahlen/c0.wav"=>"Null",
+ "./Zahlen/c1000.wav"=>"tausend",
+ "./Zahlen/c100.wav"=>"hundert",
+ "./Zahlen/c10.wav"=>"zehn",
+ "./Zahlen/c11.wav"=>"elf",
+ "./Zahlen/c12.wav"=>"zwoelf",
+ "./Zahlen/c13.wav"=>"dreizehn",
+ "./Zahlen/c14.wav"=>"vierzehn",
+ "./Zahlen/c15.wav"=>"fuenfzehn",
+ "./Zahlen/c16.wav"=>"sechzehn",
+ "./Zahlen/c17.wav"=>"siebzehn",
+ "./Zahlen/c18.wav"=>"achtzehn",
+ "./Zahlen/c19.wav"=>"neunzehn",
+ "./Zahlen/c1.wav"=>"eins",
+ "./Zahlen/c20.wav"=>"zwanzig",
+ "./Zahlen/c2.wav"=>"zwei",
+ "./Zahlen/c30.wav"=>"dreissig",
+ "./Zahlen/c3.wav"=>"drei",
+ "./Zahlen/c40.wav"=>"vierzig",
+ "./Zahlen/c4.wav"=>"vier",
+ "./Zahlen/c50.wav"=>"fuenfzig",
+ "./Zahlen/c5.wav"=>"fuenf",
+ "./Zahlen/c60.wav"=>"sechzig",
+ "./Zahlen/c6.wav"=>"sechs",
+ "./Zahlen/c70.wav"=>"siebzig",
+ "./Zahlen/c7.wav"=>"sieben",
+ "./Zahlen/c80.wav"=>"achtzig",
+ "./Zahlen/c8.wav"=>"acht",
+ "./Zahlen/c90.wav"=>"neunzig",
+ "./Zahlen/c9.wav"=>"neun",
+ "./Zahlen/Grad.wav"=>"Grad",
+ "./Zahlen/hoch.wav"=>"hoch",
+ "./Zahlen/Komma.wav"=>"Komma",
+ "./Zahlen/minus.wav"=>"minus",
+ "./Zahlen/o0.wav"=>"Nullter",
+ "./Zahlen/o1000.wav"=>"Tausendster",
+ "./Zahlen/o100.wav"=>"Hundertster",
+ "./Zahlen/o10.wav"=>"Zehnter",
+ "./Zahlen/o11.wav"=>"Elfter",
+ "./Zahlen/o12.wav"=>"Zwoelfter",
+ "./Zahlen/o13.wav"=>"Dreizehnter",
+ "./Zahlen/o14.wav"=>"Vierzehnter",
+ "./Zahlen/o15.wav"=>"Fuenfzehnter",
+ "./Zahlen/o16.wav"=>"Sechzehnter",
+ "./Zahlen/o17.wav"=>"Siebzehnter",
+ "./Zahlen/o18.wav"=>"Achtzehnter",
+ "./Zahlen/o19.wav"=>"Neunzehnter",
+ "./Zahlen/o1.wav"=>"Erster",
+ "./Zahlen/o20.wav"=>"Zwanzigster",
+ "./Zahlen/o2.wav"=>"Zweiter",
+ "./Zahlen/o30.wav"=>"Dreissigster",
+ "./Zahlen/o3.wav"=>"Dritter",
+ "./Zahlen/o40.wav"=>"Vierzigster",
+ "./Zahlen/o4.wav"=>"Vierter",
+ "./Zahlen/o50.wav"=>"Fuenfzigster",
+ "./Zahlen/o5.wav"=>"Fuenfter",
+ "./Zahlen/o60.wav"=>"Sechzigster",
+ "./Zahlen/o6.wav"=>"Sechster",
+ "./Zahlen/o70.wav"=>"Siebzigster",
+ "./Zahlen/o7.wav"=>"Siebter",
+ "./Zahlen/o80.wav"=>"Achtzigster",
+ "./Zahlen/o8.wav"=>"Achter",
+ "./Zahlen/o90.wav"=>"Neunzigster",
+ "./Zahlen/o9.wav"=>"Neunter",
+ "./Zahlen/Prozent.wav"=>"Prozent",
+ "./Zahlen/runter.wav"=>"runter",
+ "./Zahlen/u1.wav"=>"ein",
+ "./Zahlen/u2.wav"=>"zwei",
+ "./Zahlen/u3.wav"=>"drei",
+ "./Zahlen/u4.wav"=>"vier",
+ "./Zahlen/u5.wav"=>"fuenf",
+ "./Zahlen/u6.wav"=>"sechs",
+ "./Zahlen/u7.wav"=>"sieben",
+ "./Zahlen/u8.wav"=>"acht",
+ "./Zahlen/u9.wav"=>"neun",
+ "./Zahlen/uc20.wav"=>"und zwanzig",
+ "./Zahlen/uc30.wav"=>"und dreissig",
+ "./Zahlen/uc40.wav"=>"und vierzig",
+ "./Zahlen/uc50.wav"=>"und fuenfzig",
+ "./Zahlen/uc60.wav"=>"und sechzig",
+ "./Zahlen/uc70.wav"=>"und siebzig",
+ "./Zahlen/uc80.wav"=>"und achtzig",
+ "./Zahlen/uc90.wav"=>"und neunzig",
+ "./Zahlen/uo20.wav"=>"und zwanzigster",
+ "./Zahlen/uo30.wav"=>"und dreissigster",
+ "./Zahlen/uo40.wav"=>"und vierzigster",
+ "./Zahlen/uo50.wav"=>"und fuenfzigster",
+ "./Zahlen/uo60.wav"=>"und sechzigster",
+ "./Zahlen/uo70.wav"=>"und siebzigster",
+ "./Zahlen/uo80.wav"=>"und achtzigster",
+ "./Zahlen/uo90.wav"=>"und neunzigster",
+ "./Zahlen/zu.wav"=>"zu",
+ "./Zeiten/Minuten.wav"=>"Minuten",
+ "./Zeiten/Sekunden.wav"=>"Sekunden",
+ "./Zeiten/Stunden.wav"=>"Stunden",
+ "./Zeiten/Uhr.wav"=>"Uhr");
+
+for my $f (keys %text)
+{
+ my $t=$text{$f};
+ my $p=$f; $p=~s!/[^/]*$!!;
+ my $m=$f; $m=~s!\.wav$!.mp3!;
+ next if -f $f;
+ system "mkdir", "-p", $p;
+ system "wget", "http://translate.google.de/translate_tts?ie=UTF-8&q=$t", "--keep-session-cookies", "--user-agent=sag_ich_nicht", "-O", $m;
+ system "mpg123", "-w", $f, $m;
+ system "rm", "-f", "tmp.wav", "tmp2.wav";
+ system "sox", $f, "tmp.wav", "silence", "1", "0.001", "0.2%", "1", "0.3", "0.1%";
+ system "sox", "tmp.wav", "tmp2.wav", "tempo", "1.5";
+ system "mv", "tmp2.wav", $f;
+ system "rm", "-f", "tmp.wav";
+ system "rm", "-f", $m;
+}
+
+for my $d (1..5)
+{
+ my $l=sprintf("%0.1f",0.2*$d);
+ my $f=sprintf("sil%dms.wav", 1000*$l);
+ next if -f $f;
+ system "sox", "-n", "-r", "44100", "-c", "2", $f, "trim", "0.0", $l;
+}
+
+system "ln -sf sil200ms.wav silence.wav";
Property changes on: wiregate/plugin/generic/MissGoogle.pl
___________________________________________________________________
Added: svn:executable
+ *
Modified: wiregate/plugin/generic/conf.d/Ansagen.conf
===================================================================
--- wiregate/plugin/generic/conf.d/Ansagen.conf 2012-04-25 17:11:27 UTC (rev 763)
+++ wiregate/plugin/generic/conf.d/Ansagen.conf 2012-04-25 17:48:08 UTC (rev 764)
@@ -75,8 +75,8 @@
# DURCHsagen gehen auf ALSA-Kanal 'paging' und gehen ueber die Russound an
# alle Lautsprecher im Haus. Dort muss ein Beep vorweggesendet werden
-$logfile='/var/log/Ansagen.log';
-$speechdir='/var/lib/Ansagen/Sprache/';
+# Directories, Kanaele, Gruppenadressen
+$speechdir='/var/lib/mpd/music/Ansagen/';
%channels=(
'^WA_'=>'welcome', # zB "WA_Die Aussentemperatur betraegt"
'^WD_'=>'paging', # zB "WD_Folgende Fenster sind geoeffnet"
@@ -84,7 +84,17 @@
);
$beepchannel='paging';
$beep = sprintf "Beep/%02d.wav", 3; # int(rand(32))+1 fuer Zufallsbeep
-#my @additional_subscriptions=qw(0/7/245 0/7/246 6/2/186);
+#@additional_subscriptions=qw(0/7/245 0/7/246 6/2/186);
@additional_subscriptions=();
+# Ausgabeoptionen
+$mode='mpd'; # mpd or aplay
+
+# die folgenden Eintraege nur fuer mpd benoetigt
+$mpddir='/var/lib/mpd/music';
+%mpdhost=(
+ 'welcome'=>'127.0.0.1/6600',
+ 'paging'=>'127.0.0.1/6601'
+);
+
############### Ende der Konfiguration #########################
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|