Die Wiedergabe selbst ersteller Sounds ist ganz einfach.
In einem Audio Bearbeitungs Programm wie Audacity wird die eigene Aufnahme zuerst bearbeitet.
Sie muss auf <= 30 Sekunden (für SL) gekürzt werden, auf Mono und 44.1 als .WAV abgespeichert sein.
In Opensim gehen laut eigenen Versuchen 59,9Sec.
Wenn man den Sound endlos braucht (zum Beispiel für Wasserfall) so macht man da auch gleich in Audacity.
Dann kann sie in den Simulator geladen werden.
Mit nachfolgenden 2 Scriptbeispielen läßt sich diese Sounddatei im Simulator wiedergeben.
Viel Spaß wünschen
Elfia & Tron
Beispiel 1: Endlos Sound Wiedergabe, zum Beispiel für Wasserfälle
Update 14.06.2020: Version 2 geht nun auch in Opensim mit Lautstärkeregelung per touch
Beispiel 2: Zufällige Wiedergabe einer Auswahl verschiedener Vogelsounds mit variablen zufallsgesteuerten Pausen.
In einem Audio Bearbeitungs Programm wie Audacity wird die eigene Aufnahme zuerst bearbeitet.
Sie muss auf <= 30 Sekunden (für SL) gekürzt werden, auf Mono und 44.1 als .WAV abgespeichert sein.
In Opensim gehen laut eigenen Versuchen 59,9Sec.
Wenn man den Sound endlos braucht (zum Beispiel für Wasserfall) so macht man da auch gleich in Audacity.
Dann kann sie in den Simulator geladen werden.
Mit nachfolgenden 2 Scriptbeispielen läßt sich diese Sounddatei im Simulator wiedergeben.
Viel Spaß wünschen
Elfia & Tron
Beispiel 1: Endlos Sound Wiedergabe, zum Beispiel für Wasserfälle
Update 14.06.2020: Version 2 geht nun auch in Opensim mit Lautstärkeregelung per touch
Code:
// P417 endless Soundloop für Opensim by Tron V2
// Geht auch in Opensim mit Lautstaerken Steuerung
// automatic detects soundfiles at inventory change
// start automatic loop playback of Soundfile
// allows Volume change by prim touch in 11 steps
string sound;
integer mastervolume = 10;
default
{
on_rez(integer start) {llResetScript();}
state_entry()
{
llStopSound();
if(llGetInventoryNumber(INVENTORY_SOUND) > 0)
{
sound = llGetInventoryName(INVENTORY_SOUND, 0);
llWhisper(0,"starting playback of soundfile " + sound + "\nadjust volume by touch in 1/10 steps");
llStopSound();
llLoopSound(sound, (float)mastervolume /10);
}
else llWhisper(0,"could not detect any soundfiles in prim ");
}
touch_end(integer touched)
{
llStopSound();
llSleep(0.3);
mastervolume--;
if( mastervolume < 0) mastervolume = 10;
llWhisper(0,"Volume: "+ (string)(mastervolume));
llLoopSound(sound, (float)mastervolume /10);
}
changed(integer change)
{
if (change & ( CHANGED_INVENTORY | CHANGED_REGION_START)) {llResetScript();}
}
}
Beispiel 2: Zufällige Wiedergabe einer Auswahl verschiedener Vogelsounds mit variablen zufallsgesteuerten Pausen.
Code:
// Skript by Elfia und Tron 12.2018
// Skript darf frei verbreitet werden und in eigene Produkte eingebaut werden
// Einzige Beschränkung: Das Skript selbst muss aber kostenfrei und fullperm bleiben und der Header intakt
integer debug = TRUE; // Ausgaben für Entwicklung und Test [TRUE / FALSE]
integer soundanzahl; // Anzahl Sounds im Inventar
float basiswartezeit = 10.0; // Basiswartezeit zwischen Sounds
float maxzufallsdelay = 10.0; // Varianz Wartezeit zwischen Sounds damit kein Muster entsteht
default
{
state_entry()
{
if(debug) soundanzahl = llGetInventoryNumber(INVENTORY_SOUND); // Anzahl Sounds im Inventar ermitteln
llSay(0,"Anzahl Sounds: " + (string) soundanzahl);
if(soundanzahl) llSetTimerEvent(1.0); // Wartezeit bis erstes Abspielen falls >= 1 Sound im Inventar ist
}
changed(integer change)
{
if (change & CHANGED_INVENTORY) llResetScript(); // Bei Änderung des Inventars neue Soundzahl ermitteln
}
timer()
{
float zufall = llFrand((float)soundanzahl); // Zufallszahl für Sound ermitteln
integer aktsound = llRound(zufall) -1; // und korrigieren
if(aktsound < 0) aktsound = 0; // Fehler mit negativen Index verhindern
string vogelsound = llGetInventoryName(INVENTORY_ALL, aktsound); // Name des gewählten Sounds aus Inventar ermitteln
llPlaySound(vogelsound, 0.5); // Sound einmal abspielen
float wartezeit = basiswartezeit + llFrand(maxzufallsdelay); // Wartezeit Ermittlung für RUHE zwischen Sounds (hier zwischen 10 bis 20 Sekunden)
llSetTimerEvent(wartezeit); // Wartezeit einstellen
}
}