Quel code AS3 est utilisé pour boucler un son utilisant AS3? P>
8 Réponses :
var sound:Sound = whateverSoundYouNeedToPlay; function playSound():void { var channel:SoundChannel = sound.play(); channel.addEventListener(Event.SOUND_COMPLETE, onComplete); } function onComplete(event:Event):void { SoundChannel(event.target).removeEventListener(event.type, onComplete); playSound(); }
Cela ne vous donnera pas une lecture parfaite et sans défaut, mais cela fera la boucle du son. Si vous voulez que le son soit bouclé plusieurs fois avec une lecture sans faille et sans défaut, vous peut appeler p> mais vous toujours em> aurait besoin de configurer un auditeur SoundComplete si vous souhaitez une lecture infinie après la 9999ème jeu. Le problème de cette façon de faire est si vous devez mettre en pause / redémarrer le son. Cela créera une cannelle de canalisation de son dont la durée est de 9999 fois supérieure à la durée du fichier sonore et de la lecture (durée) lorsque la durée est plus longue que la longueur du son provoque un crash horrible. P> P>
+1. L'utilisation du paramètre LOOP est à la fois plus simple et vous donne de meilleurs résultats comme vous le mentionnez. Si vous le définissez à un numéro assez grand, vous n'avez pas besoin de vous soucier de Sound_Complete code>, cependant. Être un
int code>, je suppose que vous pouvez la définir à une valeur maximale de 0x7FFFFFF ((2 ^ 31) - 1), qui, à toutes fins pratiques, devraient être plus que suffisantes.
"Mieux" est subjectif dans ce cas. Une meilleure fidélité sonore à coup sûr, mais une douleur beaucoup plus grande à travailler avec si le son doit être mis en pause / reprise pour une raison quelconque.
Assez juste. Je voulais dire mieux dans le sens de la lecture sans défense.
Son.play (0, int.max_value);, soit 2 147 483 647.
Les autres réponses sont excellentes, cependant, si vous ne souhaitez pas utiliser de code (pour une raison quelconque), vous pouvez mettre le son dans un MOVIECLIP, définir la propriété sonore sur "Stream", puis ajouter autant de cadres que vous Aimez le clip pour vous assurer qu'il joue complètement. P>
Ceci, bien sûr, est une manière moins préférée, mais pour les animateurs, je suis sûr que cela peut être préférable dans certaines situations (par exemple, lorsqu'il est synchronisé avec des animations de bouche que l'animateur veut boucle). P>
Pour développer un peu la lecture de @ scriptocalypse d'@ scriptocalypse: p>
Le problème de ne pas avoir la bonne lecture sans défaut provient de MP3, y compris des informations sur le fichier dans la tête ou la queue du fichier (Tags ID3, etc.), d'où la petite pause lorsque vous essayez de la boucler. Il y a quelques points que vous pouvez faire en fonction de votre situation. P>
jouer () code> en passant les boucles que vous souhaitez pour une lecture sans défaut (j'ai trouvé à l'aide d'un paramètre code> code> est meilleur que d'attendre Le Sound_Commlet Code> événement et la jouant à nouveau). Li>
- Vous pouvez essayer certaines des bibliothèques OGG pour utiliser des fichiers .ogg au lieu de .mp3. Une simple recherche Google de "AS3 OGG LIB" augmentera ce dont vous avez besoin. Personnellement, je les ai trouvés un peu maladroitement à utiliser et je ne pouvais pas me permettre les frais généraux ajoutés (par opposition au décodage MP3, qui est fait dans le joueur). Li>
- Si vos fichiers MP3 sont en streaming, le seul moyen d'obtenir la lecture sans jet est de les caler. Déterminez l'espace (en fonction de ce que vous avez utilisé pour les coder, ce sera différent - mes fichiers ont une lacune d'environ 330ms) et lorsque vous l'atteignez, commencez à lire la superposition. C'est une douleur appropriée si vous vous décomposez, mais quand cela fonctionne, cela fonctionne assez bien. Scénario pire des cas, vous vous retrouvez avec une situation (1) li>
ol>
import flash.media.Sound; import flash.media.SoundChannel; var mySound:Sound = new Bgm(); //Bgm() is the class of the internal sound which can be done in the library panel. playSound(); function playSound():void { var channel:SoundChannel = mySound.play(); channel.addEventListener(Event.SOUND_COMPLETE, onComplete); } function onComplete(event:Event):void { SoundChannel(event.target).removeEventListener(event.type, onComplete); playSound(); } This works perfectly.
Je ne sais pas parfaitement, vous devez importer flash.events.event code>. En outre, plus important encore, après la première boucle, je ne peux pas sembler avoir la musique à arrêter; Je veux arrêter la musique et jouer à un jeu sur le son.
Je suppose que c'est ce que vous recherchez au cas où le fichier vocal / musique est dans la bibliothèque:
Cela semble avoir travaillé pour moi:
var nowTime:Number = (new Date()).time; var timeElapsed:Number = nowTime - _lastTime; _lastTime = nowTime; _musicTimeElapsed+=timeElapsed; if(_musicTimeElapsed >= _musicA.length - GAP_LENGTH) { _musicTimeElapsed = 0; _musicA.play(0); }
Ce travail pour moi:
import flash.media.Sound; import flash.media.SoundChannel; var soundUrl:String ="music.mp3"; var soundChannel:SoundChannel = new SoundChannel(); var sound:Sound = new Sound(); sound.load(new URLRequest(soundUrl)); soundChannel = sound.play(); soundChannel.addEventListener(Event.SOUND_COMPLETE,onComplete); function onComplete(e:Event):void{ sound = new Sound(); sound.load(new URLRequest(soundUrl)); soundChannel = sound.play(); soundChannel.addEventListener(Event.SOUND_COMPLETE,onComplete); }
Vous devriez probablement accepter la meilleure réponse votée comme correcte.