Двухканальное кодирование опусаC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Двухканальное кодирование опуса

Сообщение Гость »


Я уже некоторое время использую библиотеку opus, в основном используя моноканальный звук. Однако я работал над двухканальным звуком и пытался заставить его работать с opus. Сначала я думал, что это будет довольно просто, потому что я просто увеличиваю количество каналов в функции opus_encoder_create и увеличиваю размер кадра в функции opus_encode. Однако, когда я кодирую звук, все, что я получаю, — это беспорядочная мешанина, которая выглядит как сумма двух сигналов. Входными данными являются данные PCM, чередующиеся по каждой выборке (L1, R1, L2, R2, .. LN, RN). Я не знаю, как действовать. Буду признателен за любые советы или примеры кода.

До сих пор я пытался предоставить данные в виде (L1, L2,.. LN, R1, R2, ... RN), и когда я делаю это как таковые, звук становится разборчивым, но два канала по-прежнему поврежден, и я не считаю, что это правильный подход.

Вот пример того, как я выполняю преобразование
#define NUM_CHANNELS 2 #define SAMPLE_RATE 8000 #define FRAME_SIZE 960 #define OUTPUT_FRAME_BYTES FRAME_SIZE / 8 int main(void) { внутренняя ошибка; Опусэнкодер *энкодер; int16_t pcm_data[FRAME_SIZE * NUM_CHANNELS]; uint8_t compressed_data[OUTPUT_FRAME_BYTES * NUM_CHANNELS]; в то время как (истина) { /* Собираем двухканальные данные PCM с микрофона и чередуем pcm_data[0] = выборка левого канала 1 pcm_data[1] = выборка правого канала 1 pcm_data[2] = выборка левого канала 2 pcm_data[3] = выборка правого канала 2 ... pcm_data[FRAME_SIZE * NUM_CHANNELS - 2] = выборка FRAME_SIZE левого канала pcm_data[FRAME_SIZE * NUM_CHANNELS - 1] = выборка правого канала FRAME_SIZE */ кодер = opus_encoder_create(8000, NUM_CHANNELS, OPUS_APPLICATION_RESTRICTED_LOWDELAY, &err); opus_encoder_ctl (кодировщик, OPUS_SET_COMPLEXITY (0)); opus_encode(кодер, pcm_data, FRAME_SIZE, compressed_data, OUTPUT_FRAME_BYTES * NUM_CHANNELS); // Записываем сжатые данные в файл opus_encoder_destroy (кодировщик); } вернуть 0; }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»