Nó trông giống như nó được xác định here:
if (st->force_channels!=OPUS_AUTO && st->channels == 2)
{
st->stream_channels = st->force_channels;
} else {
#ifdef FUZZING
/* Random mono/stereo decision */
if (st->channels == 2 && (rand()&0x1F)==0)
st->stream_channels = 3-st->stream_channels;
#else
/* Rate-dependent mono-stereo decision */
if (st->channels == 2)
{
opus_int32 stereo_threshold;
stereo_threshold = stereo_music_threshold + ((voice_est*voice_est*(stereo_voice_threshold-stereo_music_threshold))>>14);
if (st->stream_channels == 2)
stereo_threshold -= 4000;
else
stereo_threshold += 4000;
st->stream_channels = (equiv_rate > stereo_threshold) ? 2 : 1;
} else {
st->stream_channels = st->channels;
}
#endif
}
Chỉ cần ngắn gọn đọc qua mã nguồn opusenc, có vẻ như thiết force_channels
tới 2 trên struct OpusEncoder
sẽ lam cho no hoạt động. Tuy nhiên, nhìn qua mã nguồn opusenc.c, không có trường nào được đặt. Bạn có thể dễ dàng sửa đổi nguồn, tuy nhiên, luôn luôn buộc kênh phải là hai. Trong tương lai, có vẻ như opus gọi nó là "stereo kép" thay vì "L/R stereo".
Nguồn
2014-04-12 06:02:06
Tôi đã thử nghiệm điều này bằng cách mã hóa một tệp có tách âm thanh nổi rất cao và nghe kết quả. Các kênh tách biệt rõ ràng với mã hóa mặc định. –