Ambisonics in an Ogg Opus Container Agenda Ambisonics Foundations - - PowerPoint PPT Presentation

ambisonics in an ogg opus container agenda
SMART_READER_LITE
LIVE PREVIEW

Ambisonics in an Ogg Opus Container Agenda Ambisonics Foundations - - PowerPoint PPT Presentation

Ambisonics in an Ogg Opus Container Agenda Ambisonics Foundations Adding Ambisonics to Opus Mappings Calculations Opus function calls Agenda Ambisonics Foundations Adding Ambisonics to Opus Mappings


slide-1
SLIDE 1

Ambisonics in an Ogg Opus Container

slide-2
SLIDE 2

Agenda

  • Ambisonics Foundations
  • Adding Ambisonics to Opus
  • Mappings
  • Calculations
  • Opus function calls
slide-3
SLIDE 3

Agenda

  • Ambisonics Foundations
  • Adding Ambisonics to Opus
  • Mappings
  • Calculations
  • Opus function calls
slide-4
SLIDE 4
slide-5
SLIDE 5
slide-6
SLIDE 6
slide-7
SLIDE 7
slide-8
SLIDE 8
slide-9
SLIDE 9

First order Approximation

slide-10
SLIDE 10

= + + +

slide-11
SLIDE 11
slide-12
SLIDE 12

1st order 4 channels 3rd order 16 channels Reality

slide-13
SLIDE 13
slide-14
SLIDE 14

Chrome

slide-15
SLIDE 15

Agenda

  • Ambisonics Foundations
  • Adding Ambisonics to Opus
  • Mappings
  • Calculations
  • Opus function calls
slide-16
SLIDE 16

Channel Mappings

  • Ambisonics Opus Channel Mapping 2 & 3
  • A demuxer implementation encountering Channel

Mapping Family 2 or Family 3 MUST interpret the Opus stream as containing ambisonics

slide-17
SLIDE 17

General Channel Mapping for 2 & 3

  • Allowed numbers of channels:

(1 + n)2 + 2j

for n = 0...14 and j = 0 or 1 n denotes the ambisonic order j denotes separate non-diegetic (non-head-tracked) stereo stream

  • Channels can be zeroed-out to support ‘mixed-order’

ambisonics

slide-18
SLIDE 18

Channel Mapping 2 & 3 Representation

  • Order of Ambisonics Channel Number (ACN)

ACN = n * (n + 1) + m for order n and degree m; followed by 2 optional channels of non-diegetic stereo indexed (L, R)

  • Ambisonic channels are expected to be normalized with

Schmidt Semi-Normalization (SN3D)

slide-19
SLIDE 19

Coding Details Channel Mapping 2

  • Variable bit rate allocation
  • More bits in the ‘W’

(Omnidirectional) Channel

slide-20
SLIDE 20

Coding Details Channel Mapping 3

decoder encoder

KEY U = encoder input streams X = encoded/decoded channels, S = decoder output streams C = num. of input/output channels K = num. of streams + num. of coupled streams A = mixing matrix D = demixing matrix (stored in header)

slide-21
SLIDE 21

Channel Mapping Tables

0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+ | Stream Count | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Coupled Count | Demixing Matrix : +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Channel Mapping Family 3’s Mapping Table

  • Mapping 2 uses Mapping 1’s Mapping Table
slide-22
SLIDE 22

Proposed Opus API Changes Encoding & Decoding Channel Mapping 2

OpusMSEncoder *opus_multistream_surround_encoder_create(..., mapping_family = 2, ...); OpusMSDecoder *opus_multistream_surround_decoder_create(...);

slide-23
SLIDE 23

Proposed Opus API Changes Encoding & Decoding Channel Mapping 3

OpusAmbEncoder *opus_ambisonics_surround_encoder_create(..., mapping_family = 3, (out)MappingMatrix *demixing_matrix);

  • r

OpusAmbEncoder *opus_ambisonics_encoder_create(..., mapping_family = 3, (in)MappingMatrix *mixing_matrix); OpusAmbDecoder *opus_ambisonics_decoder_create(..., (in)MappingMatrix *demixing_matrix);

slide-24
SLIDE 24

Questions

slide-25
SLIDE 25

Comparison of Results

VisQol @ 192kbps Vorbis Opus Opus 4:3 Vorbis Opus Opus 4:3 VisQol @ 128kbps Opus 128kbps Opus 4:3 128kbps Opus 192kbps Opus 4:3 192kbps Directivity