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

User Tag List

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

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

  1. #1
    Veteran Аватар для Sinus
    Регистрация
    29.01.2005
    Адрес
    Belarus, Grodno
    Сообщений
    1,279
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    1 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] KAY-1024, 5''FDD, 3''FDD, HDD

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

  3. #2
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,254
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    34 сообщений
    Mentioned
    7 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,279
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  5. #4
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,254
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    34 сообщений
    Mentioned
    7 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. #5
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  7. #6
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,254
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    34 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  8. #7
    Super Moderator Аватар для Ewgeny7
    Регистрация
    03.07.2005
    Адрес
    Санкт-Петербург
    Сообщений
    10,168
    Спасибо Благодарностей отдано 
    146
    Спасибо Благодарностей получено 
    76
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    динамически как интеграл за последние несколько квантов. А можно как интеграл от дифференциала
    "Фига се, сходил за хлебушком..." (С) где-то
    ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
    Speccy-2007 128/AY/TR-DOS

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

  9. #8
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  10. #9
    Veteran Аватар для Sinus
    Регистрация
    29.01.2005
    Адрес
    Belarus, Grodno
    Сообщений
    1,279
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    1 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] KAY-1024, 5''FDD, 3''FDD, HDD

  11. #10
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    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, 21:10
  2. Анализаторы звука в ZX DEMO
    от AAA в разделе Демо
    Ответов: 18
    Последнее: 07.02.2008, 11:40
  3. Эмуляция звука
    от tenebris в разделе Зарубежные компьютеры
    Ответов: 19
    Последнее: 24.01.2008, 17:26

Ваши права

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