Comment lire un son dans Actionscript 3 qui ne se trouve pas dans le même répertoire que le fichier SWF?
-
01-07-2019 - |
Question
J'ai un projet avec un tas de sons externes dans un fichier SWF. Je veux les lire, mais chaque fois que je tente de charger une nouvelle URL dans l'objet son, il échoue avec l'un ou l'autre,
Erreur n ° 2068: son non valide
ou déclenche une erreur ioError avec
Erreur n ° 2032 Erreur de flux
// Essayé avec le chemin précédé de " http: //.." " fichier: //.." " //.." et ".."
var path:String = "http://../assets/the_song.mp3";
var url:URLRequest = new URLRequest( path );
var sound:Sound = new Sound();
sound.addEventListener( IOErrorEvent.IO_ERROR, ioErrorHandler);
sound.addEventListener( SecurityErrorEvent.SECURITY_ERROR, secHandler);
sound.load(url);
La solution
Eh bien, je viens juste de faire un test en plaçant un mp3 dans un répertoire: soundTest / assets / song.mp3
, puis en créant un swf qui appelle le mp3 dans un autre répertoire: soundTest /swfs/soundTest.swf
et lorsque j'utilise chemin var: String = "../ assets / song.mp3", il se compile sans erreur.
Quelle est votre structure de répertoire actuelle?
Autres conseils
Sauf si vous allez mettre une URL complète, n'utilisez pas http: // ou file: //
Le son peut charger un fichier mp3 à partir d’une URL complète ou relative. Vous devez simplement vous assurer que votre URL est correcte et valide.
Par exemple, si le chemin d'accès complet au fichier est http: //www.something. com / assets / the_song.mp3 , un chemin d'accès de " /assets/the_song.mp3" fonctionnerait.
Vous devriez vraiment télécharger httpfox pour FireFox. Ce SNIFFER vous permet de voir quelles données circulent dans le navigateur. Vous pouvez voir les fichiers qu'il charge, y compris les chemins d'accès à chacun, et vous pouvez même renifler les variables POST et GET. Cela vous montrera d'où les fichiers sont extraits et vous pouvez vous en servir pour corriger vos chemins relatifs en conséquence.
https://addons.mozilla.org/en-US/firefox / addon / 6647
Important:
Tous les actifs externes appelés à partir du fichier SWF sont relatifs au fichier HTML les chargeant lorsqu'ils sont chargés sur le Web, pas au fichier SWF. La seule exception, et c'est quelque chose qui a commencé avec AS3, les fichiers FLV sont relatifs au fichier SWF, pas au document HTML chargeant le fichier SWF comme tous les autres éléments. C’est la raison pour laquelle SNIFFERS est un outil important. Je me suis gratté la tête pendant un moment jusqu’à ce que j’ai remarqué que l’URL dans le renifleur appelait un chemin étrange.
Vous trouverez ci-dessous comment charger le son.
var soundRequest:URLRequest = "path/to/file.mp3"; var s:Sound = new Sound(soundRequest); var sChannel = s.play(0, int.MAX_VALUE); //Causes it to repeat by the highest possible number to flash. //Above starts the sound immediatly (Streaming);
//Now to wait for completion instead, pretend we didnt start it before.
s.addEventLister(Event.SOUND_COMPLETE, onSComplete, false, 0, true);
function onSComplete(e:Event):void { var sChannel = s.play(0, int.MAX_VALUE); //Causes it to repeat by the highest possible }
Dans les deux protocoles, RTMP & amp; HTTP, le chemin devrait être - " chemin / vers / mp3: fichier.mp3 " ou "chemin / vers / mp3: fichier". Je peux m'en souvenir. Veuillez cocher les deux.