Хелп, а хелп, что такое startPosition в sound.extract?

startPosition:Number (default = -1) — The sample at which extraction begins. If you don't specify a value, the first call to Sound.extract() starts at the beginning of the sound; subsequent calls without a value for startPosition progress sequentially through the file. – был ответ.

По мне так нифига не понятно.
И лишь метод научного тыка рассказал мне как с этим работать:

var EXTRACT : Number = 1024;
var snd:Sound = new Sound(new URLRequest("1.mp3"));
var ch:SoundChannel = snd.play();
var bytes : ByteArray = new ByteArray();
snd.extract(bytes, EXTRACT,(ch.position)*44.1);

This entry was posted in text. Bookmark the permalink.

3 Responses to Хелп, а хелп, что такое startPosition в sound.extract?

  1. nibb13 says:

    Немного теории человеческими словами.

    Звук == волна. У (звуковой тоже) волны две характеристики: частота и амплитуда. Амплитуда (вертикальные колебания волны на графике) задаёт громкость, а частота (горизонтальные колебания, проход через “нулевую”) задаёт тон (высоту звука).
    Управляя амплитудой (изменяя её значение в отдельно взятой точке) мы влияем на частоту, делая звук неоднородным и, как следствие, различимым (информативным, если так понятнее)

    Цифровой звук, в отличие от аналогового – дискретный. У нас не может быть реально бесконечного массива (рано или поздно закончатся память и винт). Поэтому мы его преобразовываем (гугли АЦП) в массив значений амплитуды в данной точке. Точки эти находятся на равном временном “расстоянии” друг от друга. Соответственно их количество в единицу времени чётко задаётся. Измеряется оно в “замерах в секунду” или, попросту, герцах. И эта характеристика цифрового звука называется частотой дискретизации.

    В качестве примера – “частота дискретизации 44100″ означает, что мы взяли аналоговую волну и 44100 раз в секунду замеряли значение амплитуды (гугли аппроксимацию). Получился массив значений, по которым можно приблизительно восстановить исходную волну (гугли интерполяцию). Кстати, тут происходит неизбежная потеря данных, поэтому цифровой звук всегда хуже чем аналоговый.

    Теперь мы подходим к определению сэмпла. Всё просто. Один замер == сэмпл. Т.е. сэмпл == значение амплитуды в данное время. Т.о. сэмпл под номером 44100 (при частоте в 44100) == значение аплитуды ровно после секунды проигрывания трэка. А сэмпл под номером 88200 находится в начале третьей секунды.

    Иллюстрации:
    http://g.imagehost.org/0477/likbez_1.jpg
    http://g.imagehost.org/0529/likbez_2.jpg
    http://g.imagehost.org/0339/likbez_3.jpg
    http://g.imagehost.org/0740/likbez_4.jpg

    Теория закончилась, теперь практика.

    .startPosition – номер сэмпла, с которого мы начинаем читать в буфер “bytes” количество сэмплов “EXTRACT”.
    Если мы не указываем этот параметр, то он сам сдвигается на EXTRACT при каждом чтении.

    В итоге твой код читает 1024 сэмпла (не всю секунду!!!) начиная с места “.position*44.1.”
    .position измеряется в миллисекундах (в хелпе об этом не сказано), 44.1 – это от дефолтовой частоты дискретизации. Т.о. 1000 мс * 44.1 == 44100, номер сэпла, который соответствует одной секунде etc…

    Ага, сумбурно, согласен. Задавай вопросы. Пост мониторю.

  2. nibb13 says:

    У тебя, случаем, ограничения на размер комментария нет?.. =)

  3. Рост says:

    Ниббл, отлично разложил все! Просто небольшая статья получилась, но такая, что будет любому ежику понятно :)

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>