そもそも正しかったことがわかりました。エラーは別の場所にありました。フォントを埋め込むのを忘れていました:/
それにもかかわらず、同様のものを構築する人のために、ここに完全なコードがあります。また、トラックを停止する方法が正しいかどうかもわからないので、改善があれば大歓迎です:)
AS3:
import flash.external.ExternalInterface;
import flash.media.Sound;
import flash.media.SoundLoaderContext;
import flash.net.URLRequest;
function playTrack(track_name) {
var s:Sound = new Sound();
soundName.text =track_name;
track_name = '/path/to/mp3/' + track_name + ".mp3";
var req:URLRequest = new URLRequest(track_name);
var context:SoundLoaderContext = new SoundLoaderContext(8000, true);
s.load(req, context);
s.play();
}
function stopAllTracks() {
SoundMixer.stopAll();
}
ExternalInterface.addCallback("playTrack", playTrack);
ExternalInterface.addCallback("stopAllTracks", stopAllTracks);
そしてjQueryでは:
// play a song
$.curPlay = '';
$(".song_play").click(function() {
var id = $(this).attr('id');
song = id.replace('play_', '');
if(song==$.curPlay){ // stop the current song if the play btn is clicked twice
$.stop_mp3();
$.curPlay = '';
return;
}
$.curPlay = song;
$.play_mp3(song);
});
$.play_mp3 = function(file){
$.stop_mp3();
$.talkToFlash("interfaceSounds").playTrack(file);
}
$.stop_mp3 = function(){
$.talkToFlash("interfaceSounds").stopAllTracks();
}
// movie referencer
$.talkToFlash = function(swfFile){
if (window.document[swfFile]) {
return window.document[swfFile];
}
if (navigator.appName.indexOf("Microsoft Internet")==-1){
if (document.embeds && document.embeds[swfFile])
return document.embeds[swfFile];
}
else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
{
return document.getElementById(swfFile);
}
}
HTML/PHP:
<div class='song_play' id='play_<?=$songID?>'>play</div>
また、Flash で開発するときに非常に役立つことがわかったので、共有する価値のあるテクニックもあります。Flash を構成するいくつかの変数を PHP で設定すると、コンテナーの外観を簡単に変更したり、キャッシュをバーストしたりできます。
<?
$swf = "mp3_player.swf?".time();
$w = 1;
$h = 1;
$mp3Player = "<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8\"
codebase = \"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0\"
width=\"$w\" height=\"$h\" id=\"interfaceSounds\" align=\"middle\">
<param name=\"allowScriptAccess\" value=\"always\" />
<param name=\"allowFullScreen\" value=\"false\" />
<param name=\"movie\" value=\"/assets/swf/$swf\" />
<param name=\"quality\" value=\"high\" />
<embed src=\"/assets/swf/$swf\" quality=\"high\" width=\"$w\"
height=\"$h\" name=\"interfaceSounds\" align=\"middle\"
allowScriptAccess=\"always\" allowFullScreen=\"false\"
type=\"application/x-shockwave-flash\"
pluginspage=\"http://www.macromedia.com/go/getflashplayer\" />
</object>";
後でphpドキュメントで、必要な場所にエコーするだけです:
<?= $mp3Player ?>