マルチトラックのオーディオループがたくさんあるサイトを作っています。これらを(javascriptなどを使用して)実装するための最良の方法は何でしょうか?
使用する必要があります:-flashまたは関連するフラッシュライブラリ
また
-html5オーディオ
または、他の何か?
オーディオループがシームレスであることが非常に重要です
これに適したライブラリは何ですか?過去に私はsoundmanagerを使用しました。ファイルは主にmp3になります。
マルチトラックのオーディオループがたくさんあるサイトを作っています。これらを(javascriptなどを使用して)実装するための最良の方法は何でしょうか?
使用する必要があります:-flashまたは関連するフラッシュライブラリ
また
-html5オーディオ
または、他の何か?
オーディオループがシームレスであることが非常に重要です
これに適したライブラリは何ですか?過去に私はsoundmanagerを使用しました。ファイルは主にmp3になります。
Flashを使用してもかまわない場合は、オーディオをインポートし、COMPLETEイベントをリッスンしてから、もう一度再生できます...
import flash.events.Event;
import flash.media.Sound;
import flash.net.URLRequest;
var snd:Sound = new Sound();
var req:URLRequest = new URLRequest("smallSound.mp3");
snd.load(req);
var channel:SoundChannel = snd.play();
channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
public function onPlaybackComplete(event:Event)
{
trace("The sound has finished playing.");
snd.play();
}
WebKitブラウザーに固執することに満足している場合は、WebAudioAPIを使用できます。
ここに、始めるためのボイラープレートの「抽象化された」コードがあります。サーバーが必要です。
<!DOCTYPE html>
<meta charset="UTF-8">
<title></title>
<div id="kickDrum"> </div> // click and will loop
<div id="snareDrum"></div> // Won't loop
<script>
var kickDrum = new audioApiKey("kickDrum","kick.mp3",true); // first argument is the div name, the next is the audio file name & url the last parameter is loop on/off. true means loop on
var snareDrum = new audioApiKey("snareDrum","snare.mp3", false);
// Below is the abstracted guts.
var context = new webkitAudioContext();
function audioApiKey(domNode,fileDirectory,loopOnOff) {
this.domNode = domNode;
this.fileDirectory = fileDirectory;
this.loopOnOff = loopOnOff;
var bufferFunctionName = bufferFunctionName;
var incomingBuffer;
var savedBuffer;
var xhr;
bufferFunctionName = function () {
var source = context.createBufferSource();
source.buffer = savedBuffer;
source.loop = loopOnOff;
source.connect(context.destination);
source.noteOn(0); // Play sound immediately
};
var xhr = new XMLHttpRequest();
xhr.open('get',fileDirectory, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function () {
context.decodeAudioData(xhr.response,
function(incomingBuffer) {
savedBuffer = incomingBuffer;
var note = document.getElementById(domNode);
note.addEventListener("click", bufferFunctionName , false);
}
);
};
xhr.send();
};
</script>
CSS
<style>
#kickDrum {
background-color:orange;
position:absolute;
top:25%;
left:25%;
width: 200px;
height:200px;
border-radius:120px;
border-style:solid;
border-width:15px;
border-color:grey;
}
#snareDrum {
background-color:orange;
position:absolute;
top:25%;
left:50%;
width: 200px;
height:200px;
border-radius:120px;
border-style:solid;
border-width:15px;
border-color:grey;
}
</style>