Web Audio APIでオーディオファイル(MP3/WAV)を読んで再生するプログラムを紹介します。http://www.html5rocks.com/ja/tutorials/webaudio/intro/ を参考にさせていただきました。
このページでは、オーディオファイルを再生します。まず、File Loadボタンを押してください。再生するファイルを読み込みます。ファイルの読み込みが成功すると"file load compleated"とポップアップが表示されます。ポップアップのOKボタンを押して下さい。その後で、再生ボタンを押してください。再生ボタンを押すと、音が鳴りますので再生ボタンを押す前に、コンピュータのボリュームの調整をお願いします。
その下のLEFT GAIN, RIGHT GAINは左右の音量を調整します。0で音が出なくなります。1で最大音量となります。
File Load
MP3フォーマット
Wavフォーマット
var audioContext=null;
var mAudioBuffer= [null,null];
var gainL;
var gainR;
var splitter;
var merger;
var audioSource;
var playflag=0;
//自動でAudioContextを作成しない方が良い
//window.addEventListener('load', init, false);
function init() {
try {
// Audio Context
if (typeof AudioContext == "function") {
audioContext = new AudioContext();
} else if (typeof webkitAudioContext == "function") {
audioContext = new webkitAudioContext();
}
// Gain Node for both channel
gainL = audioContext.createGain();
gainR = audioContext.createGain();
gainL.gain.value = 1.0;
gainR.gain.value = 1.0;
//Spliter and Merger
splitter = audioContext.createChannelSplitter(2);
merger = audioContext.createChannelMerger(2);
//Load Files
loadDogSound("https://webmidiaudio.com/Audio1/xxxx.mp3",0);
loadDogSound("https://webmidiaudio.com/Audio1/yyyy.wav",1);
}
catch(e) {
alert('Web Audio API is not supported in this browser');
}
}
//urlに置かれているファイルを読み込む
function loadDogSound(url, n) {
var request = new XMLHttpRequest();
request.open('GET', url, true);
request.responseType = 'arraybuffer';
// Decode asynchronously
//ゆっくりデコード
request.onload = function() {
audioContext.decodeAudioData(request.response, function(buffer) {
//n番目のバッファーにデータを読み込む
mAudioBuffer[n]= buffer;
}, function(){ alert('Error'); } );
}
request.send();
}
function playSound(buffer) {
//audioContextがnullなら、audioContextを生成する
if(audioContext==null) init();
//もし、再生中なら止める
if(playflag!=0) audioSource.stop(0);
//オーディオソースをクリエイトする
audioSource = audioContext.createBufferSource();
//オーディオソースのバッファーに、再生バッファーをつなぐ
audioSource.buffer = buffer;
//audiosourceを、スプリッターにつなぐ
audioSource.connect(splitter);
//スプリッターのゼロ番目の出力をgainLにつなぐ
splitter.connect(gainL, 0);
//スプリッターのイチ番目の出力をgainRにつなぐ
splitter.connect(gainR, 1);
//gainLのゼロ番目の出力をmergerのゼロ番目の入力につなぐ
gainL.connect(merger, 0, 0);
//gainRのゼロ番目の出力をmergerのイチ番目の入力につなぐ
gainR.connect(merger, 0, 1);
//mergerの出力をスピーカにつなぐ
merger.connect(audioContext.destination);
//再生スタート
audioSource.start(0);
//2重再生を防ぐために再生中フラグを上げる
playflag=1;
}
function stopSound(){
//再生停止
audioSource.stop(0);
//stopすると、次に再生する時にオーディオソースは
クリエイトしなおさなければならない!!
//再生中フラグを下げる
playflag=0;
}
function playSoundA(n) {
//n番目のバッファーを再生する
playSound(mAudioBuffer[n]);
}