LINUX.ORG.RU

[как] сложить два звука

 


0

0

Объясните пожалуйста, совсем опух, пытаясь понять. В гугле будто нарочно подкидывают что попало.

Пусть есть два звука, для определенности, в signed int 16 low-endian.

Как их сложить?

Зачаток физика во мне говорит, что у нас простые амплитуды, да еще и signed - складывай и все. Зачаток программиста во мне с ужасом вспоминает, что int16 не резиновый и сумма туда просто не влезет. Физик продолжает оправдываться, что ничего не поделаешь, так и надо, среднее значение амплитуды примерно 0, а RMS вырастет, все сходится. Программист в непонятках - нужно просто принимать за максимум/минимум все, что вылезло из диапазона int16? Физик задумывается, его пугает то, что тогда RMS растет медленнее, чем надо и что-то бормочет про крайний случай, когда звуков 100500. Оба медленно сходят с ума.

Помогите пожалуйста.

★★★★★
Ответ на: комментарий от Deleted

Тогда простое утверждение - любому звук, используемый в моих задачах, можно сопоставить звук, который громче его в 2 раза, причем раз так 10?

Если истинно это утверждение, то что будет, если я на звуковуху потом пошлю этот 2^10кратный звук?

t184256 ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Та его там в треде можно сказать и так шапками закидали. Туда пришел Теодор Тсо от ядра и разработчик JACK от юзерспейса, и дружно доказали, что OSS4 - не нужен. Но правда миксинг в флоате это не отменяет, pulse так тоже делает по-умолчанию, только в юзерспейсе.

vga ★★
()
Ответ на: комментарий от t184256

Посмотрите как сделано в синтезаторах. В основном там тупое сложение, но с настойкой диапазона и уровнем громкости каналов. Зашкалить может, но и фильтры обработки есть.

Booster ★★
()
Ответ на: комментарий от Booster

Не-не, я уже написал - если тут консенсус будет по такому мегасекретному вопросу как микширование двух звуков - я консенсус реализую, если не будет - поделю на 5 и забуду как страшный сон эту проблему.

t184256 ★★★★★
() автор топика
Ответ на: комментарий от t184256

Есть только один вариант - сложить. Дальше уже обработка - деление, компрессия или чего-то еще (да, собственно, больше ничего).

Puzan ★★★★★
()
Ответ на: комментарий от Booster

>Зачем float? Для потерь? Уж лучше просто хранить в unsigned int, диапазона на 5 каналов хватит с лихвой. Затем да, нужно масштабировать в случае зашкала.

Ты в курсе, что ты упоротый? Не знаешь - не пиши.

Waterlaz ★★★★★
()
Ответ на: комментарий от t184256

>Т. е. один будет работать вполовинную громкость

Вы попробуйте, услышите ли вы изменение амплитуды сигнала в 2 раза, а то говорят что у уха логарифмическая чувствительность.

А так либо храните семплы чтобы их максимальная амплитуда была 2^16/5 или всегда работайте в режиме микширования 5 каналов (buffer1 + buffer2 + buffer3 + buffer4 + buffer5)/5.

Еще 5 - и придется дополнительный усилок купить)

Дак регулиовка уровня громкости это отдельный усилок, не внутри же int16 ещё делать регулировку уровня.

что-то бормочет про крайний случай, когда звуков 100500

over 9000 звуков микшировать? :) И что в этом случае надо услышать?

mky ★★★★★
()
Ответ на: комментарий от mky

Нет, про RMS я слышал, а вот про логарифмическую чувствительность - нет)) Сам-то как думаешь?

что-то бормочет про крайний случай, когда звуков 100500

over 9000 звуков микшировать? :) И что в этом случае надо услышать?

Выдрал из контекста? Будь добр, приклей обратно)

А вообще тут, походу, уже все сказали, и это хорошо. Новых гипотез я уже не выдержу)

t184256 ★★★★★
() автор топика
Ответ на: комментарий от Waterlaz

>Ты в курсе, что ты упоротый? Не знаешь - не пиши.
И чего я не то написал? Всё равно придётся переводить в short, а у int точность выше float. Так что уж лучше Вы не пишите.

Booster ★★
()
Ответ на: комментарий от Booster

>И чего я не то написал? Всё равно придётся переводить в short, а у int точность выше float. Так что уж лучше Вы не пишите.

Изначально звук 16битный. Во float он влазит без потерь. Но дальшнейшая обработка может очень серьезно ослаблять/усиливать сигнал. Float к этому безразличен, а твой int с легкостью может приводить как к клиппингу, так и к потерь в сигнале(при ослаблении).

ЗЫ а ты убейся. Ты либо тролль, либо непроходимый тупица. Во всех темах, как не напишешь, так какая-то ересь.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

>Float к этому безразличен, а твой int с легкостью может приводить как к клиппингу, так и к потерь в сигнале(при ослаблении).
По-вашему получается что float этому не подвержен, я рад за Вас. А то что у float разрядов на мантиссу гораздо меньше чем у int, вас совсем не волнует. Для применения к текущей задаче int очень подходит, так как мощности short*5 в int хватает с лихвой. И не нужны дополнительные преобразования во float и обратно.

ЗЫ а ты убейся. Ты либо тролль, либо непроходимый тупица. Во всех темах, как не напишешь, так какая-то ересь.

Вам не нравится нормальные дискуссия/спор, значит тупица и тролль не я, а Вы.

З.Ы. Заметьте, на личности не я первый перешёл.

Booster ★★
()
Ответ на: комментарий от Booster

>По-вашему получается что float этому не подвержен, я рад за Вас.

Этому флоат не подвержен.

А то что у float разрядов на мантиссу гораздо меньше чем у int, вас совсем не волнует.

Ну... гораздо - поняти растяжимое. Во флоат без потерь влазит 24битный звук. Это как-бы важнее.

Для применения к текущей задаче int очень подходит, так как мощности short*5 в int хватает с лихвой.

Слить звук воедино и конкретно тут да подходит. Надо делать капитально. Да и речь то о тебе, который тут распинается, какое float зло.

Waterlaz ★★★★★
()
Ответ на: комментарий от Booster

>Ещё есть кнопка «Игнор». Если Вам так не нравятся мои посты, можете смело её нажимать.

Принципиально никого не игнорю.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

>Ну... гораздо - поняти растяжимое. Во флоат без потерь влазит 24битный звук. Это как-бы важнее.
В int 32 бита спокойно влезет, так что капитальнее тут как раз он.

Да и речь то о тебе, который тут распинается, какое float зло.

А разве нет? Всякие потери точности при операциях, мантисса короткая. Так и норовит подвох сделать этот float. Зачем его применять там где это не нужно? Затраты на преобразования опять таки. Да и что такого ужасного я написал?

Booster ★★
()

> Зачаток программиста во мне с ужасом вспоминает, что int16 не резиновый и сумма туда просто не влезет.

Будет жёсткий дисторшн. Если не хочешь - дели на два.

melkor217 ★★★★★
()
Ответ на: комментарий от Booster

>А разве нет? Всякие потери точности при операциях, мантисса короткая. Так и норовит подвох сделать этот float.

Ну во первых float сравним тут с 25 битным целым(23 - мантиса, 1 - знак, 1 бит подразумевается )

Вот представь у тебя есть звуковой сигнал. Его сперва ослабили по амплитуде раз в 1000, а потом усилили. Что произойдет с интом и что с флоатом?

Waterlaz ★★★★★
()
Ответ на: комментарий от t184256

>про RMS я слышал

RMS это что? Root Mean Square или Rated Maximum Sinusoidal или Richard Matthew Stallman?

Я просто помню, что ранше для регулятов громкости использовались переменные резисторы с нелинейной характеристикой. Вы попробуйте оценить насколько тише становится звук при (*(loudbuffer++))/2 .

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.