Объединение звуковых потоков
От: Кузнецов Виктор Россия  
Дата: 20.08.07 11:03
Оценка:
У меня есть два звуковых потока. По сути, это пакеты в формате u-law. Как можно объединить эти два потока, чтобы в результирующем был звук из обоих? В какую сторону мне "копать"?
Если надо будет конвертить потоки в PCM — нет проблем.
Я краем слуха слышал, что в windows наравне с кодеками звука есть фильтры звука. Есть ли у них подобная возможность?
Re: Объединение звуковых потоков
От: nen777w  
Дата: 21.08.07 06:55
Оценка:
КВ>У меня есть два звуковых потока. По сути, это пакеты в формате u-law. Как можно объединить эти два потока, чтобы в результирующем был звук из обоих? В какую сторону мне "копать"?
КВ>Если надо будет конвертить потоки в PCM — нет проблем.
КВ>Я краем слуха слышал, что в windows наравне с кодеками звука есть фильтры звука. Есть ли у них подобная возможность?

Это называется микшированием, точнее сказать эта операция сумирования сигналов на выходе мастер шины, после обработки (громкость/панорама/insert'ы):
Хотябы вот так:

inline void    process(float** input, float** output, long frames)
    {
        float *inL = input[0];
        float *inR = input[1];
        float *outL = output[0];
        float *outR = output[1];

        float sumL = 0.f;
        float sumR = 0.f;

        while(frames--)
        {
            sumL = (*outL) + (*inL);
            sumR = (*outR) + (*inR);

            if( sumL > 1.f )
                (*outL) = 1.f;
            else if( sumL < - 1.f )
                (*outL) = -1.f;
            else
                (*outL) = sumL;

            if( sumR > 1.f )
                (*outR) = 1.f;
            else if( sumR < - 1.f )
                (*outR) = -1.f;
            else
                (*outR) = sumR;

            outL++; outR++;
            inL++; inR++;
        }
    }


Где отсчёты на каждый канал идут в порядке (LR)(LR)(LR)...
Re[2]: Объединение звуковых потоков
От: Кузнецов Виктор Россия  
Дата: 21.08.07 08:39
Оценка:
Здравствуйте, nen777w, Вы писали:

КВ>>У меня есть два звуковых потока. По сути, это пакеты в формате u-law. Как можно объединить эти два потока, чтобы в результирующем был звук из обоих? В какую сторону мне "копать"?

КВ>>Если надо будет конвертить потоки в PCM — нет проблем.
КВ>>Я краем слуха слышал, что в windows наравне с кодеками звука есть фильтры звука. Есть ли у них подобная возможность?

N>Это называется микшированием, точнее сказать эта операция сумирования сигналов на выходе мастер шины, после обработки (громкость/панорама/insert'ы):

N>Хотябы вот так:

N>[ccode]

N>inline void process(float** input, float** output, long frames) ...
N>Где отсчёты на каждый канал идут в порядке (LR)(LR)(LR)...

Большое спасибо за ответ. Но, как и следовало ожидать, у меня будет вопрос о том, как из потоков PCM-формата выуживать эти float. И что это за отчеты (LR)(LR)(LR).
Re[3]: Объединение звуковых потоков
От: nen777w  
Дата: 21.08.07 09:36
Оценка:
КВ>Большое спасибо за ответ. Но, как и следовало ожидать, у меня будет вопрос о том, как из потоков PCM-формата выуживать эти float.

Возьмите libsndfile он всё сделает за вас. А вообще преобразования из WORD/DWORD в float и обратно не сложно, зная разрядность оцифрованного звука.

И что это за отсчеты (LR)(LR)(LR).
Для стерео файла это один семпл т.е. два значения на каждый канал L и R. Левый по умолчанию идёт первым.
Если у вас mono файлы придется делать дублирование каждого семпла или изменить алгоритм суммирования. Есть смешанные m/s проще будет сделать дублирование в вашем кольцевом буфере.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.