// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.aws.elastictranscoder.outputs;

import com.pulumi.core.annotations.CustomType;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;

@CustomType
public final class PresetAudio {
    /**
     * @return The method of organizing audio channels and tracks. Use Audio:Channels to specify the number of channels in your output, and Audio:AudioPackingMode to specify the number of tracks and their relation to the channels. If you do not specify an Audio:AudioPackingMode, Elastic Transcoder uses SingleTrack.
     * 
     */
    private @Nullable String audioPackingMode;
    /**
     * @return The bit rate of the audio stream in the output file, in kilobits/second. Enter an integer between 64 and 320, inclusive.
     * 
     */
    private @Nullable String bitRate;
    /**
     * @return The number of audio channels in the output file
     * 
     */
    private @Nullable String channels;
    /**
     * @return The audio codec for the output file. Valid values are `AAC`, `flac`, `mp2`, `mp3`, `pcm`, and `vorbis`.
     * 
     */
    private @Nullable String codec;
    /**
     * @return The sample rate of the audio stream in the output file, in hertz. Valid values are: `auto`, `22050`, `32000`, `44100`, `48000`, `96000`
     * 
     */
    private @Nullable String sampleRate;

    private PresetAudio() {}
    /**
     * @return The method of organizing audio channels and tracks. Use Audio:Channels to specify the number of channels in your output, and Audio:AudioPackingMode to specify the number of tracks and their relation to the channels. If you do not specify an Audio:AudioPackingMode, Elastic Transcoder uses SingleTrack.
     * 
     */
    public Optional<String> audioPackingMode() {
        return Optional.ofNullable(this.audioPackingMode);
    }
    /**
     * @return The bit rate of the audio stream in the output file, in kilobits/second. Enter an integer between 64 and 320, inclusive.
     * 
     */
    public Optional<String> bitRate() {
        return Optional.ofNullable(this.bitRate);
    }
    /**
     * @return The number of audio channels in the output file
     * 
     */
    public Optional<String> channels() {
        return Optional.ofNullable(this.channels);
    }
    /**
     * @return The audio codec for the output file. Valid values are `AAC`, `flac`, `mp2`, `mp3`, `pcm`, and `vorbis`.
     * 
     */
    public Optional<String> codec() {
        return Optional.ofNullable(this.codec);
    }
    /**
     * @return The sample rate of the audio stream in the output file, in hertz. Valid values are: `auto`, `22050`, `32000`, `44100`, `48000`, `96000`
     * 
     */
    public Optional<String> sampleRate() {
        return Optional.ofNullable(this.sampleRate);
    }

    public static Builder builder() {
        return new Builder();
    }

    public static Builder builder(PresetAudio defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private @Nullable String audioPackingMode;
        private @Nullable String bitRate;
        private @Nullable String channels;
        private @Nullable String codec;
        private @Nullable String sampleRate;
        public Builder() {}
        public Builder(PresetAudio defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.audioPackingMode = defaults.audioPackingMode;
    	      this.bitRate = defaults.bitRate;
    	      this.channels = defaults.channels;
    	      this.codec = defaults.codec;
    	      this.sampleRate = defaults.sampleRate;
        }

        @CustomType.Setter
        public Builder audioPackingMode(@Nullable String audioPackingMode) {
            this.audioPackingMode = audioPackingMode;
            return this;
        }
        @CustomType.Setter
        public Builder bitRate(@Nullable String bitRate) {
            this.bitRate = bitRate;
            return this;
        }
        @CustomType.Setter
        public Builder channels(@Nullable String channels) {
            this.channels = channels;
            return this;
        }
        @CustomType.Setter
        public Builder codec(@Nullable String codec) {
            this.codec = codec;
            return this;
        }
        @CustomType.Setter
        public Builder sampleRate(@Nullable String sampleRate) {
            this.sampleRate = sampleRate;
            return this;
        }
        public PresetAudio build() {
            final var o = new PresetAudio();
            o.audioPackingMode = audioPackingMode;
            o.bitRate = bitRate;
            o.channels = channels;
            o.codec = codec;
            o.sampleRate = sampleRate;
            return o;
        }
    }
}
