Eigener Lautstärkeregler

Startseite Foren Deutsches LiveCode-Forum Eigener Lautstärkeregler

Schlagwörter: 

Ansicht von 61 Antwort-Themen
  • Autor
    Beiträge
    • #18959
      akrages
      Teilnehmer

      Hallo und guten Abend.

      Gibt es eine Möglichkeit einen eigenen Lautstärkeregler in Livecode nachzubauen, um die Lautstärke der Wiedergabe von .wav Dateien damit zu steuern?

    • #18961
      Klaus Major
      Verwalter

      Hallo akrages,

      klar, wir können so ziemlich alles mit LC programmieren, wenn wir wissen wie! 😀

      Hier ein kleiner Beispielstack aus meinen frühen Zeiten, der Dir einen Anhaltspunkt gibt:
      https://major-k.de/staxx/custom_slider1.livecode.zip

      Bei Fragen bitte fragen! 🙂

      Gruß

      Klaus

    • #18963
      akrages
      Teilnehmer

      Danke, funktioniert.

      Wie schaffe ich es nun, damit sich die Lautstärke gleichzeitig mit den Werten im fld „volume“ ändert“

      Das steht momentan im Button „play“

    • #18964
      akrages
      Teilnehmer

      on mouseUp pMouseButton
      if the environment = „mobile“ then
      if (mobileSoundOnChannel(„background“) is empty) or (mobileSoundOnChannel(„background“) is „could not find channel“) then
      put (specialFolderPath(„engine“) & „/sound/background.wav“) into tPath
      put „background“ into tChannelName
      put „looping“ into tType –> looping Sound wird wiederholt gespielt, bis gestoppt wird „now“ Sound wird nur 1x abgespielt
      mobilePlaySoundOnChannel tPath, tChannelName, tType
      end if
      else
      play audioClip „background.wav“ looping
      set the playloudness to the value of fld „volume“
      ##set the playLoudNess of player „background“ to 50
      end if
      end mouseUp

    • #18965
      Klaus Major
      Verwalter

      Sollte doch so funktionieren!?

      Aber ein paar Tips:
      1. Benutze -> specialfolderpath(„resources“) nicht „engine“!

      Denn nur auf der mobilen Platform ist „engine“ zufällig identisch mit „resources“, aber eben nur da!

      Wenn Du also noch eine Version für Win oder Mac Desktop erstellen willst, müsstest Du das ändern, wenn Du „resources“ nutzt, eben nicht! 🙂

      2. „the value“ ist hier überflüssig, da im Feld „volume“ doch sicher eine Zahl steht, oder?
      Also das hier reicht:

      ...
      set the playloudness to fld "volume"
      ...

      Aber was funktinoiert denn nicht bei Dir?
      Wird die Lautstärke nicht geändert?

      Du kannst (und solltest vielleicht auch?) mein Beispiel nicht 1:1 umsetzen, sondern damit direkt „the playloudness“ setzen, statt wie im meinem Beispiel in ein Feld zu schteiben.
      Also einen echten Volumenregler, kiegst Du das hin?

      Gruß

      Klaus

    • #18967
      akrages
      Teilnehmer

      Ich verstehe nicht so wirklich, wie du das meinst: (sondern damit direkt „the playloudness“ setzen).
      Und zu deiner Frage: Wenn ich den „Lautstärkeregler“ bewegt habe, ändert sich die Lautstärke erst, wenn ich erneut den Button „play“ anklicke.

    • #18968
      Klaus Major
      Verwalter

      Hi Akrages,

      OK, in meinem Beispiel lege ich den neuen Wert für Playloundness in ein Feld mit dieser Zeile:

      on mousemove x,y
         if darfziehen then
            switch
               case x < the left of grc "rampe_horizontal"
                  ##set the loc of me to item 1 of the loc of me, the top of grc "rampe_horizontal"
                  set the loc of me to the left of grc "rampe_horizontal", item 2 of the loc of me
                  put 0 into fld "volume"
                  break
               case x > the right of grc "rampe_horizontal"
                  ##set the loc of me to item 1 of the loc of me, the top of grc "rampe_horizontal" - tAusgleich
                  set the loc of me to the right of grc "rampe_horizontal", item 2 of the loc of me
                  put 100 into fld "volume"
                  break
               default
                  set the loc of me to x, item 2 of the loc of me
                  put  round((x - the left of grc "rampe_horizontal")/(the width of grc "rampe_horizontal")*maxValue) into fld "volume"
                  break
            end switch
         end if
      end mousemove

      Wenn Du diesen „Umweg“ nun umgehen und direkt die Lautstärke setzen möchtest, schreib es so:

      on mousemove x,y
         if darfziehen then
            
            ## Zuerst die neue Lautstärke ermitteln mit hilfe von etwas Geometrie :-)
            switch
               case x < the left of grc "rampe_horizontal"
                  ##set the loc of me to item 1 of the loc of me, the top of grc "rampe_horizontal"
                  set the loc of me to the left of grc "rampe_horizontal", item 2 of the loc of me
                  put 0 into neuelautstärke
                  break
               case x > the right of grc "rampe_horizontal"
                  ##set the loc of me to item 1 of the loc of me, the top of grc "rampe_horizontal" - tAusgleich
                  set the loc of me to the right of grc "rampe_horizontal", item 2 of the loc of me
                  put 100 into neuelautstärke
                  break
               default
                  set the loc of me to x, item 2 of the loc of me
                  put  round((x - the left of grc "rampe_horizontal")/(the width of grc "rampe_horizontal")*maxValue) into neuelautstärke
                  break
            end switch
            
            ## Und nun erst setzen:
            set the playloudness to neuelautstärke
         end if
      end mousemove

      Gruß

      Klaus

    • #18970
      akrages
      Teilnehmer

      Hi. das ist ja echt Klasse.
      funzt prima.
      Vielen Dank.
      Kannst du mir das auch für die rampe_vertikal umbiegen?
      irgendwie schaffe ich das nicht.
      Die Banane „fliegt“ immer waagrecht.

    • #18971
      Klaus Major
      Verwalter

      Bitte schön:

      on mousemove x,y
         
         ## Nur ausführen, wenn Maus "down" ist!
         if darfziehen then
            switch
               ## Wir sind schon unten, also bei 0 angekommen
               case y < the top of grc "rampe_vertikal" + tAusgleich
                  set the loc of me to item 1 of the loc of me, (the top of grc "rampe_vertikal")
                  put 0 into neuelautstärke
                  break
                  
                  ## Wir sind oben, also bei 100 angekommen
               case y > the bottom of grc "rampe_vertikal"
                  set the loc of me to item 1 of the loc of me, the bottom of grc "rampe_vertikal" - tAusgleich
                  put 100 intoneuelautstärke
                  break
                  
                  ## Irgendwo zwischen 0 und 100
                  ## Ein einfacher Dreisatz!
               default
                  set the loc of me to item 1 of the loc of me, y - tAusgleich
                  put round((y - the top of grc "rampe_vertikal")/the height of grc "rampe_vertikal"*maxValue) into neuelautstärke
                  break
            end switch
            set the playloudness to neuelautstärke
         end if
      end mousemove

      Wichtig, versuche, das Skript zu verstehen, vielleicht zunächst einmal nur den Unterschied zum Skript mit dem Feld „volume“!

      Und dann die eigentliche Logik mit der dazugehörigen Mathematik/Arithemtik. Ist ätzend, geht aber nicht ohne. 😀

      Bei Fragen mach ich gerne den Erklärbär!

    • #19020
      akrages
      Teilnehmer

      Guten Abend,
      ich habe jetzt eine kleine Anwendung geschrieben.
      4 verschiedene „buttons“ mit unterschiedlichen .wav files (eine davon läuft als Hintergrundsound im looping.
      Außerdem gibt ea 4 Lautstärkeslider.
      Was ich möchte ist jetzt folgendes:
      Jeder Slider soll einen dieser .wav files in der Lautstärke regeln (und nur diesen)!

      Mein Problem ist:
      Innerhalb von Livecode funktionieren die Slieder, allerding jeder gleich, dh. ich kann mit jedem der 4 Sleider alle .wav´s in der Lautstärke regeln, was ja nicht gewünscht ist.

      Und auf meinem Android Handy kann ich die Slider zwar bewegen undauch die Werte des Lautstärkepegels ändern sich, aber die Lautstärke leider nicht.

      Geht das vielleicht gar nicht wie ich das vorhabe?

    • #19021
      Klaus Major
      Verwalter

      Aha, Android mal wieder…

      Da hast Du Pech gehabt, ein Blick ins Dictionary zeigt, daß „playloudness“ nur auf Mac/Win/Linux und iOS unterstützt wird. Und ja, „playloudness“ regelt die Gesamtlautstärke.

      Wie genau spielst Du deine Sounds ab? Mit welchem Befehl?

    • #19023
      Klaus Major
      Verwalter

      Ach, sorry, hast Du ja oben geschrieben.
      OK, dann ändere nur die letzte Zeile in den Skripten:

      ...
           end switch
           ## set the playloudness to neuelautstärke
           mobileSetSoundChannelVolume XXX,neueLautstärke
        end if
      end mousemove

      XXX dabei bitte durch den Namen Deines(r) Channels ersetzen.

    • #19025
      akrages
      Teilnehmer

      Hallo.
      Folgendes habe ich als Script in dem Button zum abspielen des Hintergrunsounds stehen:

      on mouseUp
      ##if the environment = „mobile“ then
      if (mobileSoundOnChannel(„background“) is empty) or (mobileSoundOnChannel(„background“) is „could not find channel“) then
      put (specialFolderPath(„engine“) & „/background.wav“) into tPath
      put „background“ into tChannelName
      put „looping“ into tType
      mobilePlaySoundOnChannel tPath, tChannelName, tType
      else
      mobileStopPlayingOnChannel „background“
      end if
      ##end if
      end mouseUp

      Die auskommentierten Zeilen deshalb, weil der Button sowohl zum Starten der Wiedergabe als auch zum Stoppen der Wiedergabe genutzt wird. Das funktioniert aber nur auf dem Android Handy, wenn diese zwei Zeilen auskommentiert sind.

    • #19026
      Klaus Major
      Verwalter

      specialfolderpath(„resources“), wie ich oben bereits schrieb! 😎

      Und was genau ist Deine Frage?
      Hast Du meine letzte Änderung im Skript ausprobiert?

      Hinweis:
      Ich besitze weder Handy noch Tablet o.ä., daher kann ich so etwas nicht testen und nur sagen, was die korrekte Systax für wasauchimmer ist.

    • #19029
      akrages
      Teilnehmer

      Ganz schön ärgerlich, als ich endlich fertig war mit meiner Nachricht an dich und den Absendenknopf angeklickt habe, war die Nachricht weg und ich musste mich neu anmelden.
      Gibt es da ein Zeitfenster?

      • #19032
        Klaus Major
        Verwalter

        Ganz schön ärgerlich, als ich endlich fertig war mit meiner Nachricht an dich und den Absendenknopf angeklickt habe, war die Nachricht weg und ich musste mich neu anmelden.
        Gibt es da ein Zeitfenster?

        Nicht, daß ich wüsste, aber die Forumsoftware ist leider extrem buggy… :-/

    • #19030
      akrages
      Teilnehmer

      Also ich habe dein Script nicht mehr sondern folgendes:

      local topValue,tScaleFactor,Bstop,Tstop,xLoc,cY,canMove,
      
      on mouseDown
         # Geben Sie Ihren Startwert (oben) ein
         put 100 into topValue
         # FÜGEN SIE IHREN ENDWERT (UNTEN) EIN
         put 1 into bottomValue
         
         # ERHALTEN SIE DEN OFFSET DES KLICKPUNKTES UND DES ZENTRUMS DES BTN
         # Dies verhindert, dass der BTN springt, wenn Sie mit dem Ziehen beginnen
         put (the mouseV - item 2 of the loc of me) into cY
         
         # Die Zahl, die am Ende der nächsten 3 Zeilen addiert oder subtrahiert wird
         # dient dazu, die Position des Schiebereglers so zu ändern, dass er an der gewünschten Stelle stoppt
         put (the bottom of image "Vsliderbar1")-(the height of me/2)+cY +7 into Bstop
         put (the top of image "Vsliderbar1")+(the height of me/2)+cY -27 into Tstop
         put item 1 of the loc of image "Vsliderbar1" +9 into xLoc
         put (bottomValue-topValue)/(Bstop-Tstop) into tScaleFactor
         put true into canMove
      end mouseDown
      
      on mouseMove x,y
         if not canMove then exit mouseMove
         put min(Bstop,max(Tstop,y)) into yLoc
         set loc of me to xLoc,yLoc-cY
         # Möglicherweise müssen Sie folgende Werte hinzufügen: xLoc und yLoc
         #, um den Wert fld an der gewünschten Stelle zu positionieren
         set the loc of fld "theValue_v1" to xLoc-40,yLoc-cY+10
         # Die folgende Zeile berechnet den Wert, den Sie möchten
         # wird auch für die tatsächliche Funktion des Schiebereglers verwendet
         put round((yLoc-Tstop)*tScaleFactor)+topValue into fld "theValue_v1"
         put round((yLoc-Tstop)*tScaleFactor)+topValue into noiseOne
         ##set the playloudness to noise1 
         mobileSetSoundChannelVolume noise1, "noiseOne" ##diese Zeile hinzugefügt
      end mouseMove
      
      on mouseUp
         put false into canMove
      end mouseUp
      
      on mouseRelease
         mouseUp
      end mouseRelease

      Und da kommt jetzt leider eine Fehlermeldung, wenn ich den Slider bewege.

    • #19031
      akrages
      Teilnehmer

      (Handler: can´t find handler)

    • #19034
      Klaus Major
      Verwalter

      Bitte, bitte, bitte, pack Deine Skripte in die CODE Tags, damit man sie lesen kann, siehe oben, ich habe das mal eben gemacht. Skript markieren und oben auf CODE klicken.

      Der Handler „mobileSetSoundChannelVolume“ klappt nur auf dem Handy, in der IDE gibt es diese Meldung. Das wird es wohl sein, da Du hier nicht zwischen MOBILE und sonstwas verzweigst.
      Aber genau das kannst und solltest Du hier machen, es reicht ja vor der Zeile „mobileSetSoundChannelVolume“:

      ...
        put round((yLoc-Tstop)*tScaleFactor)+topValue into noiseOne
        if the environment = "mobile" then
          ## mobileSetSoundChannelVolume noise1, "noiseOne" ##diese Zeile hinzugefügt
          ## Der Channel Name in Anführungszeichen, die Variable noiseOne aber nicht!
          mobileSetSoundChannelVolume "noise1", noiseOne
        else
           set the playloudness to noiseone
        end if
      end mouseMove

      Wenn Du eine Variable in Anführungszeichen setzt, wird sie zu einem String!

      ...
      put 10 into meineVariable
      put meineVariable -> 10
      put "meineVariable" -> meineVariable
      ...

      Und das möchtest Du nicht. 🙂

      Kurze Frage:
      Dieses neue Skript verstehst Du nun besser als meins? 😎
      Meins ist erstens kürzer und zweitens nicht ganz so kompliziert.

    • #19036
      akrages
      Teilnehmer

      Ok, das mit den CODE Tags wusste ich nicht, danke.
      Ja ich denke es ist etwas leichter zu verstehen.

    • #19037
      akrages
      Teilnehmer

      Vielen, vielen Danke.
      Der Lautstärkeregler funktioniert jetzt in der funktioniert jetzt in der IDE und auf dem Handy.

    • #19038
      akrages
      Teilnehmer

      Oh man. bisschen durcheinander der Satz. Ist wohl die Freude.

    • #19041
      akrages
      Teilnehmer

      Guten Tag.
      wie kann ich in dieses Script

      on mouseUp
         if (mobileSoundOnChannel("background") is empty) or (mobileSoundOnChannel("background") is "could not find channel") then
            put (specialFolderPath("resources") & "/sound/background.wav") into tPath
            put "background" into tChannelName
            put "looping" into tType
            mobilePlaySoundOnChannel tPath, tChannelName, tType
         else
            mobileStopPlayingOnChannel "background"
         end if
      end mouseUp

      noch ein
      if the environment = "mobile" then
      einfügen?

    • #19042
      Klaus Major
      Verwalter

      Mit der Tastatur? 😀

      Na, halt aussen drumherum packen:

      on mouseUp
         if the environment = "mobile" then
            if (mobileSoundOnChannel("background") is empty) or (mobileSoundOnChannel("background") is "could not find channel") then
               put (specialFolderPath("resources") & "/sound/background.wav") into tPath
               put "background" into tChannelName
               put "looping" into tType
               mobilePlaySoundOnChannel tPath, tChannelName, tType
            else
               mobileStopPlayingOnChannel "background"
            end if
         end if
      end mouseUp

      Hinweis:
      Falls Du hier und in ähnlichen Fällen keinen ELSE Fall benötigst, schreibe ich das immer so, einfach der Übersichtlichkeit halber und um unübersichtliche IF…THEN Klauseln zu vermieden:

      on mouseUp
         if the environment <> "mobile" then
           ## Dann einfach nicht weitermachen! :-)
            exit mouseup
         end if
         
         if (mobileSoundOnChannel("background") is empty) or (mobileSoundOnChannel("background") is "could not find channel") then
            put (specialFolderPath("resources") & "/sound/background.wav") into tPath
            put "background" into tChannelName
            put "looping" into tType
            mobilePlaySoundOnChannel tPath, tChannelName, tType
         else
            mobileStopPlayingOnChannel "background"
         end if
      end mouseUp
    • #19044
      akrages
      Teilnehmer

      Schade, funktioniert so leider nicht.
      Das besondere an dem Button zur Wiedergabe ist, dass er auch zum stoppen der Wiedergabe dient.
      Wenn ich jetzt mein Script mit einem
      if the environment = "mobile" then
      ergänze, dann funktioniert er nicht mehr.

    • #19045
      Klaus Major
      Verwalter

      Also das hier funktioniert nicht auf dem Handy?

      on mouseUp
         if the environment = "mobile" then
            if (mobileSoundOnChannel("background") is empty) or (mobileSoundOnChannel("background") is "could not find channel") then
               put (specialFolderPath("resources") & "/sound/background.wav") into tPath
               put "background" into tChannelName
               put "looping" into tType
               mobilePlaySoundOnChannel tPath, tChannelName, tType
            else
               mobileStopPlayingOnChannel "background"
            end if
         end if
      end mouseUp
    • #19047
      akrages
      Teilnehmer

      Doch auf dem Handy schon, aber nicht in der IDE
      Da reagiert der Playbutton gar nicht.

    • #19048
      Klaus Major
      Verwalter

      Was soll denn da bitteschön auch passieren?
      Du hast doch nichts Entsprechendes geskriptet, also keinen ELSE Fall!

      In der IDE „sieht“ die Engine das hier in Deinem Skript:

      on mouseup
         ## Nichts tun, wir sind ja nicht auf dem Händy, wie geil ist das denn? :-)
         ## Tu ma noch'n Bier!
      end mouseup
    • #19050
      akrages
      Teilnehmer

      Eigentlich möchte ich ja nur, dass in der IDE das gleiche passiert, wie auf dem Handy.
      Klicke ich auf den Playbutton, spielt der Hintergrundsound.
      Klicke ich noch einmal auf den Playbutton dann stoppt die Hintergrundsound usw.
      Das muss doch in der IDE genauso funktionieren.

      • #19053
        Torsten
        Teilnehmer

        Hi,

        dann muss ich dich mal fragen, wozu Du das if environment = mobilebrauchst?

        Wenn die Funktionaliät in der IDE genauso sein soll wie auf dem Smartphone, brauchst Du keine Unterscheidung 😉

        LG
        Torsten

    • #19051
      Klaus Major
      Verwalter

      Wie spielst Du denn die Sound in der IDE ab?
      Ach ja, hast Du ja auch schon geschrieben, mit „play ac…“,
      damit kann aber leider nur EIN Sound gleichzeitig abgespielt werden.

      Benutze ein paar (unsichtbare) „Player“ Objekte und setze deren „filename“.
      So können mehrere Sounds gleichzeitig abgespielt werden.

      Hinweis:
      specialfolderpath(„resources“), zu dem ich Dir nun wiederholt geraten habe, funktioniert auch in der IDE! Dort liefert es den Pfad zum Ordner mit dem aktuelle Stack drin.

    • #19055
      Klaus Major
      Verwalter

      @Torsten,

      seit wann funktioniert das hier:

      on mouseUp  
         if (mobileSoundOnChannel("background") is empty) or (mobileSoundOnChannel("background") is "could not find channel") then
            put (specialFolderPath("resources") & "/sound/background.wav") into tPath
            put "background" into tChannelName
            put "looping" into tType
            mobilePlaySoundOnChannel tPath, tChannelName, tType
         else
            mobileStopPlayingOnChannel "background"
         end if
      end mouseUp

      auch auf dem Desktop/in der IDE?
      Bedenke, wir reden schon lange nicht mehr von dem allerersten Skript ganz oben!

      Gruß

      Klaus

    • #19064
      akrages
      Teilnehmer

      letzteres funktioniert nur auf dem Handy.
      In der IDE kommt beim Klick auf den Playbutton folgende Fehlermeldung:
      (Function: error in function handler) near „mobileSoundOnChannel“, char 11
      Deshalb ja die Unterscheidung mit:
      if the environment = "mobile" then

    • #19067
      Klaus Major
      Verwalter

      Ich weiß das, und Torsten weiß das eigentlich auch! 😎
      Bitte lies meinen letzten Post noch einmal, anders wird es nicht gehen!

    • #19069
      akrages
      Teilnehmer

      Die Fehlermeldung kommt für diese Zeile:
      if (mobileSoundOnChannel("background") is empty) or (mobileSoundOnChannel("background") is "could not find channel") then

    • #19070
      Klaus Major
      Verwalter

      Noch einmal, diese ganzen MOBILExxxx Befehle funktionieren nur auf dem Handy, in der IDE gibt es sofort (bein ersten Vorkommen wie hier) einen ERROR.

      Ist total bescheuert, aber wir müssen damit leben, also komm bitte drüber hinweg. 😀

    • #19072
      akrages
      Teilnehmer

      Ist mir schon klar.
      ich dachte halt, mit einem zusätzliche else das Problem lösen zu können.
      Trotzdem danke.

    • #19073
      Klaus Major
      Verwalter

      Kannst Du auch, aber dann musst Du auch das Richtige skripten für den ELSE Fall! 😎
      Oder überhaupt erst einmal was.

    • #19075
      Torsten
      Teilnehmer

      @Klaus: sorry für den Kommentar meinerseits, ichn hatte den ganzen Thread noch nicht gelesen.

      Wenn ich das richtig verstehe, hat er doch eigentlich alles schon am Anfang richtig gemacht, um zwischen mobile und IDE zu unterscheiden:

      on mouseUp pMouseButton
         if the environment = "mobile" then
            if (mobileSoundOnChannel("background") is empty) or (mobileSoundOnChannel("background") is "could not find channel") then
               put (specialFolderPath("engine") & "/sound/background.wav") into tPath
               put "background" into tChannelName
               put "looping" into tType --> looping Sound wird wiederholt gespielt, bis gestoppt wird "now" Sound wird nur 1x abgespielt
               mobilePlaySoundOnChannel tPath, tChannelName, tType
            end if
         else
            play audioClip "background.wav" looping
            set the playloudness to the value of fld "volume"
            ##set the playLoudNess of player "background" to 50
         end if
      end mouseUp

      Das Schema müsste wieder eingebaut werden, oder?

      LG
      Torsten

    • #19077
      Klaus Major
      Verwalter

      Im Prinzip hast Du recht, aber mit „play ac xyz“ wird das nichts, hier müssen PLAYER Objekte ran!

      • #19081
        Torsten
        Teilnehmer

        Stimmt: play erlaubt nur eine Audiodatei abzuspielen:
        https://livecode.fandom.com/de/wiki/Play

        „Wenn Sie einen Audioclip abspielen, während ein anderer spielt, wird der erste Audioclip gestoppt und eine playStopped-Nachricht wird an die aktuelle Karte gesendet. Sie können nicht gleichzeitig zwei Sounds abspielen.“

    • #19083
      Klaus Major
      Verwalter

      SACHICHDOCH! 😀

    • #19103
      akrages
      Teilnehmer

      Guten Abend,
      ist es möglich, festzustellen, ob ein Soundkanal schon spielt?
      Natürlich für Android.
      Also sowas wie if the sound is done then für IOS

      Ich möchte gerne den Hintergrundsound über den Slider für die Lautstärke starten und zwar dann, wenn er noch nicht läuft und wenn der Wert im Field für die Lautstärkeanzeige >1 ist.
      Andernfalls soll über denSlider nur die Lautstärke geregelt werden.

      Wie müsste also so eine if Abfrage aussehen?
      Kann da jemand helfen“

    • #19104
      Klaus Major
      Verwalter

      Das müsste das hier sein:

      ...
      put mobileSoundChannelStatus("background") into sound_ist_am_spielen
      ## Nun musst Du checken, welchen Wert sound_ist_am_spielen hat.
      ...

      Mögliche Werte:
      stopped # Kein Sound im gewünschten Kanal
      paused # Sound im Kanal, aber pausiert.
      playing # Sollte klar sein

    • #19133
      akrages
      Teilnehmer

      Hallo,
      ich bin gerade dabei deinen letzten Tip in den Slider für die Lautstärke zu integrieren, aber irgendwie funktioniert der Regler nicht so wie er soll.
      Sobald ich den Regler berühre, startet der Hintergrundsound und laässt sich dann auch nicht mehr regeln.
      hier mal der Ausschnit des Scriptes für den Slider mit Ergänzung.

      on mouseMove x,y
         if not canMove then exit mouseMove
         put min(Bstop,max(Tstop,y)) into yLoc
         set loc of me to xLoc,yLoc-cY
         # you may need to add values to following: xLoc and yLoc
         # to position the value fld where you want
         # Möglicherweise müssen Sie folgende Werte hinzufügen: xLoc und yLoc
         #, um den Wert fld an der gewünschten Stelle zu positionieren
         set the loc of fld "theValue_v4" to xLoc-40,yLoc-cY+10
         # The following line calculates the value which you would want to
         # also put into use for the actual functioning of the slider
         # Die folgende Zeile berechnet den Wert, den Sie möchten
         # wird auch für die tatsächliche Funktion des Schiebereglers verwendet
         put round((yLoc-Tstop)*tScaleFactor)+topValue into fld "theValue_v4"
         put round((yLoc-Tstop)*tScaleFactor)+topValue into sBackground ##diese Zeile hinzugefügt
         if the environment = "mobile" then
            ## mobileSetSoundChannelVolume noise1, "noiseOne" ##diese Zeile hinzugefügt
            ## Der Channel Name in Anführungszeichen, die Variable noiseOne aber nicht!
            
            if (mobileSoundOnChannel("background") is empty) or (mobileSoundOnChannel("background") is "could not find channel") then
               put (specialFolderPath("resources") & "/sound/background.wav") into tPath
               put "background" into tChannelName
               put "looping" into tType
               mobileSetSoundChannelVolume "background", sBackground ##diese Zeile hinzugefügt
               if the value of Field "theValue_v4" >2 then
                  
                  mobilePlaySoundOnChannel tPath, tChannelName, tType
                  
                  if the value of Field "theValue_v4" <2 then
                     mobileStopPlayingOnChannel "background"
                  end if
               end if
            end if
         else
            set the playloudness to sBackground
         end if
      end mouseMove
    • #19134
      Klaus Major
      Verwalter

      Bedenke, „mousemove“ wird STÄNDIG gesendet, wenn die Maus sich bewegt!
      Also wird hier der Sound ständig gestartet und irgendwann explodiert Dein Handy! 😀

      Mach das mit dem Background-Sound Check doch „on mousedown“, da sollte es besser funktionieren.

      Hinweis -> the value of fld xyz
      ist überflüssig, das hier reicht:
      if fld „theValue_v4“ > 2

    • #19136
      akrages
      Teilnehmer

      Bingo!
      Aber der Sound stoppt noch nicht bei Level 1.
      Müsste er doch aber laut dem Script oder?

    • #19137
      akrages
      Teilnehmer

      würde statt
      if the value of Field "theValue_v4" <2 then
      auch ein
      else
      reichen, oder verändert dies das gesamte Script?

    • #19138
      akrages
      Teilnehmer

      Gerade ausprobiert.
      Ändert leider nichts.
      Der Ton ist auf Level 1 noch immer ganz leise zu hören.

    • #19139
      Klaus Major
      Verwalter

      Das alles erscheint mir igendwie viel zu kompliziert… 😀

      Bitte poste mal Dein komplettes Skript mit mousedown und allem,
      ich habe morgen etwas Zeit, dann schau ich mir das mal in Ruhe an.

      Der Ton ist auf Level 1 noch immer ganz leise zu hören.

      Mit „Level 1“ meinst Du „Lautstärke auf 1 gestellt“?

    • #19142
      akrages
      Teilnehmer

      Ja Level1 bedeutet, Lautstärke auf 1 gestellt.

    • #19143
      akrages
      Teilnehmer

      Und hier der Script aus dem Button SliderC4:

      local topValue,tScaleFactor,Bstop,Tstop,xLoc,cY,canMove,
      
      on mouseDown
         # Geben Sie Ihren Startwert (oben) ein
         put 100 into topValue
         # FÜGEN SIE IHREN ENDWERT (UNTEN) EIN
         put 1 into bottomValue
         
         # ERHALTEN SIE DEN OFFSET DES KLICKPUNKTES UND DES ZENTRUMS DES BTN
         # Dies verhindert, dass der BTN springt, wenn Sie mit dem Ziehen beginnen
         put (the mouseV - item 2 of the loc of me) into cY
         
         # Die Zahl, die am Ende der nächsten 3 Zeilen addiert oder subtrahiert wird
         # dient dazu, die Position des Schiebereglers so zu ändern, dass er an der gewünschten Stelle stoppt
         put (the bottom of image "Vsliderbar4")-(the height of me/2)+cY +7 into Bstop
         put (the top of image "Vsliderbar4")+(the height of me/2)+cY -27 into Tstop
         put item 1 of the loc of image "Vsliderbar4" +9 into xLoc
         put (bottomValue-topValue)/(Bstop-Tstop) into tScaleFactor
         put true into canMove
         
         if the environment = "mobile" then
            ## mobileSetSoundChannelVolume noise1, "noiseOne" ##diese Zeile hinzugefügt
            ## Der Channel Name in Anführungszeichen, die Variable noiseOne aber nicht!
            
            if (mobileSoundOnChannel("background") is empty) or (mobileSoundOnChannel("background") is "could not find channel") then
               put (specialFolderPath("resources") & "/sound/background.wav") into tPath
               put "background" into tChannelName
               put "looping" into tType
               mobileSetSoundChannelVolume "background", sBackground ##diese Zeile hinzugefügt
            end if
            
            if fld "theValue_v4" > 2 then
               mobilePlaySoundOnChannel tPath, tChannelName, tType
               
               if fld "theValue_v4" < 2  then
                mobileStopSoundOnChannel tPath, tChannelName, tType
               end if
            end if
         else
            set the playloudness to sBackground
         end if
      end mouseDown
      
      on mouseMove x,y
         if not canMove then exit mouseMove
         put min(Bstop,max(Tstop,y)) into yLoc
         set loc of me to xLoc,yLoc-cY
         # Möglicherweise müssen Sie folgende Werte hinzufügen: xLoc und yLoc
         #, um den Wert fld an der gewünschten Stelle zu positionieren
         set the loc of fld "theValue_v4" to xLoc-40,yLoc-cY+10
         # Die folgende Zeile berechnet den Wert, den Sie möchten
         # wird auch für die tatsächliche Funktion des Schiebereglers verwendet
         put round((yLoc-Tstop)*tScaleFactor)+topValue into fld "theValue_v4"
         put round((yLoc-Tstop)*tScaleFactor)+topValue into sBackground ##diese Zeile hinzugefügt
         if the environment = "mobile" then
            ## Der Channel Name in Anführungszeichen, die Variable noiseOne aber nicht!
            mobileSetSoundChannelVolume "background", sBackground ##diese Zeile hinzugefügt
         else
            set the playloudness to sBackground
         end if
      end mouseMove
      
      on mouseUp
         put false into canMove
      end mouseUp
      
      on mouseRelease
         mouseUp
      end mouseRelease
    • #19146
      Klaus Major
      Verwalter

      OK, ein paar Fragen:
      1. Das hier:

      if (mobileSoundOnChannel(„background“) is empty) or (mobileSoundOnChannel(„background“) is „could not find channel“)

      ist doch schon ein Grund den Sound zu starten, oder nicht?
      2. Was steht in Feld „theValue_v4“ und warum? 🙂
      3. Was passiert, wenn im Feld genau 2 drinsteht?
      Dieser Fall wird nicht abgedeckt!

    • #19148
      akrages
      Teilnehmer

      Hallo,
      Zur ersten Frage: Als einen Aufruf zum Starten des Sounds habe ich diese if-Abfrage noch gar nicht interpretiert.
      Zur zweiten Frage: In „theValueV4“ steht der Lautstärkepegel (1-100) je nach Slider-Stellung.
      Zur dritten Frage: Es passiert das gleiche, dass bei dem Wert 1 passiert. Gar nichts.

    • #19149
      akrages
      Teilnehmer

      Also zur ersten Frage noch folgendes:
      Eigentlich wir ja nur geschaut ob es einen Channel „background“ gibt, und ob der mit einem Soundfile belegt ist und wenn nicht, dann wird er angelegt und mit einem Soundfile belegt, sowie der Wert für die Lautstärke mit angegeben.
      Das Soundfile selbst wird doch erst mit dem Aufruf: mobilePlaySoundOnChannel tPath, tChannelName, tType gestartet.
      Oder interpretiere ich das falsch?

      Außerdem ist mir aufgefallen, dass der Sound erst startet, wenn ich ein zweites mal den Slider berühre.
      Also bei einem zweiten mouseDown.

    • #19150
      Klaus Major
      Verwalter

      Meiner Meinung nach, sollte so die Logik stimmen.
      Bitte mal ausprobieren.

      on mouseDown
         # Geben Sie Ihren Startwert (oben) ein
         put 100 into topValue
         # FÜGEN SIE IHREN ENDWERT (UNTEN) EIN
         put 1 into bottomValue
         
         # ERHALTEN SIE DEN OFFSET DES KLICKPUNKTES UND DES ZENTRUMS DES BTN
         # Dies verhindert, dass der BTN springt, wenn Sie mit dem Ziehen beginnen
         put (the mouseV - item 2 of the loc of me) into cY
         
         # Die Zahl, die am Ende der nächsten 3 Zeilen addiert oder subtrahiert wird
         # dient dazu, die Position des Schiebereglers so zu ändern, dass er an der gewünschten Stelle stoppt
         put (the bottom of image "Vsliderbar4")-(the height of me/2)+cY +7 into Bstop
         put (the top of image "Vsliderbar4")+(the height of me/2)+cY -27 into Tstop
         put item 1 of the loc of image "Vsliderbar4" +9 into xLoc
         put (bottomValue-topValue)/(Bstop-Tstop) into tScaleFactor
         put true into canMove
         
         ## sBackground ist keine LOKALE Variable, daher hier noch nicht bekannt 
         ## und es wird somit einen ERROR geben!
         ## Daher:
         put fld "theValue_v4" into tLautstärke
         ## Sofern ich Dich richtig verstanden habe.
         
         ## Verschachtelte IF THEN vermeiden
         if the environment <> "mobile" then
            set the playloudness to tLautstärke
            
            ## Auf dem Desktop oder in der IDE sind wir jetzt fertig!
            exit mousedown
         end if
         
         ## Initialisierung des Sounds:
         put (specialFolderPath("resources") & "/sound/background.wav") into tPath
         put "background" into tChannelName
         put "looping" into tType
         
         ## Warum nicht 0 nehmen, wenn bei 1 ja noch etas zu hören ist?
         if fld "theValue_v4" > 0 then
      
            ## Nur starten, wenn er nicht schon läuft:
            if mobileSoundChannelStatus("background") <> "playing" then
              mobilePlaySoundOnChannel tPath, tChannelName, tType
            end if
         else
            mobileStopSoundOnChannel tPath, tChannelName, tType
         end if
      end mouseDown
    • #19152
      akrages
      Teilnehmer

      So, gerade ausprobiert.
      Folgendes Ergebnis:
      App startet, Sound ist off
      jetzt bewrühre ich den Slider und bewege ihn von 1 (kleinester Wert) aufwärts.
      Ergebnis: Sound ist diesmal sofort auf On, also zu hören und lässt sich auch in der Lautstärke regeln.
      Lediglich wenn ich ihn wieder herunterregle ist er auf Level 1 immer noch leise zu hören.

    • #19153
      akrages
      Teilnehmer

      Obiges gilt für das Handy.

      In der IDE, funktioniert der SliderC4 jetzt gar nicht.
      D.h. Ich kann ihn zwar bewegen und der Wert im Feld „theValue_v4“ änert sich aber es ist nichts zu hören.

    • #19154
      Klaus Major
      Verwalter

      In Deinem Skript steht nirgendwo ein Befehl, der den Sound überhaupt in der IDE abspielt!
      Weder mit „play ac xyz“ noch mit einem Player Objekt, Du setzt da nur die Lautstärke!?

      Oder hab ich was verpasst!

    • #19156
      akrages
      Teilnehmer

      Stimmt.
      Habe ich jetz eingefügt.

    • #19157
      Klaus Major
      Verwalter

      Und?

      Lass Dir doch nicht alles aus der Nase ziehen! 😀

    • #19159
      akrages
      Teilnehmer

      Sorry, aber ich bin echt am verzweifeln.
      Also folgende Änderung im Script:
      von ##`Verschachtelte IF THEN vermeiden
      if the environment <> „mobile“ then
      set the playloudness to tLautstärke`
      nach ##`Verschachtelte IF THEN vermeiden
      if the environment <> „mobile“ then
      play audioClip „background.wav“ ##sBackground
      set the playloudness to sBackground`

      Ergebnis: In der IDE Ton ist nur zu hören, nachdem ich ein zweites mal auf den Slider klicke.
      Move ich den Slider erneut, muss ich nochmal auf ihn klicken, damit sich die Lautstärke ändert usw.

      Und am Mobile ist nach klick auf den Slider, der Sound auf voller Lautstärke und lässt sich nicht regeln. ??????????

    • #19160
      Klaus Major
      Verwalter

      Bitte noch einmal Dein ganzes Skript posten!
      Aber wie gesagt, mit „play ac xyz“ kannst Du nur EINEN Sound zu selben Zeit abspielen in der IDE!

      Und:

      ...
      if the environment <> "mobile" then
      play audioClip "background.wav" ##sBackground
      
      ## sBackground existiert nicht im "mousedown" Handler, bitte lies doch meine Kommentare!
      set the playloudness to sBackground
      ...
    • #19164
      akrages
      Teilnehmer

      Die Lese ich.
      Hab nur aus lauter Verzweiflung dein tLautstärke mal probehalber wieder in sBackground geändert, weil es ja im mouseMove noch so angegeben ist/war, (wurde von mir jetzt auch in tLautstärke geändert) und auch bisher bei mir immer so geheißen hat.
      Und ja, ich weiß, dass ich in der IDE nur einen Sound zur selben Zeit abspielen kann.
      Es spielt ja auch sonst keine zweiter Sound.

      Hier nun nochmal das geamte Script vom „SliderC4“

      local topValue,tScaleFactor,Bstop,Tstop,xLoc,cY,canMove,
      
      on mouseDown
         # Geben Sie Ihren Startwert (oben) ein
         put 100 into topValue
         # FÜGEN SIE IHREN ENDWERT (UNTEN) EIN
         put 1 into bottomValue
         
         # ERHALTEN SIE DEN OFFSET DES KLICKPUNKTES UND DES ZENTRUMS DES BTN
         # Dies verhindert, dass der BTN springt, wenn Sie mit dem Ziehen beginnen
         put (the mouseV - item 2 of the loc of me) into cY
         
         # Die Zahl, die am Ende der nächsten 3 Zeilen addiert oder subtrahiert wird
         # dient dazu, die Position des Schiebereglers so zu ändern, dass er an der gewünschten Stelle stoppt
         put (the bottom of image "Vsliderbar4")-(the height of me/2)+cY +7 into Bstop
         put (the top of image "Vsliderbar4")+(the height of me/2)+cY -27 into Tstop
         put item 1 of the loc of image "Vsliderbar4" +9 into xLoc
         put (bottomValue-topValue)/(Bstop-Tstop) into tScaleFactor
         put true into canMove
         
         ## sBackground ist keine LOKALE Variable, daher hier noch nicht bekannt 
         ## und es wird somit einen ERROR geben!
         ## Daher:
         put fld "theValue_v4" into tLautstärke
         ## Sofern ich Dich richtig verstanden habe.
         
         ## Verschachtelte IF THEN vermeiden
         if the environment <> "mobile" then
            set the playloudness to tLautstärke
            
            ## Auf dem Desktop oder in der IDE sind wir jetzt fertig!
            exit mousedown
         end if
         
         ## Initialisierung des Sounds:
         put (specialFolderPath("resources") & "/sound/background.wav") into tPath
         put "background" into tChannelName
         put "looping" into tType
         
         ## Warum nicht 0 nehmen, wenn bei 1 ja noch etas zu hören ist?
         if fld "theValue_v4" > 0 then
            
            ## Nur starten, wenn er nicht schon läuft:
            if mobileSoundChannelStatus("background") <> "playing" then
               mobilePlaySoundOnChannel tPath, tChannelName, tType
            end if
         else
            mobileStopSoundOnChannel tPath, tChannelName, tType
         end if
      end mouseDown
      
      on mouseMove x,y
         if not canMove then exit mouseMove
         put min(Bstop,max(Tstop,y)) into yLoc
         set loc of me to xLoc,yLoc-cY
         # Möglicherweise müssen Sie folgende Werte hinzufügen: xLoc und yLoc
         #, um den Wert fld an der gewünschten Stelle zu positionieren
         set the loc of fld "theValue_v4" to xLoc-40,yLoc-cY+10
         # Die folgende Zeile berechnet den Wert, den Sie möchten
         # wird auch für die tatsächliche Funktion des Schiebereglers verwendet
         put round((yLoc-Tstop)*tScaleFactor)+topValue into fld "theValue_v4"
         put "theValue_v4" into tLautstärke ##diese Zeile hinzugefügt
         ##if the environment = "mobile" then
            #### Der Channel Name in Anführungszeichen, die Variable noiseOne aber nicht!
            ##mobileSetSoundChannelVolume "background", sBackground ##diese Zeile hinzugefügt
         ##else
            ##put fld "theValue_v4" into tLautstärke
            ##set the playloudness to tLautstärke ##sBackground
         ##end if
      end mouseMove
      
      on mouseUp
         put false into canMove
         ##if fld "theValue_v4" <= 2  then
            ##stop playing audioClip "background.wav"
         ##else
            ####if fld "theValue_v4" >= 3  then
            ##play audioClip "background.wav" sBackground
         ##end if
         ####end if
      end mouseUp
      
      on mouseRelease
         mouseUp
      end mouseRelease
    • #19189
      akrages
      Teilnehmer

      Hallo.
      Ich habe es geschafft. (Jubel)
      Der Lautstärkeregler arbeitet so wie er soll.
      Liegt der Level bei 1, dann stoppt die Wiedergabe.
      Liegt der Level zwischen > 0 und < 2 dann startet die Wiedergabe.

      Erreicht habe ich dieses Ergebnis, durch folgende Herangehensweise.
      Zunächst zwei Button erstellt, einer zur Wiedergabe und einer für Stop.
      In jeden dieser Button den entsprechenden on mouseUp – Befehl eingefügt und als diese beiden Button dann funktionierten, war es nur noch ein Kinderspiel. Zur Wiedergabe nutze ich den on mouseDown – Befehl und zum Stoppen den on mouseUp – Befehl.

      Trotzdem vielen Dank für deine Hilfe.

Ansicht von 61 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.