diff options
Diffstat (limited to 'extern/audaspace/include/respec/Specification.h')
-rw-r--r-- | extern/audaspace/include/respec/Specification.h | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/extern/audaspace/include/respec/Specification.h b/extern/audaspace/include/respec/Specification.h new file mode 100644 index 00000000000..efcbb4cabce --- /dev/null +++ b/extern/audaspace/include/respec/Specification.h @@ -0,0 +1,138 @@ +/******************************************************************************* + * Copyright 2009-2016 Jörg Müller + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ******************************************************************************/ + +#pragma once + +/** + * @file Specification.h + * @ingroup respec + * Defines all important macros and basic data structures for stream format descriptions. + */ + +#include "Audaspace.h" + +/// The size of a format in bytes. +#define AUD_FORMAT_SIZE(format) (format & 0x0F) +/// The size of a sample in the specified device format in bytes. +#define AUD_DEVICE_SAMPLE_SIZE(specs) (specs.channels * (specs.format & 0x0F)) +/// The size of a sample in the specified format in bytes. +#define AUD_SAMPLE_SIZE(specs) (specs.channels * sizeof(sample_t)) + +/// Compares two audio data specifications. +#define AUD_COMPARE_SPECS(s1, s2) ((s1.rate == s2.rate) && (s1.channels == s2.channels)) + +/// Returns the bit for a channel mask. +#define AUD_CHANNEL_BIT(channel) (0x01 << channel) + +AUD_NAMESPACE_BEGIN + +/** + * The format of a sample. + * The last 4 bit save the byte count of the format. + */ +enum SampleFormat +{ + FORMAT_INVALID = 0x00, /// Invalid sample format. + FORMAT_U8 = 0x01, /// 1 byte unsigned byte. + FORMAT_S16 = 0x12, /// 2 byte signed integer. + FORMAT_S24 = 0x13, /// 3 byte signed integer. + FORMAT_S32 = 0x14, /// 4 byte signed integer. + FORMAT_FLOAT32 = 0x24, /// 4 byte float. + FORMAT_FLOAT64 = 0x28 /// 8 byte float. +}; + +/// The channel count. +enum Channels +{ + CHANNELS_INVALID = 0, /// Invalid channel count. + CHANNELS_MONO = 1, /// Mono. + CHANNELS_STEREO = 2, /// Stereo. + CHANNELS_STEREO_LFE = 3, /// Stereo with LFE channel. + CHANNELS_SURROUND4 = 4, /// 4 channel surround sound. + CHANNELS_SURROUND5 = 5, /// 5 channel surround sound. + CHANNELS_SURROUND51 = 6, /// 5.1 surround sound. + CHANNELS_SURROUND61 = 7, /// 6.1 surround sound. + CHANNELS_SURROUND71 = 8 /// 7.1 surround sound. +}; + +/// The channel names. +enum Channel +{ + CHANNEL_FRONT_LEFT = 0, + CHANNEL_FRONT_RIGHT, + CHANNEL_FRONT_CENTER, + CHANNEL_LFE, + CHANNEL_REAR_LEFT, + CHANNEL_REAR_RIGHT, + CHANNEL_REAR_CENTER, + CHANNEL_SIDE_LEFT, + CHANNEL_SIDE_RIGHT, + CHANNEL_MAX +}; + +/** + * The sample rate tells how many samples are played back within one second. + * Some exotic formats may use other sample rates than provided here. + */ +enum DefaultSampleRate +{ + RATE_INVALID = 0, /// Invalid sample rate. + RATE_8000 = 8000, /// 8000 Hz. + RATE_16000 = 16000, /// 16000 Hz. + RATE_11025 = 11025, /// 11025 Hz. + RATE_22050 = 22050, /// 22050 Hz. + RATE_32000 = 32000, /// 32000 Hz. + RATE_44100 = 44100, /// 44100 Hz. + RATE_48000 = 48000, /// 48000 Hz. + RATE_88200 = 88200, /// 88200 Hz. + RATE_96000 = 96000, /// 96000 Hz. + RATE_192000 = 192000 /// 192000 Hz. +}; + +/// Sample rate type. +typedef double SampleRate; + +/// Specification of a sound source. +struct Specs +{ + /// Sample rate in Hz. + SampleRate rate; + + /// Channel count. + Channels channels; +}; + +/// Specification of a sound device. +struct DeviceSpecs +{ + /// Sample format. + SampleFormat format; + + union + { + struct + { + /// Sample rate in Hz. + SampleRate rate; + + /// Channel count. + Channels channels; + }; + Specs specs; + }; +}; + +AUD_NAMESPACE_END |