Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-01-2007, 14:29   #1 (permalink)
class public{}
 
Benutzerbild von public
 
Registriert seit: Feb 2004
Ort: dessau
Beiträge: 1.406
[stuff] - Audio Klasse

bitte scheen...*g*

....würde mich natürlich gerne über rückmeldungen freuen...*g*


ein kommentiertes bsp findet ihr im datei anhang



KONSTRUKTOR:
new Audio (target:MovieClip, external:Boolean)

PROPERTIES:
target:MovieClip [read]
status:String [read]
soundObject:Sound [read]
percentLoaded:Number [read]
percentPlayed:Number [read]
bytesLoaded:Number [read]
totalBytes:Number [read]
length:Number [read]
playTime:String [read]
totalTime:String [read]
volume:Number [read, write]
balance:Number [read, write]
seek:Number [read, write]

EVENTS:
onProgress
onLoadComplete
onFade
onFadeComplete
onAudioComplete

METHODES:
Audio.createTarget (timeline:MovieClip, name:String, depth:Number):MovieClip
load (url:String, stream:Boolean):Audio
attach (id:String):Audio
play (sec:Number, loop:Number):Audio
pause ():Audio
stop ():Audio
fadeVolume (value:Number, easeType:Function, duration:Number, useSeconds:Boolean):Audio
fastWind (tempo:Number, direction:Boolean):Audio
stopFastWind():Audio


Klasse:
PHP-Code:
import mx.transitions.Tween;
class 
djpublic.media.audio.Audio {
    private var 
_status:String "STOP";
    private var 
_newPos:Number 0;
    private var 
_loop:Number 0;
    private var 
_target:MovieClip;
    private var 
_sound:Sound null;
    private var 
_external:Boolean true;
    private var 
_windIntervalID:Number;
    
//
    
private var _seek:Number 0;
    private var 
_length:Number;
    private var 
_balance:Number 0;
    private var 
_volume:Number 100;
    private var 
_percentLoaded:Number;
    private var 
_bytesLoaded:Number;
    private var 
_totalBytes:Number;
    private var 
_playTime:String;
    private var 
_totalTime:String;
    private var 
_percentPlayed:Number;
    
//
    
public var onProgress:Function;
    public var 
onLoadComplete:Function;
    public var 
onFade:Function;
    public var 
onFadeComplete:Function;
    public var 
onAudioComplete:Function;
    
//
    
private var addListener:Function;
    private var 
broadcastMessage:Function;
    public var 
removeListener:Function;
    
//
    // GETTER/SETTER FOR PROPERTIES
    //
    // status
    
public function get status ():String {
        return 
this._status;
    }
    
// target
    
public function get target ():MovieClip {
        return 
this._target;
    }
    
// soundObject
    
public function get soundObject ():Sound {
        return 
this._sound;
    }
    
// percentLoaded
    
public function get percentLoaded ():Number {
        
this._percentLoaded this._sound.getBytesLoaded () / this._sound.getBytesTotal () * 100;
        return 
this._percentLoaded;
    }
    
// percentPlayed
    
public function get percentPlayed ():Number {
        
this._percentPlayed this.seek this.length 100;
        return 
this._percentPlayed;
    }
    
// bytesLoaded
    
public function get bytesLoaded ():Number {
        
this._bytesLoaded this._sound.getBytesLoaded ();
        return 
this._bytesLoaded;
    }
    
// bytesTotal
    
public function get totalBytes ():Number {
        
this._totalBytes this._sound.getBytesTotal ();
        return 
this._totalBytes;
    }
    
// volume
    
public function set volume (value):Void {
        
this._volume value;
        
this._sound.setVolume (value);
    }
    public function 
get volume ():Number {
        
this._volume this._sound.getVolume ();
        return 
this._volume;
    }
    
// balance
    
public function set balance (value:Number):Void {
        
this._balance value;
        
this._sound.setPan (value);
    }
    public function 
get balance ():Number {
        
this._balance this._sound.getPan ();
        return 
this._balance;
    }
    
// seek
    
public function set seek (value:Number):Void {
        if (
this._status == "PLAY") {
            
this._sound.stop ();
            
this._seek value;
            
this._newPos value;
            
this._sound.start (this._seek 1000this._loop);
        }
    }
    public function 
get seek ():Number {
        
this._seek this._sound.position;
        return 
this._seek;
    }
    
// length
    
public function get length ():Number {
        if (
this.percentLoaded 100) {
            
this._length int (this._sound.duration this._sound.getBytesTotal () / this._sound.getBytesLoaded ());
            return 
this._length;
        } else {
            return 
this._sound.duration;
        }
    }
    
// playTime
    
public function get playTime ():String {
        var 
posit:Number this.seek 1000;
        var 
min:Number int (posit 60);
        var 
sec:Number int (posit 60);
        
this._playTime this.checkZeros (min) + ":" this.checkZeros (sec);
        return 
this._playTime;
    }
    
// totalTime
    
public function get totalTime ():String {
        var 
posit:Number this.length 1000;
        var 
min:Number int (posit 60);
        var 
sec:Number int (posit 60);
        
this._totalTime this.checkZeros (min) + ":" this.checkZeros (sec);
        return 
this._totalTime;
    }
    
//
    // KONSTRUKTOR
    //
    
function Audio (target:MovieClipexternal:Boolean) {
        
this._external external == undefined external true external external;
        
this._target target;
        
this._external external;
        
AsBroadcaster.initialize (this);
        
this.addListener (this);
    }
    
//
    // function toString ():String
    //
    
public function toString ():String {
        return 
"[Audio]";
    }
    
//
    // Audio.createTarget (timeline:MovieClip, name:String, depth:Number):Object
    //
    
public static function createTarget (timeline:MovieClipname:Stringdepth:Number):MovieClip {
        var 
mc:MovieClip timeline.createEmptyMovieClip (namedepth);
        return 
mc;
    }
    
//
    // load (url:String, stream:Boolean):Audio
    //
    
public function load (url:Stringstream:Boolean):Object {
        if (
this._external) {
            var 
ref:Object this;
            
this._sound = new Sound (this._target);
            
this._sound.loadSound (urlstream);
            
this.volume 100;
            if (
stream) {
                
this._status "PLAY";
            } else {
                
this._status "STOP";
            }
            
this._target.onEnterFrame = function ():Void  {
                
ref.broadcastMessage ("onProgress");
            };
            
this._sound.onLoad = function ():Void  {
                
ref.broadcastMessage ("onLoadComplete");
                
delete ref._target.onEnterFrame;
            };
            
this._sound.onSoundComplete = function ():Void  {
                
ref.broadcastMessage ("onAudioComplete");
            };
        }
        return 
this;
    }
    
//
    // attach (id:String):Object
    //
    
public function attach (id:String):Object {
        if (!
this._external) {
            var 
ref:Object this;
            
this._status "STOP";
            
this._sound = new Sound (this._target);
            
this._sound.attachSound (id);
            
this._sound.onSoundComplete = function ():Void  {
                
ref.broadcastMessage ("onAudioComplete");
            };
        }
        return 
this;
    }
    
//
    // play (sec:Number, loop:Number):Object
    //
    
public function play (sec:Numberloop:Number):Object {
        if (
this._status == "STOP") {
            
this._loop loop;
            
this._sound.start (secloop);
            
this._status "PLAY";
        }
        if (
this._status == "PAUSE") {
            
this._sound.start (this._newPos 1000loop);
            
this._status "PLAY";
        }
        return 
this;
    }
    
//
    // pause ():Object
    //
    
public function pause ():Object {
        if (
this._status == "PLAY") {
            
this._sound.stop ();
            
this._newPos this._sound.position;
            
this._status "PAUSE";
        }
        return 
this;
    }
    
//
    // stop ():Object
    //
    
public function stop ():Object {
        if (
this._status == "PLAY") {
            
this._sound.stop ();
            
this._status "STOP";
        }
        return 
this;
    }
    
//
    // fadeVolume (value:Number, easeType:Function, duration:Number, useSeconds:Boolean):Object
    //
    
public function fadeVolume (value:NumbereaseType:Function, duration:NumberuseSeconds:Boolean):Object {
        if (
value != this.volume) {
            var 
ref:Object this;
            var 
o:Object = {};
            
this.broadcastMessage ("onFade");
            var 
tween:Tween = new Tween (o"vol"easeTypethis.volumevaluedurationuseSeconds);
            
tween.onMotionChanged = function ():Void  {
                
ref.volume o.vol;
            };
            
tween.onMotionFinished = function ():Void  {
                
ref.broadcastMessage ("onFadeComplete");
            };
        }
        return 
this;
    }
    
//
    // fastWind (tempo:Number, dir:Boolean):Object
    //
    
public function fastWind (tempo:Numberdirection:Boolean):Object {
        var 
ref:Object this;
        if (
direction) {
            
tempo tempo;
        } else {
            
tempo tempo * -1;
        }
        
this._windIntervalID setInterval (function ():Void {
            
ref.seek += tempo;
        }, 
20);
        return 
this;
    }
    
//
    // stopFastWind ():Object
    //
    
public function stopFastWind ():Object {
        
clearInterval (this._windIntervalID);
        return 
this;
    }
    
//
    // checkZeros (value:Number):String
    //
    
private function checkZeros (value:Number):String {
        if (
value 10) {
            return 
"0" value;
        } else {
            return 
"" value;
        }
    }

Angehängte Dateien
Dateityp: zip audio.zip (15,7 KB, 81x aufgerufen)
public ist offline   Mit Zitat antworten
Alt 21-01-2007, 14:42   #2 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Is das jetzt ein Update deiner schon mal geposteten Audio-Klasse?
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist offline   Mit Zitat antworten
Alt 21-01-2007, 14:45   #3 (permalink)
class public{}
 
Benutzerbild von public
 
Registriert seit: Feb 2004
Ort: dessau
Beiträge: 1.406
ne habs komplett ne geschrieben...deshalb der extra thread und an dem teil werd ik auch weiterarbeiten....dh....vll ne AudioPlayer subklasse oder ne player komponente....usw....
public ist offline   Mit Zitat antworten
Alt 21-01-2007, 15:57   #4 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
rückmeldung:

was hälst du von Audio extends Sound und dafür das soundobject in der klasse sparen.
michael ist offline   Mit Zitat antworten
Alt 21-01-2007, 16:02   #5 (permalink)
class public{}
 
Benutzerbild von public
 
Registriert seit: Feb 2004
Ort: dessau
Beiträge: 1.406
davaon halte ik überhaupt nix...denn wenn man zb in einem sound object mehrere mp3 s nacheinander läd (mp3 player) muss das soundobject bei jedem neuen track überschrieben werden da sonst die eigenschaften position und duration nicht mehr bei 0 anfangen sondern einfach weiterlaufen und das ist ja net sinn und zweeck der schae deshalb wird das soundobject bei jedem load und attach eiunfach überschriebe und es haut wieder hin....deshalb keine vererbung mit der Sound klasse
public ist offline   Mit Zitat antworten
Alt 21-01-2007, 16:15   #6 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
achso, naja wär mir so zu unflexibel.
ich würde einen ExtendedSound extends Sound erstellen,
der die soundklasse sinnvoll um fades und anderes erweitert,
und eine SoundManager-Klasse die per Factorymethode
ExtendedSounds erstellt und dabei das Zeitleistenhandling
und das nachladen erledigt.

jeder wie er mag, aber mach mit deiner klasse mal ein
crossfade zwischen zwei sounds (brauch ich ständig)
michael ist offline   Mit Zitat antworten
Alt 21-01-2007, 16:19   #7 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
Hm, ich hätte mir eine Factory gebaut, in der ich eigene Sounds kapsel. Jeder Sound ein eigenes Objekt damit ich damit flexibel arbeiten kann...
Omega Psi ist offline   Mit Zitat antworten
Alt 21-01-2007, 16:23   #8 (permalink)
class public{}
 
Benutzerbild von public
 
Registriert seit: Feb 2004
Ort: dessau
Beiträge: 1.406
würd ik so machen
PHP-Code:
import djpublic.media.audio.Audio;
var 
con1:MovieClip Audio.createTarget (this"__con1"1);
var 
con2:MovieClip Audio.createTarget (this"__con2"2);
var 
audio1:Audio = new Audio (con1true);
var 
audio2:Audio = new Audio (con2true);
audio1.load ("song1.mp3"true);
audio2.load ("song2.mp3"true);
audio1.volume 100;
audio2.volume 0;
onMouseDown = function ():Void {
    
audio1.fadeVolume (0None.easeNone10true);
    
audio2.fadeVolume (100None.easeNone10true);
}; 
public ist offline   Mit Zitat antworten
Alt 21-01-2007, 16:47   #9 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
Zitat:
Zitat von public Beitrag anzeigen
würd ik so machen
PHP-Code:
import djpublic.media.audio.Audio;
var 
con1:MovieClip Audio.createTarget (this"__con1"1);
var 
con2:MovieClip Audio.createTarget (this"__con2"2);
var 
audio1:Audio = new Audio (con1true);
var 
audio2:Audio = new Audio (con2true);
audio1.load ("song1.mp3"true);
audio2.load ("song2.mp3"true);
audio1.volume 100;
audio2.volume 0;
onMouseDown = function ():Void {
    
audio1.fadeVolume (0None.easeNone10true);
    
audio2.fadeVolume (100None.easeNone10true);
}; 
eben das mein ich, dann bist du ohnehin wieder mit 2 Audio-instanzen dabei.
bei mir sähe es ungefähr so aus:
PHP-Code:
import com.kneibrider.sound.*

var 
sm:SoundManager = new SoundManager(this"allSounds"99);

var 
sound1:ExtendedSound sm.createSoundObject()
var 
sound2:ExtendedSound sm.createSoundObject()

sound1.load("1.mp3"true);
sound2.load("2.mp3"true);

sound1.setVolume(100)
sound2.setVolume(0)

onMouseDown = function ():Void {
    
sound1.fadeTo (0None.easeNone1000);
    
sound2.fadeTo (100None.easeNone1000);
    
//vieleicht auch so
    
sm.crossFade(sound1sound2None.easeNone1000)
    
}; 
ich hab natürlich auch 2 soundinstanzen, aber die
muss ich nicht neu erfinden, da sie vom soundobjekt erben.
und nur z.b. um das faden erweitert wurden.

Geändert von michael (21-01-2007 um 16:48 Uhr)
michael ist offline   Mit Zitat antworten
Alt 21-01-2007, 16:59   #10 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
Ich würde beides machen... eine Manager-Klasse und auch eigene Soundobjekte. Die Managerklasse verwaltet dann die Sounds.

Ich würde aber def auch nicht von Sound erben, da ich keine Soundfunktionalitäten erweitere, sondern MovieClips/Objekte anbieten will, die Sound zur Verfügung stellen.
Omega Psi ist offline   Mit Zitat antworten
Alt 21-01-2007, 17:12   #11 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
Ich denke ich würde doch auch von Sound erben.
Omega Psi ist offline   Mit Zitat antworten
Alt 08-06-2007, 18:56   #12 (permalink)
class public{}
 
Benutzerbild von public
 
Registriert seit: Feb 2004
Ort: dessau
Beiträge: 1.406
so nun alles überarbeitet....

Code:
fresh.media.audio.Audio extends fresh.core.Broadcaster
	
	Eigenschaften:
		static bufferTime:Number [read, write]
		bytesLoaded:Number [read]
		totalBytes:Number [read]
		percentLoaded:Number [read]
		stream:Boolean [read]
		listeners:Array [read]
	
	Methoden:
		new Audio(target:MovieClip)
		getAudioClip(url:String, stream:Boolean):Void
		toString():String
		addListener(obj:Object):Boolean;
		removeListener(obj:Object):Boolean;
		fireEvent(evt:String):Void;
		
	Events:
		onLoadStart = function():Void{}
		onLoadProgress = function(bytesLoaded:Number, totalBytes:Number, percentLoaded:Number):Void{}
		onLoadFinish = function():Void{}
		
		
fresh.media.audio.AudioController extends fresh.core.Broadcaster

	Eigenschaften:
		length:Number [read]
		loadedLength:Number [read]
		seek:Number [read, write]
		percentSeek:Number [read, write]
		percentPlayed:Number [read]
		status:String [read]
		
	Konstanten:
		static PLAY:String
		static PAUSE:String
		static STOP:String
		
	Methoden:
		new AudioController(audio:Audio)
		play():Void
		pause():Void
		stop():Void
		fForward():Void
		fRewind():Void
		fStop():Void
		toString():String
		addListener(obj:Object):Boolean;
		removeListener(obj:Object):Boolean;
		fireEvent(evt:String):Void;
		
	Events:
		onAudioFinish = function():Void{}
		
		
fresh.media.audio.AudioMixer extends fresh.core.Broadcaster

	Eigenschaften:
		volume:Number [read, write]
		balance:Number [read, write]
		transform:Object [read, write];
		listeners:Array [read]
		
	Methoden:
		new AudioMixer(audio:Audio)
		volumeTo(volume:Number, easeType:Function, duration:Number, seconds:Boolean)
		balanceTo(balance:Number, easeType:Function, duration:Number, seconds:Boolean)
		transformTo(transform:Object, easeType:Function, duration:Number, seconds:Boolean)
		toString():String
		addListener(obj:Object):Boolean;
		removeListener(obj:Object):Boolean;
		fireEvent(evt:String):Void;
		
	Events:
		onVolumeTweenStart = function():Void{}
		onVolumeTweenFinish = function():Void{}
		onBalanceTweenStart = function():Void{}
		onBalanceTweenFinish = function():Void{}
		onTransformTweenStart = function():Void{}
		onTransformTweenFinish = function():Void{}
		
		
fresh.media.audio.AudioTransform

	Konstanten:
		static MONO:Object
		static STEREO:Object
		static LEFT:Object
		static RIGHT:Object
		
		
fresh.media.audio.AudioDisplay

	Eigenschaften:
		currentSeconds:String [read]
		currentMinutes:String [read]
		totalSeconds:String [read]
		totalMinutes:String [read]
		
	Methoden:
		new AudioDisplay(audioController:AudioController)

hier nun ein bsp (bitte net übers design lachen, musste schnell gehn)

anschaun

download mit allen klassen

bsp code:
PHP-Code:
import fresh.media.audio.*;

var 
track:String "02.mp3"// <---- hier Pfad zu einer mp3 eingeben

// Pufferungszeit setzen
Audio.bufferTime 10;


var 
audio:Audio;
var 
controller:AudioController;
var 
mixer:AudioMixer;
var 
display:AudioDisplay;

var 
o:Object = {};
var 
seekPressed:Boolean false;
var 
volPressed:Boolean false;

// Audio
/*
* Audio(target:MovieClip)
*/
audio = new Audio(this);

// Audio Events
o.onLoadStart = function():Void{
    
trace("Audio: onLoadStart");
    
progress_mc._xscale 0;
};
o.onLoadProgress = function(bytesLoaded:NumbertotalBytes:NumberpercentLoaded:Number):Void{
    
trace("Audio: " percentLoaded);
    
progress_mc._xscale percentLoaded;
};
o.onLoadFinish = function():Void{
    
trace("Audio: onLoadFinish");
};

// Audioclip laden
/*
* getAudio(url:String, extern:Boolean, stream:Boolean):Void
*/
audio.getAudioClip(tracktrue);

// AudioController
/*
* AudioController(audio:Audio)
*/
controller = new AudioController(audio);

// AudioController Events
o.onAudioFinish = function():Void{
    
trace("AudioController: onAudioFinish");
};

// AudioMixer
/*
* AudioMixer(audio:Audio)
*/
mixer = new AudioMixer(audio);
mixer.volume 30;

// AudioDisplay
/*
* AudioDisplay(audioController:AudioController)
*/
display = new AudioDisplay(controller);


// addListener
audio.addListener(o);
controller.addListener(o);


// onEnterFrame Schleife 
onEnterFrame = function():Void{
    
// display_txt
    
display_txt.text display.currentMinutes ":" display.currentSeconds " / " display.totalMinutes ":" display.totalSeconds;
    
    
// seek
    
if(seekPressed && bgSeek_mc._xmouse bgSeek_mc._width && bgSeek_mc._xmouse 0){
        
seek_mc._width bgSeek_mc._xmouse;
    }else if(!
seekPressed){
        
seek_mc._xscale controller.percentPlayed;        
    }
    
    
// volume
    
if(volPressed && bgVolume_mc._xmouse bgVolume_mc._width && bgVolume_mc._xmouse 0){
        
volume_mc._width bgVolume_mc._xmouse;
        
mixer.volume volume_mc._xscale;
    }
};

// seek
seek_mc._xscale 0;
bgSeek_mc.onPress = function():Void{
    if(
controller.status == AudioController.PLAY){
        
seekPressed true;
    }
};
bgSeek_mc.onRelease bgSeek_mc.onReleaseOutside = function():Void{
    if(
controller.status == AudioController.PLAY){
        
seekPressed false;
        
controller.percentSeek seek_mc._xscale;
    }
};

// volume
volume_mc._xscale mixer.volume;
bgVolume_mc.onPress = function():Void{
    
volPressed true;
};
bgVolume_mc.onRelease bgVolume_mc.onReleaseOutside = function():Void{
    
volPressed false;
};


// play
play_btn.onRelease = function():Void{
    
controller.play();
};

// pause
pause_btn.onRelease = function():Void{
    if(
controller.status == AudioController.PLAY){
        
controller.pause();
    }else if(
controller.status == AudioController.PAUSE){
        
controller.play();
    }
};

// stop
stop_btn.onRelease = function():Void{
    
controller.stop();
};

// fForward
fForward_btn.onPress = function():Void{
    
controller.fForward(1000);
};
fForward_btn.onRelease fForward.onReleaseOutside = function():Void{
    
controller.fStop();
};

// fRewind
fRewind_btn.onPress = function():Void{
    
controller.fRewind(1000);
};
fRewind_btn.onRelease fRewind_btn.onReleaseOutside = function():Void{
    
controller.fStop();
}; 
public ist offline   Mit Zitat antworten
Alt 26-07-2007, 11:37   #13 (permalink)
Neuer User
 
Registriert seit: Jul 2007
Beiträge: 20
Thumbs up Top!

Hi Public,
wollte nur mal eben loswerden das ich Deine Audioklasse super finde!
baust Du die noch weiter aus? Ich bin leider noch nicht dahintergestiegen wie ich da z.B. 2 oder mehr tracks mit abspiele aber ich danke für Deine super vorlage!

Nic.
Nic01 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:19 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele