Подробная информация о формате as3 Sound.extract()?
Используя метод звукового объекта.extract(), можно получить несжатые звуковые данные в виде ByteArray. В каком формате извлекаются звуковые данные? Пользовательский внутренний формат или установленный формат? Тип Endian?
Я хотел бы иметь возможность загружать звуковые данные непосредственно в массив byteArray и воспроизводить звук из этих данных (минуя шаг 1 ниже).
Вот мои эксперименты до сих пор:
Шаг 1. Здесь я загружаю звук, извлекаю содержимое данных и сохраняю его на диск:
private var sound:Sound;
private var byteArray:ByteArray;
// loading a sound...
private function init():void {
sound = new Sound();
sound.addEventListener(Event.COMPLETE, onComplete);
sound.load(new URLRequest('short.mp3'));
}
// saving it to disc...
private function onComplete(e:Event):void {
byteArray = new ByteArray();
sound.extract(byteArray, 100000000);
byteArray.position = 0;
var file:FileReference = new FileReference();
file.save(byteArray, 'short.data');
}
Шаг 2. Здесь я загружаю данные с диска и передаю воспроизведение нового звукового объекта с этими данными:
private var sound:Sound;
private var byteArray:ByteArray;
// loading a sound...
private function init():void {
file = new FileReference();
file.addEventListener(Event.COMPLETE, onLoaded);
file.addEventListener(Event.SELECT, onSelected);
file.browse();
}
private function onSelected(e:Event):void {
file.load();
}
private function onLoaded(e:Event):void {
trace('loaded');
trace(file.data.length);
byteArray = file.data;
sound2 = new Sound();
sound2.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);
sound2.play();
}
private function onSampleData(e:SampleDataEvent):void {
trace(e.position);
for (var i:int = 0; i < 2048; i++) {
var left:Number = byteArray.readFloat();
var right:Number = byteArray.readFloat();
e.data.writeFloat(left * 0.2);
e.data.writeFloat(right * 0.2);
}
}
Я хотел бы иметь возможность выполнить этот второй шаг (загрузка данных с диска и подача воспроизведения звукового объекта) с помощью утилиты внешнего конвертера (sox или что-то).
/ Джонас
1 ответ
Это должны быть стандартные 32-битные числа с плавающей запятой, по одному на канал на выборку. Так что я бы попробовал -e с плавающей точкой для sox, хотя я не пробовал, но я бы сделал это с определенным уровнем уверенности...:) Плавания независимы от байтов, я считаю...