p5.jsで動体検知センサーのようなものを作っています
WEBカメラを使用して、WEB上で鑑賞できる作品を創っています。
今回は「動体検知センサー」のようなもので
鑑賞者自身の動きに合わせて「音」を出すことを考えています。
鑑賞者が少しでも動くと「ピッ」と音(sample.mp3)を鳴らし
動きを止めると鳴らさないものを作りたい。
ご教授の程、宜しくお願い致します。
発生している問題
未完成の「動体検知センサー」にある「大きな黒丸」は 鑑賞者の動きに反応しているので問題はないと思います。 問題は「音」です。 ピッ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜! という連続音ではなく、「ピッ」「ピッ」「ピッ」と反応させたい。 おそらく、音(ピッ)の再生がループになっているのではないか? と考え、9日以上いろいろとやっているのですが解決しません。
該当のソースコード
html
1<!doctype html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>sensor</title> 6 <link rel="stylesheet" href="style.css" type="text/css" /> 7 <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.1/p5.min.js"></script> 8 <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.1/addons/p5.dom.min.js"></script> 9 <script src="https://p5js.jp/assets/js/p5.sound.min.js"></script> 10<script src="sketch.js"></script> 11</head> 12 13<body> 14<div class="canvas-wrapper"> 15 16<canvas id="canvas1"></canvas> 17<div id="wrapper"> 18<canvas id="pjs" height="100%"></canvas> 19</div> 20 21</div> 22</body> 23</html>
javascript
1let song; 2 3function setup() { 4 createCanvas(windowWidth, windowHeight); 5 img = createCapture(VIDEO); 6 img.hide(); 7 img.size(windowWidth, windowHeight); 8 song = loadSound('button01a.mp3'); 9} 10 11function draw() { 12 background(0); 13 img.loadPixels(); 14 for (var y=250;y<img.height ; y+=500){ 15 for (var x=250;x<img.width; x+=500){ 16 var i = y * width + (img.width-x-1); 17 const darkness = (255 - img.pixels[i * 4]) / 255; 18 const radius = 500 * darkness; 19 song.play(); 20 fill(255); 21 ellipse(x, y, radius, radius); 22 } 23 } 24}
2021/4/12に追記したソースコード
css
1.canvas-wrapper { 2 position: relative; 3} 4.canvas-wrapper canvas { 5 position: absolute; 6 bottom: 0; 7 left: 0; 8}
sample.mp3はこちらの無料効果音を借りています
sample.mp3
1https://taira-komori.jpn.org/sound/game01/button01a.mp3
試したこと
画面に対して黒丸の数が多いとネット環境が重くなり、PCも重くなりました。
そこで、黒丸の数を減らしてみました(こちから環境では4つ)が、
それでも音は連続しているため、重なって鳴っているのではないということを確認できました。
song.stop();をいろいろな箇所に入れて試しましたが、音がループがされます。
ご教授の程、宜しくお願い致します。
cwi様からのアドバイスで
.play();直下にconsole.log(Date.now());を入れましたが、ひっきりなしに音が再生されています。
回答3件
あなたの回答
tips
プレビュー