5.1 ИКМ может быть уже закодирован таким образом, что эффективно микшируется до 2 каналов. Если это так, вы должны просто игнорировать каналы 5.1 и рассматривать их как два канала. Если это так, но вам нужно избавиться от всех следов 5.1 PCM, а не просто правильно воспроизводить их на 2-канальном выходе, вам нужно сначала использовать библиотеку 5.1-канального декодера.
Если у вас действительно есть подлинный 5.1-канальный кодированный выход, то вы получите его следующим образом:
for(i = 0; i < buffer_end; i += 6) {
front_left = buffer[i + 0];
front_right = buffer[i + 1];
center = buffer[i + 2];
lfe = buffer[i + 3]; // (sub-woofer)
back_left = buffer[i + 4];
back_right = buffer[i + 5];
}
Тогда миксдаун будет таким:
left = (front_left + back_left)/2 + (lfe + front_center)/4;
right = (front_right + back_right)/2 + (lfe + front_center)/4;
которые будут чередоваться таким же образом, т.е.
output_buffer[i] = left;
output_buffer[i + 1] = right;
Обратите внимание, что существуют разные способы микширования, в зависимости от желаемых результатов и ваших ограничений. Но это целая банка червей.
Вы также должны спросить себя, действительно ли вы используете правильный инструмент для работы. Существуют библиотеки, которые делают все эти вещи, и ALSA сама по себе уже способна к довольно сложному микшированию. См. здесь некоторые другие решения: http://www.halfgaar.net/surround-sound-in-linux
person
user2040142
schedule
04.02.2013