of 74 /74

20150829 firefox-os-handson

Embed Size (px)

Text of 20150829 firefox-os-handson

  • Hello World

  • body{ font-size: 18px; overflow: hidden; background-color: #00539F;}

    h1{ font-size: 640%; line-height: .8; color: white;}

  • var handleDeviceLightEvent = function(event){ var indicator = document.querySelector("h1"); var lux = event.value;if(indicator != null){indicator.textContent = lux;

    }}; window.addEventListener("devicelight", handleDeviceLightEvent);

  • "type": "privileged","permissions": { "device-storage:music": { "access": "readwrite", "description": ""

    }, "audio-capture": { "description": ""

    }, "desktop-notification": { "description": ""

    }}

  • function initializeAudioStream(){ navigator.getUserMedia({video: false, audio:true}, function(_stream){ console.log("")

    stream = _stream; initializeRecorder(); initializeVisualizer(); ui.startButton.disabled = false; }, function(error){ console.log(error); });}

  • function initializeRecorder(){ if(stream != null){ console.log("MediaRecorder ")

    recorder = new MediaRecorder(stream);

    recorder.addEventListener("stop", function(event){ toggleRecordButtonState(); });

    recorder.addEventListener("dataavailable", function(event){ console.log("blob");

    saveCapturedData(event.data); }); }}

  • function initializeStorage(){ storage = navigator.getDeviceStorage("music");}

  • function saveCapturedData(blob){ if(storage != null){

    var filename = createFileName(); var req = storage.addNamed(blob, filename); req.onsuccess = function(){ console.log(this.result + "");

    };

    req.onerror = function(){ console.log(this.error.name + ":" + this.error.message); }; }}

  • function initializeVisualizer(){ if(stream != null && ui.indicator != null){ update(); }}

  • var audioContext= new AudioContext();visualizer.sourceNode = audioContext.createMediaStreamSource(stream);

    visualizer.analyser = audioContext.createAnalyser();visualizer.analyser.fftSize = 32;visualizer.buffer = new Uint8Array(visualizer.analyser.frequencyBinCount);visualizer.sourceNode.connect(visualizer.analyser);

    visualizer.audioContext = audioContext;

  • visualizer.canvas = ui.indicator;visualizer.graphicsContext = visualizer.canvas.getContext("2d");

  • function initializeVisualizer(){ if(stream != null && ui.indicator != null){ var audioContext= new AudioContext(); visualizer.sourceNode = audioContext.createMediaStreamSource(stream);

    visualizer.analyser = audioContext.createAnalyser(); visualizer.analyser.fftSize = 32; visualizer.buffer = new Uint8Array(visualizer.analyser.frequencyBinCount);

    visualizer.sourceNode.connect(visualizer.analyser);

    visualizer.audioContext = audioContext; visualizer.canvas = ui.indicator; visualizer.graphicsContext = visualizer.canvas.getContext("2d");

    update(); } }

  • get volume(){ this.analyser.getByteFrequencyData(this.buffer); return scale(average(this.buffer), 0, 128);}

  • function doUpdateVisualizer(){ var gc = visualizer.graphicsContext; gc.fillStyle = "white"; gc.fillRect(0, 0, visualizer.canvas.width, visualizer.canvas.height); var h = visualizer.volume * visualizer.canvas.height; gc.fillStyle = "green"; gc.fillRect(0, visualizer.canvas.height - h, visualizer.canvas.width, h);}

  • req.onsuccess = function(){ console.log(this.result + "");

    new Notification("IC Recorder", { body: " " + filename +

    " ",

    icon: "/icons/icon16x16.png" });};