p5.jsではマイクのインプットができます。
インスタンスを作って・・・
//マイクインプット開始
mic = new p5.AudioIn();
mic.start();
これだけでボリュームが拾えます。
var vol = mic.getLevel();
これ英語のリーディングとかに使える?
と思って作ってみました般若心経
jsdoit : http://jsdo.it/hp0me_/872t
コード
sketch.js
//般若心経を用意
var scripts = ["観","自","在","菩","薩","行","深","般","若","波","羅","蜜","多","時","照","見","五","蘊","皆","空","度","一","切","苦","厄","舎","利","子","色","不","異","空","空","不","異","色","色","即","是","空","空","即","是","色","受","想","行","識","亦","復","如","是","舎","利","子","是","諸","法","空","相","不","生","不","滅","不","垢","不","浄","不","増","不","減","是","故","空","中","無","色","無","受","想","行","識","無","眼","耳","鼻","舌","身","意","無","色","声","香","味","触","法","無","眼","界","乃","至","無","意","識","界","無","無","明","亦","無","無","明","尽","乃","至","無","老","死","亦","無","老","死","尽","無","苦","集","滅","道","無","智","亦","無","得","以","無","所","得","故","菩","提","薩","埵","依","般","若","波","羅","蜜","多","故","心","無","罣","礙","無","罣","礙","故","無","有","恐","怖","遠","離","一","切","顛","倒","夢","想","究","竟","涅","槃","三","世","諸","仏","依","般","若","波","羅","蜜","多","故","得","阿","耨","多","羅","三","藐","三","菩","提","故","知","般","若","波","羅","蜜","多","是","大","神","呪","是","大","明","呪","是","無","上","呪","是","無","等","等","呪","能","除","一","切","苦","真","実","不","虚","故","説","般","若","波","羅","蜜","多","呪","即","説","呪","曰","羯","諦","羯","諦","波","羅","羯","諦","波","羅","僧","羯","諦","菩","提","薩","婆","訶","般","若","心","経","fin.."];
var scIndex = 0;
var textObj;
var input;
var inputFlg = 0;
var analyzer;
function setup() {
//キャンバスを作る
createCanvas(500, 200);
textObj = new Hannnya();
//マイクインプットのインスタンス化&スタート
mic = new p5.AudioIn();
mic.start();
}
function draw() {
background(255);
var vol = mic.getLevel();
//ボリュームが閾値を超えたら次のフェーズへ
if(vol>0.1){
inputFlg = 1;
}
//ボリュームが閾値以下に戻ったら次のフェーズへ
if(vol<0.1 && inputFlg==1){
inputFlg = 0;
console.log("grounding");
//次の文字を出す
textObj.frameInc();
}
fill(127);
noStroke();
textObj.draw();
}
//class for label
function Hannnya(){
this.currentFrame = 0;
this.str = scripts[this.currentFrame];
this.frameInc = function(){
this.currentFrame++;
if(this.currentFrame >= scripts.length)
this.currentFrame = 0;
};
this.draw = function(){
textSize(102);
noStroke();
//文字を出す
text(scripts[this.currentFrame], 30, 100);
this.guide(this.currentFrame);
};
this.guide = function(currentIndex){
textSize(30);
fill(127);
var tx = "";
//未来10個分の文字を出す
for(var i = 1; i <= 10; i++){
tx += scripts[this.currentFrame+i];
}
text(tx, 30, 150);
fill(25,50,50,50);
}
}