Script mit Soundausgabe

Post Reply
Message
Author
Bronco

Script mit Soundausgabe

#1 Post by Bronco »

Hi,
ich bastle zurzeit an einer Sprachausgabe.
Dafür habe ich zwei Proggie's.
1. txt2pho -wandelt .txt zu .pho (phonetische daten) um
2. mbrola -macht aus der .pho eine Musikdatei .wav oder .au

Nun führe ich mit dem Befehl->
echo "sprich du schlampe" | sprich
->das Script sprich aus, welches nun "sprich du schlampe" durch den Lautsprecher quetschen soll.

#!/bin/sh
# sprich
# usage: 'sag_was filename' or '... | sag_was'
# Nimmt von stdin oder einer anderen Datei
# Gibt die Worte am Lautsprecher aus
# Abkürzungen werden ausgesprochen
# Zeilenenden werden entfernt
# Jedes @ wird als ät ausgesprochen
# Männliche Sprechweise und Stimme, in der Frequenz abgesenkt
# Michael Renner 20.01.2000
PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11"

if [ x"$#" = x"0" ]; then
file=/dev/stdin
else
file=${1}
fi
cat $file | sed 's/@/ ät /g' | pipefilt | preproc \
/usr/local/txt2pho/preproc/Rules.lst /usr/local/txt2pho/preproc/Hadifix.abk | \
txt2pho -m | mbrola -f 1.2 -t 1.3 -l 15000 /usr/local/txt2pho/voices/de2/de2 - -.au | \
play - -t au



Das klappt auch bestens bis auf die letze Zeile - das "play - -t au" ist nicht für Suse 7.3 tauglich.
Wie mache ich die -.au die von pipe übergeben wird hörbar???
thx

gewitter
Posts: 1354
Joined: 09. Apr 2001 9:03

Re: Script mit Soundausgabe

#2 Post by gewitter »

/usr/bin/play -t au -v $volume -
oder
auplay (wenn vorhanden)
müsste klappen

Bronco

Re: Script mit Soundausgabe

#3 Post by Bronco »

Aah ja! play - Skript gefunden! Das auplay soll bestimmt aplay sein, oder?
Hab nun einiges probiert - hier der neue Lagebericht:
Skript wurde etwas abgespeckt und folgendes funktioniert mit sehr schlechter Klangqualität:

#!/bin/sh
#sprich
PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11"
file=${1}
cat $file | txt2pho -m | mbrola /usr/local/txt2pho/voices/de2/de2 - -.raw | aplay -r -s 30000

Im Sinne des Erfinders sollte das wohl so aussehen:
cat $file | txt2pho -m | mbrola /usr/local/txt2pho/voices/de2/de2 - -.au | play -t au
führt aber zur Fehlermeldung->
sox: Can't open input file '': No such file or directory
folgendes hab ich dazu noch gefunden:
Damit überhaupt etwas zu hören ist, müssen natürlich eine Soundkarte installiert und die richtigen Kernelmodule geladen sein. Zusätzlich ist die Installation von sox [10] angezeigt, einem universellen Konverter für Soundformate. Zum Abspielen wird in meinen Beispielskripten durchgängig das verbreitete Bash-Skript play verwendet. Auf den meisten Rechnern reicht es sicher aus, den Sound nach /dev/sound umzuleiten.

Aber
cat $file | txt2pho -m | mbrola /usr/local/txt2pho/voices/de2/de2 - -.au | /dev/sound
ergibt -> /dev/sound: Datei oder Verzeichniss nicht gefunden.

Dann ergibt noch folgendes:
cat $file | txt2pho -m | mbrola /usr/local/txt2pho/voices/de2/de2 - -.au | aplay
eine etwas genauere Fehlermeldung:

ralthu@xpert:~> echo "leck mich am arsch du verwixte computerscheiße" | sprich
Aplay: version 0.5.10 by Jaroslav Kysela <perex@suse.cz>
Using soundcard 'Intel ICH 82801AA at 0xd800, irq 11'
Playing Sparc Audio 'stdin' : Unsigned 16-bit Little Endian, Rate 16000 Hz, Mono
/usr/local/bin/sprich: line 5: 3148 Done cat $file
3149 Datenübergabe unterbrochen (broken pipe) | txt2pho -m
3150 Datenübergabe unterbrochen (broken pipe) | mbrola /usr/local/txt2pho/voices/de2/de2 - -.au
3151 Speicherzugriffsfehler | aplay
ralthu@xpert:~>


Wer weiß Rat ???
Mit bestem Dank im voraus!

Fabian

Re: Script mit Soundausgabe

#4 Post by Fabian »

cat $file | txt2pho -m | mbrola /usr/local/txt2pho/voices/de2/de2 - -.au | /dev/sound

muss

cat $file | txt2pho -m | mbrola /usr/local/txt2pho/voices/de2/de2 - -.au > /dev/sound

heißen.

Dann klappts auch mit dem Nachbarn <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

cu

Fabian (FabianFranz at gmx.de)

PS: | ist für Ausgaben an Programem gedacht, > für Ausgaben in Dateien und bei Unix ist alles Datei, also auch die Geräte ...

Bronco

syntetische Sprachausgabe

#5 Post by Bronco »

Hi,
na das mit > sind natürlich die Feinheiten die man wissen sollte. Selber schuld wenn man howto's nur überfliegt.
Dennoch bleibt noch manches ungeklärt.
So ergab zB.:
mbrola datei.pho datei.au
eine Audiodatei, die sich mit
play datei.au
abspielen ließ.

Aber:
mbrola datei.pho - -.au > play -t au
oder
mbrola datei.pho - -.au> /dev/sound
oder
mbrola de2/de2 tts.pho - -.raw > /dev/audio
sowie unzählige ähnliche Varianten funzten nicht!

Doch dann - viel viel später klappte plötzlich:
mbrola datei.pho - | sox -t raw -sw -r 16000 - -t ul -r 8000 - > /dev/audio
warum ???
egal
komplett schauts dann so aus:

#!/bin/sh
# sprich
# usage: sprich filename -oder- echo "..." | sprich
# Nimmt von stdin oder einer anderen Datei
# Gibt die Worte am Lautsprecher aus
# Abkürzungen werden ausgesprochen
# Zeilenenden werden entfernt
# Jedes @ wird als ät ausgesprochen
# Männliche Sprechweise und Stimme, in der Frequenz angehoben
# Ralf Thummert 7.1.2002 thummert@web.de

PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11"

if [ x"$#" = x"0" ]; then
file=/dev/stdin
else
file=${1}
fi

cat $file | sed 's/@/ ät /g' | pipefilt | preproc \
/usr/local/txt2pho/preproc/Rules.lst /usr/local/txt2pho/preproc/Hadifix.abk | \
txt2pho -m | mbrola -f 1.2 -t 1.2 -l 15000 /usr/local/txt2pho/voices/de2/de2 - -.raw | \
sox -t raw -sw -r 16000 - -t ul -r 8000 - > \
/dev/audio



bin übrigens von der Sprachqualität angenehm überrascht. Kann man lässig alles mögliche vorlesen bzw. sprechen lassen -mails, im Netz die User foppen die kippen vom Stuhl -> der PC lebt!
die files gibt's bei

http://tcts.fpms.ac.be/synthesis/mbrola.html

Vielen Dank nochmals!
Bronco

Post Reply