Glad to hear it is all working. Cheers, Aran
On Wed, Nov 30, 2011 at 4:36 PM, Arknath <[email protected]> wrote: > 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. > > -- 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.
