Сообщение от Phantom
$sample = $sample1 + $sample2;
if( $sample < -32768 ) $sample = -32768; // лимитирование до минимума при 16 бит
if( $sample > 32767 ) $sample = 32767; // лимитирование до максимума при 16 бит
?>
|
поробовал. при "s1 + s2" громкое шипение. почти все результирующие значения = 32767.
при "(s1 + s2) div 2" - тише, но качество отвратное ..(
был лет 15 назад на одной сельской дискотэке в саратовской области. в "клубе" с ильичом во дворе и "росписями" на всех углах. на входе дважды сунули по пол стакана водки. молча выпил, успокоились, отстали. внутри, в потемках, однообразно размахивали ветряками полторы девушки. моргала гирляндочка светомузыки. причем в такт мелодии. удивился, что тут кто-то умеет паять. ан нет. оказалось, что проводульки были рваные и от сотрясения басами разрывался контакт. вот и весь секрет аутентичности. но самое главное ноу-хау (для чего я это все и начал рассказывать) - усилитель системы "колонка в металлическом ведре". так вот эта колонка в ведре играла гораздо лучше, чем получается звук при побайтном (вернее поinteger-ном - 16 бит же ж) смешивании. вот такая вот эпидерсия
---
перерыл все компоненты с открытым кодом. везде делают так:
res := (volume1 * sample1 + volume2 * sample2) / 2;
но ведь это тоже самое, что и
res := (sample1 + sample2) div 2;
только с фиксированной громкостью. но на выходе какое-то уг получается. (ограничители стоят)