Seite 1 von 1

suche Audio-Programm für zufällige Sound-Ausgabe

Verfasst: Sa Jul 25, 2009 7:45 am
von Tecnix
Hallo zusammen,

ich arbeite schon seit längerer Zeit mit Linux, in Audioanwendungen bin ich aber völliger Anfänger.

Falls mir jemand helfen kann, habe ich folgendes Projekt vor:

1. ich nehme verschiedene kurze (~5 sec.) reale Soundschnippsel auf (z. B. unterschiedliche Vogelstimmen) und speichere diese
2. ich spiele diese Soundschnippsel - von einem Zufallsgenerator gesteuert - ab, so dass der Eindruck eines Vogelparks entsteht.
3. Wichtig: es soll wirklich zufallsgesteuert sein und keine "vorproduzierte" Schleife.

Ich stelle es mir so vor, dass z. B. ein Script die einzelnen Soundschnippsel dem Audio-Programm übergibt und auch ein bisschen an Geschwindigkeit, Lautstärke, Filtern, etc. dreht und das Audio-Programm dann die Ausgabe übernimmt.

Welche Audio-Programme könnten sich dafür eignen?

Hm, falls ich es noch anders beschreiben soll, bitte melden.

Vielen Dank für die Starthilfe

Rai

Verfasst: Sa Jul 25, 2009 8:27 am
von khz
hallo,
evt. pd (puredata).
gruß khz

Verfasst: Sa Jul 25, 2009 11:43 am
von Tecnix
pd sieht gut aus, könnte wirklich geeignet sein.

Installation war überhaupt kein Problem (Ubuntu 8.10): Download
Pd-0.41.4-extended-ubuntu-intrepid-i386.deb
von
http://sourceforge.net/projects/pure-data/files/
Die fehlenden Pakete werden während der Installation nachgeladen.

Hier http://www.pd-tutorial.com/german/index.html
habe ich auch ein gutes Tutorial dafür gefunden.

Arbeite mich nun langsam in die Materie ein.

Grüße

Rai

Verfasst: Sa Jul 25, 2009 1:56 pm
von khz
:)
da noch ein buch dazu bang | pure data

Re: suche Audio-Programm für zufällige Sound-Ausgabe

Verfasst: Sa Jul 25, 2009 7:24 pm
von Mitsch
Tecnix hat geschrieben: Ich stelle es mir so vor, dass z. B. ein Script die einzelnen Soundschnippsel dem Audio-Programm übergibt und auch ein bisschen an Geschwindigkeit, Lautstärke, Filtern, etc. dreht und das Audio-Programm dann die Ausgabe übernimmt.
Hi!

pd habe ich am schnellsten durch ein Tutorial auf youtube gelernt - einfach "pure data" eingeben.

Scriptgesteuert hättest Du wahrscheinlich mit "sox" bzw. "play" (gehört zu sox) die besten Möglichkeiten.

Grüße!

Verfasst: Sa Jul 25, 2009 11:48 pm
von zettberlin
Das lässt sich auch schon in bash umsetzen:

1.) nenne Deine Schnippsel in etwa so:

1.wav
2.wav
3.wav

etc

2.) Übergib die Dateien dem Programm jack_play mit einem Skript, das in PHP etwa so aussehen würde, wenn Du 8 Stück 5 Sekunden lange Dateien hast:

$i = 1;
while ($i <= 10)
{
$file=rand(1,8);
$zeit =rand(1,5);

jack.play "$file.wav" ;
sleep ($zeit);

$i++;
}

Das würde zehn mal zufällig Dateien hintereinander spielen (wenn man mit PHP jack.play aufrufen könnte). Die Dateien wären immer zufällig, die Dateien würden sich mit zufälligem Abstand überlagern, im Extremfall könnten bis zu 4 Dateien gleichzeitig laufen, wenn rand für $zeit zufällig immer 1 ausgeben würde. Das ist allerdings ausgesprochen unwahrscheinlich ;-)
Natürlich lässt sich das beliebig ausbauen: lass die Dateien zufällig an verschiedene Ausgabeports schicken, indem Du deren Namen an jack.play in einer zufalllsgesteuerten Variable übergibst. Hänge zufällige Echos oder Pitch-shifter in den Signalweg etc etc etc

Ach so: Das geht sogar tatsächlich mit PHP, wenn das Modul für den Aufruf von UNIX-Kommandos eingeschaltet ist...

Dann geht es so:

<?php
$i = 1;
while ($i <= 10)
{
$filenr=rand(1,5);
$file="$filenr.wav";
$zeit =rand(1,5);

exec ("jack.play $file") ;
sleep ($zeit);

$i++;
}
?>

speichert man das hier als jplay.php kann man es so aufrufen:

php5 jplay.php

Das funktioniert tatsächlich, allerdings verbindet sich jack.play nicht automatisch mit einem Abspielport in jack, jack.plumbing kann das wohl lösen, funktioniert aber bei mir (noch) nicht


Geht aber in Bash genauso, kenne mich da bloß mit der Syntax nicht so gut aus ;-)

Verfasst: So Jul 26, 2009 1:04 am
von Mitsch
Habe gerade mal geschaut: Zufallszahlen erzeugt man bei der bash mit der Variable $RANDOM.

echo $RANDOM

erzeugt eine Zufallszahl zwischen 0 und 32767. Begrenzen lässt sich das ganze auch, z.B. für den Bereich 0 - 9:

echo $((($ RANDOM) %10))

oder 1 - 10:

echo $((($ RANDOM) %10+1))

Wenn ich es mir genau überlege, ist ein Jack-Server + jack.play sicherlich besser als sox/play - bei jack.play kannst Du viel einfacher einzelne Kanäle ansteuern.

Viel Spaß beim Basteln! Falls Du's mit bash versuchen willst und falls Du zu einem Ergebnis kommst: Zeig mal her! Ich glaube, so etwas kann man immer mal brauchen. Die Idee mit dem virtuellen Vogelkonzert finde ich ziemlich geil. Die Grundidee lässt sich hervorragend für Multimedia-Installationen abändern!

Verfasst: So Jul 26, 2009 1:09 am
von zettberlin
UPDATE:

so geht es:

<?php
$i = 1;
while ($i <= 10)
{
$filenr=rand(1,5);
$file="$filenr.wav";
$zeit =rand(1,2);

exec ("alsaplayer -o jack -i text $file") ;
sleep ($zeit);

$i++;
}
?>

Allerdings überlagern sich die Dateien nicht, weil exec das alsaplayer-kommando nicht anschiebt, sondern komplett ausführt und erst weitermacht, wenn alsaplayer fertig ist....
Damit wäre der Aufruf von sleep() sinnlos...

Allerdings kann man das skript mehrmals aufrufen

php5 jackplay.php& php5 jackplay.php & php5 jackplay.php

dann überlagert es sich ganz schön ;-)

Verfasst: So Jul 26, 2009 11:15 pm
von Tecnix
Hallo zusammen und danke für die zahlreichen Tipps.

Ich habe es nun doch als Shell-Script ausgeführt:

Code: Alles auswählen

#!/bin/bash
# jackplay.sh spielt 10 mal in zufälliger reihenfolge die dateien 1.wav, 2.wav, 3.wav, 4.wav

i=1
while [ $i -le 10 ]
do
        echo $i
        R=$[($RANDOM % 4) + 1]
        ZEIT=$[($RANDOM % 3) + 1]
        FILE=$R".wav"
        echo $FILE
        alsaplayer -o jack -i text $FILE
        sleep $ZEIT
        i=`expr $i + 1`
done

mit

Code: Alles auswählen

 chmod a+x jackplay.sh
das Script ausführbar machen.
Mit

Code: Alles auswählen

./jackplay.sh
ausführen
Wenn es mehrere parallel sein sollen (Vogelpark) dann rufe ich es so auf:

Code: Alles auswählen

./jackplay.sh& ./jackplay.sh& ./jackplay.sh&
Ich bin nicht so geübt in Shell-Programmierung. Vielleicht geht es eleganter, auf jeden Fall funktioniert es bei mir :-)

Viele Grüße

Rai

Verfasst: Mo Jul 27, 2009 9:09 am
von spm_gl
Wenn's lange und stabil laufen soll, würde ich Liquidsoap nehmen. Ist erstmal recht komplex, aber sehr vielseitig und stabil. Kann auch die Tonhöhe und Lautstärke variieren, sowie das ganze als verschiedene Streams ausgeben, dann können die Vögel aus verschiedenen Playern kommen.
Ich hab schlechte Erfahrungen mit bash Skripten für Audio gemacht, besonders wenn es stundenlang laufen muss.