Персональные блоги → Тестируем свежеиспечёные SSE модификации FFT/MDCT
Написал для своего детища SSE-реализацию комплексного FFT и MDCT. Результаты поразили даже меня:
Вычислялось два миллиона 128-точечных комплексных FFT и один миллион 512-точечных MDCT. Процессор Intel® Core(TM)2 Duo CPU E8400 @ 3.00GHz
Интересно можно ли это кому-нибудь продать или лицензировать? :)
| преобразование/вариант | без SSE | SSE-модификация |
|---|---|---|
| 2000000 * FFT-128 | ||
| 1000000 * MDCT-512 | 10,4с |
Вычислялось два миллиона 128-точечных комплексных FFT и один миллион 512-точечных MDCT. Процессор Intel® Core(TM)2 Duo CPU E8400 @ 3.00GHz
Интересно можно ли это кому-нибудь продать или лицензировать? :)
Персональные блоги → Небольшая демка моей библиотеки clunk.
Что такое кланк и про её(библиотеки) возможности можно почитать тут. Сразу предупреждаю что ничего супер-пупер в этой демке нет. Источник звука перемещается позади головы от положения 9 часов до положения 3 часа (против часовой стрелки).
Тут можно скачать ogg файл с записью. В ogg пожато потому что oggenc умеет жать из raw data. :)
Тут можно скачать ogg файл с записью. В ogg пожато потому что oggenc умеет жать из raw data. :)
Персональные блоги → Случайные заметки. MDCT.
Насколько позволяет время, работаю над проектом бесплатной и свободной библиотеки рендеринга 3D звука, о которой писал в прошлом посте.
Работа продвигается медленнее чем хотелось бы, в основном потому что приходится жертвовать драгоценным временем сна. :)
Что сделано к следующему публичному релизу:
Работа продвигается медленнее чем хотелось бы, в основном потому что приходится жертвовать драгоценным временем сна. :)
Что сделано к следующему публичному релизу:
- Добавлено и оттестировано MDC преобразование (вместо преобразования Фурье). Если делать преобразование Фурье, пускай с перекрытием, даже в пол-окна (на границах окон результаты микшируются кросс-фейдом), то после преобразований Фурье появляется так называемый blocking-effect(аналогичный эффект можно наблюдать на плохом качестве jpeg'ах или видео — разноцветные квадраты), хорошо различимый на слух. Это биения на частоте <частота дискретизации>/<размер окна FFT>. MDCT специально разработан чтобы избавиться от таких эффектов. Почитать про него можно тут. Теперь на слух никаких артефактов не слышно, кроме небольшого клиппинга(связанного с увеличением энергии сигнала), но с этим мы ещё поборемся :-D
- Попутно оказалось, что до сих пор, даже на новом core2duo, считать sin/cos достаточно накладно. Тест из 51.200.000 вычислений синусов работает 4 секунды против 0,7 секунд для кэшированной таблицы.
- Встретился с необходимостью отсечения одинаковых звуков. Введёно ограничение на количество одновременно играющих одинаковых звуков.
- Выкинул kiss за ненадобностью, в пользу более чистого c++ кода. Пропала поддержка SSE, вернётся чуть-чуть попозже :-D
- Начата демка «ножниц»(виртуальный парикмахер), чтобы проверить правильность всего предприятия.
Open source → Синтез 3D звука :: Clunk
Работая над проектом уютненькой аркады, я с сожалением обнаружил что OpenAL отбирает слишком много моего времени. Мало того, что для него пришлось написать менеджер звуков о полутора тысячах строк кода, так ещё и приходилось бороться с разного рода чёрной магией. (Например реализация от nvidia намертво вешала венду) Поэтому, я внезапно решил что потратил на него достаточно времени и написал свой собственный велосипед, который и был успешно обкатан в поле, и выпущен с открытыми исходниками на sourceforge.
Вообще, наше ухо не такое уж и хитрое устройство. Позицию источника ухо определяет двумя способами. В горизонтальной плоскости звук приходит в одно ухо чуть раньше чем в другое. Простая тригонометрия умноженная на диаметр головы и дело в шляпе! :)
Второй способ уже куда сложнее — голова имеет разную плотность и разные технологические отверстия, следовательно, спектр звука искажается по разному в зависимости от направления вхождения сигнала. Было много попыток сделать эталонную голову(ничего постыдного, даже Стив Джобс делал это), заполнить её желеобразным заменителем мозга и померить искажения эталонного звука, например проект KEMAR из MIT.
Мой проект называется Clunk, и умеет практически всё, что необходимо уметь звуковой библиотеке:
Адрес проекта на sf.net: https://sourceforge.net/projects/clunk
Если вам интересно, можно смело писать мне в icq, я готов ответить на любые вопросы.
Вообще, наше ухо не такое уж и хитрое устройство. Позицию источника ухо определяет двумя способами. В горизонтальной плоскости звук приходит в одно ухо чуть раньше чем в другое. Простая тригонометрия умноженная на диаметр головы и дело в шляпе! :)
Второй способ уже куда сложнее — голова имеет разную плотность и разные технологические отверстия, следовательно, спектр звука искажается по разному в зависимости от направления вхождения сигнала. Было много попыток сделать эталонную голову(ничего постыдного, даже Стив Джобс делал это), заполнить её желеобразным заменителем мозга и померить искажения эталонного звука, например проект KEMAR из MIT.
Мой проект называется Clunk, и умеет практически всё, что необходимо уметь звуковой библиотеке:
- Бесконечное количество всего: музыкальных потоков (SDL_Mix умеет только один, например), объектов и именованных источников звука прикреплённых к объектам или слушателю.
- Простое апи на c++. (В OpenAL вы вынуждены сами перестраивать сцену, для того чтобы перекинуть 16 источников поближе к слушателю, рестартуя источники (sic), ещё рекомендую посмотреть примерчик «как сделать фоновую музыку на OpenAL», ~полтыщи строк кода =-O ) )
- HRTF, HDT описанные выше(собственно 3d звук)
- Поддержка всех distance models (падение громкости в зависимости от расстояния) из OpenAL
- Опциональная оптимизация под процессоры с технологией SSE
- Эффект допплера
- Должно работать под всеми платформами где есть SDL, не содержит платформно-зависимого кода.
- Лицензия LGPL 2.1 — можно использовать в коммерческих продуктах.
Адрес проекта на sf.net: https://sourceforge.net/projects/clunk
Если вам интересно, можно смело писать мне в icq, я готов ответить на любые вопросы.