kramann.info
© Guido Kramann

Login: Passwort:










6.2 Erweiterung der Android-Processing-VR-Funktionalität um den Befehl "spiel(...)"

6.2 (EN google-translate)

6.2 (PL google-translate)

Effizientes Audiostreaming ist keine so einfache Sache. Der Soundkarte müssen in zeitlich festen Intervallen Blöcke (Arrays fester Größe) übergeben werden, in den bereits die zu spielenden Sampleverläufe abgespeichert sind. Um diese Blöcke bereitzustellen, müssen alle ggf. gleichzeitig klingende Kanäle in ihrem Verlauf berechnet und zusammengemischt werden. Wenn zudem eine räumliche Positionierung im 3D-Raum gewünscht ist, muß auch hierfür zusätzlich berechnet werden, wie laut und in welcher Phase diese Klänge aktuell beim Zuhörer ankommen. Schließlich gibt es verschiedenartig synthetisierte Klänge: Sie können aus einem Audiofile stammen, oder einer primitiven Wellenfunktion entsprechen, die einfach berechnet wird entspringen.

Efficient audio streaming is not that easy. The sound card must be in timed interva Blocks (arrays of fixed size) are passed, in the already playing the sample curves are stored. To provide these blocks, all possibly simultaneous sounding channels must be in the Course be calculated and mixed together. If, in addition, a spatial positioning in 3D spa is desired, it must be additionally calculated for this purpose, how loud and in which phase these sounds currently arrive at the listener. Finally, there are variously synthesized sound They can come from an audio file, or can correspond to a primitive wave function that is simple calculated will spring.

Efektywne przesyłanie dźwięku nie jest takie proste. Karta dźwiękowa musi znajdować się w określonych odstępach cza Bloki (tablice o ustalonym rozmiarze) są przekazywane w już odtwarzanych krzywych próbki są przechowywane. Aby zapewnić te bloki, wszystkie możliwie jednoczesne kanały dźwiękowe muszą znajdować się w swoi Kurs należy obliczyć i zmieszać razem. Jeśli dodatkowo przestrzenne pozycjonowanie w przestrzeni jest pożądany, należy go dodatkowo obliczyć na ten temat, jak głośno iw jakiej fazie te dźwięki obecnie dociera do słuchacza. Wreszcie są różne dźwięki syntezowan Mogą pochodzić z pliku audio lub mogą odpowiadać prostej funkcji falowej obliczony będzie wiosną.

Für den Fall, dass wie hier noch parallel zur Darstellung im Smartphone, die Klänge auch auf einem externen System bei Wunsch zu hören sein sollen, müssen hierzu auch noch die entsprechenden Mechanismen bereitgestellt und konfiguriert (IP-Nummer des Ziels u.ä.) werden können.

In the event that as here parallel to the representation in the smartphone, the Sounds should also be heard on an external system if desired, this must also be the appropriate mechanisms provided and configured (IP number of the target, etc.) can be.

W przypadku, gdy tutaj równolegle do reprezentacji w smartfonie, Dźwięk powinien być również słyszalny w systemie zewnętrznym, jeśli jest to pożądane, to musi być również odpowiednie mechanizmy zapewnione i skonfigurowane (numer IP celu itd.) mogą być.

Entwurf der Funktion spiel(...)

Draft function game (...)

Gra z funkcją Draft (...)

Um für Kompatibilität mit den Möglichkeiten des WFS-Labors zu sorgen, werden dazu kompatible Manipulationsmethoden definiert.

To ensure compatibility with the capabilities of the WFS lab compatible manipulation methods defined.

Aby zapewnić zgodność z możliwościami laboratorium WFS zdefiniowane zgodne metody manipulacji.

Folgende Parameter könnten die Funktion spiel(...) bestimmen:

The following parameters could determine the function spiel (...):

Następujące parametry mogą określić funkcję spiel (...):


WFS-Befehle (OSC):

BEFEHL                          BEDEUTUNG                           PARAMETER/TYP
"/WONDER/source/activate"       Punktquelle aktivieren
"/WONDER/source/deactivate"     Punktquelle deaktivieren
"/WONDER/source/type"           Punkt- oder Ambient
"/WONDER/source/position"       Neue Position nach Delta t[s]     
"/WONDER/source/color"          Farbe in Visualisierung

Ardour-Befehle (OSC): (Hier sind die Soundquellen als Wav-Files mit 48kHz Samplingrate zur Verfügung gestellt)

STARTEN:
"/ardour/goto_start"            Band zurückspulen
"/ardour/transport_play"        Band starten
"/ardour/loop_toggle"           ... geloopt

STOPPEN:
"/ardour/loop_toggle"           geloopt rückgängig
"/ardour/transport_stop"        stoppen.

Zeitmanagement:
Für eine schnelle Reaktion sollten die Sample-Pakete nicht zu groß gewählt werden,
die zyklisch zur Soundkarte geschickt werden.
Außerdem bietet es sich an, für den Sound auf dem Android eine reduzierte Samplingrate zu nehmen,
um auch auch eine größere Anzahl von Kanälen in Echtzeit berechnen zu können.

Erfahrungswert für Android:
Anzahl der Samples pro Paket (Puffergröße): 512
Samplerate 11025 Samples pro Sekunde
Merken der Samples als short-Werte.
Da Stereo: 2x512==1024 short-Werte für den Puffer nötig.
Wiederum erfolgt die Angabe der Größe im Konstruktor in Byte, short==2Byte, deshalb 4x512==2048

Die kleinste (Basis)-zeiteinheit für den Prozeß ist dann (Verarbeitungsdauer eines Blocks):
512/11025 == 0,046439909 Sekunden, also ungefähr 50ms
Dieses Verarbeitungsintervall läge auch im Bereich des Möglichen der WFS-Anlage.

Auch der Dopplereffekt sollte im Android-Device mit berücksichtigt werden.

spiel(TYP oder Dateiname, eigene Frequenz oder Miditonhöhe, Mapping auf Wunschfrequenz oder Midihöhe, Lautstaerke, x, y, z-Position im Raum)  

Beispiele:
Synthetische Funktionen werden so formuliert, dass ihre Periode 1s ist und damit ihre Frequenz 1Hz
spiel("Dreieck",1.0,440.0,0.0,100,100,100);
spiel("orgel60.wav",60,72,1.0,200,100,100);


Funktionsköpfe:
void spiel(String typ, int midi_quelle, int midi_klang, float laute, float x, float y, float z)
void spiel(String typ, float freq_quelle, int midi_klang, float laute, float x, float y, float z)
void spiel(String typ, int midi_quelle, float freq_klang, float laute, float x, float y, float z)
void spiel(String typ, float freq_quelle, float freq_klang, float laute, float x, float y, float z)


Code 6.2-1: Entwurf der Funktion spiel(...) und Entwurf der dahinter liegenden Mechanismen.