AS3 - извлечение звука в bytearray - обработчик прогресса - PullRequest
0 голосов
/ 17 марта 2011

Я использую следующее, чтобы извлечь звуковые данные из звукового объекта и сохранить их в байтовом массиве.

Я требую, чтобы весь mp3 был загружен в байтовый массив перед продвижением, и ниже работает нормальнодля этого, однако, флэш-память временно зависает, пока она извлекает эти данные (2,4 Мб mp3)

Есть ли способ, которым я могу остановить его зависание, т.е. использовать Eventlistener для проверки хода процесса извлечения?1006 *

Ответы [ 3 ]

1 голос
/ 06 августа 2012

Этот способ обычно работал на моем

function playLoadedSound (s:Sound) : void
{
    var bytes:ByteArray = new ByteArray ();
    s.extract (bytes, int (s.length * 44.1));
    playSound (s);
}

function playSound (bytes:ByteArray) : void
{
    loadedMp3Samples = bytes;
    loadedMp3Samples.position = 0; // reset position

    dynamicSound = new Sound ();
    dynamicSound.addEventListener (SampleDataEvent.SAMPLE_DATA, onSampleData);
    dynamicSound.play ();
}

function onSampleData (event:SampleDataEvent) : void
{
    for (var i:int ; i < 8192 && loadedMp3Samples.available > 0 ; i++)
    {
        var left:Number = loadedMp3Samples.readFloat ();
        var right:Number = loadedMp3Samples.readFloat ();
        event.data.writeFloat (left);
        event.data.writeFloat (right);
    }
}
0 голосов
/ 29 марта 2011

Метод извлечения запускается сразу, возможности для мониторинга прогресса не существует.Лучший вариант - проверить свойство isBuffering в Sound и, когда оно будет готово, начать извлекать 4096 сэмплов за раз и продолжать его движение ... эффективно передавая звук из одного объекта Sound в другой.

добавление оператора while просто разбивает процесс на множество более мелких кусков, компилятор все еще пытается сделать все это за один цикл / кадр / что угодно.

что вы пытаетесь общаться с прелоадером?играть головой?

0 голосов
/ 17 марта 2011

Второй параметр extract указывает, сколько звука вы хотите извлечь.Сделайте его меньше и вызывайте его каждый шаг столько, сколько вам нужно, чтобы полностью извлечь его.

...