Bonjour a tous
Quelqu'un pourrait-il me dire si il est possible de creer un objet Sound a partir d'un ByteArray contenant les donnee du son MP3? Ou si ce n'est pas possible.
Merci d'avance, Francois
Bonjour a tous
Quelqu'un pourrait-il me dire si il est possible de creer un objet Sound a partir d'un ByteArray contenant les donnee du son MP3? Ou si ce n'est pas possible.
Merci d'avance, Francois
Désolé de faire remonter ce post mais j'ai le même soucis. Cependant j'ai été voir mon copain google qui m'a donner ce post:
http://wiki.github.com/claus/as3swf/...from-bytearray
Ce code fonctionne parfaitement mais il oblige à charger un swf d'environ 5Mo en mémoire vive.
Même si le garbage collector fais bien son travail, celui reste aléatoire...
Du coup, si un utilisateur change 5 fois de suite de musique, l'application peut monter jusqu'à environ 70 - 80 Mo. D'autant plus que l'application est destinée à être utilisée sur mobile. Je développe en flex 4 avec le sdk Air Android.
Un autre soucis concerne les MP3 à bitrate variable. En effet, avec cette solution, il n'est plus possible de les lire.
Jusqu'à présent je n'ai pas trouvé d'alternatives...
Le but étant de stocker des mp3 sur le téléphone, graceaux shared object ou sous forme de fichier. Mais les utilisateurs ne doivent pas facilement les trouver.
Ma question: Est-il possible de sotcker un objet Sound ? Sinon quelqu'un a -t- il réussi à lire un son d'après un byteArray ?
Merci d'avoir lu ce post
J'ai du nouveau, j'arrive à stocker l'objet Sound dans les shared object. Par contre, le soucis est que je ne parvient pas à l'en extraire... En gros, il est stocké en tant qu'objet et je n'arrive pas à le caster en Sound.
J'ai trouvé ce tuto: http://www.flex-tutorial.fr/2009/03/...g-remoteclass/
Seulement Sound est un type flash, je suis donc bloqué la dessus
Quelqu'un peut -il m'aider ?
J'ai testé une solution, j'ai l'impression que je m'approche du but
Je pensais écrire le tableau de bytes du mp3 dans un fichier pour le stocker.
Et pour l'instancier donner le nativePath du fichier a l'urlRequest.
Voici mon code:
Seulement j'obtiens ce résultat dans le terminal:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 // Fonction permettant de lire le mp3 public function playCurrent(song:Song):void { if(sndChannel){ sndChannel.stop(); stopSound(); } sndChannel = null; resetCurrentSound(); currentState="pause"; _id = "zic"+MD5.hash(song.artist+song.trackName); currentSound = new Sound(); var file:File = File.documentsDirectory.resolvePath(_id); // On teste si le son est déjà sur le téléphone if(file.exists){ trace("existe"); // On le charge dans le player var request:URLRequest = new URLRequest(file.nativePath); trace(file.nativePath); try{ currentSound.load(request); } catch(err:ErrorMessage){ trace(err); } stream.setProgress(100,100); sndChannel = new SoundChannel(); sndChannel = currentSound.play(); trace(currentSound.bytesLoaded+" "+currentSound.length); } else{ var urlRequest:URLRequest = new URLRequest("http://www.happy-music.fr/class/mp3.php"); urlRequest.method = "post"; var flashvars:URLVariables = new URLVariables(); flashvars.xwd = "fqdcf12as78"; flashvars.name = song.filePath; urlRequest.data = flashvars; currentSound.load(urlRequest); currentSound.addEventListener(Event.COMPLETE,ajouterSong); sndChannel = new SoundChannel(); sndChannel = currentSound.play(); } sndChannel.soundTransform = new SoundTransform(10); mutebtn.styleName = "mute" mute = false; this.addEventListener(Event.ENTER_FRAME, soundPosition); mutebtn.styleName = "mute" mute = false; } // Ajout d'un mp3 private function ajouterSong(evt:Event):void{ var file:File = File.documentsDirectory.resolvePath(_id); var fileStream:FileStream = new FileStream(); fileStream.open(file, FileMode.WRITE); var tabBytes:ByteArray = new ByteArray(); currentSound.extract(tabBytes,currentSound.length); fileStream.writeBytes(tabBytes); fileStream.close(); }
Donc 0 byte chargé mais pas d'erreur ... Pourtant les fichiers existent bel et bien.existe
C:\Users\Titou\Documents\zice7a5f9369a7e7a4350d8981ebbdb65e9
0 0
Des données sont - elles perdues au moment de la transformation en byteArray ? Je ne vois vraiment pas d'où vient le soucis ...
J'ai enfin trouvé mon bonheur, je pense que ces sources pourront servir à tous ceux qui voudront lire un son à partir d'un byteArray:
L'astuce consiste à utiliser l'évènement: SampleDataEvent
Celui ci se déclenche lorsque le son à besoin de données. Donc créé un objet Sound, on ne load rien. On ajoute l'évènement SampleDataEvent et celui ci se déclenche.
Ensuite, dans le handler on injecte des bytes à partir des ByteArray.
http://www.kelvinluck.com/tag/sourcecode/
Pour info voici la documentation de l'évènement SampleDataEvent:
http://help.adobe.com/fr_FR/AS3LCR/F...pleDataEvent()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager