/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file 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.
 */
/*
 * Do not modify this file. This file is generated from the mediaconvert-2017-08-29.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.MediaConvert.Model
{
    /// 
    /// Settings related to one audio tab on the MediaConvert console. In your job JSON, an
    /// instance of AudioDescription is equivalent to one audio tab in the console. Usually,
    /// one audio tab corresponds to one output audio track. Depending on how you set up your
    /// input audio selectors and whether you use audio selector groups, one audio tab can
    /// correspond to a group of output audio tracks.
    /// 
    public partial class AudioDescription
    {
        private AudioChannelTaggingSettings _audioChannelTaggingSettings;
        private AudioNormalizationSettings _audioNormalizationSettings;
        private string _audioSourceName;
        private int? _audioType;
        private AudioTypeControl _audioTypeControl;
        private AudioCodecSettings _codecSettings;
        private string _customLanguageCode;
        private LanguageCode _languageCode;
        private AudioLanguageCodeControl _languageCodeControl;
        private RemixSettings _remixSettings;
        private string _streamName;
        /// 
        /// Gets and sets the property AudioChannelTaggingSettings. When you mimic a multi-channel
        /// audio layout with multiple mono-channel tracks, you can tag each channel layout manually.
        /// For example, you would tag the tracks that contain your left, right, and center audio
        /// with Left (L), Right (R), and Center (C), respectively. When you don't specify a value,
        /// MediaConvert labels your track as Center (C) by default. To use audio layout tagging,
        /// your output must be in a QuickTime (.mov) container; your audio codec must be AAC,
        /// WAV, or AIFF; and you must set up your audio track to have only one channel.
        /// 
        public AudioChannelTaggingSettings AudioChannelTaggingSettings
        {
            get { return this._audioChannelTaggingSettings; }
            set { this._audioChannelTaggingSettings = value; }
        }
        // Check to see if AudioChannelTaggingSettings property is set
        internal bool IsSetAudioChannelTaggingSettings()
        {
            return this._audioChannelTaggingSettings != null;
        }
        /// 
        /// Gets and sets the property AudioNormalizationSettings. Advanced audio normalization
        /// settings. Ignore these settings unless you need to comply with a loudness standard.
        /// 
        public AudioNormalizationSettings AudioNormalizationSettings
        {
            get { return this._audioNormalizationSettings; }
            set { this._audioNormalizationSettings = value; }
        }
        // Check to see if AudioNormalizationSettings property is set
        internal bool IsSetAudioNormalizationSettings()
        {
            return this._audioNormalizationSettings != null;
        }
        /// 
        /// Gets and sets the property AudioSourceName. Specifies which audio data to use from
        /// each input. In the simplest case, specify an "Audio Selector":#inputs-audio_selector
        /// by name based on its order within each input. For example if you specify "Audio Selector
        /// 3", then the third audio selector will be used from each input. If an input does not
        /// have an "Audio Selector 3", then the audio selector marked as "default" in that input
        /// will be used. If there is no audio selector marked as "default", silence will be inserted
        /// for the duration of that input. Alternatively, an "Audio Selector Group":#inputs-audio_selector_group
        /// name may be specified, with similar default/silence behavior. If no audio_source_name
        /// is specified, then "Audio Selector 1" will be chosen automatically.
        /// 
        public string AudioSourceName
        {
            get { return this._audioSourceName; }
            set { this._audioSourceName = value; }
        }
        // Check to see if AudioSourceName property is set
        internal bool IsSetAudioSourceName()
        {
            return this._audioSourceName != null;
        }
        /// 
        /// Gets and sets the property AudioType. Applies only if Follow Input Audio Type is unchecked
        /// (false). A number between 0 and 255. The following are defined in ISO-IEC 13818-1:
        /// 0 = Undefined, 1 = Clean Effects, 2 = Hearing Impaired, 3 = Visually Impaired Commentary,
        /// 4-255 = Reserved.
        /// 
        [AWSProperty(Min=0, Max=255)]
        public int AudioType
        {
            get { return this._audioType.GetValueOrDefault(); }
            set { this._audioType = value; }
        }
        // Check to see if AudioType property is set
        internal bool IsSetAudioType()
        {
            return this._audioType.HasValue; 
        }
        /// 
        /// Gets and sets the property AudioTypeControl. When set to FOLLOW_INPUT, if the input
        /// contains an ISO 639 audio_type, then that value is passed through to the output. If
        /// the input contains no ISO 639 audio_type, the value in Audio Type is included in the
        /// output. Otherwise the value in Audio Type is included in the output. Note that this
        /// field and audioType are both ignored if audioDescriptionBroadcasterMix is set to BROADCASTER_MIXED_AD.
        /// 
        public AudioTypeControl AudioTypeControl
        {
            get { return this._audioTypeControl; }
            set { this._audioTypeControl = value; }
        }
        // Check to see if AudioTypeControl property is set
        internal bool IsSetAudioTypeControl()
        {
            return this._audioTypeControl != null;
        }
        /// 
        /// Gets and sets the property CodecSettings. Settings related to audio encoding. The
        /// settings in this group vary depending on the value that you choose for your audio
        /// codec.
        /// 
        public AudioCodecSettings CodecSettings
        {
            get { return this._codecSettings; }
            set { this._codecSettings = value; }
        }
        // Check to see if CodecSettings property is set
        internal bool IsSetCodecSettings()
        {
            return this._codecSettings != null;
        }
        /// 
        /// Gets and sets the property CustomLanguageCode. Specify the language for this audio
        /// output track. The service puts this language code into your output audio track when
        /// you set Language code control to Use configured. The service also uses your specified
        /// custom language code when you set Language code control to Follow input, but your
        /// input file doesn't specify a language code. For all outputs, you can use an ISO 639-2
        /// or ISO 639-3 code. For streaming outputs, you can also use any other code in the full
        /// RFC-5646 specification. Streaming outputs are those that are in one of the following
        /// output groups: CMAF, DASH ISO, Apple HLS, or Microsoft Smooth Streaming.
        /// 
        public string CustomLanguageCode
        {
            get { return this._customLanguageCode; }
            set { this._customLanguageCode = value; }
        }
        // Check to see if CustomLanguageCode property is set
        internal bool IsSetCustomLanguageCode()
        {
            return this._customLanguageCode != null;
        }
        /// 
        /// Gets and sets the property LanguageCode. Indicates the language of the audio output
        /// track. The ISO 639 language specified in the 'Language Code' drop down will be used
        /// when 'Follow Input Language Code' is not selected or when 'Follow Input Language Code'
        /// is selected but there is no ISO 639 language code specified by the input.
        /// 
        public LanguageCode LanguageCode
        {
            get { return this._languageCode; }
            set { this._languageCode = value; }
        }
        // Check to see if LanguageCode property is set
        internal bool IsSetLanguageCode()
        {
            return this._languageCode != null;
        }
        /// 
        /// Gets and sets the property LanguageCodeControl. Specify which source for language
        /// code takes precedence for this audio track. When you choose Follow input, the service
        /// uses the language code from the input track if it's present. If there's no languge
        /// code on the input track, the service uses the code that you specify in the setting
        /// Language code. When you choose Use configured, the service uses the language code
        /// that you specify.
        /// 
        public AudioLanguageCodeControl LanguageCodeControl
        {
            get { return this._languageCodeControl; }
            set { this._languageCodeControl = value; }
        }
        // Check to see if LanguageCodeControl property is set
        internal bool IsSetLanguageCodeControl()
        {
            return this._languageCodeControl != null;
        }
        /// 
        /// Gets and sets the property RemixSettings. Advanced audio remixing settings.
        /// 
        public RemixSettings RemixSettings
        {
            get { return this._remixSettings; }
            set { this._remixSettings = value; }
        }
        // Check to see if RemixSettings property is set
        internal bool IsSetRemixSettings()
        {
            return this._remixSettings != null;
        }
        /// 
        /// Gets and sets the property StreamName. Specify a label for this output audio stream.
        /// For example, "English", "Director commentary", or "track_2". For streaming outputs,
        /// MediaConvert passes this information into destination manifests for display on the
        /// end-viewer's player device. For outputs in other output groups, the service ignores
        /// this setting.
        /// 
        public string StreamName
        {
            get { return this._streamName; }
            set { this._streamName = value; }
        }
        // Check to see if StreamName property is set
        internal bool IsSetStreamName()
        {
            return this._streamName != null;
        }
    }
}