Air 2 и потоковое mp3 - PullRequest
       1

Air 2 и потоковое mp3

0 голосов
/ 15 октября 2010

Я планирую воспроизводить более одного MP3 одновременно, как это делает многодорожечный режим, я знаю, что это вызвало огромное увеличение памяти. Есть ли способ для потоковой передачи или буферизации в реальном времени?

Если я использую его для создания виртуального пианино, будет ли возможно встроить 88 или 500 МБ MP3 для воспроизведения или динамической загрузки?

1 Ответ

0 голосов
/ 15 октября 2010

Хм ...

Поток из файлов?

Это было бы возможно, но я не думаю, что это было бы возможно с AIR API ... Я думаю, здесь можно было бы использовать собственную библиотеку ... По сути, у вас был бы класс SoundPlayer , который будет иметь методы addSound и removeSound .

Каждый раз, когда addSound вызывается, требуемый путь (то есть необходимая нота и инструмент) используется для инициализации FileStream , а также метода обратного вызова для вновь созданного Звук Экземпляр. Обратный вызов будет считывать (буферизовать) что-то из экземпляра FileStream , например, 8192 байта или размер буфера, и записывать это в буфер Sound .

removeSound просто удалит (закроет и т. Д.) Экземпляры обоих FileStream и Sound , созданных addSound .

Экземпляры должны храниться в каком-то массиве.

Также обратите внимание, что динамическая потоковая версия Sound ОЧЕНЬ недокументирована ... Но это пример кода, чтобы понять, как он работает:

var mySound:Sound = new Sound(); // new one
mySound.addEventListener("sampleData", getData); // the callback event
var myChannel:SoundChannel = mySound.play(); // no arguments for play, channel

// the callback function - it is used to get the new sound buffer
function getData(e:SampleDataEvent):void {
    for (var wi:int = 0; wi < 8192; wi++){
        e.data.writeFloat(Math.random());
    }
}

Это генерирует шум (случайный).

Вот форма волны пилы. Просто потому, что это весело: (предупреждение: громко)

var subWi:Number = 0;
for (var wi:int = 0; wi < 8192; wi++){
    e.data.writeFloat(subWi);
    subWi += 0.01;
    if (subWi >= 1){
        subWi = 0;
    }
}

Примечание : с помощью этого кода вы также можете сделать синтезатор: D

...