SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Mozilla Audio Data API

Martin Ruprecht I 14. April 2011




                                   © Mayflower GmbH 2011
Firefox 4 only!
                  Mayflower GmbH I 2
<audio>

          Mayflower GmbH I 3
Beispiel



<audio id="ap" src="t1.ogg" controls="true"></audio>




I Unterstützt *.wav und *.ogg
I Security: Musikdatei auf gleichem Server!

 Quelle: https://developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements




                                                                                         Mayflower GmbH I 4
+
   <audio>

                  =
Zugriff und Erzeugen von Audio-Rohdaten
                                  Mayflower GmbH I 5
audio = document.getElementById( ' ap ' );



I   Functions *
    · audio.load();
    · audio.play();
    · audio.pause();
    · audio.mozSetup();
    · audio.mozWriteAudio();
    · audio.mozCurrentSampleOffset();


I   * nicht vollständig

I   Quelle: https://developer.mozilla.org/En/HTML/Element/Audio




                                                                  Mayflower GmbH I 6
audio.mozSetup();



I mozSetUp(channels, sampleRate)
   ·Übergabeparameter:
      Anzahl der Kanäle, z.B. 2 bei Stereo
      Abtastfrequenz in Hz, z.B. 44100
   ·Muss vor mozWriteAudio bzw. mozCurrentSampleOffset
    aufgerufen werden




                                                         Mayflower GmbH I 7
audio.mozWriteAudio();



I mozWriteAudio(buffer)
   ·Wird nach mozSetup() aufgerufen
   ·Übergabeparameter:
      buffer (Rohdaten, gleiches Format wie FrameBuffer)
   ·Erzeugt die Audio-Daten
   ·Gibt die Anzahl der bereits erzeugten Samples zurück




                                                            Mayflower GmbH I 8
audio.mozCurrentSampleOffset();



I mozCurrentSampleOffset()
   ·Liefert die aktuelle Position (der Samples) des Audiostreams




                                                                   Mayflower GmbH I 9
audio = document.getElementById( ' ap ' );



I    Properties *
     · audio.currentSrc
     · audio.volume
     · audio.duration
     · audio.currentTime
     · audio.mozChannels
     · audio.mozSampleRate
     · audio.mozFrameBufferLength
I * nicht vollständig

I    Quellen:
     https://developer.mozilla.org/En/HTML/Element/Audio
             https://dev.mozilla.jp/localmdc/localmdc_2212.html


                                                                  Mayflower GmbH I 10
audio.mozChannels



I   Anzahl der genutzten Kanäle
I   Mögliche Werte:
    ·1 Mono
    ·2 Stereo
    ·6 Surround Sound 5.1




                                  Mayflower GmbH I 11
audio.mozSampleRate



I   Samplingrate oder Abtastfrequenz
I   Bsp.:
    ·44,1 kHz für CD Qualität (44100 Hz)




                                           Mayflower GmbH I 12
audio.mozFrameBufferLength



I   Anzahl der Samples in allen Kanälen die genutzt
    werden um die Audio-Daten zu empfangen.
I   reine Information zu Beginn
I   Bsp:
    ·2048 (1024 pro Kanal bei Stereo)




                                                      Mayflower GmbH I 13
audio = document.getElementById( ' ap ' );



I   Events *
    ·loadedmetadata
    ·timeupdate
    ·pause
    ·play
    ·ended
    ·MozAudioAvailable
    ·
I   * nicht vollständig

I   Quelle: https://developer.mozilla.org/En/HTML/Element/Audio




                                                                  Mayflower GmbH I 14
MozAudioAvailable



I MozAudioAvailable
    ·
    Wird gefeuert wenn genügend Samples decodiert wurden
I audio.addEventListener('MozAudioAvailable', _someFct_, false);
    ·Übergabeparameter an _someFct_:
      FrameBuffer (Rohdaten, als Float32Array)
      Time


I Quelle: https://developer.mozilla.org/en/JavaScript_typed_arrays




                                                                     Mayflower GmbH I 15
… jetzt aber mal los




      Demo!
                       Mayflower GmbH I 16
Links



I http://haptic-data.com/sketches/html5/fft1.html

I http://blog.dt.in.th/stuff/audiodata/

I http://www.nihilogic.dk/labs/pocket_full_of_html5/#presets/void.js

I http://niiden.com/simplesynth/simplesynth.html

I http://vocamus.net/dave/?p=1074

I http://www.youtube.com/watch?v=8qME7_Eza54&feature=youtu.be

I http://aim.johnkeston.com/im2490/p5jsDemo/ostraka_visualization.html

I https://developer.mozilla.org/en/Introducing_the_Audio_API_Extension#The_MozAudioA
  vailable_event




                                                                              Mayflower GmbH I 17
Vielen Dank für Ihre Aufmerksamkeit!




     Kontakt   Martin Ruprecht
               martin.ruprecht@mayflower.de
               +49 89 24 20 54 1 16
                                1


               Mayflower GmbH
               Mannhardtstrasse 6
               80538 München

15.04.2011                            Mayflower GmbH   18
Code-Beispiele: Lesen einer Audio-Datei

<!DOCTYPE html>
<html>
  <head>
    <title>Einfaches Lesen einer Audio-Datei</title>
    <body>
         <audio id="ap" src="tracks/1.ogg" controls="true"></audio>

        <pre id="raw"></pre>

        <script>

            function loadedMetadata() {
                channels          = audio.mozChannels;
                rate              = audio.mozSampleRate;
                frameBufferLength = audio.mozFrameBufferLength;
            }

            function audioAvailable(event) {
                var frameBuffer = event.frameBuffer;
                var t = event.time;

                   var text = "Samples at: " + t + "n" + frameBuffer[0] + "   " + frameBuffer[1];
                   raw.innerHTML = text;
            }

            var raw   = document.getElementById('raw')
            var audio = document.getElementById('ap');

            audio.addEventListener('MozAudioAvailable', audioAvailable, false);
            audio.addEventListener('loadedmetadata', loadedMetadata, false);

        </script>
  </body>
</html>


                                                                                              Mayflower GmbH I 19
Code-Beispiele: grafische Darstellung einer Audio-Datei

<!DOCTYPE html>
<html>
    <head>
        <title>Wellen-Darstellung mit Canvas-Element</title>
    </head>
    <body>
        <audio id="audio_wave" src="tracks/1.ogg" controls></audio>
        <canvas id="canvas_wave" width="512" height="200"></canvas>
        <script>
            var audio4 = document.getElementById("audio_wave");
            var canvas4 = document.getElementById("canvas_wave");
            var context4 = canvas4.getContext('2d');
            context4.strokeStyle = "#FFFFFF";
            context4.lineWidth = 2;
            audio4.addEventListener("MozAudioAvailable", writeSamples, false);
            audio4.addEventListener("loadedmetadata", getMetadata, false);

            var fbLength, channels;
            function getMetadata() {
                channels = audio4.mozChannels;
                fbLength = audio4.mozFrameBufferLength;
            }
            function writeSamples (event){ // render element
                var data = event.frameBuffer;
                var samples = 512;
                var step = (fbLength / channels) / samples;
                context4.fillRect(0, 0, 512, 200);
                context4.beginPath();
                context4.moveTo(0, 100 - data[0]*100);
                for(var i=1; i< samples; i++){
                    context4.lineTo(i, 100-data[i*step]*100);
                }
                context4.stroke();
            }
        </script>
    </body>
</html>                                                                          Mayflower GmbH I 20
Code-Beispiele: Erzeugen von Tönen

<!DOCTYPE html>
<html>
    <head>
        <title>Alle meine Entchen</title>
        <script type="text/javascript">

            function playTone(frequency) {
                var output = new Audio();
                var sampleRate = 44100;
                output.mozSetup(2,sampleRate);

                var samples = new Float32Array(sampleRate);
                var len = samples.length;

                var k = 2 * Math.PI * frequency / sampleRate;

                var currentSoundSample = 0;
                for (var i=0; i<len; i++) {
                    samples[i] = Math.sin(k * currentSoundSample++);
                }

                output.mozWriteAudio(samples);
            }

        </script>
    </head>
    <body>
        <button onclick="playTone(130.813);">C</button>
        <button onclick="playTone(146.832);">D</button>
        <button onclick="playTone(164.814);">E</button>
        <button onclick="playTone(174.614);">F</button>
        <button onclick="playTone(195.998);">G</button>
        <button onclick="playTone(220.000);">A</button>
    </body>
</html>

                                                                       Mayflower GmbH I 21

Mais conteúdo relacionado

Semelhante a Mozilla Audio Data API

JS Best Practises Debugging und Logging
JS Best Practises Debugging und LoggingJS Best Practises Debugging und Logging
JS Best Practises Debugging und LoggingMayflower GmbH
 
Web-Automatisierung mit WWW::Mechanize
Web-Automatisierung mit WWW::MechanizeWeb-Automatisierung mit WWW::Mechanize
Web-Automatisierung mit WWW::MechanizeThomas Fahle
 
Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Patrick Lauke
 
realtime audio on ze web @ hhjs
realtime audio on ze web @ hhjsrealtime audio on ze web @ hhjs
realtime audio on ze web @ hhjsjan_mindmatters
 
JAX 2024: Go in der Praxis einsetzen
JAX 2024: Go in der Praxis einsetzenJAX 2024: Go in der Praxis einsetzen
JAX 2024: Go in der Praxis einsetzenJan Stamer
 
DevOps für PHP (und andere)
DevOps für PHP (und andere)DevOps für PHP (und andere)
DevOps für PHP (und andere)Mayflower GmbH
 
E2E Tests mit PHP
E2E Tests mit PHPE2E Tests mit PHP
E2E Tests mit PHPkmhusseini
 
PHP Dependency und Paket Management mit Composer
PHP Dependency und Paket Management mit ComposerPHP Dependency und Paket Management mit Composer
PHP Dependency und Paket Management mit ComposerMayflower GmbH
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 

Semelhante a Mozilla Audio Data API (12)

JS Best Practises Debugging und Logging
JS Best Practises Debugging und LoggingJS Best Practises Debugging und Logging
JS Best Practises Debugging und Logging
 
Web-Automatisierung mit WWW::Mechanize
Web-Automatisierung mit WWW::MechanizeWeb-Automatisierung mit WWW::Mechanize
Web-Automatisierung mit WWW::Mechanize
 
Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010
 
realtime audio on ze web @ hhjs
realtime audio on ze web @ hhjsrealtime audio on ze web @ hhjs
realtime audio on ze web @ hhjs
 
Webapplikationen mit Node.js
Webapplikationen mit Node.jsWebapplikationen mit Node.js
Webapplikationen mit Node.js
 
JAX 2024: Go in der Praxis einsetzen
JAX 2024: Go in der Praxis einsetzenJAX 2024: Go in der Praxis einsetzen
JAX 2024: Go in der Praxis einsetzen
 
Symfony2
Symfony2Symfony2
Symfony2
 
Dev ops für php talk
Dev ops für php talkDev ops für php talk
Dev ops für php talk
 
DevOps für PHP (und andere)
DevOps für PHP (und andere)DevOps für PHP (und andere)
DevOps für PHP (und andere)
 
E2E Tests mit PHP
E2E Tests mit PHPE2E Tests mit PHP
E2E Tests mit PHP
 
PHP Dependency und Paket Management mit Composer
PHP Dependency und Paket Management mit ComposerPHP Dependency und Paket Management mit Composer
PHP Dependency und Paket Management mit Composer
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 

Mais de Mayflower GmbH

Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...
Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...
Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...Mayflower GmbH
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: SecurityMayflower GmbH
 
Vom Entwickler zur Führungskraft
Vom Entwickler zur FührungskraftVom Entwickler zur Führungskraft
Vom Entwickler zur FührungskraftMayflower GmbH
 
Salt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native ClientSalt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native ClientMayflower GmbH
 
Plugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debuggingPlugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debuggingMayflower GmbH
 
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...Mayflower GmbH
 
Native Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und AlloyNative Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und AlloyMayflower GmbH
 
Pair Programming Mythbusters
Pair Programming MythbustersPair Programming Mythbusters
Pair Programming MythbustersMayflower GmbH
 
Shoeism - Frau im Glück
Shoeism - Frau im GlückShoeism - Frau im Glück
Shoeism - Frau im GlückMayflower GmbH
 
Bessere Software schneller liefern
Bessere Software schneller liefernBessere Software schneller liefern
Bessere Software schneller liefernMayflower GmbH
 
Von 0 auf 100 in 2 Sprints
Von 0 auf 100 in 2 SprintsVon 0 auf 100 in 2 Sprints
Von 0 auf 100 in 2 SprintsMayflower GmbH
 
Piwik anpassen und skalieren
Piwik anpassen und skalierenPiwik anpassen und skalieren
Piwik anpassen und skalierenMayflower GmbH
 
Agilitaet im E-Commerce - E-Commerce Breakfast
Agilitaet im E-Commerce - E-Commerce BreakfastAgilitaet im E-Commerce - E-Commerce Breakfast
Agilitaet im E-Commerce - E-Commerce BreakfastMayflower GmbH
 

Mais de Mayflower GmbH (20)

Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...
Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...
Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...
 
Why and what is go
Why and what is goWhy and what is go
Why and what is go
 
Agile Anti-Patterns
Agile Anti-PatternsAgile Anti-Patterns
Agile Anti-Patterns
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: Security
 
Vom Entwickler zur Führungskraft
Vom Entwickler zur FührungskraftVom Entwickler zur Führungskraft
Vom Entwickler zur Führungskraft
 
Produktive teams
Produktive teamsProduktive teams
Produktive teams
 
Salt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native ClientSalt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native Client
 
Plugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debuggingPlugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debugging
 
Usability im web
Usability im webUsability im web
Usability im web
 
Rewrites überleben
Rewrites überlebenRewrites überleben
Rewrites überleben
 
JavaScript Security
JavaScript SecurityJavaScript Security
JavaScript Security
 
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...
 
Responsive Webdesign
Responsive WebdesignResponsive Webdesign
Responsive Webdesign
 
Native Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und AlloyNative Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und Alloy
 
Pair Programming Mythbusters
Pair Programming MythbustersPair Programming Mythbusters
Pair Programming Mythbusters
 
Shoeism - Frau im Glück
Shoeism - Frau im GlückShoeism - Frau im Glück
Shoeism - Frau im Glück
 
Bessere Software schneller liefern
Bessere Software schneller liefernBessere Software schneller liefern
Bessere Software schneller liefern
 
Von 0 auf 100 in 2 Sprints
Von 0 auf 100 in 2 SprintsVon 0 auf 100 in 2 Sprints
Von 0 auf 100 in 2 Sprints
 
Piwik anpassen und skalieren
Piwik anpassen und skalierenPiwik anpassen und skalieren
Piwik anpassen und skalieren
 
Agilitaet im E-Commerce - E-Commerce Breakfast
Agilitaet im E-Commerce - E-Commerce BreakfastAgilitaet im E-Commerce - E-Commerce Breakfast
Agilitaet im E-Commerce - E-Commerce Breakfast
 

Mozilla Audio Data API

  • 1. Mozilla Audio Data API Martin Ruprecht I 14. April 2011 © Mayflower GmbH 2011
  • 2. Firefox 4 only! Mayflower GmbH I 2
  • 3. <audio> Mayflower GmbH I 3
  • 4. Beispiel <audio id="ap" src="t1.ogg" controls="true"></audio> I Unterstützt *.wav und *.ogg I Security: Musikdatei auf gleichem Server! Quelle: https://developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements Mayflower GmbH I 4
  • 5. + <audio> = Zugriff und Erzeugen von Audio-Rohdaten Mayflower GmbH I 5
  • 6. audio = document.getElementById( ' ap ' ); I Functions * · audio.load(); · audio.play(); · audio.pause(); · audio.mozSetup(); · audio.mozWriteAudio(); · audio.mozCurrentSampleOffset(); I * nicht vollständig I Quelle: https://developer.mozilla.org/En/HTML/Element/Audio Mayflower GmbH I 6
  • 7. audio.mozSetup(); I mozSetUp(channels, sampleRate) ·Übergabeparameter: Anzahl der Kanäle, z.B. 2 bei Stereo Abtastfrequenz in Hz, z.B. 44100 ·Muss vor mozWriteAudio bzw. mozCurrentSampleOffset aufgerufen werden Mayflower GmbH I 7
  • 8. audio.mozWriteAudio(); I mozWriteAudio(buffer) ·Wird nach mozSetup() aufgerufen ·Übergabeparameter: buffer (Rohdaten, gleiches Format wie FrameBuffer) ·Erzeugt die Audio-Daten ·Gibt die Anzahl der bereits erzeugten Samples zurück Mayflower GmbH I 8
  • 9. audio.mozCurrentSampleOffset(); I mozCurrentSampleOffset() ·Liefert die aktuelle Position (der Samples) des Audiostreams Mayflower GmbH I 9
  • 10. audio = document.getElementById( ' ap ' ); I Properties * · audio.currentSrc · audio.volume · audio.duration · audio.currentTime · audio.mozChannels · audio.mozSampleRate · audio.mozFrameBufferLength I * nicht vollständig I Quellen: https://developer.mozilla.org/En/HTML/Element/Audio https://dev.mozilla.jp/localmdc/localmdc_2212.html Mayflower GmbH I 10
  • 11. audio.mozChannels I Anzahl der genutzten Kanäle I Mögliche Werte: ·1 Mono ·2 Stereo ·6 Surround Sound 5.1 Mayflower GmbH I 11
  • 12. audio.mozSampleRate I Samplingrate oder Abtastfrequenz I Bsp.: ·44,1 kHz für CD Qualität (44100 Hz) Mayflower GmbH I 12
  • 13. audio.mozFrameBufferLength I Anzahl der Samples in allen Kanälen die genutzt werden um die Audio-Daten zu empfangen. I reine Information zu Beginn I Bsp: ·2048 (1024 pro Kanal bei Stereo) Mayflower GmbH I 13
  • 14. audio = document.getElementById( ' ap ' ); I Events * ·loadedmetadata ·timeupdate ·pause ·play ·ended ·MozAudioAvailable · I * nicht vollständig I Quelle: https://developer.mozilla.org/En/HTML/Element/Audio Mayflower GmbH I 14
  • 15. MozAudioAvailable I MozAudioAvailable · Wird gefeuert wenn genügend Samples decodiert wurden I audio.addEventListener('MozAudioAvailable', _someFct_, false); ·Übergabeparameter an _someFct_: FrameBuffer (Rohdaten, als Float32Array) Time I Quelle: https://developer.mozilla.org/en/JavaScript_typed_arrays Mayflower GmbH I 15
  • 16. … jetzt aber mal los Demo! Mayflower GmbH I 16
  • 17. Links I http://haptic-data.com/sketches/html5/fft1.html I http://blog.dt.in.th/stuff/audiodata/ I http://www.nihilogic.dk/labs/pocket_full_of_html5/#presets/void.js I http://niiden.com/simplesynth/simplesynth.html I http://vocamus.net/dave/?p=1074 I http://www.youtube.com/watch?v=8qME7_Eza54&feature=youtu.be I http://aim.johnkeston.com/im2490/p5jsDemo/ostraka_visualization.html I https://developer.mozilla.org/en/Introducing_the_Audio_API_Extension#The_MozAudioA vailable_event Mayflower GmbH I 17
  • 18. Vielen Dank für Ihre Aufmerksamkeit! Kontakt Martin Ruprecht martin.ruprecht@mayflower.de +49 89 24 20 54 1 16 1 Mayflower GmbH Mannhardtstrasse 6 80538 München 15.04.2011 Mayflower GmbH 18
  • 19. Code-Beispiele: Lesen einer Audio-Datei <!DOCTYPE html> <html> <head> <title>Einfaches Lesen einer Audio-Datei</title> <body> <audio id="ap" src="tracks/1.ogg" controls="true"></audio> <pre id="raw"></pre> <script> function loadedMetadata() { channels = audio.mozChannels; rate = audio.mozSampleRate; frameBufferLength = audio.mozFrameBufferLength; } function audioAvailable(event) { var frameBuffer = event.frameBuffer; var t = event.time; var text = "Samples at: " + t + "n" + frameBuffer[0] + " " + frameBuffer[1]; raw.innerHTML = text; } var raw = document.getElementById('raw') var audio = document.getElementById('ap'); audio.addEventListener('MozAudioAvailable', audioAvailable, false); audio.addEventListener('loadedmetadata', loadedMetadata, false); </script> </body> </html> Mayflower GmbH I 19
  • 20. Code-Beispiele: grafische Darstellung einer Audio-Datei <!DOCTYPE html> <html> <head> <title>Wellen-Darstellung mit Canvas-Element</title> </head> <body> <audio id="audio_wave" src="tracks/1.ogg" controls></audio> <canvas id="canvas_wave" width="512" height="200"></canvas> <script> var audio4 = document.getElementById("audio_wave"); var canvas4 = document.getElementById("canvas_wave"); var context4 = canvas4.getContext('2d'); context4.strokeStyle = "#FFFFFF"; context4.lineWidth = 2; audio4.addEventListener("MozAudioAvailable", writeSamples, false); audio4.addEventListener("loadedmetadata", getMetadata, false); var fbLength, channels; function getMetadata() { channels = audio4.mozChannels; fbLength = audio4.mozFrameBufferLength; } function writeSamples (event){ // render element var data = event.frameBuffer; var samples = 512; var step = (fbLength / channels) / samples; context4.fillRect(0, 0, 512, 200); context4.beginPath(); context4.moveTo(0, 100 - data[0]*100); for(var i=1; i< samples; i++){ context4.lineTo(i, 100-data[i*step]*100); } context4.stroke(); } </script> </body> </html> Mayflower GmbH I 20
  • 21. Code-Beispiele: Erzeugen von Tönen <!DOCTYPE html> <html> <head> <title>Alle meine Entchen</title> <script type="text/javascript"> function playTone(frequency) { var output = new Audio(); var sampleRate = 44100; output.mozSetup(2,sampleRate); var samples = new Float32Array(sampleRate); var len = samples.length; var k = 2 * Math.PI * frequency / sampleRate; var currentSoundSample = 0; for (var i=0; i<len; i++) { samples[i] = Math.sin(k * currentSoundSample++); } output.mozWriteAudio(samples); } </script> </head> <body> <button onclick="playTone(130.813);">C</button> <button onclick="playTone(146.832);">D</button> <button onclick="playTone(164.814);">E</button> <button onclick="playTone(174.614);">F</button> <button onclick="playTone(195.998);">G</button> <button onclick="playTone(220.000);">A</button> </body> </html> Mayflower GmbH I 21