 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
23.07.2008, 15:59
|
#1
|
|
TP-Veteran
Registriert seit: Mar 2002
Ort: Göppingen
|
Sound Loop Player - geht in Flash Player, aber nicht in Webseite
Hallo,
also ich habe einen Loop Player, der, wenn ich ihn in Flash teste, wunderbar funktioniert, aber sobald ich ihn auf einer HTML-Seite einbette, im Browser nicht mehr tut, d.h. die Sounds werden nicht abgespielt (nur in Opera funktioniert es, FF / IE7 nicht). Version ist Flash MX 2004. Zu irgendeinem Zeitpunkt hatte ich den Loop Player als Flash 6 File exportiert und da ging es auch in IE7, aber nicht in Firefox.
So bette ich ihn ein:
Code:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="176" height="50" id="loops" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="loops.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="loops.swf" quality="high" bgcolor="#ffffff" width="176" height="50" name="loops" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
Die abzuspielenden Sounds sind kleine MP3-Loops, die über ein XML-File reingeladen werden, und wie gesagt, im Flash Player an sich geht's, hat also nichts mit falschen Pfaden o. Ä. zu tun.
Hat vielleicht jemand dazu eine Idee?
//update: Oh welch Peinlichkeit, im IE7 war aus irgendeinem Grund noch Flash Player 6 installiert, nach Update auf Flash Player 9 geht es dort nun. Bleibt noch FF, der sich immer noch sträubt, die Sounds abzuspielen.
Grüße, AnnaStesia
Geändert von AnnaStesia (23.07.2008 um 16:49 Uhr).
|
|
|
23.07.2008, 17:23
|
#2
|
|
TP-Moderator
Registriert seit: Mar 2002
|
Hallo,
also ich kann beim Einbinden keinen fehler sehen, kannst du mal den Link posten ?
|
|
|
23.07.2008, 18:22
|
#3
|
|
TP-Veteran
Registriert seit: Mar 2002
Ort: Göppingen
|
Hallo Wanderratte,
hmmm, ich habe in FF das Flash Plugin neu installiert, und siehe da... Problem behoben, Sorry für die Störung.
Aber wo ich Dich gerade dran habe... 
Jetzt habe ich nur noch das Problem, dass die Musik nicht richtig loopt, und meine Google Recherchen deuten darauf hin, dass dies an den externen MP3-Files liegt (lustigerweise kann selbst WinAmp die MP3-Dateien nicht sauber loopen, die entsprechenden .wavs schon, scheint also wirklich am Format zu liegen). Kann man das irgendwie lösen? Einfach die .wavs reinzuladen, scheint nicht zu gehen, wäre auch Ladezeittechnisch nicht die optimalste Lösung... Also meine Frage, gibt es irgendeinen "Kniff", Flash das saubere Loopen externer MP3-Files beizubringen?
Danke & Gruß, AnnaStesia
|
|
|
24.07.2008, 23:55
|
#4
|
|
TP-Veteran
Registriert seit: Mar 2002
Ort: Göppingen
|
Hallo nochmal,
also nach intensivem Googlen bin ich zu der Gewissheit gelangt, dass das mit dem sauberen Loopen nicht gehen wird. Aaaaaber eine kleine Annäherung, sprich, den Loop ein klein wenig später beginnen und etwas früher enden zu lassen, das wär auch schon eine Hilfe.
Hier mal mein Code:
Code:
var song = new Array();
var loaded = 0;
var amt = 0;
var current = 0;
var isplaying = false;
var xm = new XML();
xm.ignoreWhite = true;
xm.load("sound-loops/list.xml");
xm.onLoad = function(success) {
if(success)
{
parse(this);
}
}
function parse(obj) {
amt = obj.childNodes.length;
for (var i=0; i<obj.childNodes.length; i++) {
song[i] = this.createEmptyMovieClip("song" + i, this.getNextHighestDepth());
song[i].src = obj.childNodes[i].attributes.src;
song[i].title = obj.childNodes[i].attributes.title;
song[i].snd = new Sound(song[i]);
song[i].snd.onSoundComplete = function() {
if (isplaying) this.start();
}
song[i].snd.onLoad = function() {
nextOne();
}
song[i].snd.loadSound(song[i].src, false);
}
}
function nextOne() {
loaded ++;
display.text = "loaded " + loaded + " von " + amt;
if (loaded >= song.length) init(0);
}
function init(n) {
display.text = (n + 1) + " von " + song.length + ": " + song[n].title;
if (isplaying) playSound();
}
function playSound() {
isplaying = true;
song[current].snd.start();
}
function stopSound() {
isplaying = false;
song[current].snd.stop();
}
function switchSound(d) {
song[current].snd.stop();
current += d;
if (current < 0) current = song.length - 1;
if (current > song.length - 1) current = 0;
init(current);
}
Im fett markierten Bereich liegt der Hase begraben, das später beginnen ist ja kein Problem, aber das früher aufhören schon. Anstatt onSoundComplete könnte man die position Eigenschaft des Sounds auslesen und sobald duration Eigenschaft - Betrag x erreicht ist, das start() auslösen. Wäre so meine Idee, nur wie mache ich das?
Grüße, AnnaStesia
|
|
|
25.07.2008, 00:32
|
#5
|
|
TP-Moderator
Registriert seit: Mar 2002
|
*ups*
darum wollte ich mich doch gestern noch kümmern *ascheübermeinhaupt*
Ich setze mich morgen dran, weißt du wie lang die mp3 ist bzw. nach wivielen sek er zum Anfang wieder springen muss ?
|
|
|
25.07.2008, 01:23
|
#6
|
|
TP-Veteran
Registriert seit: Mar 2002
Ort: Göppingen
|
Nur keine Hektik  Nein, ich weiss nicht, wie lang das MP3 ist, der Grund, warum ich das gerne als ext. Files haben will, ist ja gerade, damit ich das ändern kann, ohne das Flash anzufassen. Es gibt aber die Eigenschaft "duration", damit müsste sich imho was anstellen lassen.
Habe übrigens nur Flash MX 2004.
|
|
|
25.07.2008, 01:54
|
#7
|
|
TP-Moderator
Registriert seit: Mar 2002
|
Hallo,
mit duration liest du die aktuell abgespielte Zeit aus.
Bei mp3s sind die Metatags leider erst am Ende verfügbar, deswegen fragte ich nach der eventuellen Spielzeit.
|
|
|
25.07.2008, 12:54
|
#8
|
|
TP-Moderator
Registriert seit: Mar 2002
|
Hallo,
so Theoretisch müsste es so gehen.
PHP-Code:
var xm = new XML();
var loopTimer = 0;
//Achtung geht erst nach dem ersten Durchlauf von jedem Song !!!
//hier gibst du in Millisekunden an, wann der Sound vor dem Ende aufhören soll und wieder neu beginnt.
var loopEnde = 1000;
//hier gibst du in Sekunden an, wann der Sound beginnen soll.
var startSound = 1;
//---------------------------------------------
xm.ignoreWhite = true;
xm.load("sound-loops/list.xml");
xm.onLoad = function(success) {
if (success) {
parse(this);
}
};
function parse(obj) {
amt = obj.childNodes.length;
for (var i = 0; i<obj.childNodes.length; i++) {
song[i] = this.createEmptyMovieClip("song"+i, this.getNextHighestDepth());
song[i].src = obj.childNodes[i].attributes.src;
song[i].title = obj.childNodes[i].attributes.title;
song[i].snd = new Sound(song[i]);
song[i].snd.onSoundComplete = function() {
if (isplaying) {
loopTimer = this.duration;
//hier bestimmst du wann, wo der Sound beginnen soll in Sekunden.
this.start(startSound);
controller(this);
}
};
song[i].snd.onLoad = function() {
nextOne();
};
song[i].snd.loadSound(song[i].src,false);
}
}
function controller(soObj) {
var obj = _root.createEmptyMovieClip("loop_controler",100000);
obj.onEnterFrame = function() {
if (loopTimer>0 && loopTimer-loopEnde>=soObj.duration) {
this.start(startSound);
}
};
}
function nextOne() {
loaded++;
display.text = "loaded "+loaded+" von "+amt;
if (loaded>=song.length) {
init(0);
}
}
function init(n) {
display.text = (n+1)+" von "+song.length+": "+song[n].title;
if (isplaying) {
playSound();
}
}
function playSound() {
loopTimer = 0;
isplaying = true;
song[current].snd.start();
}
function stopSound() {
isplaying = false;
song[current].snd.stop();
}
function switchSound(d) {
song[current].snd.stop();
current += d;
if (current<0) {
current = song.length-1;
}
if (current>song.length-1) {
current = 0;
}
init(current);
}
sollte es nicht gehen, gibst du mir bitte deine fla, samt xml.
|
|
|
25.07.2008, 14:19
|
#9
|
|
TP-Veteran
Registriert seit: Mar 2002
Ort: Göppingen
|
Hallo Ralf,
anbei die gewünschte Lieferung 
Bei loopEnde kann ich eingeben, was ich will, es tut sich nix, was meiner Meinung daran liegt, dass die controller Funktion erst bei onSoundComplete aufgerufen wird, wo's ja schon zu spät ist, und ich weiss nicht, wie man den controller vorher zum Tüddeln bringen kann (optimalerweise bei playSound(), der ganze Funktionsaufruf bei onSoundComplete sollte ja eigentlich obsolet werden und der controller das Loopen übernehmen).
Vielen Dank schon mal bis hierher! Liebe Grüße, Christine
|
|
|
25.07.2008, 14:41
|
#10
|
|
TP-Veteran
Registriert seit: Mar 2002
Ort: Göppingen
|
Ok., kaum schrub ich's, kam mir die Erleuchtung, also so tüddelt's jetzt wunderbar, nochmals Danke, mir fehlte ja hauptsächlich das Basiswissen, wie ich so einen Controller mitrattern lasse, und da hast Du mich eindeutig auf den richtigen Trichter gebracht:
Code:
var xm = new XML();
//Achtung geht erst nach dem ersten Durchlauf von jedem Song !!!
//hier gibst du in Millisekunden an, wann der Sound vor dem Ende aufhören soll und wieder neu beginnt.
var loopEnde = 60;
//hier gibst du in Sekunden an, wann der Sound beginnen soll.
var startSound = 0.025;
//---------------------------------------------
xm.ignoreWhite = true;
xm.load("list.xml");
xm.onLoad = function(success) {
if (success) {
parse(this);
}
};
function parse(obj) {
amt = obj.childNodes.length;
for (var i = 0; i<obj.childNodes.length; i++) {
song[i] = this.createEmptyMovieClip("song"+i, this.getNextHighestDepth());
song[i].src = obj.childNodes[i].attributes.src;
song[i].title = obj.childNodes[i].attributes.title;
song[i].snd = new Sound(song[i]);
song[i].snd.onLoad = function() {
nextOne();
};
song[i].snd.loadSound(song[i].src,false);
}
}
function controller(soObj) {
var obj = _root.createEmptyMovieClip("loop_controler",100000);
obj.onEnterFrame = function() {
var ende = soObj.duration-loopEnde;
if (soObj.position >= ende) {
stopSound();
playSound();
}
};
}
function nextOne() {
loaded++;
display.text = "loaded "+loaded+" von "+amt;
if (loaded>=song.length) {
init(0);
}
}
function init(n) {
display.text = (n+1)+" von "+song.length+": "+song[n].title;
if (isplaying) {
playSound();
}
}
function playSound() {
isplaying = true;
song[current].snd.start(startSound);
controller(song[current].snd);
}
function stopSound() {
isplaying = false;
song[current].snd.stop();
}
function switchSound(d) {
song[current].snd.stop();
current += d;
if (current<0) {
current = song.length-1;
}
if (current>song.length-1) {
current = 0;
}
init(current);
}
|
|
|
25.07.2008, 15:20
|
#11
|
|
TP-Moderator
Registriert seit: Mar 2002
|
Hallo,
na das kommt daher wenn man es selber nicht testet.
Aber du hast es hinbekommen und das ist das wichtigste.
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
| |