Точно, я забыл, вопрос снят.
Вид для печати
Ну вот теперь видно, что 50Гц были из-за таймера. Но очень уж они тихие, у меня гораздо громче получается. Ну и фиг с ним.
---------- Post added at 15:34 ---------- Previous post was at 15:33 ----------
Кстати, используется как раз режим 2 таймера.
Не знаю, у меня в эксолоне вообще никакого треска нет.
---------- Post added at 15:42 ---------- Previous post was at 15:40 ----------
Разница в том, что в эксолоне действительно "тычёк в один такт", а в clrs сотни тактов.
"Режисерская версия саундтрека exolonа".
1. Сначала пару-тройку секунд мигает РУС/ЛАТ, я нажимаю БЛК+СБР
2. Распаковывается, показывает текст, нажимаю РУС/ЛАТ
3. Переход на заставку, заиграла музыка
4. Нажимаю РУС/ЛАТ, музыка прекратилась
5. Примерно на 30й секунде нажимаю БЛК+ВВОД (по индикатору уровня в редакторе видно, что в этот момент уровень уменьшается примерно на 6 дБ).
После прекращения музыки там действительно "тычки" в один такт. Однако у меня, похоже, это не эмулируется: в одном сэмпле при частоте сэмплирования 44100Гц укладывается целых 34 такта таймера, так что вероятность того, что последнее значение будет еденица - всего 3%.
---------- Post added at 16:15 ---------- Previous post was at 16:13 ----------
При честной эмуляции значение сэмпла нужно было бы считать интегрируя каждый такт. Тогда действительно тычки были бы очень тихие.
Сигнал Gate снимается (т.е. равен лог. 0) когда нажаты СБР+БЛК или ВВОД+БЛК, в это время счет прекращается и на выходе таймера будут неизменные сигналы. Это я к тому что необязательно обнулять прогу.
Нет, и при частоте ШИМ более 22КГц вряд-ли будет достоверный результат.
---------- Post added at 16:38 ---------- Previous post was at 16:29 ----------
А в эксолоне используется ШИМ! А я то думаю, почему он у меня шипит?!!
---------- Post added at 16:43 ---------- Previous post was at 16:38 ----------
Там таймер для нескольких голосов не используется!!! Всё через порт 00h!
Попытка по-быстрому изобразить ШИМ (все очень тупо, кроме того чуть медленновато, поэтому голос звучит ниже, чем должен). Все же на реале свистит несколько меньше, чем в эмуляторах.
Удалил вложение, т.к. далее выложил вариант получше
Но ведь работает :)
Ну там два голоса, т.е. минимум три уровня нужно. По твоей записи видно, что там три уровня, я и подумал, что был использован таймер. А там оказывается ШИМ.
---------- Post added at 16:55 ---------- Previous post was at 16:54 ----------
Ну дык разные программы-то :)
Шутка. Просто разные частоты сэмплирования.
Переделал ШИМ, в т.ч. уменьшил число используемых бит из каждого звукового отсчета - теперь по 3. Если стараться не обращать внимание на свист, то почти нормально.
После уменьшения числа бит образовался небольшой запас быстродействия, в принципе можно 11-12 кГц wavы воспроизводить.
блин ребята, ну вы маньяки :)
чтоб до таких мелочей докапываться.
ZEman, мы просто хотим стереть все грани между реалом и эмуляцией :)
у вас это кстати неплохо получается.
хотя эмулятор рамироса мне больше нравится.
Ввел интегрирование для каждого сэмпла, теперь вроде как свистита стало немного меньше.
Ждем когда Tim0xA обновит эмуль :)
Обновил
Ramiros, стало лучше. Если сравнивать ШИМ в VV и в текущей версии b2m, то счет в твою пользу. Но хотелось бы еще более похоже на реал. Сравни спектры сигналов, записанных с реала и в твоем эмуляторе (я смотрел в Sound Forge).
Вложение 14037
Это немного улучшенные версии, могут играть и из основной памяти и с КД. PWM8 - частота дискретизации 8000 Гц, PWM9 - 11500 Гц (это и по спектрам видно). В PWM9 на реале свист ушел в область выше и не так напрягает - фактически осталась одна гармоника на 11500 (только памяти не напасешься).
Тут наверное ничего неподелаешь, частота дискретизации буфера равна 44100 Гц, но чтобы создать один полный период необходимо хотябы 2 точки, т.е. получается реальная максимальная звуковая частота равна 22050 Гц. Поэтому все что мы будем генерировать на выходе канала PCM будет ресэмплироваться к частоте буфера, и будут появлятся гормоники низшей частоты.
Для таймера можно просто при определенных значениях счетчика которые например дают частоту более 20 КГц отсекать эти частоты, т.к. человек их всеравно неслышит, что я и делаю при включеном фильтре, а как быть с каналом PCM ? анализировать сигнал на лету, весьма сложная задача.
---------- Post added at 15:57 ---------- Previous post was at 15:52 ----------
ivagor, неплохо бы еще сделать (переделать) тест таймера для BCD режима, какое то белое пятно остается, наверняка неукого нереализовано, или реализовано криво :) Я в новой версии (пока невыкладываю) уже сделал поддержку, но пока хотелось бы потестить, посмотреть результат с реала.
Попробую перевести это в понятный мне вид - у тебя исходно частота дискретизации звукового сигнала >44100. Чтобы привести к 44100 ты делаешь децимацию, но без ФНЧ, в результате алиасинга верхние частоты заворачиваются вниз. Я правильно понял? Если да, то надо добавить фильтрацию при децимации. Если я неправильно понял, то поясни подробнее.
Где тесты, я готов их прогнать (если Tim0xA не успеет раньше :) ).
Ramiros, b2m, вы предлагаете, чтобы я взял например вот эти тесты, у которых в авторах указан в т.ч. b2m, поправил один бит при задании режима таймера и запустил на реале? Это несерьезно. Вы и svofski уже долго въезжаете в эту тему, вам и карты в руки.
Свист при ШИМ не давал мне покоя, поэтому сделал вариант с частотой дискретизации 17 кГц (pwm10, играет с КД) - не свистит! Вернее мое ухо не слышит, может некоторые дети и животные услышат и такой высокочастотный свист. Правда, есть некое несильное жужжание, но это гораздо меньше напрягает, чем свист. Также перезаписал wavы от pwm8 и pwm9. В прошлом варианте с pwm8 еще все нормально, а в pwm9 при записи добавился призвук, которого не было при воспроизведении с вектора. Изменил технологию записи, в новом варианте все нормально. pwm8and9and10.7z
Понял, почему немного жужжит pwm10, это убирается ценой некоторой потери частоты (до 16 кГц), но при этом становится немного слышен свист. Буду думать, как ускорить и чтобы не жужжало и не свистело одновременно.
Вот переделал i8253.rom под BCD режим. Жду результатов с реала
Результат I8253_BCD.ROM
Мдя, переход через ноль я не учёл, в BCD будет не FFFF, а 9999 :)
Эмулятор на сайте!
Аналогично.
Выложил эмуль на сайт.
Ramiros, спасибо, что работаешь в этом направлении, стало лучше. Надеюсь, ты не успокоишься, пока не станет неотличимо от реала ;)
В 2009 выкладывал пример проигрывания WAVа через ВИ53+бипер. Сайта уже давно нет, теперь тот файлик на форуме.
В связи с дискуссией в теме про музыку Сергея Новикова сделал еще два примера с использованием "ЦАПа".
1. Проигрывание пяти разных форм сигнала, в т.ч. треугольника и пилы
Вложение 39572
Вложение 39574Вложение 39575
2. Меандр с четырьмя разными уровнями громкости
Вложение 39573
В архивах есть исходники, ROMы и WAVы.
А как получают на ВИ53 несколько уровней громкости?
Или это какая-то особенность схемы именно Вектора?
Три канала ВИ53 складываются на векторе с одинаковыми весовыми коэффициентами, что дает (с учетом молчания) 4 уровня. Как оказалось и бипер на векторе тоже складывается практически с тем же весом, т.е. +еще один уровень. Предполагаю, что на Апогее и ПК8002 (т.е. там, где все каналы ВИ53 могут играть звук) примерно аналогичная ситуация (если не брать в расчет ЦАП для управления громкостью на ПК8002).
у ВИ53 есть команды которые позволяют сформировать на выходах лог.1 или 0 (при условии что на входах GATE всегда 1), учитывая схему микшера каналов понятно что можно формировать 4-х уровневый сигнал, но это впринципе от ЦАПа ничем ни отличается и этот метод требует больших процессорных ресурсов и много ОЗУ, следовательно полезность этой фичи стремится к нулю.