Actionscript 3 - метод Sound.extract очищает данные звукового объекта - PullRequest
0 голосов
/ 20 мая 2011

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

var data:ByteArray = new ByteArray;
sound.extract(data,sound.length*44.1);
data.position = 0;
return data;

Isэто правильное поведение?Разве нет способа сделать это несколько раз на одном и том же звуковом объекте?Или я здесь что-то не так делаю.Любая помощь приветствуется - спасибо

Ответы [ 4 ]

1 голос
/ 11 октября 2011
sound.extract(data,sound.length*44.1, -1);

Может быть, вам нужно установить startPosition с -1. В противном случае, когда вы вернетесь к тому же звуку и снова вызовете extract, начальное положение не будет равно -1.

0 голосов
/ 08 ноября 2012

Если вы передадите 0 для startPosition, вы всегда можете получить данные:

sound.extract(data,sound.length*44.1, 0);

Кажется, что в Sound есть внутренний ByteArray, положение которого устанавливается startPositionпараметр.-1, кажется, просто говорит ему читать откуда бы ни находилась позиция ByteArray.Когда вы уже прочитали все данные, передача -1 не получает ничего от ByteArray, поскольку его позиция находится в конце.

0 голосов
/ 20 мая 2011

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

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/SampleDataEvent.html#SampleDataEvent()

Введение в использованиеthis event:

http://blog.andreanaya.com/2009/04/dynamic-sound-part-1/

Обратите внимание, что вы можете получить доступ к двоичным звуковым данным из этого события, используя SampleDataEvent.thedata.

0 голосов
/ 20 мая 2011

Я считаю, что весь смысл «extract» заключается в том, чтобы фактически удалить байтовую информацию из объекта Sound;из API:

Этот метод предназначен для использования при работе с динамически генерируемым звуком с использованием функции, назначаемой событию sampleData для другого объекта Sound.То есть вы можете использовать этот метод для извлечения звуковых данных из объекта Sound.Затем вы можете записать данные в байтовый массив, который другой объект Sound использует для потоковой передачи динамического звука.

Я не слишком уверен, что вы пытаетесь выполнить, но если вы хотите сохранитьВаш звуковой объект в такте, вы можете захотеть просто записать его в ByteArray:

var ba:ByteArray = new ByteArray();
ba.writeObject(sound);
ba.position = 0;
return ba;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...