Важная информация

User Tag List

Страница 1 из 5 12345 ПоследняяПоследняя
Показано с 1 по 10 из 46

Тема: Микширование звука

  1. #1
    Veteran Аватар для Sinus
    Регистрация
    29.01.2005
    Адрес
    Belarus, Grodno
    Сообщений
    1,270
    Благодарностей: 190
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Микширование звука

    Наверное это больше сюда, нежели в музыку.

    Начну сразу, без лирических вступлений - занимаясь улучшениями эмуля, постоянно хочу улучшить звук.
    И есть тут одна проблемка - называется она постоянно включённый порт бипера. Причём это проблема не только большинства эмулей, но и, например, моего "Байта".

    Суть в том, что когда бипер включается, AY начинает играть не так как раньше (обычно тише).

    На сегодняшний день я знаю 2 алгоритма микширования (все остальные которые я знаю - это вариации этих двух)

    1) Z = (A + B) / 2
    2) Z = A + B - A*B

    где A - AY, B - Beeper и Z - результат.
    В этих формулах все числа дробные от 0 до 1.

    проблема первой формулы очевидна - все звуковые устройства звучат тише. при использовании второй - при включённом бипере AY не будет звучать вообще.

    Чтоб было понятнее, вот иллюстрация: http://detstwo.com/pub/zemu/audio-mix.html (в эксплорере не будет работать)
    Кнопки Simpe / Divide by 2 / Improved - выбирают режимы микширования (Simple - Z=A+B), кнопки 1 / 0.5 / 0 - выбирают уровень сигнала бипера.

    Наиболее адекватный сигнал получается при div by 2, но при увеличении кол-ва устройств, звук начинает играть тише и тише.

    Сейчас я в эмуле "отключаю" неиспользуемые последнюю секунду устройства, а потом импользую div by <кол-во оттавшихся устройств> (пока грубо, что сопровождается щелчками, но буду импрувить).

    ----

    А теперь представим, что в комнате стоит 2 колонки, одна исключительно на бипер, вторая - на AY.
    Если "включить" бипер, то колонка щёлкнет, пойдёт звуковая волна, но далее эта "включённая" колонка уже не будет влиять на звук.

    ----

    А как делаете вы? А как это реализовывают в железе?
    [target] [zemu] [js8x] [pouet 1, 2]
    KAY-1024, 5''FDD, 3''FDD, HDD

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

  3. #2
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,041
    Благодарностей: 1426
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Z=(aX+bY)/(a+b), где a = EXi, b=EYi (т.е. результат интегрирования за определенное время). В зависимости от логики поведения интегратора при появлении всплеска можно реализовать даже АРУ.
    А если интегрировать не сигнал, а дельту, то можно даже шумопонижение сделать и избавиться от "постоянки" на выходе.

  4. #3
    Veteran Аватар для Sinus
    Регистрация
    29.01.2005
    Адрес
    Belarus, Grodno
    Сообщений
    1,270
    Благодарностей: 190
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а можно поподробней?
    X и Y - это текущая громкость на 2х устройствах?
    Xi - это от X0 до Xi ?
    E - это что?
    [target] [zemu] [js8x] [pouet 1, 2]
    KAY-1024, 5''FDD, 3''FDD, HDD

  5. #4
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,041
    Благодарностей: 1426
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вкратце, на полу-псевдокоде:

    Код:
    byte Buffer[DEVICES_COUNT][BUFFER_SIZE];
    unsigned Position = 0;
    unsigned Integrator[DEVICES_COUNT];
    
    unsigned mixedLevel = 0;
    unsigned divisor = 0;
    for (int device = 0; device < DEVICES_COUNT; ++device)
    {
      byte level = GetDeviceLevel(device);
      Integrator[device] -= Buffer[device][Position];
      Integrator[device] += (Buffer[device][Position] = level);
      Position = ++Position % BUFFER_SIZE;
      double val = Integrator[device] / BUFFER_SIZE;
      mixedLevel += level * val;
      divisor += val;
    }
    mixedLevel /= divisor;

  6. Эти 3 пользователя(ей) поблагодарили Vitamin за это полезное сообщение:
    Aprisobal (17.08.2009), GriV (03.10.2009), Sinus (17.08.2009)

  7. #5
    Guru
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,089
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sinus Посмотреть сообщение
    1) Z = (A + B) / 2
    самый правильный метод. ну или более обще, как витамин написал.
    Цитата Сообщение от Sinus Посмотреть сообщение
    Если "включить" бипер, то колонка щёлкнет, пойдёт звуковая волна, но далее эта "включённая" колонка уже не будет влиять на звук.
    если сделать по этой формуле, все так и будет. проблема - будет тише играть каждый источник. и у этой проблемы правильного решения нет
    добавляя 2ю колонку - ты расширяешь динамический диапазон, а у звуковухи он постоянен. ну и логично же, что 2 колонки будут играть громче одной?
    вон по формуле витамина можно биперу назначить меньшую амплитуду, и за счет этого AY будет играть громче.

    Цитата Сообщение от Vitamin Посмотреть сообщение
    А если интегрировать не сигнал, а дельту, то можно даже шумопонижение сделать и избавиться от "постоянки" на выходе.
    дифференцирование - есть фильтрация низких частот, только и всего. постоянку ты убьёшь, но заодно почикаешь и басы) лучше этого все-таки не делать...

  8. Этот пользователь поблагодарил psb за это полезное сообщение:
    Sinus (17.08.2009)

  9. #6
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,041
    Благодарностей: 1426
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    дифференцирование - есть фильтрация низких частот, только и всего. постоянку ты убьёшь, но заодно почикаешь и басы) лучше этого все-таки не делать...
    Не. Я имею в виду коэффициент передачи канала считать динамически как интеграл за последние несколько квантов. А можно как интеграл от дифференциала

  10. #7
    Super Moderator Аватар для Ewgeny7
    Регистрация
    03.07.2005
    Адрес
    Санкт-Петербург
    Сообщений
    9,453
    Благодарностей: 3798
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    динамически как интеграл за последние несколько квантов. А можно как интеграл от дифференциала
    "Фига се, сходил за хлебушком..." (С) где-то
    Scorpion ZS 1024 turbo+/ZXMC 2.6/SD-HDD/FDD/AT-Keyb/Mouse/SMUC 2.0/ProfROMse/VGA 3.0/NeoGS
    ZX-Evolution 4096 rev.B

    Сайт с документацией к "Scorpion ZS 256"

  11. #8
    Guru
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,089
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    тут главное, чтобы коэф. не менялся слишком быстро.

  12. #9
    Veteran Аватар для Sinus
    Регистрация
    29.01.2005
    Адрес
    Belarus, Grodno
    Сообщений
    1,270
    Благодарностей: 190
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    я въехал. оказалось что я забыл школьное определение интеграла, и это ввело меня в смущение

    если брать за коеффициент просто интегрирование уровня звука, то это не спасёт от постоянно включенного бипера.
    буду пробовать интегрировать разность уровней за определённый период.

    ---------- Post added at 14:24 ---------- Previous post was at 14:21 ----------

    если сделать по этой формуле, все так и будет. проблема - будет тише играть каждый источник. и у этой проблемы правильного решения нет
    добавляя 2ю колонку - ты расширяешь динамический диапазон, а у звуковухи он постоянен. ну и логично же, что 2 колонки будут играть громче одной?
    вон по формуле витамина можно биперу назначить меньшую амплитуду, и за счет этого AY будет играть громче.
    не не не дэвид блейн тут другая проблема.
    если и бипер звучит и ay звучит, то, конечно, они будут играть громче.
    а вот если на бипер повесить высокий уровень постоянно, то он вообще звучать не будет, и при 2х колонках никак не влияет на звук.
    а вот при цифровом микшировании, влияет.
    но, как я писал выше, выход найден.
    [target] [zemu] [js8x] [pouet 1, 2]
    KAY-1024, 5''FDD, 3''FDD, HDD

  13. #10
    Guru
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,089
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sinus Посмотреть сообщение
    не не не дэвид блейн
    ха!))
    вообще-то физику не обманешь тебе опять-таки кажется, что ничего не происходит. хотя на самом деле конечно и не происходит из-за того, что колонка не может воспроизводить сколь-угодно низкие звуки (как и создавать постоянное давление на ухо). но если взять идеальную колонку и окружение, то влияние на ухо все-таки будет.
    авто-регулирование коэф. усиления - это конечно частичный выход из ситуации, но не супер. компрессия - тоже выход, но тоже совсем не супер для музыки. если работа твоего АРУ будет не заметна на слух - отлично

    ---------- Post added at 18:42 ---------- Previous post was at 18:40 ----------

    ты раз уж так делаешь, прими меры, чтоб коэф. не мог меняться скачкобразно.

Страница 1 из 5 12345 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Нужна запись звука с реала
    от Vladimir Kladov в разделе Эмуляторы
    Ответов: 6
    Последнее: 10.04.2008, 19:10
  2. Анализаторы звука в ZX DEMO
    от AAA в разделе Демо
    Ответов: 18
    Последнее: 07.02.2008, 11:40
  3. Эмуляция звука
    от tenebris в разделе Зарубежные компьютеры
    Ответов: 19
    Последнее: 24.01.2008, 17:26

Ваши права

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