HTML5のAudioタグで音声再生を行います。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
<title>Audioタグによる音声再生</title>
<script type="text/javascript">
var canvasWidth;
var canvasHeight;
var context;
// イメージ01
var img01 = new Image();
img01.src = "./img/icon.png";
// イメージ02
var img02 = new Image();
img02.src = "./img/hidekiti.png";
// イメージ番号
var imgNum = 0;
/*
タイマー
*/
function OnTimer() {
var posX = Math.random() * canvasWidth;
var posY = Math.random() * canvasHeight;
var imgNum = 1 + parseInt(Math.random() * 28 + 0.5);
// 拡大率
var zoom = 1 + Math.random() * 2;
var imgX = parseInt(imgNum % 10) * 16;
var imgY = parseInt(imgNum / 10) * 16 + 16;
var imgW = 16;
var imgH = 16;
var img = img01;
var imgDrawW = imgW * zoom;
var imgDrawH = imgH * zoom;
var imgPosX = posX - imgDrawW / 2;
var imgPosY = posY - imgDrawH / 2;
// イメージの描画
context.drawImage(
img
, imgX // 画像上の描画開始位置X
, imgY // 画像上の描画開始位置Y
, imgW // 描画する画像の幅
, imgH // 描画する画像の高さ
, imgPosX // 描画位置X
, imgPosY // 描画位置Y
, imgDrawW // 描画幅
, imgDrawH // 描画高さ
);
}
/*
ページロード完了
*/
function OnLoad() {
// キャンバス取得
var canvas = document.getElementById("canvas");
// オーディオ取得
var audio = document.getElementById("audio");
audio.load();
// ループ再生
audio.addEventListener('ended', function () { audio.play() }, false);
// キャンバスの幅と高さを取得
canvasWidth = canvas.getAttribute("width");
canvasHeight = canvas.getAttribute("height");
console.log("width = " + canvasWidth);
console.log("height = " + canvasHeight);
// キャンバスへ描画
context = canvas.getContext('2d');
context.fillStyle = 'white';
context.fillRect(0, 0, canvasWidth, canvasHeight);
// 中心
var centerX = canvasWidth / 2;
var centerY = canvasHeight / 2;
// タイマー開始
var timer1 = setInterval("OnTimer()", 1000);
// マウスイベントを受け取る
canvas.addEventListener(
"mousedown",
function (e) {
var posX;
var posY;
/*
FireFoxの場合は、offsetXとoffsetYがundefinedになる
*/
posX = (e.offsetX !== undefined) ? e.offsetX : (e.layerX - e.target.offsetLeft);
posY = (e.offsetY !== undefined) ? e.offsetY : (e.layerY - e.target.offsetTop);
console.log("x = " + posX);
console.log("y = " + posY);
// 音声再生
audio.currentTime = 0;
audio.play();
});
// iPhoneではこちらでないと再生できない
var btnPlay = document.getElementById("btnPlay");
btnPlay.addEventListener("touchstart", function () {
audio.load();
});
}
</script>
</head>
<body bgcolor="#c0c0ff" onload="OnLoad()">
<h1>Audioタグによる音声再生</h1>
<canvas width="300" height="200" id="canvas" style="background-color:black;"></canvas>
<br />
<input id="btnPlay" value="音楽のロード" type="button">
<br />
タップすると音楽を先頭位置から再生します。(audioタグ)
<br />
<audio id="audio" src="./bgm/03.mp3" controls></audio>
<br />
<h3>利用させていただいた音楽</h3>
<p>
<a href='http://www.falcom.co.jp/music_use/'>「FOUNTAIN OF LOVE/Ys Super Collection/Copyrightc Nihon Falcom Corporation」</a><br />
</p>
<a href="../html5_list.html">戻る</a>
</body>
</html>