Volledige versie bekijken : Mp3 Encoder in Flash
BernardV
%Europe/Berlin %685 %2009, 16:26
Ik heb vandaag de eerste versie van een MP3 Encoder in flash klaar!
Dit werkt met Alchemy, hiermee kun je C code compilen naar bytecode voor de flashplayer.
De basis is de source van 8Hz MP3 encoder.
Meer info en een werkende versie: http://blog.debit.nl/2009/03/mp3-encoder-in-flash-with-alchemy/
Neuro
%Europe/Berlin %711 %2009, 17:04
Klinkt veelbelovend, ik krijg wel deze fout :)
[object AlchemyExit]
at <anonymous>()
at <anonymous>()
at Main/fileLoaded()
Wordt dit een open source project?
BernardV
%Europe/Berlin %720 %2009, 17:17
Hij gaat op den duur zeker OS worden!
Bij welke file krijg je die error? Zou je me die anders kunnen sturen?
Neuro
%Europe/Berlin %724 %2009, 17:23
aub, in bijlage :)
BernardV
%Europe/Berlin %726 %2009, 17:25
Ah zie het al..
Ik ben in eerste instantie uitgegaan van stereo WAV op 44.1kHz.
Deze is mono op 22kHz.
Voor de volgende versie ;)
Je kunt ook wel grote WAV files testen, hij leest toch direct van je harddisk (Flash 10) dus uploaden is niet nodig.
Neuro
%Europe/Berlin %003 %2009, 00:04
Je kunt ook wel grote WAV files testen
Was de enige die ik had liggen :)
Wat genereer je eigenlijk met Alchemie, een swc?
En hoe gebeurt de communicatie, geef je een byteArray als input, en komt er een andere uit?
Heb je veel C kennis nodig om zo'n port te doen?
Kan je hier meer over vertellen, is eigenlijk erg interessant.
BernardV
%Europe/Berlin %012 %2009, 00:17
Je genereert inderdaad een swc.
in c heb ik als mapping code dit:
int main()
{
AS3_Val startMethod = AS3_Function( NULL, start );
AS3_Val closeMethod = AS3_Function( NULL, closeEncoder );
AS3_Val processMethod = AS3_Function( NULL, processNextFrame );
AS3_Val totalFramesMethod = AS3_Function( NULL, getTotalFrames );
AS3_Val result = AS3_Object( "start: AS3ValType, close: AS3ValType, process: AS3ValType, totalFrames: AS3ValType",startMethod, closeMethod,processMethod,totalFramesMethod );
AS3_Release( startMethod );
AS3_Release( closeMethod );
AS3_Release( processMethod );
AS3_Release( totalFramesMethod);
AS3_LibInit( result );
return 0;
}
Dit mapped C functies naar AS functies.
In AS kun je de functies aanroepen na een init van je Alchemy classes:
var loader:CLibInit = new CLibInit();
_lib = loader.init();
Nu zijn de functies op _lib aanwezig zoals aangegeven in "result" ("start: AS3ValType, close: AS3ValType, process: AS3ValType, totalFrames: AS3ValType")
start, close, process en totalFrames.
Om basis code uit te voeren heb je niet veel C kennis nodig, om code te porten wel iets meer.
Het is belangrijk te weten hoe pointers e.d. werken in C.
Voor een basis C cursus kun je prima terecht op www.cplusplus.com
Als een van de eerste Alchemy tests heb ik een bitmap per frame laten kleuren van zwart, via rood, groen en blauw naar wit met een setPixels(bytearray). Als ik voor een bitmap van 640x480 de bytearray vulde met kleuren in AS3 haalde ik ongeveer 10fps. Via Alchemy haalde ik 60fps (dat is ook de max van de OSX player).
Dat geeft wel aan wat de mogelijkheden zijn!
//EDIT:
Voor de basis communicatie zal ik binnenkort (verwacht niet morgen) wat voorbeelden geven hier op het forum.
Ik ben zelf nog steeds aan het leren m.b.t. Alchemy en heb vanavond weer nieuwe dingen ontdekt. Zie nu al mogelijkheden om de mp3 encoder sneller te maken :)
Jan
%Europe/Berlin %054 %2009, 01:18
Leuk gemaakt Bernard. En het werkt nog ook. :D
Alchemy staat ook al heel lang op mijn "dringend eens mee spelen" lijstje. :)
Maar vooral mijn beperkte kennis van c++ doet het me altijd maar uitstellen. 'k Ben de laatste tijd wel wat tutorials aan het doen en het valt beter mee dan verwacht maar 't is nog maar de basis.
Ik heb laatst (vorige week?) ook je andere app die mp3's naar swf omzette eens geprobeerd. Die vond ik ook wel indrukwekkend. Op het eerste zicht misschien niet zo maar toen ik het in mijn SWF-Reader bekeek, zag ik pas dat je het over de frames verspreid had en 't was dus echt streamend. Nice.
Ik vroeg me wel af waarom je geen compressed swf's outputte en ook waarom ze een framerate van 2 hadden?
What's next? Een jpeg, gif, bmp, png naar movieclip omzetter?
Daar zitten er wel wat op te wachten (waaronder ikzelf. :P )
Groeten,
Jan
BernardV
%Europe/Berlin %066 %2009, 01:36
Dank je voor de mooie reactie :)
Over de mp3 to SWF..
Compressed SWF's outputten kan ook zeker, dit is ook meer een proof of concept en die compressie is redelijk snel toe te voegen.. het staat allemaal op TODO's maar tijd ontbreekt.
Over de framerate van 2.. de framerate is nu afhankelijk van het aantal frames van de mp3, tenminste zo heb ik het nu gemaakt. Flash heeft namelijk een max aantal frames en als je mp3 boven dat aantal zou komen wordt hij gewoon afgekapt.. ook al bestaan de frames wel.
De volgende versie gaat het aantal mp3 frames verdelen over een bepaald aantal opgegeven swf frames ipv andersom.
//EDIT: Die image omzetter naar movieclip hoeft niet eens echt moeilijk te zijn bedenk ik me nu. Stel dat ik decoding kan doen in Alchemy (snel) en dan een setPixels in een bitmapdata.. of is dat niet exact wat je bedoeld?
mknol
%Europe/Berlin %344 %2009, 08:15
Wow erg koel en interessant project, goed bezig! :D Kun je dynamisch gegenereerde sounds ook opslaan als .MP3 met deze encoder?
BernardV
%Europe/Berlin %496 %2009, 11:55
Dynamisch gegenereerde sound is mogelijk.
De encoder werkt nu op bytearrarrays, 1 voor de WAV (RAW) data en 1 waar de mp3 in terecht komt.
Het is wel zo dat je dan even een kleine conversie moet maken naar WAV of RIFF wil de encoder je data slikken, maar dat is redelijk makkelijk te doen.
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.