BGMの再生位置を制御する(minim編)

◆PROCESSING 逆引きリファレンス

 カテゴリー:音楽・演奏

BGMの再生位置を制御する(minim編)

【解説】

minimは、PROCESSINGで手軽に音楽を演奏できるライブラリです。

minimについて、より詳しく知りたい方は下記公式サイト 様を参照して下さい。

音楽の演奏では、単純に最初から最後まで順番に演奏をするだけではなく、早送りや巻き戻しを行いたい事があります。

また最後まで演奏したら最初に戻って繰り返し再生する(リピート再生)を行いたい場合もありますよね。

minim には、このような用途に利用可能な「再生位置をコントロールする機能」が備わっています。

AudioPlayer クラスの cue() メソッドを利用すると、指定したミリセカンド位置から再生を始めることが可能です。

早送りや巻き戻しを行うには、現在再生中の位置を知る必要があります。今演奏している場所から xxxミリセカンド(前後)に再生位置を移動するわけです。

現在再生中の位置は AudioPlayer クラスの position() メソッドで取得可能です。また音楽ファイル全体の演奏時間は AudioPlayer クラスの length() メソッドで取得できます。

演奏が終了すると、再生位置は自動的に音楽ファイルの最後尾に位置づけられます。この状態から引数なしで AudioPlayer クラスのplay() メソッドを発行しても、先頭から音楽が再生される事はありません。

cue_image(画像URL:illust-AC 様:任々堂工房 さん)

このような場合は、AudioPlayer クラスの rewind() メソッドで再生位置を先頭に戻してから play() メソッドを発行します。先頭から直ちに再生して良いのであれば play( 0 ) とする方法もあります(笑)。

 

【構文】

●指定した位置を再生位置にする
void  player . cue(  int millis ) ;

●再生位置を先頭にする
void  player.rewind( ) ;

●現在の再生位置を知る
int   pos  =  player.position( ) ;

●音楽ファイルの演奏時間を知る
int  len  =  player.length( ) ;

player は AudioPlayerクラスのインスタンス変数です。

【パラメータ】

millis : 再生を開始する位置(ミリセカンド)
pos    : 現在の再生位置(ミリセカンド)
len : 音楽ファイルの長さ(演奏時間。ミリセカンド)

 

【注意】

cue() メソッドについて

cue() メソッドに与えるのは、先頭からの演奏時間です。

例えば 6000ミリセカンド(6秒)の演奏時間がある音楽ファイルに cue( 4000 ) ; と指定すると、先頭から4秒経過した位置を新しい再生位置とします。

cue() メソッドに、音楽ファイルの演奏時間より大きな値を与えた場合は、再生位置が最後尾になります。0 または負の値を与えると、再生位置は先頭になります。

position() メソッドについて

position() メソッドで得られる値は、現在の再生位置です。例えば 2000 が戻ってきたとしたら、先頭から2秒間経過した場所がその時点の再生位置だという事になります。

当然ですが、演奏中は刻一刻と再生位置が変化します。position() で得られる値も変化する事になるので注意して下さい。

length() メソッドについて

lenght() メソッドで得られる値は、loadFile() メソッドで読み込んだ音楽ファイルのトータル演奏時間です。例えば 5000 が戻ってきたとしたら、全部で5秒間の演奏時間があるという事になります。

rewind() メソッドについて

rewind()メソッドは、再生位置を必ず音楽ファイルの先頭に位置づけます。minim の内部では cue ( 0 ) ; と同じ処理を行っています。

rewind() しても再生を開始するわけではありません。あくまで再生位置を変更するのみです。

 

【関連記事】


サンプルプログラム

再生位置を先頭に巻き戻す例:

マウスをクリックすると演奏を開始します。

毎回からなず音楽ファイルの先頭から再生されるように、play()する前に rewind() メソッドで再生位置を先頭に巻き戻しています。

<出力サンプル>
rewind_sample

ミニ音楽プレーヤー例:

ちょっとした音楽プレーヤーです。巻き戻し、再生、一時停止、早送りが可能です。

一時停止中に再度停止ボタンを押すと、停止していた箇所から続きを演奏します。再生ボタンを押した場合は、必ず先頭から演奏を行います。

早送り、巻き戻しボタンの処理で、cue() メソッドを利用しています。またシークバーを伸ばす処理で、position() メソッドにより現在の再生位置を取得しています。

<出力サンプル>

miniplayer
(画像URL:illust-AC 様:川竜 さん)

下記はサンプルプログラムと同じ動きになるように、 P5.js+P5.sound で書き直したものです。動作イメージを確認できます。

なおブラウザーのSOUND API ( P5.sound )とminim の仕様の違いにより、上記サンプルプログラムと下記動作例は、すこしだけ異なっています。

  • P5.sound では再生位置は秒単位の表示になる
  • 早送りを連打すると動作が不安定・・・(汗)

※ブラウザーによっては下記サンプルが表示されない事があります。IE11はNGでした。動作イメージを確認したい方は、FireFox、Chrome、Edgeなどでお試しください。

演奏される音楽は、魔王魂 様から拝借しました。物凄くカッコイイ音楽です。ありがとうございます。


PROCESSING逆引きリファレンス一覧 へ戻る

本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。