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

hier soll alles rein, was zum thema linux und musikmachen gehört, aber nicht mit speziellen programmen, speziellen distributionen oder spezieller hardware zusammenhängt...
Antworten
Tecnix
New User
New User
Beiträge: 4
Registriert: Sa Jul 25, 2009 7:13 am

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

Beitrag 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
Benutzeravatar
khz
Power User
Power User
Beiträge: 832
Registriert: Mi Sep 12, 2007 9:39 am

Beitrag von khz »

hallo,
evt. pd (puredata).
gruß khz
Tecnix
New User
New User
Beiträge: 4
Registriert: Sa Jul 25, 2009 7:13 am

Beitrag 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
Benutzeravatar
khz
Power User
Power User
Beiträge: 832
Registriert: Mi Sep 12, 2007 9:39 am

Beitrag von khz »

:)
da noch ein buch dazu bang | pure data
Benutzeravatar
Mitsch
Power User
Power User
Beiträge: 1226
Registriert: Mo Feb 20, 2006 11:17 am
Wohnort: Ludwigsburg
Kontaktdaten:

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

Beitrag 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!
zettberlin
Power User
Power User
Beiträge: 1233
Registriert: Di Jul 06, 2004 11:47 pm
Wohnort: Berlin
Kontaktdaten:

Beitrag 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 ;-)
nostrum fungitur
Benutzeravatar
Mitsch
Power User
Power User
Beiträge: 1226
Registriert: Mo Feb 20, 2006 11:17 am
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag 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!
zettberlin
Power User
Power User
Beiträge: 1233
Registriert: Di Jul 06, 2004 11:47 pm
Wohnort: Berlin
Kontaktdaten:

Beitrag 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 ;-)
nostrum fungitur
Tecnix
New User
New User
Beiträge: 4
Registriert: Sa Jul 25, 2009 7:13 am

Beitrag 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
spm_gl
Often here
Often here
Beiträge: 63
Registriert: Mo Jul 13, 2009 10:43 am
Wohnort: Groß Leuthen, Spreewald
Kontaktdaten:

Beitrag 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.
--- Spreemusik ---
Jan Fuchsmann, Audio Engineer
Unser Blog: http://www.spreemusik.com/blog
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste