1

私は自分のswfファイルに関数を持っています: playSound() これは次のようにjQuery経由で呼び出すことができます:

$.talkToFlash("interfaceSounds").playSound();

一方、「talkToFlash」は単純に swf ファイルを返します。この部分は here で十分に文書化されており、正常に機能します。

しかし、どうすればパラメータを渡すことができますか?

私はJSを信じています:

$.talkToFlash("interfaceSounds").playSound('swish.mp3');

しかし、AS3 で何をすればよいのでしょうか?

私は最初の作業機能を修正しようとしました:

function playSound() {
    var s:swishSound = new swishSound; 
    var channel:SoundChannel = s.play();
}
ExternalInterface.addCallback("playSound", playSound);

これとともに:

function playSound(mp3file) {
   trace(mp3file);
}

しかし、「mp3file」は空です。私は試した

ExternalInterface.addCallback("playSound", playSound(mp3file));

この「テーマ」の他のバリエーションがありますが、何も機能していないようです。ここで構文に苦労しているだけですか、それとももっとそこにありますか? ご協力いただきありがとうございます。

4

2 に答える 2

0

そもそも正しかったことがわかりました。エラーは別の場所にありました。フォントを埋め込むのを忘れていました:/

それにもかかわらず、同様のものを構築する人のために、ここに完全なコードがあります。また、トラックを停止する方法が正しいかどうかもわからないので、改善があれば大歓迎です:)

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 ?>
于 2012-09-09T22:12:40.307 に答える
0

あなたはほとんどそこにいるようです。ここに改訂があります。それが機能するかどうか教えてください。

function playSound(mp3file::String) {
  trace(mp3file);
}

ExternalInterface.addCallback("playSound", playSound);

参照: http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7cb2.html

于 2012-09-09T10:19:23.557 に答える