This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Sound Wiedergabe in Opensim und SL
#1
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

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
    }
}
Zitieren
#2
Anmerkung:

In Opensim sind manche OSSL Sound Befehle scheinbar immer noch buggy.
Ich habe daher die funktionierenden standard LSL Befehle verwendet.
Bekanntes Problem dabei ist allerdings das die Lautstärke wohl in (0.90x) nicht einstellbar ist.
Zitieren
#3
UPDATE 14.06.2022.

Mir ist es gelungen auch in Opensim die Lautstärke Einstellung von Sounds in Script1 funktional zu machen.
Dazu bedarf es folgendes Tricks:

1. laufenden Sound stoppen.
2. Wartezeit von mindestens 0,3 Sekunden einlegen
3. Sound mit neuer Lautstärke starten.

Das Ganze ist getestet unter Simulator 0.9.0.1 mit mehreren aktuellen Viewern.

Ich habe daraufhin das Script 1 abgeändert und oben aktualisiert.

Folgende weiteren Beobachtungen habe ich bei den Tests gemacht:

In SL ist die maximale Länge von WAV Dateien im Upload 30 Sekunden.

In Opensim konnte ich Dateien bis 60 Skunden Länge hochladen (Simulator 0.9.0.1, mehrere Firestorm Viewer Versionen 5.x und 6.4.x)
JEDOCH: lädt man die Datei mit genau 60Sekunden Länge hoch, so spielt sie später nicht ab. Man bekommt kein Fehler, aber man hört nichts.

Kürzt man die WAV Datei für Opensim aber auf etwas unter 60 Sekunden, so startet die Wiedergabe richtig.

Daraus ergibt sich folgende Regel: WAV Dateien für Opensim bis 59,9Sec und für SL bis 30Sec.

Kann gut sein das das Versionsabhängig ist.
Solltet ihr also andere Beobachtungen machen, so bitte ich um Angabe mit Länge, Simulator Version, und Viewer Version.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste