#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://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, поскольку его позиция находится в конце.