Actionscript 3 — Метод Sound.extract очищает данные объекта sound

#flash #apache-flex #actionscript-3

#flash #apache-flex #actionscript-3

Вопрос:

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

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

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

Ответ №1:

 sound.extract(data,sound.length*44.1, -1);
  

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

Комментарии:

1. это близко, но вам нужно ввести 0 для начальной позиции (см. Мой ответ)

Ответ №2:

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

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

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

 var ba:ByteArray = new ByteArray();
ba.writeObject(sound);
ba.position = 0;
return ba;
  

Ответ №3:

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

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

Введение в использование этого события:

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

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

Ответ №4:

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

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

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