20151128 firefoxos-handson

51

Upload: noritada-shimizu

Post on 15-Apr-2017

702 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 20151128 firefoxos-handson
Page 2: 20151128 firefoxos-handson
Page 3: 20151128 firefoxos-handson
Page 4: 20151128 firefoxos-handson

Firefox Developer Edition

Page 5: 20151128 firefoxos-handson
Page 6: 20151128 firefoxos-handson
Page 7: 20151128 firefoxos-handson
Page 8: 20151128 firefoxos-handson
Page 9: 20151128 firefoxos-handson
Page 10: 20151128 firefoxos-handson
Page 11: 20151128 firefoxos-handson
Page 12: 20151128 firefoxos-handson
Page 13: 20151128 firefoxos-handson
Page 14: 20151128 firefoxos-handson
Page 15: 20151128 firefoxos-handson
Page 16: 20151128 firefoxos-handson
Page 17: 20151128 firefoxos-handson
Page 18: 20151128 firefoxos-handson
Page 19: 20151128 firefoxos-handson
Page 20: 20151128 firefoxos-handson
Page 21: 20151128 firefoxos-handson
Page 22: 20151128 firefoxos-handson
Page 23: 20151128 firefoxos-handson
Page 24: 20151128 firefoxos-handson
Page 25: 20151128 firefoxos-handson
Page 26: 20151128 firefoxos-handson
Page 27: 20151128 firefoxos-handson
Page 28: 20151128 firefoxos-handson
Page 29: 20151128 firefoxos-handson

body{

font-size: 18px;

overflow: hidden;

background-color: #00539F;

}

h1{

font-size: 640%;

line-height: .8;

color: white;

}

Page 30: 20151128 firefoxos-handson
Page 31: 20151128 firefoxos-handson
Page 32: 20151128 firefoxos-handson

var handleDeviceLightEvent = function(event){

var indicator = document.querySelector("h1");

var lux = event.value;

if(indicator != null){

indicator.textContent = lux;

}

};

window.addEventListener("devicelight", handleDeviceLightEvent);

Page 33: 20151128 firefoxos-handson
Page 34: 20151128 firefoxos-handson
Page 36: 20151128 firefoxos-handson
Page 37: 20151128 firefoxos-handson

"type": "privileged","permissions": {

"device-storage:music": { "access": "readwrite",

"description": "録音データの保存ため"

},

"audio-capture": { "description": "録音のため"

},

"desktop-notification": { "description": "保存できたかどうかを通知するため"

}

}

Page 38: 20151128 firefoxos-handson

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);

});

}

Page 39: 20151128 firefoxos-handson

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); }); }}

Page 40: 20151128 firefoxos-handson

function initializeStorage(){

storage = navigator.getDeviceStorage("music");

}

Page 41: 20151128 firefoxos-handson

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); }; }}

Page 42: 20151128 firefoxos-handson
Page 43: 20151128 firefoxos-handson

function initializeVisualizer(){

if(stream != null && ui.indicator != null){

update();

}

}

Page 44: 20151128 firefoxos-handson

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;

Page 45: 20151128 firefoxos-handson
Page 46: 20151128 firefoxos-handson

visualizer.canvas = ui.indicator;

visualizer.graphicsContext =

visualizer.canvas.getContext("2d");

Page 47: 20151128 firefoxos-handson

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(); } }

Page 48: 20151128 firefoxos-handson

get volume(){

this.analyser.getByteFrequencyData(this.buffer);

return scale(average(this.buffer), 0, 128);

}

Page 49: 20151128 firefoxos-handson

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);

}

Page 50: 20151128 firefoxos-handson

req.onsuccess = function(){

console.log(this.result + "に保存");

new Notification("IC Recorder", {

body: "音声を " + filename +

" に保存しました。",

icon: "/icons/icon16x16.png"

});

};

Page 51: 20151128 firefoxos-handson