User Tag List

Показано с 1 по 10 из 14

Тема: Общий подход к эмуляции биперного звука

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,213
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,641
    Поблагодарили
    572 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    Все семплы с таймера не пишутся в буфер, это был бы очень большой буфер, а пропускаются через ресемплер
    Собственно, как я и предположил во втором варианте. Видимо, придётся попробовать так, но боюсь, что на тормозном Python не удастся добиться приемлемого результата.

    Цитата Сообщение от svofski Посмотреть сообщение
    Мне в его написании очень помогли ivagor
    Иван прям везде успевает Я когда упёрся в этот вопрос, тоже первый, о ком я подумал был как раз Иван

    Цитата Сообщение от b2m Посмотреть сообщение
    кол-во единиц * 255 / 45
    Или тут какие-то подводные камни есть?
    Опять же, такой вариант первым пришёл мне в голову. Но я не уверен, что это будет работать так, как должно. Вот я и хотел узнать, есть ли какие-то подводные камни?

    Я сейчас проиллюстрирую примером с идеальными условиями из "Ну, погоди!":

    Вот с такими значениями инициализируется звуковой буфер:
    Код:
    # Инициализация звукового буфера, должна быть раньше всех инициализаций!
    # pygame.mixer.init(frequency=16384, size=8, channels=1, buffer=1024)
    pygame.mixer.init(16384, 8, 1, 1024)
    А вот так буфер заполняется:
    Код:
    sound = cpu.exec_op_code()
    buffer[i] = sound * 255
    То есть после исполнения каждой команды процессора снимается значение порта, отвечающего за звук. Если там 0, то в буфер пишется 0, а если единица, то 255. И потом, по достижении конца буфера (1 кб), выводится 8-битный одноканальный звук с частотой дискретизации 16 кГц.

    Будет ли корректным результат, если я сложу 45 значений порта (единицы и нули), умножу их на 255 и разделю на 45, откинув дробную часть? Видимо, пока не проведу эксперимент, не узнаю. Однако для этого придётся поменять логику ядра эмулятора. Сейчас в эмуляторе виртуальный процессор тактируется экраном: экран рисуется 50 раз в секунду, а между выводами экрана отрабатывается 2 000 000 Гц / 50 = 40 000 тактов и ждёт отрисовки следующего экрана.
    С уважением, Станислав.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Нужна помощь в эмуляции звука
    от denpopov в разделе Программирование
    Ответов: 102
    Последнее: 02.05.2017, 23:44
  2. Код эмуляции i8080 на С
    от medvdv в разделе Эмуляторы отечественных компьютеров
    Ответов: 15
    Последнее: 27.03.2015, 03:43
  3. цифровой звук на AY - научный подход
    от SMT в разделе Программирование
    Ответов: 21
    Последнее: 15.02.2013, 14:04
  4. Общий каталог ZX-Soft"a
    от Vitron в разделе Разный софт
    Ответов: 6
    Последнее: 26.11.2006, 07:39

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •