И вторая проблема - поток при воспроизведении начинает играть с разным
темпом. То слишком медленно, то нормально, иногда быстрее обычного, с
последующими прерываниями
Уважаемое сообщество, если поможете хотя бы в чём-то буду признателен.
On 3 июл, 11:34, "gse...@gmail.com" <gse...@gmail.com> wrote:
> Так уж сложилось, что пришлось заняться actionscript 3.0 во флэше. А
> именно проигрыванием потока (44 kHz 96kbps) со стороннего сайта (порт
> 8000)
> И по окончании осталось не решёнными 2 вопроса:
> почему-то не удаётся из превью в браузере получить reader.getSpectrum
> (); В то время, как просто в превью (fla) всё проходит нормально. Как
> я понял проблема в получении прав. Засунул повсюду файл
> crossdomain.xml (на сайт где находится flash и сайт с которого идёт
> поток)
> <cross-domain-policy>
> <allow-access-from domain="*"/>
> </cross-domain-policy>
> но результата не дало. То есть поток проигрывается, но эквалайзерhttp://www.everydayflash.com/blog/index.php/2008/03/26/classic-sound-...
дело в том что нужны права на все звуки всех флешек загруженных в браузер(ы) плюс если есть редиректы нужно грузить crossdomain.xml ручками Security.loadPolicyFile()!
var sourceSnd:Sound = new Sound();
var outputSnd:Sound = new Sound();
var urlReq:URLRequest = new URLRequest("test.mp3");
sourceSnd.load(urlReq);
sourceSnd.addEventListener(Event.COMPLETE, loaded);
function loaded(event:Event):void
{
outputSnd.addEventListener(Event.SAMPLE_DATA, processSound);
outputSnd.play();
}
function processSound(event:SampleDataEvent):void
{
var bytes:ByteArray = new ByteArray();
sourceSnd.extract(bytes, 4096);
event.data.writeBytes(upOctave(bytes));
}
function upOctave(bytes:ByteArray):ByteArray
{
var returnBytes:ByteArray = new ByteArray();
bytes.position = 0;
while(bytes.bytesAvailable > 0)
{
returnBytes.writeFloat(bytes.readFloat());
returnBytes.writeFloat(bytes.readFloat());
if (bytes.bytesAvailable > 0)
{
bytes.position += 8;
}
}
return returnBytes;
}