That solved my problem!  Thanks so much for the help.  Everything is
playing and stopping with ease.

Really appreciate it.



On Nov 29, 5:54 pm, Aran Rhee <[email protected]> wrote:
> ExternalInterface.call(resetPlay); needs to be
>
> ExternalInterface.call("resetPlay");
>
> (the param is a String)
>
> See more 
> here:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl...()
>
> A
>
>
>
>
>
>
>
> On Tue, Nov 29, 2011 at 5:19 PM, Arknath <[email protected]> wrote:
> > Thanks for the quick response!  I think I've made some progress as to
> > what I'm doing here...learning as I go. :)
>
> > 1) From what it seems, the code is not designed to take the mp3
> > variable initially.  With some slight changes to my own code, I've got
> > this calling the doPlay and stopPlay functions appropriately.  (I'll
> > post new code below)
>
> > 2) This was my fault.  I thought I needed to destroy the SWF and
> > recreate it every time.  Silly me...I have since fixed that (as you'll
> > soon see)
>
> > 3) I did look at this more closely and this is something I was hoping
> > for from the resetPlay function.  When the music stops (i.e. when
> > stopPlay has successfully executed) I want the JS to know that so that
> > I can reset a style to the original state (basically change a "stop"
> > button back to a "play" button).  I thought the resetPlay callback was
> > going to do that for me, no such luck.
>
> > I have this working exactly the way I want except for that last issue
> > of the JS knowing when the song has stopped playing.  Thanks for the
> > help, as your suggestions were correct.  One more piece and I think i
> > have this thing licked. :)
>
> > On Nov 29, 4:03 pm, Aran Rhee <[email protected]> wrote:
> > > A couple of things which stand out:
>
> > > 1) I don't see anywhere in your pasted Flash code which deals with a
> > Flash
> > > var called "mp3", so I am unsure if there is more to the code or if the
> > swf
> > > is not designed to take the mp3 var initially...
>
> > > 2) As you have a proper ExternalInterface method which loads / kills
> > > external sounds etc, you shouldn't ever need to destroy/recreate your swf
> > > (unless you are using the same dom element to load other swfs/content.
>
> > > 3) I would listen for the "resetPlay" function call in your html/js code,
> > > as this tells you when the swf is loaded/external interface is all set up
> > > etc. You are then safe to call doPlay(), stopPlay() etc on your swf.
>
> > > 4) Have a look at the EI example o the test suite to see how the code
> > > checks for the existence of functions / wires up the html buttons etc:
>
> > >http://www.bobbyvandersluis.com/swfobject/testsuite_2_2/test_dynamic_...
>
> > > with embed callback:
> >http://www.bobbyvandersluis.com/swfobject/testsuite_2_2/test_dynamic_...
>
> > > Cheers,
> > > Aran
>
> > > On Tue, Nov 29, 2011 at 2:59 PM, Arknath <[email protected]> wrote:
> > > > Hi all,
>
> > > > New to the group, so hi!
>
> > > > Having an issue getting my JS to call ActionScript (AS) functions.
>
> > > > Scenario:
>
> > > > Have a page full of ringtones (15-25) and want to have the ability to
> > > > play a preview before purchase.  Using a single file (ringtone.swf)
> > > > that has ActionScript that looks like this (I did not write this AS):
>
> > > > import flash.external.*;
>
> > > > ExternalInterface.addCallback("stopPlay", this, stopPlay);
> > > > ExternalInterface.addCallback("doPlay", this, doPlay);
>
> > > > _global.mySong = null;
> > > > _global.duration = null;
> > > > _global.position = null;
> > > > _global.playingID = null;
> > > > _global.streamingID = null;
> > > > _global.absoluteURL = "/url/where/ringtone/stored/ringtone.php?id=";
>
> > > > function formatTime(millis) {
> > > >        var mins = Math.floor(millis / 60000);
> > > >        var remaining = millis - (mins * 60000);
> > > >        var secs = Math.floor(remaining / 1000);
> > > >        if(secs < 10){
> > > >                secs = '0' + secs;
> > > >        }
> > > >        return mins + ':' + secs;
> > > > }
>
> > > > var tooLong = 0;
>
> > > > function displayStreaming(mySound, where) {
> > > >        if(tooLong++ > 3000) {
> > > >            ExternalInterface.call('alert', "We're sorry, it appears
> > that
> > > > this ringtone isn't available for listening at this time.  Please try
> > > > again later.");
> > > >        clearInterval(streamingID);
> > > >                stopPlay();
> > > >        tooLong = 0;
> > > >        } else if(mySound.duration > 0) {
> > > >                if(mySound.getBytesLoaded() == mySound.getBytesTotal())
> > {
> > > >                        clearInterval(streamingID);
> > > >                        ExternalInterface.call(isLoaded);
> > > >            tooLong = 0;
> > > >                }
> > > >                where.text = formatTime(mySound.duration);
> > > >        }
> > > > }
>
> > > > function displayPosition(mySound, where) {
> > > >    if(mySound.position > 0){
> > > >        if(mySound.position == mySound.duration) {
> > > >            clearInterval(playingID);
> > > >        }
> > > >        where.text = formatTime(mySound.position);
> > > >    }
> > > > }
>
> > > > function doPlay(mp3){
> > > >    theSong = loc + absoluteURL + mp3;
>
> > > >    clearInterval(streamingID);
> > > >    clearInterval(playingID);
>
> > > >    if(typeof mySong == "object") {
> > > >        mySong.stop();
> > > >        delete mySong;
> > > >    }
>
> > > >    duration.text = '0:00';
> > > >    position.text = '0:00';
>
> > > >    mySong = new Sound();
> > > >    mySong.loadSound(theSong, true);
>
> > > >    streamingID = setInterval(displayStreaming, 1, mySong, duration);
> > > >    playingID = setInterval(displayPosition, 1, mySong, position);
>
> > > >    mySong.onSoundComplete = function(){ stopPlay(); }
> > > > }
>
> > > > function stopPlay() {
> > > >    duration.text = "0:00";
> > > >    position.text = "0:00";
>
> > > >    mySong.stop();
> > > >    delete mySong;
>
> > > >    clearInterval(streamingID);
> > > >    clearInterval(playingID);
>
> > > >    ExternalInterface.call(resetPlay);
> > > > }
>
> > > > function initSound() {
> > > >    duration = _root.total_txt;
> > > >    position = _root.time_txt;
> > > > }
>
> > > > initSound();
>
> > > > My JS looks like this:
>
> > > > //Embeded <object> ID
> > > > var embed_id = "ringtone";
>
> > > > //Global SWFObject vars
> > > > var player = "myContent";
> > > > var audio_file = "/assets/swf/ringtone.swf";
> > > > var player_width = '16';
> > > > var player_height = '16';
> > > > var flash_ver = "9.0.0";
> > > > var express_install = false;
> > > > var params = {allowScriptAccess: "always", swliveconnect: "true",
> > > > wmode: "transparent"};
> > > > var attributes = {id:embed_id,name:embed_id};
> > > > var call_backs = function(){};
>
> > > > //Gets current site URL
> > > > var base_url = "http://"; + window.location.hostname + "/
> > > > product/";
>
> > > > function loadSWF(preview_id){
>
> > > >    //SWFObject Vars
> > > >    var flashvars = {loc: base_url};//, mp3: preview_id};
> > > >    //var flashvars = {};
>
> > > >        swfobject.embedSWF(audio_file, player, player_width,
> > player_height,
> > > > flash_ver, express_install, flashvars, params, attributes,
> > > > call_backs);
> > > > }
>
> > > > //Determines the existence or absence of a previously embedded swf
> > > > file
> > > > function swfExists(obj_id){
> > > >    var exists = false;
> > > >    var object_tag = $("#"+obj_id);
>
> > > >    if(object_tag && (object_tag.is("object") ||
> > > > object_tag.is("embed"))){
> > > >        exists = true;
> > > >    }
> > > > console.log("Exists: " +exists);
> > > >    return exists;
> > > > }
>
> > > > $(document).ready(function(){
>
> > > >   $(".ringtone-preview").on("click",function(e){
> > > >        e.preventDefault();
> > > >        var preview_id = $(this).attr('id');
> > > > console.log("Preview ID:" + preview_id);
> > > >        //check to see if object exists
> > > >        if(swfExists(embed_id)){
> > > > console.log("Secondary click");
> > > >            swfobject.removeSWF(embed_id);
> > > >            $("body").append("<div id='"+player+"'></div>");
> > > >            loadSWF(preview_id);
> > > >        }else{
> > > > console.log("Primary click");
> > > >            loadSWF(preview_id);
> > > >        }
>
> > > >        var obj = document.getElementById(embed_id);
> > > > console.log(obj);
> > > >        if (obj){
> > > >            obj.doPlay(preview_id);
> > > > console.log("Playing");
> > > >        }
> > > >    });
> > > > });
>
> > > > I get an error when it gets to the "obj.doPlay(preview_id)" line that
> > > > reads:
>
> > > > obj.doPlay is not a function
>
> > > > If run loadSWF without the "mp3 : preview_id" piece commented out,
> > > > then it plays the ringtone.  However, I want to be able to access the
> > > > stopPlay() function if the user fires the .ringtone-preview event
> > > > again.
>
> > > > I feel i'm almost there...just need access to the flash script.
>
> > > > Any help is appreciated.
>
> > > > --
> > > > You received this message because you are subscribed to the Google
> > Groups
> > > > "SWFObject" group.
> > > > To post to this group, send email to [email protected].
> > > > To unsubscribe from this group, send email to
> > > > [email protected].
> > > > For more options, visit this group at
> > > >http://groups.google.com/group/swfobject?hl=en.
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "SWFObject" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected].
> > For more options, visit this group at
> >http://groups.google.com/group/swfobject?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"SWFObject" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/swfobject?hl=en.

Reply via email to