timON | Дата: Суббота, 28.02.2009, 03:16 | Сообщение # 1 |
 БОГ
Группа: Администраторы
Сообщений: 144
Статус: Offline
| Пример Дано: Сводим две 16-битных моно-семпла, частота дискретизации 44100Гц (как на CD), которые мы получаем из семплера. Для упрощения рассчетов, будем считать, что значение velocity миди-сообщения, которое проигрывает громкость, имеет величину 63, что означает, что клавиша миди-клавиатуры нажата с небольшой скоростью, и семплер должен воспроизвести семпл на половине громкости семпла. Потом 2 получившихся файла нам следует свести без изменения уровня (то есть мы не изменяем громкость ни одного из файлов). Результирующий файл должен быть 16-битный. Предположим, что текущее значение первого семпла: - 12345 в десятичной системе или 0011000000111001 в двоичной. А значение второго: - 44321 в десятичной системе или 1010110100101011 в двоичной В двоичной системе каждый из знаков представляет собой бит сигнала, сейчас их 16. Теперь выполняем задачу со сведением в 16 битах. Воспроизводим ноты с velocity=63 (половина громкости) Для этого мы просто делим значение сигнала в каждой точке на 2 (10 в двоичной системе) Вычисляем в двоичной системе: - 0011000000111001 / 10 = 0001100000011100 - 1010110100101011 / 10 = 0101011010010101 Заметьте, биты сдвинулись в право и последний разряд "потерялся". Сводим два получившихся файла. Для сведения без изменения громкости мы просто складываем значения сигналов в каждой точке (семпле) одного файла с соответствующим значением другого файла: Вычисляем в двоичной системе (складываем в столбик): 0001100000011100 + 0101011010010101 = 0110111010110001 Мы получили в двоичной системе число 0110111010110001, которое соответствует числу 28337 в десятичной. Запомним его. Примечание: Вычисление с двоичными числами можно проводить в обычном калькуляторе Windows. Для это запустите его (1. Пуск » Все программы » Стандартные » Калькулятор 2. Пуск » Выполнить » Ввести calc), в меню Вид выберите инженерный. Поставьте точку на Bin. Введите число, выберите математическое выражение (+, -, *, /) и вводите второе число, жмёте равно (или enter на клавиатуре). Чтобы получить число в десятичном виде, ставите точку на Dec. Теперь выполняем те-же самые операции, только промежуточные результаты (файлы) будут иметь разрешение 24 бита, но результирующий всё равно 16, итак: Переводим наши 16-битные семплы в 24бита, добавляя лишние младшие 8 бит: Первый семпл 0011000000111001 у нас будет выглядеть так: 001100000011100100000000 А второй 1010110100101011 у нас будет выглядеть так: 101011010010101100000000 Воспроизводим 2 семпла c половиной громкости: 001100000011100100000000 / 10 = 000110000001110010000000 101011010010101100000000 / 10 = 010101101001010110000000 Заметьте, результат у нас в формате 24 бит, и при понижении громкости младшие биты у нас не исчезли, а сдвинулись в старший из бывших лишними младших 8 бит. Теперь сводим в 24 битах, без изменения громкости, просто складывая значения семпла в каждый момент времени (произведём вычисления в столбик): 000110000001110010000000 + 010101101001010110000000 = 011011101011001000000000 Мы получили результат в 24 битах, чтобы привести его к требуемым 16, выполняем простейший транкейт, то есть отсекаем младшие 8 бит, а семпл в 24 битах выглядящий как 011011101011001000000000 будет выглядеть так: 0110111010110010 в 16 битах. Мы получили результат 0110111010110010 в двоичной системе, в десятичной системе это число выглядит так: 28338. Итак, мы получили 2 ответа: при седении в 16 бит - 28337 при седении в 24 бит - 28338 Ошибки при сведении Как вы наверно заметили, разница между ответами совсем небольшая, при сведении в 16 бит компьютер ошибется всего лишь на единицу, но не будем забывать, что при частоте дискретизации 44100Гц (частота компакт-диска) мы имеем 44100 таких ошибок в секунду! Стоит также отметить, что такая ошибка у нас получилась при сведении 2-х файлов с примитивным понижением громкости в двое, а если мы бы уменьшили ее не в 2, а в 3,5 раза? Тогда ошибка была бы заметнее, а если мы сводим не 2, а 10 файлов, причем стерео, то есть складывали бы 20 уже ошибочных значений, а если бы мы применили эффекты типа дилея или ревебрации, которые используют очень много вычислений, причем в каждом бы допускалась ошибка? Как мы можем заметить, ошибки бы наслаивались на ошибки и чем больше мы преобразований и действий с данными устраиваем, тем больше ошибочной информации мы получаем в младших битах и тем старше становятся ошибочные биты. А на слух звук теряет естественность и кристальность, становится мутным, мыльным, неестественным. В данном опыте в результате сведения в 16 бит мы получили 15 верных старших бит. То есть с каждым таким, как в опыте, преобразованием мы теряем 1 бит полезной информации. А если над одним и тем-же материалом сделать 8 таких преобразований (что реально в процессе сведения)? Тогда в результате число верных старших бит в сигнале будет равно 8. Остальные будут хоть и не шумом, но и не такими, какие они должны получиться в природе при смешивании 2x8=16 звуков. Программно же вы можете работать хоть с 64-битным звуком, если программа такое позволяет, всё равно все обработки происходят внутри компьютера в цифровом виде, а звуковая карта нужна лишь для прослушивания результатов. То есть если вы создаёте музыку в 32-битном формате, а ваша звуковая карта имеет 16-битный преобразователь (н-р, SB Live – 16 бит; SB Audigy - 24бита), то на её выходе будет 16-битный звук. Сейчас в моде делать все записи в формате 32 бита с плавающей запятой (float). В таких форматах, с плавающей запятой, не имеет значения сколько бит имеет та или иная запись в вашем общем проекте, главное чтобы она не превышала заданное число битов (в нашем случае 32). То есть в аудио-сексенсоре необязательно все треки должны быть в 24 бита, разные дорожки могут иметь разные форматы, программа всё равно округляет их до 32бит и работает в 32х разрядном формате. И самое главное, пиковые значения могут превышать 0 дБ. Информация выше 0 дБ не теряется, нужно только перед преобразованием в 16 бит итогового микса нормализовать уровень.
|
|
| |