микширование звука двух потоков PCM

Я использую Windows mmSystem.h для создания нескольких файлов PCM. Ну, это еще не файлы, а массивы байтов. то, что я хочу сделать, это объединить или мультиплексировать эти два потока, чтобы звуки перекрывались, прежде чем я экспортирую их в файл wav. при поиске stackoverflow все упомянули об использовании ffmpeg, но ни у кого нет примера кода, они просто используют fmpeg.exe с несколькими флагами. Я бы предпочел решение, которое указывает мне на использование любой другой сторонней библиотеки или SDK, кроме того, что доступно в Windows и ffmpeg.

Спасибо за любую помощь


person noztol    schedule 12.07.2013    source источник
comment
Вы имеете в виду, что у вас есть два монопотока, и вы хотите микшировать их как стерео? Или вы хотите наложить новые семплы на существующие каналы?   -  person Jonathan Potter    schedule 13.07.2013
comment
Я хочу их наложить.   -  person noztol    schedule 13.07.2013


Ответы (2)


Если у вас есть байтовые массивы, вы должны сначала преобразовать эти байтовые массивы в правильный примерный формат, такой как 16-битное целое число (короткий). После того, как вы это сделали, у вас есть несколько вариантов, в том числе:

  1. Усредните данные, образец за образцом.

  2. Суммируйте данные, выборка за выборкой, а затем «обрежьте» любые выборки, выходящие за пределы допустимого диапазона.

Первый вариант — единственно правильный способ сделать это без искажения вашего сигнала.

Наконец, вам может потребоваться преобразовать обратно в байты, чтобы сохранить в файл.

Для получения дополнительной информации, включая код, вы можете увидеть что-то вроде учебник.

person Bjorn Roche    schedule 13.07.2013
comment
Я хочу проголосовать за это, но моя репутация недостаточно высока, поэтому я надеюсь, что спасибо. - person noztol; 13.07.2013

Предполагая, что два потока имеют одинаковую частоту дискретизации и бит/сэмпл, вы можете просто добавить сэмплы:

merged[n] = streama[n] + streamb[n];
person ScottMcP-MVP    schedule 13.07.2013