Привет, подскажите пожалуйста как из бетти можно вытянуть звуковые эффекты? Хочу их использовать в ардуинке в своём проекте.
Привет, подскажите пожалуйста как из бетти можно вытянуть звуковые эффекты? Хочу их использовать в ардуинке в своём проекте.
Изготовление Картриджей для Денди 1-8 игровки с меню. (0,1,2,3,4,7,71 мапперы), для Сеги 1-8
https://vk.com/retronicaru
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Исходники Batty доступны. Используя их можно перенаправить вывод звука куда угодно.
С уважением, Станислав.
Спасибо! Я то по наивности думал что там побитная таблица в игре просто. Щас вижу что там целая процедура. Тогда получается мне вместо бипера записывать данные в память? ; Used by the routines at play_sound_LC122, play_sound_choose_ctrl and play_sound_choose_letter.
sound_beep2:
LD A,$10
OUT ($FE),A
sound_beep2_0:
DJNZ sound_beep2_0
XOR A
OUT ($FE),A
LD B,D
sound_beep2_1:
DJNZ sound_beep2_1
RET
Изготовление Картриджей для Денди 1-8 игровки с меню. (0,1,2,3,4,7,71 мапперы), для Сеги 1-8
https://vk.com/retronicaru
Не все так просто. Там надо для каждой команды, которая исполняется в процедуре, посчитать количество тактов. Если это команда условного перехода или DJNZ - то надо рассмотреть оба варианта по тактам, когда переход исполняется и когда он не исполняется. Тактовая частота процессора известна - 3,5МГц. Анализ процедуры генерации звука позволит выяснить задержки между переключениями сигнала на бипере. Если требуется повторить такой звук на Ардуино без ЦАП - то нужно более или менее точно выдержать эти задержки и сгенерировать такой же сигнал на выходе звука. Если же имеется аудио-ЦАП - то есть вариант 2. Сгенерировать в памяти компьютера такой же сигнал, как это делает процедура на Спектруме. Потом подвергнуть этот сигнал ФНЧ-фильтру, ограничив полосу пропускания до 20кГц или ниже (по желанию). После фильтрации частоту дискретизации сигнала (исходно 3,5МГц) можно будет снизить до примерно 44кГц путем выбрасывания лишних данных - это не приведет к потере качества благодаря теореме Котельникова. Отфильтрованный сигнал после передискретизации записать в память и воспроизводить. Но тут, скорее всего, потребуется много памяти.
В общем, задача непростая, но интересная!
Можно просто в эмулятор добавить лог записи в порт fe + текущий эмулируемый такт и потом уже что душе угодно делать, к примеру скриптом создать битовый массив, ну либо сохранить wave, в каком то музыкальном редакторе передескритезировать на нужную частоту
Barmaley_m(21.09.2024)
Если эмулятор неправильный (без ФНЧ) - то нельзя. При отсутствии в эмуляторе ФНЧ его выходной аудиосигнал имеет специфические нелинейные искажения, известные под названием "Aliasing". Эти искажения необратимые, их устранить в звуковом редакторе или другим способом, в общем случае, невозможно.
- - - Добавлено - - -
Самое прямое. ЦОС отвечает на вопросы, что такое фильтр, зачем он нужен, и что происходит, если его не использовать, либо его параметры неподходящие.
Эмулятор, генерируя звук, занимается цифровой обработкой сигналов, хочешь ты этого или нет. Даже если эта обработка с виду простая, и кажется, что ее вообще нет. Если знаешь теорию - то знаешь достоинства и недостатки применяемого метода обработки, и можешь при необходимости применить другой метод, свободный от нежелательных недостатков. Ну, а если не знаешь - то и получаются эмуляторы, которым медведь на генерацию звука наступил.
Да, именно в эмуляторе. Я и Ivagor говорили об одном и том же. В эмуляторе. Нужен. Фильтр. Обязательно.
Затем, что частота дискретизации исходного сигнала (состояния порта #FE) - 3,5МГц. Это во много раз выше частоты дискретизации выходного сигнала (44100 или 48000Гц на звуковой карте).
Что будет, если при таком уменьшении частоты дискретизации не применять ФНЧ? Варианта 2.
1) Если в исходном сигнале были частоты выше 22050 или 24000Гц - то будет алиасинг.
2) Если в исходном сигнале высоких частот не было - то ничего не будет.
Есть ли в сигнале бипера частоты выше 22050 или 24000Гц? Конечно есть. Простой пример - вычисли преобразование Фурье от прямоугольного сигнала на какой-нибудь звуковой частоте типа 440Гц. Количество гармоник будет бесконечным, так что и частоты выше 22050Гц будут. В дискретном случае, с дискретизацией на 3,5МГц, гармоники будут вплоть до 1,75 МГц.
Что нужно сделать, чтобы в сигнале таких частот не было? Правильно, ФНЧ.
ФНЧ надо применять до того, как звук будет преобразован к частоте дискретизации операционной системы. После - уже поздно. Поэтому то, что в ОС и где-то там еще есть фильтры - это не значит, что тебе свой фильтр делать не надо.
Ключевые слова - "Субъективно" и "практически". Ты наверняка не измерял уровень искажений, а на слух не научился еще, к чему надо прислушиваться. А измерения провести просто.
1) Выполняешь команду "BEEP" в бейсике, генерируя какой-нибудь музыкальный звук. Эта команда должна генерировать чистые прямоугольные сигналы нужной частоты.
2) Сохраняешь звуковой файл из эмулятора
3) Открываешь его в звуковом редакторе
4) Смотришь спектральный анализ. Видишь спектральные пики не только на базовой частоте звука и ее гармониках, а еще и кучу лишних пиков где попало. Это и есть алиасинг.
Если сделать в эмуляторе нормальный ФНЧ и повторить эксперимент - то спектральные пики будут только на базовой частоте звука и ее гармониках. На слух звук будет при этом чистым и звонким. Но я понимаю, для неопытного уха может быть непонятно, на какие аспекты звука надо обращать внимание.
На железном же компьютере выходной сигнал аналоговый. В нем присутствуют, в том числе, ультразвуковые частоты вплоть до нескольких мегагерц. Но ты их не слышишь. А те, что слышишь (аудиочастоты) - они чистые и не содержат посторонних спектральных линий. Если, конечно, усилитель и колонки не совсем ужасные.
Реализуют. ФВЧ тоже нужен. Но не так критично. Он нужен для удаления из сигнала постоянной составляющей и оптимального использования динамического диапазона выходного сигнала. ФВЧ первого порядка вполне достаточно. И этот ФВЧ может работать на последнем этапе обработки сигнала, уже на частоте дискретизации звуковой карты.
- - - Добавлено - - -
Децимация - это частный случай передискретизации. Я думаю, автор имел здесь в виду то, что децимация также подразумевает использование соответствующего ФНЧ. Для высококачественной передискретизации (более общий случай) ФНЧ тоже, конечно, нужен.
Кусочно-линейная интерполяция, если ее рассмотреть с точки зрения ЦОС, неявно применяет ФНЧ. Но это плохой ФНЧ, который недостаточно подавляет высокие частоты. Как следствие - алиасигнга становится меньше, чем если совсем без фильтра. Но все же он остается, и достаточно много. Качество звука все равно плохое.
Нет, недостаточно. С хорошим фильтром можно получить значительно лучшее качество звука, и разница будет явно ощутима на слух.
Передискретизация и ФНЧ бывают разные. В том числе есть решения, комбинирующие ФНЧ и более сложную, чем кусочно-линейную, интерполяцию. Таким образом можно с высоким качеством передискретизировать сигналы с произвольным (в том числе иррациональным) соотношением исходной и целевой частот дискретизации. Рекомендую почитать следующую статью: Polynomial Interpolators for High-Quality Resampling of Oversampled Audio. Без соответствующей теоретической подготовки, может, и не все поймешь, но попробуй хотя бы реализовать оттуда пару-тройку алгоритмов.
- - - Добавлено - - -
При теоретическом рассмотрении, в конечном счете, любая передискретизация может быть сведена к вставке нулей, потом ФНЧ, а потом выбрасыванию ненужных сэмплов. И именно так и следует теоретически рассматривать весь процесс. Но "в лоб" это делают редко, потому что слишком высокие вычислительные затраты. Как на расчет коэффициентов фильтра, так и на последующую фильтрацию.
Есть множество способов оптимизировать реализацию фильтра и всего процесса после того, как выполнены теоретические расчеты. Применяются неявные фильтры (как в случае кусочно-линейной или полиномиальной интерполяции), интерполяция коэффициентов фильтра (структуры фильтров Фарроу), полифазное разложение. Можно воспользоваться кусочным постоянством фильтруемого сигнала (я это впервые в эмуляторном мире реализовал в 2002г). Можно рассматривать фильтрацию в непрерывном времени (хотя расчеты ведутся, казалось бы, для дискретного времени). После оптимизации алгоритмы перестают быть внешне похожими на какую-либо фильтрацию, особенно для несведущего. Но делают они именно ее. И делают эффективно.
Последний раз редактировалось Barmaley_m; 08.12.2024 в 03:39.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)