SO .. J'ai un tampon J'ai essayé le code suivant pour jouer ce tampon (byteArray \ flux) (i Obtenir des données MP3 du serveur La méthode d'obtention de données fonctionne bien (testée sur le texte Int, etc.) J'appelle la réponse renvoyée par ByTeArray ReadReResponse, car j'ai une méthode de saisie et c'est une réponse). P>
protected function Play(event:MouseEvent):void
{
var mySound:Sound = new Sound();
mySound.addEventListener(SampleDataEvent.SAMPLE_DATA, soundFill);
mySound.play();
}
public function soundFill(event:SampleDataEvent):void
{
event.data.writeBytes(readResponse.buffer, 0, readResponse.buffer.length);
}
3 Réponses :
Les œuvres suivantes pour moi:
package { import flash.display.Sprite; import flash.events.Event; import flash.events.SampleDataEvent; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest; import flash.net.URLStream; import flash.utils.ByteArray; public class QuickSoundTest extends Sprite { public var sampleMP3:Sound; private var soundChannel:SoundChannel; public var bArr:ByteArray; public function QuickSoundTest() { sampleMP3 = new Sound(); var urlReq:URLRequest = new URLRequest("test.mp3"); var urlStream:URLStream = new URLStream(); urlStream.addEventListener(Event.COMPLETE, loaded); urlStream.load(urlReq); } private function loaded(event:Event):void { var urlStream:URLStream = event.target as URLStream; bArr = new ByteArray(); urlStream.readBytes(bArr, 0, 40960); sampleMP3.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleDataHandler); soundChannel = sampleMP3.play(); } private function sampleDataHandler(event:SampleDataEvent):void { event.data.writeBytes(bArr, 0, 40960); } } }
Comme @ user238621, dit cela ne me donne qu'un tas de sons distorqués aléatoires
Celui-ci ne fonctionne pas depuis SampleDatevent.data attend des données d'échantillons bruts non compressés, pas mp3. Utilisez https://github.com/claus/as3swf/wiki / Play-Mp3-directement-directement-byteArray à la place. P>
Je ne pense pas qu'il existe une solution aux données binaires MP3, mais si c'est une solution de WAV, cela devrait fonctionner:
private function loaded(event:Event):void { var urlStream:URLStream = event.target as URLStream; bArr = new ByteArray(); urlStream.readBytes(bArr, 0); /** * Remove wav header here */ bArr.position = 0; sampleMP3.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleDataHandler); soundChannel = sampleMP3.play(); } private function sampleDataHandler(event:SampleDataEvent):void { var bytesToRead:int = (bArr.bytesAvailable > 65536 ? 65536 : bArr.bytesAvailable); event.data.writeBytes(bArr, bArr.position, bytesToRead); bArr.position += bytesToRead; }
Ce fil peut être utile Stackoverflow. com / questions / 1553563 / ...