IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

Sound / Bytearray


Sujet :

Flex

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Sound / Bytearray
    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

  2. #2
    Membre régulier Avatar de titou624
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 152
    Points : 87
    Points
    87
    Par défaut
    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

  3. #3
    Membre régulier Avatar de titou624
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 152
    Points : 87
    Points
    87
    Par défaut
    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 ?

  4. #4
    Membre régulier Avatar de titou624
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 152
    Points : 87
    Points
    87
    Par défaut
    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:

    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();
    }
    Seulement j'obtiens ce résultat dans le terminal:
    existe
    C:\Users\Titou\Documents\zice7a5f9369a7e7a4350d8981ebbdb65e9
    0 0
    Donc 0 byte chargé mais pas d'erreur ... Pourtant les fichiers existent bel et bien.

    Des données sont - elles perdues au moment de la transformation en byteArray ? Je ne vois vraiment pas d'où vient le soucis ...

  5. #5
    Membre régulier Avatar de titou624
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 152
    Points : 87
    Points
    87
    Par défaut
    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()

Discussions similaires

  1. [vb.net][Sound] comment jouer un son
    Par arnolem dans le forum Windows Forms
    Réponses: 9
    Dernier message: 11/02/2008, 22h57
  2. [TP] Programmation SOUND BLASTER
    Par mulfycrowh dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 30/01/2006, 02h24
  3. latence direct sound
    Par Mr kiwi dans le forum DirectX
    Réponses: 10
    Dernier message: 10/11/2005, 14h04
  4. [débutant] pré-requis de java.sound
    Par helonear dans le forum Multimédia
    Réponses: 2
    Dernier message: 20/06/2005, 10h26
  5. Problème avec une carte Sound Blaster Live
    Par zogstrip dans le forum Matériel
    Réponses: 4
    Dernier message: 25/09/2004, 20h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo