Как смешать 2 цифровых звука?

Обсуждаем цифровые устройства...
Ответить
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Сначала читал невнимательно, так что...
При сложении 2-х звуков отбрасывать 1 бит, 3-х или 4-х — 2 бита чтобы нормировать. Иначе по-моему, никак (если только не умножать на 1/3 в случае 3-х звуков))).
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

А хор и взял бы барьер в 110дб, если бы все пели строго синхронно. Но ведь этого не происходит, в каждый момент времени имеется как повышенное давление так и пониженное - суммируется с разными знаками и соответственно имеем результат не превышающий суммы амплитуд. Вот если они соберутся и все хором синхронно... вот тогда уши и полопаются.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Во какая загогулина :)))
На слух пока правда не проверял...
Алгоритм такой:
На входе S1 и S2,
если S1 и S2 =>128, то F=2(S1+S2)-(S1*S2/128),
если S1 и S2 < 128, F=S1*S2/128
если у S1 и S2 разные знаки, F=S1+S2+128
Что удобно - если надо смешать еще один звук, можно вызвать эту же функцию, вместо одного из аргументов подставив ее же результат...
Вложения
MIXER.PNG
синий+желтый=зеленый
(15.34 КБ) 716 скачиваний
Встал на лапы
Сообщения: 96
Зарегистрирован: Чт май 22, 2008 12:43:16

Сообщение jonic »

попробывал в своём аудиодвижке, к сожалению остался на варианте

Код: Выделить всё

DAC_BuffL[k]+=AE_Buffers[i]->myBuffer[k]>>(s-1);
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2360
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград

Сообщение Dmitry Dubrovenko »

Коллеги! Что тут уже вторую страницу мусолить?
В чём отличие смешивания цифрового сигнала от аналогово?
Тупое сложение, и никаких "гвоздей".
А что бы не было переполнения разрядной сетки: либо ЦАП с запасом, либо уменьшать разрядность исходника (вариант - среднее арифметическое).
Например, широко распространённый 10-разрядный ШИМ в МК очень хорошо подходит для сложения 4 сигналов.
ICQ нет, и, в ближайшее время, не будет.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

А вот и нифига не правильно просто сложить. Если звуков N - все более менее громко, а если звук один, то его громкость будет в N раз меньше. Никакой ЦАП с запасом или уменьшение разрядности исходных семплов тут не поможет, это ровно то же самое что и сложение и деление на количество. Тот алгоритм, который я приводил в последний раз работает правильно, я проверял в железе, но при переносе из сферического-вакуумного кода, где кроме вывода 2х синусов ничего нет в реальный проект я где-то что-то недосмотрел и там есть небольшие искажения.
Реклама
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

В реальном мире так и есть. Один звук - тихо, два звука - будут в 2 раза громче только если они строго синхронны и фаза совпадает. Что будет если сложить две синусоиды одинаковой частоты но сдвинутых по фазе на 170 градусов?
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2360
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград

Сообщение Dmitry Dubrovenko »

Engineer_Keen писал(а):А вот и нифига не правильно просто сложить.
Фига, фига. Напрасно упрямитесь. :)
Просто возьмите осциллограф, и посмотрите. :wink:
ICQ нет, и, в ближайшее время, не будет.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

То есть вот эти уважаемые товарищи (этот, вот этот или например этот) получается фигней занимаются???
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Фигня не фигня, но там совершенно другой уровень. А все простые методы сводятся к тому что я уже озвучивал. В часности для 20-канальной полифонии берется коэффициент 0.3 для каждого канала в надежде на то что не будет таких ситуаций что одновременно в 4-х каналах будет максимальная амплитуда.
Дальше идут уже более хитрые алгоритмы, которые не всегда могут быть применимы. Например алгоритмы которые предупреждают ограничения и сглаживают пики. Но этому алгоритму нужна предвыборка. А это означает необходимость вычислений, буфер некоторого размера(если предполагаемая частота сигнала от 10Гц - значит нужен буфер на 0.1сек минимум и на столько же будет сдвинут момент вывода звука с момента его выборки).
В результате все равно получаем искаженный сигнал, но всего лишь звучащий приятно.
Контактная информация:
Встал на лапы
Сообщения: 96
Зарегистрирован: Чт май 22, 2008 12:43:16

Сообщение jonic »

А между тем, мне кажется мною было найдено верное решение в драйвере аудио Apple.

Код: Выделить всё

static inline IOFixed IOUFixedDivide(UInt32 a, UInt32 b)
	{
		return (IOFixed)((((UInt64) a) << 16) / ((UInt64) b));
	}

	static inline UInt32 IOUFixedMultiply(UInt32 a, UInt32 b)
	{
		return (UInt32)((((UInt64) a) * ((UInt64) b)) >> 16);
	}
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2360
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград

Сообщение Dmitry Dubrovenko »

Engineer_Keen писал(а):получается фигней занимаются???
Почему же фигнёй?
Сжатие динамического диапазона весьма активно применяется в звукозаписи (особенно попсовой).
Но это уже "искажение" первоначального звука.
ICQ нет, и, в ближайшее время, не будет.
Контактная информация:
Встал на лапы
Сообщения: 119
Зарегистрирован: Пт ноя 27, 2009 13:34:17

Сообщение Kashey »

У меня тут идея появилась, что если на выходе поставить предуселитель и менять его коэфицент усиления? Например ревёт мотор - звук громкий, вдруг надо дать гудок - смешиваем, делим, звук мотора стихает. Производим корекцию - увеличиваем коэфицент усиления в два раза. Когда звук гудка стихнет, перестаём делить на 2, уменьшаем коэфицент усиления в два раза.
Что Вы думаете по этому поводу?
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Это всеравно что добавить еще один бит к ЦАПу...
Контактная информация:
Ответить

Вернуться в «Цифровая техника»