webForumDet fria alternativet

Stora och många ljudfiler

Flash

10 svar · 560 visningar · startad av Janna

Medlem sedan maj 200613 inlägg
Frågan#1

Hej!

Jag har gjort en ljudmixer i Flash med fem separata kanaler. I mixern kan man välja på 15 olika låtar på vardera 3-4 minuter. Hittils har jag jobbat med korta musiksnuttar för att testa funktionerna. Allt har fungerat bra tills idag när de "riktiga" wave-filerna skulle läggas in (inbäddat). Datorn (P4-3 Mhz-2Gb ram) protesterar över datamängden genom att minnet blir fullt och Flash (8) låser sig när fla-filen skall sparas och närmar sig 1,5 Gb. Den färdiga filen blir inte så stor eftersom ljuden komprimeras till mp3-filer vid publiceringen.

Två frågor som skulle kunna ge alternativa lösningar:

1. Kan man importera mp3-filer i Flash 8 och inte nödvändigtvis koda om dessa till nya mp3-filer när swf-filen skapas? (Detta alternativ skulle ge mindre datamängd att hantera)

2. Kan man länka externa mp3-filer och ge dem variabelnamn i AS? (Detta alternativ gör mp3-filerna synliga men skulle kunna vara en sista utväg...)

Tack på förhand,

Jan

Medlem sedan nov. 2004149 inlägg
#2

Så vitt jag vet kan man inte importera mp3 till Flash.
När jag jobbar med stora musikfiler brukar jag lägga varje låt i ett eget movieclip som importeras först när användaren klickar. Movievlipens låtar sätter jag till streamande - eftersom de då börjar spelas när ungefär 5 sek musik laddats.

Se t.ex https://www.kammaren.com - där har jag ungefär 300Mb musik som streamas vid behov.

Men det går ju även att ladda in mp3 precis på samma sätt som när man laddar in jpg-bilder. Någonting i den här stilen:

function loadFile() {
if (sound_1 instanceof Sound) {
removeSound();
}
_root.createEmptyMovieClip("holder", 1);
sound_1 = new Sound(holder);
sound_1.onLoad = function(success) {
if (success) {
loadStatus.text = "The MP3 file has loaded.";
volumeSlider.currentTarget = this;
volumeSlider.setProp(volumeSlider.pos._x, "setVolume", this);
} else {
loadStatus.text = "Invalid URL. Try again.";
clearInterval(checkProgress);
}
};
sound_1.onSoundComplete = function() {
loadStatus.text = "The MP3 file has finished playing.";
};
sound_1.loadSound(fileURL.text, true);
loadStatus.text = "The MP3 file is loading.";
checkProgress = setInterval(checkLoad, 50);
}
function checkLoad() {
var obj = sound_1;
var lBytes = obj.getBytesLoaded();
var tBytes = obj.getBytesTotal();
var percentLoaded = (lBytes/tBytes)*100;
progressBar._xscale = percentLoaded;
if (lBytes>=tBytes) {
clearInterval(checkProgress);
}
}
function removeSound() {
sound_1.stop();
delete sound_1;
holder.removeMovieClip();
}

/Alar

Medlem sedan dec. 200384 inlägg
#3

Ja du kan importera mp3-filer till flash istället för wave. Detta spar en hel del tid vid kompilering. Ofta är det bättre att ladda ljudfiler dynamiskt men du vill säkert 'cacha' allt innehåll i vilket fall innan uppspelning? Prova tex Adobe Audition, där finns en bra 'batch convert'-funktion.

Medlem sedan maj 2005704 inlägg
#4

Ladda dem externt är den bästa lösningen då det gör att det inte blir så segt att publicera varje gång du gör en ändring av kod/grafik samt du inte behöver kompilera om ifall du skulle vilja byta ljud i din spelare en dag.
Då kan du även se till att få bästa möjliga kvalitet genom att använda LAME för att komprimera dina mp3's.
Det är stor skillnad på olika mjukvara då det gäller mp3 komprimering, och LAME ger bästa möjliga kvalitet, är gratis samt mycket snabbt och smidigt att batch komprimera med.

Angående att mp3 filerna blir tillgängliga på det viset så är det inte svårt att plocka ut dem ur din swf...finns en mängd verktyg som gör det jobbet.

Medlem sedan maj 200613 inlägg
#5

Tack för tipsen. Jag använder redan LAME i Wavelab för ljudkompriering.

Det fungerade bra att lägga in mp3-filerna direkt i Flash 8. Hela swf-filen blev dock 228 Mb. Applikationen skall köras från en cd så det tar ju ett par minuter för filen att laddas vilket nog ger brukaren lite bryderi. En preloader är inte heller något alternativ, om jag förstått det rätt, eftersom det inte funkar lokalt.

Om man prövar "externa ljud-alternativet" så borde väl

bass1 = new Sound();
bass1.loadSound("bass1.mp3", false);

i första framen ge samma resultat som Identifier:bass1 i "Linkage Properties".

Detta funkar dock inte, vad är felet?

/Jan

Medlem sedan maj 2003750 inlägg
#6

Det är inte rikjtigt samma sak.

bass1 = new Sound();
bass1.loadSound("bass1.mp3", false);

Är det samma som

bass1 = new Sound();
bass1.attachSound("bass1");

Det är bättre att ladda ljuden vid behov. Så du kan ersätta anropen till attachSound med loadSound().

Medlem sedan maj 200613 inlägg
#7

Problemet är ju att swf:en blir så väldigt stor när man bakar in mp3-filerna. Min tanke var att ha mp3:orna separat utanför swf:en, ladda in och kontrollera dem med AS när just de filerna behövs.

Om mp3-filen heter bass1.mp3 och variabeln även den skall heta bass1. Hur skrivs då koden för att hämta filen utanför?

/Jan

Medlem sedan dec. 200384 inlägg
#8

Du var inne på rätt väg tidigare. Du måste dock även ange en metoden 'start()' för att spela upp ljudet du har laddat in då 'false' anger att denna ej skall streamas. Denna accepterar även några parametrar, se hjälpfil för info.


bass1 = new Sound();
bass1.loadSound("bass1.mp3", false);
bass1.onLoad = function(success) {
   if(success) {
      bass1.start();
  }
}
Medlem sedan maj 200613 inlägg
#9

Jo, men jag vill ju inte att ljudet skall starta där utan i ett annat ställe i programmet och dessutom tillsammans med fyra andra ljud som även dessa skall laddas in samtidigt...

Det jag önskar är att AS skall kunna anropa ljuden och starta dessa när användaren (i det här fallet) trycker på playknappen.

/Jan

Medlem sedan maj 2003750 inlägg
#10
bass1.loadSound("bass1.mp3", [b]true[/b]);

Streamingljudet spelas såfort det finns tillräckligt inladdat och eftersom filmen körs från CD så borde inladdningen inte vara något problem.

/Mirandir

Medlem sedan maj 200613 inlägg
#11

Nu fungerar det!

Jag testade just den kodvarianten och alla fem spåren hängde faktiskt ihop i synk.

Tack för all hjälp.

/Jan

265 ms totalt · 4 externa anrop · v20260731065814-full.2d97a731
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)