| // Copyright 2022 The Fuchsia Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 | library fuchsia.audio; | 
 |  | 
 | /// Describes a format used for audio streams without reference to compression. Where | 
 | /// compression is supported, this type should be combined with `fuchsia.media2.Compression`. | 
 | /// An uncompressed audio stream uses LPCM encoding. | 
 | type Format = table { | 
 |     /// The type of individual samples. | 
 |     1: sample_type SampleType; | 
 |  | 
 |     /// The number of samples per frame. | 
 |     2: channel_count uint32; | 
 |  | 
 |     /// The number of frames per second. | 
 |     3: frames_per_second uint32; | 
 |  | 
 |     /// The spatial assignment of each channel. | 
 |     4: channel_layout ChannelLayout; | 
 | }; | 
 |  | 
 | /// Expresses the type of individual audio samples. | 
 | type SampleType = flexible enum { | 
 |     UINT_8 = 1; | 
 |     INT_16 = 2; | 
 |     INT_32 = 3; | 
 |     FLOAT_32 = 4; | 
 |     FLOAT_64 = 5; | 
 | }; | 
 |  | 
 | /// Expresses the intended assignment of channels in an audio elementary stream. | 
 | type ChannelLayout = flexible union { | 
 |     /// This value describes the assignment of every channel. Channel | 
 |     /// configuration must agree with `channel_count`. | 
 |     1: config ChannelConfig; | 
 | }; | 
 |  | 
 | /// Spatial assignment of channels. | 
 | type ChannelConfig = flexible enum { | 
 |     /// Front.C (CENTER) | 
 |     MONO = 0x01; | 
 |  | 
 |     /// Front.L (LEFT) | Front.R (RIGHT) | 
 |     STEREO = 0x02; | 
 |  | 
 |     /// Front.L | Front.R | Back.L | Back.R, aka “Four corners” | 
 |     QUAD = 0x03; | 
 |  | 
 |     /// Front.L | Front.R | Back.C, aka “LRS” | 
 |     SURROUND_3 = 0x04; | 
 |  | 
 |     /// Front.L | Front.R | Front.C | Back.C, aka “LRCS” | 
 |     SURROUND_4 = 0x05; | 
 |  | 
 |     /// Front.L | Front.R | Front.C | LFE | Side.L | Side.R | 
 |     SURROUND_5_1 = 0x06; | 
 | }; |