Pastor Pixel Tipps Tutorial Anleitungen Hilfe

Sound

Sound in der Zeitleiste

Man kann Sound in die Bibliothek importieren und diesen dann in einem Schlüsselbild über das Eigenschaftenfenster starten und stoppen. Siehe dazu meine Sound Tipps unter Flash Basic.

Library Sound

In diesem Beispiel wird der Sound aus der Bibliothek per Actionscript eingefügt.

Der in die Bibliothek importierte Sound bekommt im folgenden Beispiel den Klassennamen "Kling". Dazu wähle aus dem Kontextmenüs des Sounds in der Bibliothek die Option "Eigenschaften" und aktiviere im Karteireiter "Actionscript" die Option "Export für Actionscript". Vergebe den Klassennamen, hier "Kling" Die Basisklasse ist "flash.media.Sound".

Über den Klassennamen kann man eine Instanz per Actionscript auf die Bühne bringen.

Die Methode play() hat 2 Parameter.
Start in Millisekunden. Das bedeutet, der Sound startet nicht am Anfang sondern beginnt nach der eingegebenen Millisekunden Anzahl.
Der zweite Parameter ist die Anzahl der Loops. Es ist nicht möglich einen Parameter für eine Endlosschleife einzugeben. Im übernächsten Beispiel folgt die Lösung des Problems.


var klingObj:Kling = new Kling();
klingObj.play();

Sound abspielen und stoppen mit SoundChannel Klasse

Wenn man den Sound auch wieder stoppen will, braucht man eine Instanz der SoundChannel Klasse. Siehe Beispiel. Das Beispiel ist natürlich nicht praxistauglich, da der Sound gestartet und sofort wieder gestoppt wird.

import flash.media.Sound;
import flash.media.SoundChannel;

var cSound:China = new China();
var sndChnl:SoundChannel = new SoundChannel();
sndChnl = cSound.play();
sndChnl.stop();

Sound mit Endlosschleife

Im folgendem Beispiel wird der Sound in einer Endlosschleife abgespielt. Über den Event SOUND_COMPLETE kann man das Ende des Abspielvorgangs überwachen.

var myDrum:Drum = new Drum();
var sndChnl:SoundChannel = new SoundChannel();
sndChnl = myDrum.play();

sndChnl.addEventListener(Event.SOUND_COMPLETE, soundEnde);

function soundEnde(evt:Event):void
{
	sndChnl = myDrum.play();
	sndChnl.addEventListener(Event.SOUND_COMPLETE, soundEnde);
}

Sound mit Pause Funktion

Die Eigenschaft position der SoundChannel Klasse liefert die Position oder Zeit in Millisekunden, die seit dem Start des Sounds verstrichen ist. Darüber lässt sich eine Pause- Funktion programmieren.

var mySound:ChinaSound = new ChinaSound();
var sndChnl:SoundChannel = new SoundChannel();
var soundPosition:Number = 0;


play_btn.addEventListener(MouseEvent.CLICK, soundPlay);

function soundPlay(evt:MouseEvent):void
{
	sndChnl = mySound.play(soundPosition);
}

pause_btn.addEventListener(MouseEvent.CLICK, soundStop);

function soundStop(evt:MouseEvent):void
{
	soundPosition = sndChnl.position;
	sndChnl.stop();
}

Das vorige Beispiel ist nicht ganz praxistauglich, da bei mehrmaligen klicken auf den Play Button der Sound mehrmals gleichzeitig abgespielt wird. Im folgenden Beispiel ist das Problem gelöst, indem der EventListener für den Abspielvorgang entfernt wird und erst nachdem man den Sound gestoppt hat wieder hinzugefügt wird.

var mySound:ChinaSound = new ChinaSound();
var sndChnl:SoundChannel = new SoundChannel();
var soundPosition:Number = 0;


play_btn.addEventListener(MouseEvent.CLICK, soundPlay);

function soundPlay(evt:MouseEvent):void
{
	sndChnl = mySound.play(soundPosition);
   play_btn.removeEventListener(MouseEvent.CLICK, soundPlay);
}

pause_btn.addEventListener(MouseEvent.CLICK, soundStop);

function soundStop(evt:MouseEvent):void
{
	soundPosition = sndChnl.position;
	sndChnl.stop();
   play_btn.addEventListener(MouseEvent.CLICK, soundPlay);
}

Stop and Play

Im folgenden Beispiel wurde ein Movieclip mit 2 Bildern in der Zeitleiste eingefügt. Im ersten Bild des Movieclips muss die Aktion stop(); eingefügt werden. Der MC dient als Play und Stop Button und bekommt den Instanznamen soundBtn. Damit lässt sich der Sound abpsielen und pausieren. Der Sound befindet sich in der Bilbliothek mit dem Klassennamen ChinaSound.

 

var mySound:ChinaSound = new ChinaSound();
var sndChnl:SoundChannel = new SoundChannel();
var soundPosition:Number = 0;

soundBtn.addEventListener(MouseEvent.CLICK, soundPlay);

function soundPlay(evt:MouseEvent):void
{
	if (evt.currentTarget.currentFrame == 1)
	{
		sndChnl = mySound.play(soundPosition);
		sndChnl.addEventListener(Event.SOUND_COMPLETE, soundEnde);
		evt.currentTarget.gotoAndStop(2);
	}
	else
	{
		soundPosition = sndChnl.position;
		sndChnl.stop();
		evt.currentTarget.gotoAndStop(1);
	}
}


function soundEnde(evt:Event):void
{
    soundBtn.gotoAndStop(1);
	soundPosition = 0;
}

Loading Sound

Man kann eine mp3 Datei von außen in den Flashplayer laden. Dazu benötigt man eine Instanz der Soundklasse und eine Instanz der Klasse URLRequest.

import flash.media.Sound;
import flash.net.URLRequest;


var soundObj:Sound = new Sound();
var req:URLRequest = new URLRequest("kling.mp3");
soundObj.load(req);
soundObj.play();

Sound erst starten wenn Ladevorgang beendet ist:

import flash.media.Sound;
import flash.net.URLRequest;
import flash.events.Event;

var soundObj:Sound = new Sound();
var req:URLRequest = new URLRequest("klingdong.mp3");
soundObj.load(req);

soundObj.addEventListener(Event.COMPLETE, loadComplete);

function loadComplete(evt:Event):void
{
	evt.currentTarget.play();
}

Ladefehler abfragen.

Im folgenden Beispiel wurde ein dynamisches Textfeld mit Instanznamen: info hinzugefügt. Wenn der Ladevorgang scheitert, wird dort die Information angezeigt.

var soundObj:Sound = new Sound();
var req:URLRequest = new URLRequest("klingdong.mp3");
soundObj.load(req);

soundObj.addEventListener(Event.COMPLETE, loadComplete);

function loadComplete(evt:Event):void
{
	evt.currentTarget.play();
}

soundObj.addEventListener(IOErrorEvent.IO_ERROR, loadError);

function loadError(evt:IOErrorEvent):void
{
info.text = "Sound konnte nicht geladen werden.";
}

Ladevorgang überwachen

Auch hier wird das dynamische Textfeld mit Instanznamen info genutzt. Nach dem Ladevorgang wird der Text entfernt.

import flash.media.Sound;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;

var soundObj:Sound = new Sound();
var req:URLRequest = new URLRequest("klingdong.mp3");
soundObj.load(req);

soundObj.addEventListener(Event.COMPLETE, loadComplete);

function loadComplete(evt:Event):void
{
	evt.currentTarget.play();
	info.text = "";
}

soundObj.addEventListener(IOErrorEvent.IO_ERROR, loadError);

function loadError(evt:IOErrorEvent):void
{
info.text = "Sound konnte nicht geladen werden.";
}


soundObj.addEventListener(ProgressEvent.PROGRESS, loadProgress);

function loadProgress(evt:ProgressEvent):void
{
	var geladen:Number = evt.bytesLoaded;
	var total:Number = evt.bytesTotal;
	var prozent:Number = Math.round((geladen/total)*100);
	info.text = "Sound wird geladen "+String(prozent)+" %";
}

Streaming Sound laden

Mit einem SoundLoaderContext Objekt kann man einen Streaming Sound laden. Die beiden Parameter bestimmten wieviel Millisekunden des Sounds geladen sein müssen, damit der Sound startet und der boolsche Parameter gibt an, ob die Domain, in der der Sound liegt auf eine Cross Domain Policy überprüft werden soll.

import flash.media.Sound;
import flash.net.URLRequest;
import flash.media.SoundLoaderContext;

var soundObj:Sound = new Sound();
var req:URLRequest = new URLRequest("klingdong.mp3");
var context:SoundLoaderContext = new SoundLoaderContext(5000, false);
soundObj.load(req, context);
soundObj.play();

Streaming Sound mit Volume

Hier wird ein Streaming Sound geladen und ein Laustärkewerte programmiert.

import flash.media.Sound;
import flash.net.URLRequest;
import flash.media.SoundChannel;
import flash.media.SoundTransform;
import flash.media.SoundLoaderContext;
import flash.events.Event;

var soundObj: Sound = new Sound();
var req: URLRequest = new URLRequest("Menuet.mp3");
var context: SoundLoaderContext = new SoundLoaderContext(5000, false);
var sndCh: SoundChannel = new SoundChannel();
var trans: SoundTransform = new SoundTransform();
trans.volume = 0.2;
soundObj.load(req, context);
soundObj.addEventListener(Event.COMPLETE, loadComplete);

function loadComplete(evt: Event): void {
	sndCh = soundObj.play();
	//die Reihenfolge ist wichtig	
	sndCh.soundTransform = trans;
}

Streaming Sound mit Stop, Pause, Volume, Balance

Hierzu braucht man 2 Schaltflächen Instanzen mit den Instanznamen play_btn und pause_btn. Weiter unten sind noch die Actions für 2 Slider Komponeneten eingebaut. Sie haben die Insanznamen volSlider und panSlider. Beachte, auch die erforderliche Import Anweisung für den Slider Event. import fl.events.SliderEvent;

var soundObj: Sound = new Sound();
var req: URLRequest = new URLRequest("Menuet.mp3");
var context: SoundLoaderContext = new SoundLoaderContext(5000, false);
var sndCh: SoundChannel = new SoundChannel();
var trans: SoundTransform = new SoundTransform();
trans.volume = 0.5;
var pausePosition: int;
soundObj.load(req, context);
soundObj.addEventListener(Event.COMPLETE, loadComplete);

function loadComplete(evt: Event): void {
	play_btn.addEventListener(MouseEvent.CLICK, playSound);
	pause_btn.addEventListener(MouseEvent.CLICK, pauseSound);
}

function playSound(evt: MouseEvent) {
	pausePosition = sndCh.position;
	sndCh.stop();
	sndCh = soundObj.play(pausePosition);
//Reihenfolge beachten für Lautstärke	
	sndCh.soundTransform = trans;
}

function pauseSound(evt: MouseEvent) {
	pausePosition = sndCh.position;
	sndCh.stop();
}
//-------------------Slider Komponente--------
import fl.events.SliderEvent;
volSlider.addEventListener(SliderEvent.CHANGE, setVol);
panSlider.addEventListener(SliderEvent.CHANGE, setPan);
function setVol(evt:Event):void
{
	trans.volume = evt.currentTarget.value;
	sndCh.soundTransform = trans;
}

function setPan(evt:Event):void
{
	trans.pan = evt.currentTarget.value;
	sndCh.soundTransform = trans;
}

Library Sound Beispiele

Für den Inhalt dieser Seite ist eine neuere Version von Adobe Flash Player erforderlich.

Adobe Flash Player herunterladen


Auch in diesem Beispiel wird der Sound aus der Bibliothek hinzugefügt. Mit der Slider Komponente wird die Lautstärke geregelt. Wenn man dieses Beispiel noch um eine Stop und Play Button erweitert, sollte man den Slider unsichtbar machen, sofern der Sound gestoppt ist.

Für den Inhalt dieser Seite ist eine neuere Version von Adobe Flash Player erforderlich.

Adobe Flash Player herunterladen


Load Sound

Hier werden mp3 Dateien geladen. Mittels Buttons kann man die Sounds steuern. Ich habe mir dazu eine Klasse erzeugt.

Für den Inhalt dieser Seite ist eine neuere Version von Adobe Flash Player erforderlich.

Adobe Flash Player herunterladen

Hier die Klasse SoundStopPlay


package {
	
	import flash.media.Sound;
	import flash.media.SoundChannel;
	import flash.net.URLLoader;
	import flash.net.URLRequest;



	public class SoundStopPlay  {
		private var snd:Sound = new Sound();
		private var channel:SoundChannel = new SoundChannel();	
		private var pausePosition:int;


		public function SoundStopPlay(_req:String) {
			var req:URLRequest=new URLRequest(_req);
			snd.load(req);
		}




		public function stopSound():void {
			 pausePosition=channel.position;
			channel.stop();
		}


		public function playSound():void {
			 pausePosition=channel.position;
			channel.stop();
			channel=snd.play(pausePosition);
		}

		public function startSound():void {
			 pausePosition=channel.position;
			channel.stop();
			channel=snd.play(0);
		}

	}
}