| 1 | /** |
|---|
| 2 | * Extra audiotrack management of the players MCV pattern. |
|---|
| 3 | * |
|---|
| 4 | * @author Jeroen Wijering |
|---|
| 5 | * @version 1.1 |
|---|
| 6 | **/ |
|---|
| 7 | |
|---|
| 8 | |
|---|
| 9 | import com.jeroenwijering.players.*; |
|---|
| 10 | |
|---|
| 11 | class com.jeroenwijering.players.AudioView extends AbstractView { |
|---|
| 12 | |
|---|
| 13 | |
|---|
| 14 | /** The MovieClip to which the sounds will be attached **/ |
|---|
| 15 | private var audioClip:MovieClip; |
|---|
| 16 | /** The Sound object we'll use**/ |
|---|
| 17 | private var audioObject:Sound; |
|---|
| 18 | /** Currently active feeditem **/ |
|---|
| 19 | private var currentItem:Number; |
|---|
| 20 | /** The current elapsed time **/ |
|---|
| 21 | private var currentTime:Number = 0; |
|---|
| 22 | /** The last stop position **/ |
|---|
| 23 | private var stopTime:Number; |
|---|
| 24 | /** The current audio time **/ |
|---|
| 25 | private var audioTime:Number; |
|---|
| 26 | /** Save the current state **/ |
|---|
| 27 | private var currentState:Number; |
|---|
| 28 | /** Check whether an MP3 file is loaded **/ |
|---|
| 29 | private var isLoaded:String; |
|---|
| 30 | /** Sync the audio with emtry or not **/ |
|---|
| 31 | private var sync:Boolean; |
|---|
| 32 | |
|---|
| 33 | |
|---|
| 34 | /** Constructor, loads caption file. **/ |
|---|
| 35 | function AudioView(ctr:AbstractController,cfg:Object,fed:Object, |
|---|
| 36 | snc:Boolean) { |
|---|
| 37 | super(ctr,cfg,fed); |
|---|
| 38 | sync = snc; |
|---|
| 39 | var ref = this; |
|---|
| 40 | audioClip = config['clip'].createEmptyMovieClip('audio', |
|---|
| 41 | config['clip'].getNextHighestDepth()); |
|---|
| 42 | audioClip.setStart = function() { |
|---|
| 43 | if(ref.stopTime == undefined && ref.sync == false) { |
|---|
| 44 | ref.audioObject.loadSound(ref.feeder.feed[0]['audio'],true); |
|---|
| 45 | ref.audioObject.setVolume(Number(ref.config['volume'])); |
|---|
| 46 | ref.audioObject.start(0); |
|---|
| 47 | } else if (ref.sync == false) { |
|---|
| 48 | ref.audioObject.start(ref.stopTime); |
|---|
| 49 | } else if(ref.currentState == 2) { |
|---|
| 50 | ref.audioObject.start(ref.currentTime); |
|---|
| 51 | } |
|---|
| 52 | }; |
|---|
| 53 | audioClip.setStop = function() { |
|---|
| 54 | ref.audioObject.stop(); |
|---|
| 55 | ref.stopTime = ref.audioObject.position/1000; |
|---|
| 56 | }; |
|---|
| 57 | audioObject = new Sound (audioClip); |
|---|
| 58 | if(config['useaudio'] == "true" && sync == false) { |
|---|
| 59 | audioClip.setStart(); |
|---|
| 60 | } |
|---|
| 61 | if(sync == false) { |
|---|
| 62 | audioObject.onSoundComplete = function() { |
|---|
| 63 | this.start(); |
|---|
| 64 | }; |
|---|
| 65 | } |
|---|
| 66 | }; |
|---|
| 67 | |
|---|
| 68 | |
|---|
| 69 | private function setItem(idx:Number) { |
|---|
| 70 | currentItem = idx; |
|---|
| 71 | }; |
|---|
| 72 | |
|---|
| 73 | |
|---|
| 74 | private function setState(stt:Number) { |
|---|
| 75 | currentState = stt; |
|---|
| 76 | if(sync == false) { return; } |
|---|
| 77 | if(stt == 2 && config['useaudio'] == "true") { |
|---|
| 78 | audioObject.start(currentTime); |
|---|
| 79 | } else { |
|---|
| 80 | audioObject.stop(); |
|---|
| 81 | } |
|---|
| 82 | }; |
|---|
| 83 | |
|---|
| 84 | |
|---|
| 85 | private function setTime(elp:Number,rem:Number) { |
|---|
| 86 | if(sync == false) { return; } |
|---|
| 87 | if(Math.abs(elp-currentTime) > 1) { |
|---|
| 88 | currentTime = elp; |
|---|
| 89 | audioTime = audioObject.position/1000; |
|---|
| 90 | if(Math.abs(currentTime - audioTime) > 1 && |
|---|
| 91 | config['useaudio'] == "true") { |
|---|
| 92 | audioObject.start(currentTime); |
|---|
| 93 | } |
|---|
| 94 | } |
|---|
| 95 | if (isLoaded != feeder.feed[currentItem]['audio']) { |
|---|
| 96 | isLoaded = feeder.feed[currentItem]['audio']; |
|---|
| 97 | audioObject.loadSound(isLoaded,true); |
|---|
| 98 | audioObject.setVolume(Number(config['volume'])); |
|---|
| 99 | } |
|---|
| 100 | }; |
|---|
| 101 | |
|---|
| 102 | |
|---|
| 103 | } |
|---|