指定したAudioエレメントの経過時間か残り時間を時・分・秒に分けて整形する。
・時・分・秒の数値を配列にして返す。
配列[0]:時
配列[1]:分
配列[2]:秒
・指定した区切り文字で連結した文字列を返す。
(例) 1:15:30
Audioエレメントを再生して、経過時間と残り時間を出力する。
HTML :
<button type="button" onclick="setup1()">Audio1を再生</button>
<button type="button" onclick="$audioCurrentTime(audio1,':')">経過時間を出力</button>
<button type="button" onclick="$audioCurrentTime(audio1,':',true)">残り時間を出力</button>
<button type="button" onclick="sample_remain()">残り時間を連続して出力</button>
<button type="button" onclick="$audioFadeout(audio1)">停止</button> //音量を徐々に下げてから停止
Javascript :
var audio1=new Audio(); //Audioエレメントを定義
audio1.preload="metadata";
function setup1() { //Audioエレメントを準備して再生
audio1.src="audio/cmn_snd_sound1.mp3";
audio1.volume=0.5;
audio1.play();
}
var sample_timer;
function sample_remain() { //残り時間を繰り返し取得する
var remainTime=$audioCurrentTime(audio1,':',true);
sample_timer=setTimeout(sample_remain,200);
}
この関数を利用した簡単なオーディオインターフェース。
HTML :
<div id="sample2">
<div>
<button type="button" id="audio_ui" onclick="playstop()"></button>
</div>
<div>
<div id="time1">00:00</div>
<div id="time2">00:00</div>
<div id="audio_ui_bar"></div>
<div id="audio_ui_knob" onmousedown="handling(true);$ddHandler('audio_ui_knob','LR',80,452,5.33,69.86);" ontouchstart="handling(true);$ddHandler('audio_ui_knob','LR',80,452,5.33,69.86);" onmouseup="handling(false)" ontouchend="handling(false)"></div>
</div>
</div>
Sass :
#sample2 {
display: flex;
& > div:nth-child(1) {
button#audio_ui {
width: 60px;
height: 60px;
background: url(../images/cmn_btn_audio_ui.svg) no-reeat center top;
background-size: 60px auto;
border: none;
}
}
& > div:nth-child(2) {
position: relative;
#audio_ui_bar {
position: absolute;
left: 80px;
width: 400px;
}
#audio_ui_knob {
position: absolute;
left: 80px;
width: 28px;
height: 28px;
}
}
}
Javascript :
function setup2() {
audio2.src="audio/cmn_snd_sound2.mp3";
audio2.volume=0.5;
setTimeout(mouseMonitor,1000); //ページの読み込みを待つくらいのタイムラグを
}
function mouseMonitor() {
$startMouseMonitor(true); //$ddHandler()を機能させるために必要な関数
}
function ddHandlerLR(nowX,tarId) {
var numFull=452-80; //372 可動範囲:80〜452
var nowPer=(nowX-80)/numFull*100;
audio2.currentTime=nowPer; //ノブの位置にAudioエレメントの再生位置を移動
}
var timer2;
function playstop() {
audioHandlingStatus=false; //ノブ操作の状態を調整
if(audio2.paused) { //再生状態のスイッチ
audio2.play();
$id("audio_ui").style.backgroundPosition="center bottom";
timer2=setTimeout(updateTime,100);
} else {
clearTimeout(timer2);
audio2.pause();
$id("audio_ui").style.backgroundPosition="center top";
}
}
function updateTime() {
//経過時間を更新
var currentStr=$audioCurrentTime(audio2,':');
$toHTML("time1",currentStr);
//残り時間を更新
var remainStr=$audioCurrentTime(audio2,':',true);
$toHTML("time2",remainStr);
//ノブ操作をしていない時だけ処理:ノブの位置を再生位置に合わせる
if(!audioHandlingStatus) {
var playPer=audio2.currentTime/audio2.duration;
$id("audio_ui_knob").style.left=80+(372*playPer)+"px";
}
if(audio2.currentTime==audio2.duration) { //再生終了状態
//再生状態にしてからすぐに切り替えの関数を起動してボタンの状態を変える
audio2.play();
playstop();
} else {
timer2=setTimeout(updateTime,100);
}
}
var audioHandlingStatus=false;
function handling(tarStatus) { //ノブのドラッグ中かどうかを管理
audioHandlingStatus=tarStatus;
}