isdn4k-utils/FAQ/_howto/vbox_sound.txt

138 lines
8.6 KiB
Plaintext
Raw Normal View History

X-Sender: dekay@xplor.ipf.de
References: <m0vIIrY-000LHmC@scorpio.in-berlin.de> from "Gernot Zander" at Oct 29, 96 07:26:08 pm
Date: Wed, 30 Oct 1996 19:05:55 +0200
To: isdn4linux@hub-wue.franken.de, michael@abadonna.franken.de From: Darko Krizic <dekay@ipf.de>
Subject: Sounds erzeugen f<>r vgetty/vboxgetty Cc: maze@frankfurt.netsurf.de
Sender: owner-isdn4linux@hub-wue.franken.de Reply-To: isdn4linux@hub-wue.franken.de
Ich m<>chte hier ein paar Erfahrungen mit vboxgetty zusammenz<6E>hlen, insbesondere im Zusammenhang mit dem Erzeugen von Messages (Sounds)
Sound-Format
------------
Das Format ADPCM-4 generiert beim Aufzeichnen wesentlich kleinere Dateien als die Formate uLaw oder aLaw, deswegen ist dieses Format vorzuziehen.
Vorteil von uLaw ist allerdings, da<64> es dem au-Format entspricht und so direkt mit cat sound.au >/dev/audio angeh<65>rt werden kann, allerdings gibt es zwei Probleme:
- Das ist nur interessant f<>r Leute, die auch am Linux-Rechner sitzen und dieser eine Soundkarte besitzt. Viele Leute verwenden den Linux-Rechner als "echten" Server, der weder Monitor noch Soundkarte hat.
- Die aufgezeichneten Samples haben einen sehr schwachen Pegel, den man theoretisch mit
autopvf <x.msg | pvfamp 5 | pvftoau >x_laut.msg
verst<EFBFBD>rken k<>nnte, allerdings mu<6D> man sich dann sowieso mit den pvf-Tools befassen und kann dann auch gleich auf ADPCM-4 umsteigen.
Aufzeichen <20>ber Telefon
-----------------------
Wie in der i4l-FAQ beschrieben ist es ohne Probleme m<>glich sich selbst auf den Anrufbeantworter zu sprechen und die entsprechende Datei in das Verzeichnis /var/spool/vobx/<user>/incoming/standard.msg zu kopieren.
Allerdings ist die Qualit<69>t bei weitem nicht ausreichend, unter anderem, weil sich am Anfang und Ende Ger<65>usche oder Pausen befinden.
Selbst Dateien generieren
-------------------------
Ich habe einen Macintosh, der unter anderem die M<>glichkeit bietet, Sound von Audio-CDs ohne Verluste per SCSI auf die Festplatte zu kopieren und nachtr<74>glich auf andere Samplegeschwindigkeit und Bitbreite zu konvertieren, z.B. "16bit, 44kHz -> 8bit, 22kHz". Desweiteren kann ich mit dem Mikrofon Sounds und am Ende alle Sounds manipulieren und mixen. Die beste Voraussetzungen f<>r verr<72>ckte Ansagen.
Das Format, das der Macintosh verarbeitet ist AIFF. Dieser Standard wird auch von SGI und anderen namhaften Herstellern verwendet, allerdings konnte ich unter Linux kein Programm finden, das dieses Format versteht. Auf dem Macintosh gibt es allerdings das Programm "SoundApp", welches nach und von Suns .au konvertieren und ADPCM wenigstens abspielen kann. Anmerkung: Dummerweise nennt SoundApp das au-Format "NeXT", weil dieses Format dort verwendet wird, allerdings habe ich lange gebraucht, um herauszufinden, da<64> es dasselbe wie au ist.
Ich nehme mal an, da<64> unsere Windows-Freunde <20>hnliche F<>higkeiten haben.
Das Windows-Hausformat nennt sich WAV. Auch dieses Format kennen die PVF-Tools nicht, aber ich denke mal, da<64> es unter Windows <20>hnliche Werkezeuge gibt, die sogar ADPCM-4 generieren k<>nnen.
Ich wei<65> nicht, wie man unter Linux Sounds aufzeichnen kann und welches Format diese haben, allerdings wird es wohl Sun-AU-Format haben, so da<64> der weitere Text auf f<>r Linux-Benutzer interessant ist.
Sounds f<>r vboxgetty konvertieren
---------------------------------
Wie bereits oben beschrieben, empfehle ich den Betrieb mit ADPCM-4. Bei mgetty befindet sich die pvf-Toolsammlung, welche Soundformate konvertieren und manipulieren kann, allerdings gab es Probleme mit den Formaten, die vboxgetty generiert hatte (ADPCM-4). Gegen dieses Problem gibt es Patches, allerdings enth<74>lt die neuste Version von mgetty (0.99 Okt02 und wahrscheinlich auch ein paar <20>ltere) bereits die Programme "zyxeltopvf" und "pvftozyxel[234]", mit welchen genau diese Formate konvertiert werden k<>nnen.
Mein Macintosh liefert die Sounds 22254Hz. Um daraus einen entsprechenden Sound in ADPCM-4 zu generieren verwende ich folgende Kommendozeile:
autopvf <standard.au \
| pvfspeed 2.73 \
| pvfamp 0.2 \
| pvftozyxel4 >standard.msg
autopvf konvertiert dan au-Sound nach pvf. pvfspeed <20>ndert die Samplingrate auf 8000 (22554 / 8000 = 2.73), damit die Geschwindigkeit wieder stimmt.
pvfamp 0.2 senkt den Pegel auf 20%, weil der Sound sonst total verzerrt klingt, schlie<69>lich kennt das Telefon nur Frequenzen zwischen 300 und 3000Hz. Zuletzt legt pvftozyxel4 den Sound im richtigen Format ab.
Dadurch, da<64> weder Rauschen noch Klacken zu h<>ren sind, klingen so generierte Ansagen einfach klasse. Wer etwas mit Sound-Manipulationsprogrammen spielen kann, der kann tolle Effekte generieren, allerdings sollte man damit wegen des beschr<68>nten Frequenzbandes echt sparsam umgehen, sonst versteht der Anrufende nichts.
Nachbarbeiteitung von aufgezeichneten Nachrichten ------------------------------------------------- Ich m<>chte, da<64> meine Nachrichten in ein auf dem Macintosh abspielbaren Format konvertiert werden und an eine e-mail an mich attached werden sollen. Ich konvertiere den Sound nach au mit folgenden Befehlen:
zyxeltopvf <sound.pvf \
| pvfamp 5
| pvfcut 0.2 0.2 \
| pvftoau 8000 >sound.au
zyxeltopvf konvertiert den aufgezeichneten Sound nach pvf und pvfamp verst<73>rkt diesen auf das f<>nffache, weil der Pegel (s.ganz.o) sehr schwach ist. pvfcut schneidet 0.2 Sekunden vorne und hinten ab, weil man hinten z.B. das Auflegen des Telefons h<>rt. Scheinbar zeichnet vboxgetty schon auf, w<>hrend der Beep-Ton abgespielt wird, weil dieser ganz am Anfang zu h<>ren ist. Die 8000 nach dem pvtoau ist sehr wichtig, weil diese sorgt, da<64> die Frequenz in den au-Header geschrieben wird, damit das abspielende Programm auch die richtige Rate spielt!
Namen des Anrufenden in der Mail
--------------------------------
vboxgetty kennt den Namen des Anrufenden, w<>hrend es die Nachricht aufzeichnet, dummerweise wird dieser Name nicht an das Programm "-p /usr/local/vbox/new_voice" mit <20>bergeben. Ich habe deswegen einen (very dirty) hack von vboxgetty erzeugt, welches als 4ten Parameter den Namen an new_voice <20>bergibt, damit ist es m<>glich, da<64> das Subject der generierten Mail aussieht wie "Voice from Darko Krizic" oder zumindest "Voice from Unknown". Da bei internationalen Calls zumindest die Landeskennung <20>bergeben wird, kann eine Nachricht aus USA ein Subject wie "Voice from USA" haben.
Ich bitte hiermit den Autor von vbox selbst die <20>nderungen zu machen.
Beispiel f<>r ein new_voice-Script
---------------------------------
Das Nachfolgende Shellscript hat bei mir den Namen /usr/local/vbox/new_voice und in der Inittab h<>ngt noch "-p /usr/local/vbox/new_voice" als Parameter, damit dieses Programm nach dem Aufzeichnen einer Nachricht aufgerufen wird.
Die Datei wird nach .au konvertiert und als MIME-encoded Message an den Benutzer f<>r den die Nachricht aufgezeichnet wurde, geschickt. Ich verwende <20>brigens mimeencode nicht. Wenn diese Mail von Eudora auf dem Macintosh empfangen wird, wird der Sound als Icon angezeigt. Ein Doppelklick reicht aus, um den Sound abzuspielen.
#! /bin/sh
#
# Creates a new MIME-encoded mail to the user with an attached .au file # Written 1996 by Darko Krizic
PATH="${PATH}:/usr/local/vbox"
TMP="/tmp/vboxmime.$$"
ME="`basename $0`"
mailer="/usr/sbin/sendmail -t"
bound="NewVoice_-${$}${$}"
type="audio/ulaw"
file="${1}"
id="${2}"
user="${3}"
name="${4}"
date="`date +%y%m%d%H%M`"
newname=${date}-${id}.au
if [ -z "$name" ]
then
name=$id
fi
echo "\
Subject: Voice from $name
From: root@xplor.ipf.de (Voice Subsystem) To: $user
Content-type: multipart/mixed; boundary=\"$bound\"
--$bound
Content-Type: text/pain
A new voice has arrived
Sender ID: $id
Name: $name
File: $file
--$bound
Content-Type: application/octet-stream; name=\"$newname\" Content-transfer-encoding: x-uuencode
" >$TMP
/usr/local/bin/zyxeltopvf <$file \
| /usr/local/bin/pvfamp 5 \
| /usr/local/bin/pvfcut 0.2 0.2 \
| /usr/local/bin/pvftoau 8000 \
| /usr/bin/uuencode $newname >>$TMP
#rmdcutheader <$file | uuencode $newname >>$TMP echo "--$bound--" >>$TMP
$mailer -t <$TMP
#cat $TMP
rm $TMP
Anmerkungen: Es handelt sich dabei nur um ein Beispiel, welches ich schnell f<>r mich zusammengehackt habe. Wenn jemand Anmerkugen und Ideen hat, soll ich bei mir melden. Ich erw<72>hne nochmal: Das Script funktioniert zwar auch so, allerdings macht es erst richtig sinn, wenn vboxgetty als 4ten Parameter den Namen des Anrufenden <20>bertragt, sonst ist das Subject immer "Voice from Unkown".
Darko Krizic
----------------------------------------------------------------------- Darko Krizic Phrankphurt Germany mailto:dekay@xplor.ipf.de
--------------------------------------------------- To remove yourself from this mailing list send email to majordomo@hub-wue.franken.de containing "unsubscribe isdn4linux <your_email_address>" in the message body [-vg]