9
votes

Comment bouclez-vous un son en flash AS3 quand il se termine?

Quel code AS3 est utilisé pour boucler un son utilisant AS3?


1 commentaires

Vous devriez probablement accepter la meilleure réponse votée comme correcte.


8 Réponses :


10
votes
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();
}

0 commentaires

27
votes

Cela ne vous donnera pas une lecture parfaite et sans défaut, mais cela fera la boucle du son. XXX

Si vous voulez que le son soit bouclé plusieurs fois avec une lecture sans faille et sans défaut, vous peut appeler xxx

mais vous toujours 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.


4 commentaires

+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 , cependant. Être un int , 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.



0
votes

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.

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).


0 commentaires

3
votes

Pour développer un peu la lecture de @ scriptocalypse d'@ scriptocalypse:

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.

  1. Ignorez-le, il suffit de jouer comme normal, avec une petite pause à la fin de chaque fichier. Vous pouvez également essayer de le masquer avec un autre son (une goutte de beat yo) ou disparaître et disparaître.
  2. Si vos sons sont intégrés, et non en streaming, puis créez un fichier FLA, faites-le glisser votre fichier MP3, puis définissez-les à l'exportation (de la même manière que vous ajouteriez un nom de liaison pour un MovieClip, etc.). Il semble que lorsque vous exportez des sons comme celui-ci, Flash prend le retard sur le compte, ou les dénonce lorsqu'il crée l'objet sonore. De toute façon, vous pouvez simplement faire un simple jouer () en passant les boucles que vous souhaitez pour une lecture sans défaut (j'ai trouvé à l'aide d'un paramètre est meilleur que d'attendre Le Sound_Commlet événement et la jouant à nouveau).
  3. 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).
  4. 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)

0 commentaires

4
votes
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.

1 commentaires

Je ne sais pas parfaitement, vous devez importer flash.events.event . 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.



2
votes

Je suppose que c'est ce que vous recherchez au cas où le fichier vocal / musique est dans la bibliothèque: xxx


0 commentaires

1
votes

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);
}


0 commentaires

0
votes

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);
}


0 commentaires