Reiner Wirth: Sound in javascript aufrufen

Guten Tag,

ich würde gern aus einer javascript-Funktion ein Soundfile abspielen, die Datei liegt im selben Ordner wie die geladene Seite und heißt z.B musik.html;
in HTML habe ich einfach ungefähr so geschrieben:

<a name="Musikbeispiel"></a><area coords="324,259,24" shape="circle" href="musik.html" target="soundfrm">

dann wurde die .wav-Datei in musik.html im frame "soundfrm" gespielt.

Die .html-Quelle sieht so aus:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML><HEAD> <TITLE>soundframe</TITLE></HEAD>
<BODY TEXT="#666666" BGCOLOR="#F5EECB" LINK="#0099CC" VLINK="#006699" ALINK="#CC0000">

<embed
    name="aktsound"
    width="140"
    height="38"
    src="file:03_Melisande.wav"
    type="video/quicktime"
    autoplay="true"
    controller="true"
    enablejavascript="true"        //
    pluginspage="http://www.apple.com/quicktime/download/index.html "kioskmode="true">
    </embed>

</BODY>
</HTML>

ich habe (leider ohne Erfolg) schon probiert:

location.href="musik.html";

So einfach scheint es nicht zu sein, da hier auch noch das Ziel fehlt.

Für einen Tip wäre ich riesig erfreut

Gruß Reiner

  1. Hallo, bitte lasst mich nicht hängen!

    s.o.

    Gruß

    1. Liebe Gemeinde,

      tut mir echt leid mit dem Doppleposting, vielleicht erbarmt sich ja doch einer.

      Gruß Reiner

  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">

    Naja, das ist nicht mehr zeitgemäß.

    <embed

    Du kennst selfhtml?

    http://de.selfhtml.org/html/multimedia/netscape.htm

    Aus heutiger Sicht gilt für dieses Element jedoch noch stärker als für das Element zum Einbinden von Java-Applets: Es ist ein Relikt und sollte allmählich fallengelassen werden. Denn im Unterschied zum applet-Element hat das embed-Element nie zum HTML-Standard gehört. Es wird hier noch beschrieben, weil es heute leider immer noch sehr verbreitet ist und beispielsweise bei Netscape 4.x die einzig sinnvolle und halbwegs funktionierende Möglichkeit ist, Multimedia einzubinden.

    name="aktsound"
        width="140"
        height="38"
        src="file:03_Melisande.wav"

    Was soll das file: hier bedeuten, wo hast du das her?

    type="video/quicktime"

    Da stimmt do einiges nicht

    ich habe (leider ohne Erfolg) schon probiert:

    location.href="musik.html";

    Den zusammenhang mit dem obigen verstehe ich nicht.

    Für einen Tip wäre ich riesig erfreut

    Du kennst selfhtml?
    http://de.selfhtml.org/html/multimedia/index.htm

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Hallo Struppi, hallo Reiner,

      src="file:03_Melisande.wav"

      Was soll das file: hier bedeuten, wo hast du das her?

      type="video/quicktime"

      Da stimmt do einiges nicht

      Nach meiner Erfahrung gibt es neben dem BGSOUND-Element für den IE und neuere Opera-Browser nichts Besseres, als ein WAV unter Angabe des falschen MIME-Types "video/quicktime" einzubinden, wenn man Loop-Sounds ohne Schrecksekunde am Ende und vor Wiederanfang "rund" abspielen lassen will.

      Wirklich runde Loops schafft nämlich auch kein Flashplayer.

      Mit deiner Anmerkung zu "file:" und dem Sonstigen hast du freilich Recht und wenn Reiner das eliminiert, wird es schon auch klappen. @Reiner: Sonst, bei Problemen frag doch nochmal nach an dieser Stelle.

      Gruß Gernot

      1. type="video/quicktime"

        Da stimmt do einiges nicht

        Nach meiner Erfahrung gibt es neben dem BGSOUND-Element für den IE und neuere Opera-Browser nichts Besseres, als ein WAV unter Angabe des falschen MIME-Types "video/quicktime" einzubinden, .....

        Ah danke, das war mir neu.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
      2. Hallo Struppi, hallo Reiner,

        src="file:03_Melisande.wav"

        Was soll das file: hier bedeuten, wo hast du das her?

        type="video/quicktime"

        Da stimmt do einiges nicht

        Nach meiner Erfahrung gibt es neben dem BGSOUND-Element für den IE und neuere Opera-Browser nichts Besseres, als ein WAV unter Angabe des falschen MIME-Types "video/quicktime" einzubinden, wenn man Loop-Sounds ohne Schrecksekunde am Ende und vor Wiederanfang "rund" abspielen lassen will.

        Wirklich runde Loops schafft nämlich auch kein Flashplayer.

        Mit deiner Anmerkung zu "file:" und dem Sonstigen hast du freilich Recht und wenn Reiner das eliminiert, wird es schon auch klappen. @Reiner: Sonst, bei Problemen frag doch nochmal nach an dieser Stelle.

        Gruß Gernot

        src="file:03_Melisande.wav" ist einfach das zugehörige wav.

        Dieses Erstaunen verstehe ich gar nicht so recht. Jedenfalls lief diese "Veranstaltung" ja bisher klaglos in HTML auf allen Browsern. Ich hab dort aber halt href=… und target=soundfrm angegeben

        Meine eigentliche Frage bezog sich ja auf eine javascript-Formulierung, nach der ich gesucht habe für einen link in ein frame, in dem der Player läuft. Vielleicht habe ich mich unklar ausgedrückt.

        Die hab ich jetzt:

        parent.soundfrm.location.href ="../Sound1/03_Melisande.html";

        heißt sie, mein frame heißt "soundfrm" in der der player - für alle sicht- und steuerbar - liegt.

        Jedenfalls allen Dank, die mir geholfen haben.

        Vielleicht hatte ich ja das Glück des «blutiger» Anfängers.

        1. src="file:03_Melisande.wav" ist einfach das zugehörige wav.

          Dieses Erstaunen verstehe ich gar nicht so recht. Jedenfalls lief diese "Veranstaltung" ja bisher klaglos in HTML auf allen Browsern. Ich hab dort aber halt href=… und target=soundfrm angegeben

          Ein Protokoll, das soll file: hier wohl sein, sieht so aus file://....
          kann aber natürlich sein, dass der IE das schluckt.

          Meine eigentliche Frage bezog sich ja auf eine javascript-Formulierung, nach der ich gesucht habe für einen link in ein frame, in dem der Player läuft. Vielleicht habe ich mich unklar ausgedrückt.

          Die hab ich jetzt:

          parent.soundfrm.location.href ="../Sound1/03_Melisande.html";

          Wenn das die Lösung ist, war deine Frage falsch, bzw. konnte man nicht auf die Lösung durhc die Frage kommen.

          heißt sie, mein frame heißt "soundfrm" in der der player - für alle sicht- und steuerbar - liegt.

          solange installiert, also war deine Frage, wie greife ich auf Frames zu. Da kann man immer wieder nur diesen Artikel empfehle http://aktuell.de.selfhtml.org/artikel/javascript/fensterzugriff/

          Struppi.

          --
          Javascript ist toll (Perl auch!)
          1. Hallo Struppi,

            heißt sie, mein frame heißt "soundfrm" in der der player - für alle sicht- und steuerbar - liegt.

            solange installiert, also war deine Frage, wie greife ich auf Frames zu. Da kann man immer wieder nur diesen Artikel empfehle http://aktuell.de.selfhtml.org/artikel/javascript/fensterzugriff/

            Nachdem Reiner ja ohnehin auf das Quicktime-Plugin vertraut, könnte er die Soundsteuerung auch ganz ohne Frames und ohne HTML-Seiten bewirken, die nichts anderes als den Sound enthalten.

            @Reiner: Das ginge ebenso über Flash, womit du auch ein größeres Publikum erreichen würdest; das Flash-Plugin haben deutlich mehr Besucher deiner Seite installiert als das Quicktime-Plugin.

            Flash taugt halt nur nicht, wenn es sich bei deinem Sound um einen Loop handelt, den du "rund" abspielen willst.

            Auf eigene Gefahr: 88KB-Loop

            Gruß Gernot

            1. Hallo nochmal,

              Bezüglich deiner Nachfrage, für die du leider [http://forum.de.selfhtml.org/my/?t=137905&m=895833@title=ein neues Posting] eröffnet hast:

              Kann man eine wav-Datei, die mit embed in einem »player-Container« liegt per javascript austaschen?

              Ja, das kann man im IE in der hier schon beschiebenen Weise, indem man in dem entsprechenden Frame das src-Attribut des BGSOUND-Elements austauscht und in Quicktime, indem man die URL des "Films" mit der proprietären Quicktime-Methode SetURL() verändert.

              http://developer.apple.com/documentation/QuickTime/REF/QT41_HTML/QT41WhatsNew-74.html
              Das könnte dann ungefähr so aussehen:

                
              function songChange() {  
                   if (document.all && !window.opera)  
                       document.all.msaudio.src="anderes.wav"; // BGSOUND-Element  
                   else  
                       document.embeds['luv'].SetURL("anderes.wav");  
              }  
              
              

              Wie man aus einem Frame heraus einen anderen Frame anspricht, da hat dir Struppi ja bereits einen interessanten Link gegeben:

              https://forum.selfhtml.org/?t=137774&m=895580

              Gruß Gernot

              1. Wie man aus einem Frame heraus einen anderen Frame anspricht, da hat dir Struppi ja bereits einen interessanten Link gegeben:

                https://forum.selfhtml.org/?t=137774&m=895580

                Gruß Gernot

                das muss ich doch gar nicht, oder überseh ich da was?

                Es handlet sich doch immer nur um den frame soundfrm

                Danke für den Weg

                Reiner

                1. das muss ich doch gar nicht, oder überseh ich da was?

                  Was musst du nicht?
                  Ich hab mittlerweile den Überblick verloren, was deine Frage ist?

                  Struppi.

                  --
                  Javascript ist toll (Perl auch!)
                  1. das muss ich doch gar nicht, oder überseh ich da was?

                    Was musst du nicht?
                    Ich hab mittlerweile den Überblick verloren, was deine Frage ist?

                    Struppi.

                    Entschuldige Struppi und auch Gernot, aber habt auch gleichzeitig Dank dafür, daß ihr immer noch mit mir redet. Ich versuch mal, ein wenig den Hintergrund meiner »Baustelle« zu erklären.

                    Angefangen hat alles mir einer reinen HTML-Seite, die wir vor 8 Jahren durch eine Firma haben herstellen lassen. Deshalb auch die für euch etwas antiquiert wirkenden embeds und player.

                    Da das Institut kein Geld hat, habe ich mich selbst an die Arbeit gemacht, die Seite dahingehend zu erweitern, zusätzlich zu den Sounds die zugehörigen Notenbeispiele sichtbar zu machen. Die ganze Site besteht aus 4 sehr großen html-Seiten (ca 9000 Pixels hoch), was aber kein Problem darstellt. Nun habe ich mehr als 100 wav-Files und ebensoviele jpg-Files, die je nachdem ob Einfach oder Doppelklick einmal nur abgespielt werden (Einfachklick) oder deren Noten gezeigt werden sollen (Doppelklick).

                    Das Thema Einfach- Doppelklick müssen wir hier jetzt nicht diskutieren. Es funktioniert, obwohl viele Menschen nicht einsehen können, warum ich das so mache.

                    In der obersten Seite habe ich neben dem großen Hauptframe für die großen html-Seiten noch einen Frame soundfrm (hier läuft der player zum Start, Stop etc und ein Frame zur Auswahl der Beispiele.

                    Früher (zum Zeitpunkt der Entwicklung durch die Firma) gab es nur die Soundfiles und noch keine Möglichkeit, auch Notentext zu zeigen. Deshalb hatte die Firma für jedes sound1.wav ein sound1.html, sound2.wav ein sound2.html vorgesehen usw. usw.

                    durch href="sound1.wav" target="soundfrm" wurde der Sound 1 abgespielt, durch href="sound2.wav" target="soundfrm" ser Sound 2 usw.  Die Player-htmls waren fertig und ich wollte sie weiter verwenden

                    Durch Struppis geniales mouse_pos javascipt kam ich auf die Idee, die Notentext-jpgs als Ebenen (div-tags) zu definieren und mit mouse_pos an die jeweilige Klickposition zu ziehen, durch weitere events kann ich diese Ebenen wieder unsichtbar werden lassen (ondblclick) und auch verschieben (onmousemove).

                    Durch die Erweiterung kam javascript ins Spiel.

                    Es läuft alles wunderbar, ich möchte eigentlich jetzt nur noch als i-Tüpfelchen, alle doppelt und hundertfachen html-Dateien rauswerfen und jeweils nur eine gewünschte wav-Datei in das Dokument sound.html laden und zwar mit javascript und einer Variablen z.B. aktSound und das kann ich eben noch nicht. Ich könnte auch so leben, aber man könnte dadurch viele Dateien einsparen.

                    Dass ich neue threads im Forum eröffnet habe, bitte ich zu entschuldigen, ich hatte keine Ahnung, dass ihr euch immer noch mit meinem ersten thread beschäftigt.

                    Vielen Dank für eure Geduld.

                    Reiner Wirth aus Berlin

                    1. Es läuft alles wunderbar, ich möchte eigentlich jetzt nur noch als i-Tüpfelchen, alle doppelt und hundertfachen html-Dateien rauswerfen und jeweils nur eine gewünschte wav-Datei in das Dokument sound.html laden und zwar mit javascript und einer Variablen z.B. aktSound und das kann ich eben noch nicht. Ich könnte auch so leben, aber man könnte dadurch viele Dateien einsparen.

                      Das beispiel von Gernot zeigt doch wie du dem Plugin eine andere Soundatei zuweisen kannst. Du musst halt nur den richtigne Frame ansprechen.

                      Also in etwa so:
                      if (bgsndAvail) parent.soundfrm.bgsnd.src=mySong;
                      else parent.soundfrm.document.embeds['luv'].SetURL(mySong);

                      (Kann auch sein, dass es parent.soundfrm.document.bgsnd.src heißen muss, bin grad zu faul zum testen)

                      Dass ich neue threads im Forum eröffnet habe, bitte ich zu entschuldigen, ich hatte keine Ahnung, dass ihr euch immer noch mit meinem ersten thread beschäftigt.

                      So lange bis das Problem gelöst ist ;-)

                      Struppi.

                      --
                      Javascript ist toll (Perl auch!)
                    2. Hallo Reiner,

                      Angefangen hat alles mir einer reinen HTML-Seite, die wir vor 8 Jahren durch eine Firma haben herstellen lassen. Deshalb auch die für euch etwas antiquiert wirkenden embeds und player.

                      In den letzten acht Jahren hat sich technisch einiges getan...
                      WAV-Dateien lassen sich meines Wissens nicht streamen und müssen immer erst komplett geladen werde, bevor man sie abspielen kann. Auch aus Traffic-Gründen würde ich da, wenn du Sound nicht loopen willst, sondern nur einfach abspielen möchtest, eher einmal auf das schmalere Format MP3 umsatteln.

                      Da das Institut kein Geld hat, habe ich mich selbst an die Arbeit gemacht, die Seite dahingehend zu erweitern, zusätzlich zu den Sounds die zugehörigen Notenbeispiele sichtbar zu machen. Die ganze Site besteht aus 4 sehr großen html-Seiten (ca 9000 Pixels hoch), was aber kein Problem darstellt. Nun habe ich mehr als 100 wav-Files und ebensoviele jpg-Files, die je nachdem ob Einfach oder Doppelklick einmal nur abgespielt werden (Einfachklick) oder deren Noten gezeigt werden sollen (Doppelklick).

                      Gerade auch aus diesem Grund empfiehlt sich Flash. In einen Flash-Film kannst du erstens ein MP3-File dynamisch (neu)laden und gleichzeitig auch noch synchronisiert mit dem Ablauf der Musik die Noten animiert von rechts nach links "fließen" lassen. (Das "liefe" dann also auch mit nur einer Notenleiter Höhe und ohne scrollen zu müssen.

                      Auch die Unterscheidung Doppel- und Einfachklick, die, soweit mir bekannt ist, nicht alle Browser in JavaScript beherrschen, könntest du mit Flash und ActionScript leichter leisten.

                      Schau dir doch auch mal den EMFF von Marc Reichelt an, wenn Flash und Actionscript für dich böhmische Dörfer sind.

                      Dabei, wie man mehrere solcher Flashplayer miteinander und mit Noteneinblendungen in HTML koordiniert, könnte dir mein Artikel zu LiveConnect zwischen JavaScript und ActionScript helfen.

                      Gruß Gernot

                      1. Gerade auch aus diesem Grund empfiehlt sich Flash. In einen Flash-Film kannst du erstens ein MP3-File dynamisch (neu)laden und gleichzeitig auch noch synchronisiert mit dem Ablauf der Musik die Noten animiert von rechts nach links "fließen" lassen. (Das "liefe" dann also auch mit nur einer Notenleiter Höhe und ohne scrollen zu müssen.

                        Hallo, lieber Gernot,

                        tatsächlich habe ich auch schon in Flash gearbeitet, es ist eine gute Idee siehe:

                        http://www.sim.spk-berlin.de/deutsch/forschung/multimedia.html

                        (diese Zeile als pflegeleichten link zu formatieren, kann ich mal wieder nicht, pardon)

                        Dort kannst Du auch in einem kleinen Beispiel sehen, was gemeint ist.
                        Es bedeutet nur nochmal viel Zeit in die Umarbeitung zu investieren, die ich im Moment nicht habe. Ich bin mit dem Ergebnis sehr zufrieden, das ich mit eurer Hilfe zustande gebracht habe. Es hat mir viel Spaß gemacht. Die Anwendung wir zunächst in einem Browser im kiosk-Modus (Mac mit Safari) im Museum laufen. Das kann dann in ein paar Tagen losgehen.

                        Vielen Dank nochmal, ihr habt mir sehr geholfen und ich bin begeistert, dass es so ein wunderbares Forum wie SELFHTML gibt.

                        Übrigens, darf ich die javascript-Funktion  mouse_pos von Struppi einfach verwenden?

                        Falls ich euch nicht zu sehr genervt habe, würde ich mich mal wieder mit einem neuen Problem melden.

                        Gruß aus Berlin

                        1. Übrigens, darf ich die javascript-Funktion  mouse_pos von Struppi einfach verwenden?

                          sicher.

                          Falls ich euch nicht zu sehr genervt habe, würde ich mich mal wieder mit einem neuen Problem melden.

                          wir haben gute Nerven hier ;-)

                          Struppi.

                          --
                          Javascript ist toll (Perl auch!)
                        2. Hallo Reiner,

                          tatsächlich habe ich auch schon in Flash gearbeitet, es ist eine gute Idee siehe:

                          http://www.sim.spk-berlin.de/deutsch/forschung/multimedia.html

                          (diese Zeile als pflegeleichten link zu formatieren, kann ich mal wieder nicht, pardon)

                          http://www.sim.spk-berlin.de/deutsch/forschung/showflash.htm

                          Schau doch mal in diesem Posting im Eingabefeld für den Antworttext (wie ich es gemacht habe).

                          So eine mit der Musik synchronisierte Notenanimation würde freilich bei klassischer Musik mit ihren unterschiedlichen Tempi ziemlich aufwendig.
                          Bei einem im Takt auf die Nanosekunde immer gleich schnell ablaufenden Diskogedudel wäre es hingegen sehr einfach:

                          Mit Actionscript ein MP3-File laden (Konvertierung aus WAV ist einfach, dafür gibt es auch kostenlose Tools, möglicherweise können das auch CD-Brenn-Programme.)

                          Dann Sound.position und Sound.duration ins Verhältnis setzen und das Notenband in einem in einer Schleife zwischen zwei Frames (Flash-Einzelbildern) ablaufenden Film immer wieder neu so positionieren, dass die erste Note am Anfang der Musik und die letzte Note am Ende ebenfalls im Anzeigebereich angezeigt wird; dazwischen jeweils um das Verhältnis von Sound.position und Sound.duration im Bezug auf die Länge des Notenbandes nach links versetzt.

                          Wie gesagt, bei längeren klassischen Musikstücken würde es wahrscheinlich haarig: Da müsstest du dann zuerst die Millisekundenwerte der Tempiwechsel auslesen, entsprechend die Breite des Notenbandes für diesen Abschnitt und dann zusätzlich mit dem Verhältnis von Sound.position zur Dauer der einzelnen Abschnitte mit unterschiedlichen Tempi die Geschwindigkeit dort jeweils einzeln regeln.

                          Gruß Gernot