Sound nach zufälliger Länge stoppen und zweiten Sound abspielen

  • Ich tüftele derzeit an foldendem Problem:


    Ich möchte einen Sound (Knistern) abspielen und nach eine zufälligen
    Länge (3 - 10 Sek.) einen zweiten Sound abspielen (Explosion).


    Das Script funktioniert soweit auch unter Firefox. Einige Geräte (z.B.
    kindle fire) reagieren jedoch merkwürdig. Sie spielen zwar das Knistern
    ab, die anschließende Explosion aber nicht. Wenn allerdings zunächst der
    Sound der Explosion abgespielt wurde und anschließend das Knistern mit
    der anschließenden Explosion, dann funktioniert es. Ich bin ratlos.


    Mein Script:

  • Das liegt sehr wahrscheinlich an dem Kindle und der schwachen resourccen und eventuell einer nicht kompletten Unterstützung der HTML5 Audio API. Hier siehst du wer was unterstützt.: http://caniuse.com/#feat=audio-api


    Den Kindle würde ich an deiner Stelle einfach ignorieren, außer er ist dein zielgebiet, dann einfach den sound einmal lautlos abspielen und dann gehts ab.. ^^

  • Zielgebiet ist nicht der Fire aber Smartphones. Hier soll es auf jeden Fall funktionieren. Ich habe das Script jetzt einmal auf Safari getestet - hier passiert gar nichts. Chrome funktioniert. Ich habe die Befürchtung, dass es auf einem iPhone dann auch nicht funktionieren wird...

  • Ich habe jetzt noch verschiedene Seiten mit Beispielen zum Thema HTML5 und Audio angesteuert. Der Safari (>5) stellt nichts da... bravo. Ich dachte nach den über 5 Jahren Entwicklungsgeschichte, hätten wir endlich einen flächendeckenden HTML5-Bestand in den aktuellen Versionen - Pustekuchen. Sehr enttäuschend...

  • Und wo soll das Präfix hin? Ich kenne die Arbeit mit dem Präfix nur von CSS. Macht man das auch bei HTML?
    <-webkit-audio /> im HTML-Tag oder wie soll das aussehen?
    Kindle Fire und iOS machen es beide so, dass sie den zweiten Sound nicht spielen. Die Idee, den ersten Sound zunächst automatisiert abzuspielen hatte ich auch schon, ABER leider funktioniert das nicht. Über body onload z.B. wäre ja eine charmante Sache, jedoch wird kein Sound abgespielt. Offensichtlich unterdrücken die Browser, dass Sounds ohne User-Aktion abgespielt werden. Ist ja auch in vielen Fällen sinnvoll so - ich möchte auch nicht auf eine Seite kommen und mich durch ein Geräusch erschrecken lassen. Für meine Applikation ist es allerdings sehr restriktiv. Gibt es da einen Workaraound? jQuery oder irgendetwas anderes?

  • Also audio2.play(); hat keine Auswirkung?
    Sieh mal nach, ob in der Liste

    Zitat


    Explosion canplay (...)
    Explosion canplaythrough (...)


    steht.
    Das gibt ja an, ob Explosion abgespielt bzw komplett "durchgespielt" werden kann.

  • Ja - in der Ausgabe sind die Einträge "canPlay" und "canPlayThrough" zu finden.
    ...
    Knistern - timeupdate
    knistern - timeupdate
    explosion - seeking
    explosion - seeked
    knistern - pause
    knistern - stalled
    So endet die Liste...

  • Sind zu finden - aber wo? Stand das also bei Explosion?


    Und:


    Das ist "ungenau"
    Da gibts Objecte

    Zitat

    Knistern


    und

    Zitat

    knistern


    und

    Zitat

    explosion


    8|
    Also auf einmal 3 Dateien?
    Mein Script (so wie es war) gab den Namen per id aus (ev.target.id) - also zB

    HTML
    <audio id="Explosion" ...


    Demnach sind da jetzt

    HTML
    <audio id="Knistern " ...
    <audio id="knistern " ...
    <audio id="explosion " ...


    Audioobjecte im Script?


    Poste am besten mal die gesamte Eventlist - also alles, was das Script ausgibt.


    EDIT:
    btw

    Zitat

    knistern - stalled


    bedeutet

    Zitat

    Fires when the browser is trying to get media data, but data is not available


    Also konnte knistern nicht geladen werden. (denk ich)

  • Entschuldigung. Ich habe nicht bedacht, dass JS casesensitiv arbeitet. Natürlich gibt es nicht mehrere Objekte, sondern Knistern und Explosion... blöd von mir, für diese Verwirrung zu sorgen.
    Die letzten Einträge sind:
    ...
    Explosion - seeking
    Explosion - seeked
    Knistern - paused


    Explosion - loadeddata
    Explosion - canplay
    Explosion - canplaythrough
    wird noch vor dem Play-Befehl von Knistern ausgegeben.


    Die ganze Liste posten ist nicht so einfach, weil ich kein Copy&Paste mit dem Fire auf die Konsole machen kann (oder nicht weiß, wie das funktioniert... blöder Silk-Browser...)

  • ok.
    Naja, So wies aussieht sollte Explosion wohl laufen.


    Hast Du die controls auf den <audio...> Elementen gesetzt? Wenn ja - "wackelt" da was bei Explosion (der Regler für die Position / Zeitanzeige)?


    Was mir jetzt noch einfällt wäre:
    - andere Audiodatei testen (am besten auf die Schnelle 2 x Knistern nutzen)
    - bei Explosion verfolgen, was alles ausgegeben wird (evtl steht da "stalled", "suspend", "error", "abort", "waiting" oder gar "pause"->NACH->"play")
    - steht denn da überhaupt "play" bei Explosion?
    - testweise mal Explosion eine Sekunde später ausführen lassen:

    JavaScript
    timeout = setTimeout(
                function(){
                    audio2.pause(); // be sure not already playing
                    audio2.currentTime = 0; // be sure to start from pos 0
                    audio2.play();
                    audio1.pause();
                }, zufall+1              // <---------- +1 is neu
            );


    Sonst wüsste ich im Moment auch nicht warum das ding nicht will :D


    EDIT:
    https://amazonsilk.wordpress.c…bits/silk-media-handling/

    Zitat

    Silk fully supports the HTML5 audio tag so that playback occurs in the browser.
    [...]
    Playback of multiple streams works just as you’d expect.
    [...]
    Currently, Silk doesn’t support background audio, meaning that audio playback is paused when a tab loses focus.


    Das klingt nach was, nach dem man suchen kann.
    Setz mal das hier mit ein


    Dann guck mal, ob der Tab nach Knistern auf blur - also nicht mehr im Focus ist.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!