| Author |
Message |
|
|
Post subject: faust (Realtime Audio Processing)
Posted: Jul 05, 2008 - 05:36 AM
|
|
Joined: Dec 02, 2006
Posts: 532
Status: Offline
|
|
hi
Faust ist eine compilersprache für Realtime Audio Processing. Wer interresse an sowas hat kann sich faust mit apt-get install faust installieren. Hier ein paar tips die den Einstieg erleichtern.
Nach der installation steht man zunächst ziemlich verlassen da. Keine manpages, und faust --help bringt ein auch nicht viel weiter.
Aber faust bringt eine ganze reihe examples mit, die in /usr/share/doc/faust/examples abgelegt sind. Diesen Ordner sollte man sich erstmal in's $HOME oder auf eine Datenpartition kopieren. Er enthält nicht nur die Examples sondern auch die benötigten MAKEFILES.
Die Dokumentationen findet man als pdf in /usr/share/doc/faust/
Etwas schade ist das die Dateien für das Syntaxhighlight nicht im debianpaket enthalten sind. Wer diese möchte findet sie im sourcepaket.
Okay, nun kann man die examples mal mit ne'm texteditor öffnen und einen ersten Blick auf die faust syntax werfen, sie ist stark an die syntax von dsp (digital signal processing) angelehnt.
Um einen ersten eindruck zu bekommen was faust macht, kann man die examples (.dsp) erstmal compilieren. Eine Konsole im Ordner ~/examples öffnen und make jackgtk
eingeben übersetzt zunachst die .dsp files in .cpp files diese werden dann von gcc compiliert. Die Programme findet man in unterordner jackgtkdir. Wer lieber mit Qt arbeitet benutzt make jackqt, für ladspa plugins make ladspa und so weiter.
Das MAKEFILE für Qt muß man allerdings noch bearbeiten da es von einer default installation in /usr/local ausgeht. Hier müßen die Pfade auf /usr angepasst werden.
Nach ein wenig einarbeitung und nen bischen suchen im netz (nach dsp suchen) findet man schnell eine lösung für jeden zweck.
und so kann ein fertiges Gtk programm dann aussehen
viel spaß |
_________________ [ sidux-20070120-d:3]
|
| |
|
|
|
 |
|
|
Post subject: RE: faust (Realtime Audio Processing)
Posted: Jul 17, 2008 - 04:52 AM
|
|
Joined: Dec 02, 2006
Posts: 532
Status: Offline
|
|
|
|
|
 |
|
|
Post subject: RE: faust (Realtime Audio Processing)
Posted: Aug 05, 2008 - 08:25 AM
|
|
Joined: Dec 02, 2006
Posts: 532
Status: Offline
|
|
|
|
|
 |
|
|
Post subject:
Posted: Aug 21, 2008 - 05:57 PM
|
|
Joined: Mar 16, 2008
Posts: 59
Status: Offline
|
|
Hy,
sehe ich das richtig wenn
Code:
Package gtk+-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-2.0.pc'
ich noch libgtk2.0-dev install muß?
Frage deshalb weil apt dann
Code:
0 aktualisiert, 26 neu installiert, 0 zu entfernen und 1 nicht aktualisiert.
sagt.
Grüße khz |
|
|
| |
|
|
|
 |
|
|
Post subject:
Posted: Aug 21, 2008 - 06:17 PM
|
|
Joined: Dec 02, 2006
Posts: 532
Status: Offline
|
|
yup, genau
die andern noch zu installierenden packete sind bestimmt cairo pango und so, die brauchst de später wenn die widget's `schik` machen willst.
gruß brummer |
_________________ [ sidux-20070120-d:3]
|
| |
|
|
|
 |
|
|
Post subject:
Posted: Aug 25, 2008 - 03:08 PM
|
|
Joined: Mar 16, 2008
Posts: 59
Status: Offline
|
|
nicht das ichs annähernd 100% gerafft hätte aber der ca. 500 make (; (mischung von verschiedenen examples) hat gefunkt \o/
die syntax ... |
|
|
| |
|
|
|
 |
|
|
Post subject:
Posted: Aug 25, 2008 - 05:57 PM
|
|
Joined: Dec 02, 2006
Posts: 532
Status: Offline
|
|
ja, die syntax
Ich hatte tage da gab meine bash history nurnoch make jackgtk aus.
Aber, s'macht ja spaß.
Noch eine gut quelle um die syntax besser zu verstehen sind die zu faust gehörenden libs in usr/lib/faust das sind effekt.lib, fillter.lib math.lib musik.lib und osc.lib.
Diese sind in der faustsyntax geschrieben, beinhalten viele vorgefertigte elemente in ihrer faustsyntax und sind voll komentiert. Das macht komplexere Konstruktionen sehr anschaulich und einfach einzubinden oder nachzubauen und den bedürfnissen anzupassen.
und natürlich Professor Julius Orion Smith III
http://www.dsprelated.com/new/searchboo ... ;book=pasp
make svg ist auch sehr cool um zu sehen wo der fehler sitzt.
Auf jeden fall hast du jetzt eine funktionirende jack schnittstelle in ihrer sourceform und kannst dir den code anschauen. Eigendlich ist es garnicht so schwer zu verstehen, wenn man ein kleines funktionierendes beispiel vor sich hat. Jetzt kannst du dir auch mal jack.h daneben aufmachen und gucken ob du die funktionen dadrin findest
Alles was die jackschnittstelle betrift befindet sich unterhalb von dem eintrag JACK AUDIO INTERFACE
du wirst feststellen das es garnicht so viel ist, und du es sogar lesen kannst, naja, mit nem bischen guten willen.
der abschnitt dadrüber beginend mit virtual void compute (int count, float** input, float** output)
ist der audio daten fluß, und wie er(der fluß) bearbeitet wird.
Dadrüber kommen die metoden und funktionen um das Interface zu bilden.
denne brummer |
_________________ [ sidux-20070120-d:3]
|
| |
|
|
|
 |
|
|
Post subject:
Posted: Aug 26, 2008 - 12:59 PM
|
|
Joined: Dec 02, 2006
Posts: 532
Status: Offline
|
|
Noch nen kleines beispiel :
Wie kann ich meine jack-gtk application direkt beim start mit den gewünschten ports verbinden ?
der entsprechende abschnitt für die inputports im Source ist :
Code:
pname = getenv("FAUST2JACK_INPUTS");
if (pname && *pname) {
for (int i = 0; i < gNumInChans; i++) {
snprintf(buf, 256, pname, i + 1);
jack_connect(client, buf, jack_port_name(input_ports[i]));
}
}
Das bedeutet das die connection nur durchgefürt wird wenn die Umgebungsvariable FAUST2JACK_INPUTS gesetzt ist.
Das kannst du z.b. in der Zeile dadrüber tun, mit:
Code:
setenv("FAUST2JACK_INPUTS", "system:capture_%d", 0);
damit würde sich die anwendung beim start mit den ersten Systemports verbinden. Hierbei werden die Ports hochgezählt, bis keine mehr zu verbinden sind. Du kannst auch eine nummer statt der %d angeben, bei dieser Schleife würde das aber dazu führen das sich alle deine Inputports mit dem einen angegebenen port verbinden.
Möchtest du mehreren ports verbindungen zuweisen, kannst du die funktion aufdrösseln und jeden port einzeln verbinden, das würde dan so aussehen (hier für 2 playbackports):
Code:
setenv("MYAPP2JACK_OUTPUTS1", "system:playback_1", 0);
setenv("MYAPP2JACK_OUTPUTS2", "system:playback_2", 0);
pname = getenv("MYAPP2JACK_OUTPUTS1");
if (pname && *pname) {
// for (int i = 0; i < gNumOutChans; i++) {
int i = 0;
snprintf(buf, 256, pname, i + 1);
jack_connect(client, jack_port_name(output_ports[i]), buf);
i++;
pname = getenv("MYAPP2JACK_OUTPUTS2");
snprintf(buf, 256, pname, i + 1);
jack_connect(client, jack_port_name(output_ports[i]), buf);
// }
}
hier habe ich die for schleife aufgehoben und zähle perr hand den int i hoch. |
_________________ [ sidux-20070120-d:3]
|
| |
|
|
|
 |
|
|
Post subject:
Posted: Aug 26, 2008 - 04:04 PM
|
|
Joined: Mar 16, 2008
Posts: 59
Status: Offline
|
|
thx ... u.a. Julius Orion Smith III ist ein super link ...
macht spass ... connect ... |
|
|
| |
|
|
|
 |
|
|