{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.MediaConvert.Types.AudioDurationCorrection
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.MediaConvert.Types.AudioDurationCorrection
  ( AudioDurationCorrection
      ( ..,
        AudioDurationCorrection_AUTO,
        AudioDurationCorrection_DISABLED,
        AudioDurationCorrection_FRAME,
        AudioDurationCorrection_TRACK
      ),
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude

-- | Apply audio timing corrections to help synchronize audio and video in
-- your output. To apply timing corrections, your input must meet the
-- following requirements: * Container: MP4, or MOV, with an accurate
-- time-to-sample (STTS) table. * Audio track: AAC. Choose from the
-- following audio timing correction settings: * Disabled (Default): Apply
-- no correction. * Auto: Recommended for most inputs. MediaConvert
-- analyzes the audio timing in your input and determines which correction
-- setting to use, if needed. * Track: Adjust the duration of each audio
-- frame by a constant amount to align the audio track length with STTS
-- duration. Track-level correction does not affect pitch, and is
-- recommended for tonal audio content such as music. * Frame: Adjust the
-- duration of each audio frame by a variable amount to align audio frames
-- with STTS timestamps. No corrections are made to already-aligned frames.
-- Frame-level correction may affect the pitch of corrected frames, and is
-- recommended for atonal audio content such as speech or percussion.
newtype AudioDurationCorrection = AudioDurationCorrection'
  { AudioDurationCorrection -> Text
fromAudioDurationCorrection ::
      Data.Text
  }
  deriving stock
    ( Int -> AudioDurationCorrection -> ShowS
[AudioDurationCorrection] -> ShowS
AudioDurationCorrection -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AudioDurationCorrection] -> ShowS
$cshowList :: [AudioDurationCorrection] -> ShowS
show :: AudioDurationCorrection -> String
$cshow :: AudioDurationCorrection -> String
showsPrec :: Int -> AudioDurationCorrection -> ShowS
$cshowsPrec :: Int -> AudioDurationCorrection -> ShowS
Prelude.Show,
      ReadPrec [AudioDurationCorrection]
ReadPrec AudioDurationCorrection
Int -> ReadS AudioDurationCorrection
ReadS [AudioDurationCorrection]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AudioDurationCorrection]
$creadListPrec :: ReadPrec [AudioDurationCorrection]
readPrec :: ReadPrec AudioDurationCorrection
$creadPrec :: ReadPrec AudioDurationCorrection
readList :: ReadS [AudioDurationCorrection]
$creadList :: ReadS [AudioDurationCorrection]
readsPrec :: Int -> ReadS AudioDurationCorrection
$creadsPrec :: Int -> ReadS AudioDurationCorrection
Prelude.Read,
      AudioDurationCorrection -> AudioDurationCorrection -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AudioDurationCorrection -> AudioDurationCorrection -> Bool
$c/= :: AudioDurationCorrection -> AudioDurationCorrection -> Bool
== :: AudioDurationCorrection -> AudioDurationCorrection -> Bool
$c== :: AudioDurationCorrection -> AudioDurationCorrection -> Bool
Prelude.Eq,
      Eq AudioDurationCorrection
AudioDurationCorrection -> AudioDurationCorrection -> Bool
AudioDurationCorrection -> AudioDurationCorrection -> Ordering
AudioDurationCorrection
-> AudioDurationCorrection -> AudioDurationCorrection
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: AudioDurationCorrection
-> AudioDurationCorrection -> AudioDurationCorrection
$cmin :: AudioDurationCorrection
-> AudioDurationCorrection -> AudioDurationCorrection
max :: AudioDurationCorrection
-> AudioDurationCorrection -> AudioDurationCorrection
$cmax :: AudioDurationCorrection
-> AudioDurationCorrection -> AudioDurationCorrection
>= :: AudioDurationCorrection -> AudioDurationCorrection -> Bool
$c>= :: AudioDurationCorrection -> AudioDurationCorrection -> Bool
> :: AudioDurationCorrection -> AudioDurationCorrection -> Bool
$c> :: AudioDurationCorrection -> AudioDurationCorrection -> Bool
<= :: AudioDurationCorrection -> AudioDurationCorrection -> Bool
$c<= :: AudioDurationCorrection -> AudioDurationCorrection -> Bool
< :: AudioDurationCorrection -> AudioDurationCorrection -> Bool
$c< :: AudioDurationCorrection -> AudioDurationCorrection -> Bool
compare :: AudioDurationCorrection -> AudioDurationCorrection -> Ordering
$ccompare :: AudioDurationCorrection -> AudioDurationCorrection -> Ordering
Prelude.Ord,
      forall x. Rep AudioDurationCorrection x -> AudioDurationCorrection
forall x. AudioDurationCorrection -> Rep AudioDurationCorrection x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AudioDurationCorrection x -> AudioDurationCorrection
$cfrom :: forall x. AudioDurationCorrection -> Rep AudioDurationCorrection x
Prelude.Generic
    )
  deriving newtype
    ( Eq AudioDurationCorrection
Int -> AudioDurationCorrection -> Int
AudioDurationCorrection -> Int
forall a. Eq a -> (Int -> a -> Int) -> (a -> Int) -> Hashable a
hash :: AudioDurationCorrection -> Int
$chash :: AudioDurationCorrection -> Int
hashWithSalt :: Int -> AudioDurationCorrection -> Int
$chashWithSalt :: Int -> AudioDurationCorrection -> Int
Prelude.Hashable,
      AudioDurationCorrection -> ()
forall a. (a -> ()) -> NFData a
rnf :: AudioDurationCorrection -> ()
$crnf :: AudioDurationCorrection -> ()
Prelude.NFData,
      Text -> Either String AudioDurationCorrection
forall a. (Text -> Either String a) -> FromText a
fromText :: Text -> Either String AudioDurationCorrection
$cfromText :: Text -> Either String AudioDurationCorrection
Data.FromText,
      AudioDurationCorrection -> Text
forall a. (a -> Text) -> ToText a
toText :: AudioDurationCorrection -> Text
$ctoText :: AudioDurationCorrection -> Text
Data.ToText,
      AudioDurationCorrection -> ByteString
forall a. (a -> ByteString) -> ToByteString a
toBS :: AudioDurationCorrection -> ByteString
$ctoBS :: AudioDurationCorrection -> ByteString
Data.ToByteString,
      AudioDurationCorrection -> ByteStringBuilder
forall a. (a -> ByteStringBuilder) -> ToLog a
build :: AudioDurationCorrection -> ByteStringBuilder
$cbuild :: AudioDurationCorrection -> ByteStringBuilder
Data.ToLog,
      HeaderName -> AudioDurationCorrection -> [Header]
forall a. (HeaderName -> a -> [Header]) -> ToHeader a
toHeader :: HeaderName -> AudioDurationCorrection -> [Header]
$ctoHeader :: HeaderName -> AudioDurationCorrection -> [Header]
Data.ToHeader,
      AudioDurationCorrection -> QueryString
forall a. (a -> QueryString) -> ToQuery a
toQuery :: AudioDurationCorrection -> QueryString
$ctoQuery :: AudioDurationCorrection -> QueryString
Data.ToQuery,
      Value -> Parser [AudioDurationCorrection]
Value -> Parser AudioDurationCorrection
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [AudioDurationCorrection]
$cparseJSONList :: Value -> Parser [AudioDurationCorrection]
parseJSON :: Value -> Parser AudioDurationCorrection
$cparseJSON :: Value -> Parser AudioDurationCorrection
Data.FromJSON,
      FromJSONKeyFunction [AudioDurationCorrection]
FromJSONKeyFunction AudioDurationCorrection
forall a.
FromJSONKeyFunction a -> FromJSONKeyFunction [a] -> FromJSONKey a
fromJSONKeyList :: FromJSONKeyFunction [AudioDurationCorrection]
$cfromJSONKeyList :: FromJSONKeyFunction [AudioDurationCorrection]
fromJSONKey :: FromJSONKeyFunction AudioDurationCorrection
$cfromJSONKey :: FromJSONKeyFunction AudioDurationCorrection
Data.FromJSONKey,
      [AudioDurationCorrection] -> Encoding
[AudioDurationCorrection] -> Value
AudioDurationCorrection -> Encoding
AudioDurationCorrection -> Value
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [AudioDurationCorrection] -> Encoding
$ctoEncodingList :: [AudioDurationCorrection] -> Encoding
toJSONList :: [AudioDurationCorrection] -> Value
$ctoJSONList :: [AudioDurationCorrection] -> Value
toEncoding :: AudioDurationCorrection -> Encoding
$ctoEncoding :: AudioDurationCorrection -> Encoding
toJSON :: AudioDurationCorrection -> Value
$ctoJSON :: AudioDurationCorrection -> Value
Data.ToJSON,
      ToJSONKeyFunction [AudioDurationCorrection]
ToJSONKeyFunction AudioDurationCorrection
forall a.
ToJSONKeyFunction a -> ToJSONKeyFunction [a] -> ToJSONKey a
toJSONKeyList :: ToJSONKeyFunction [AudioDurationCorrection]
$ctoJSONKeyList :: ToJSONKeyFunction [AudioDurationCorrection]
toJSONKey :: ToJSONKeyFunction AudioDurationCorrection
$ctoJSONKey :: ToJSONKeyFunction AudioDurationCorrection
Data.ToJSONKey,
      [Node] -> Either String AudioDurationCorrection
forall a. ([Node] -> Either String a) -> FromXML a
parseXML :: [Node] -> Either String AudioDurationCorrection
$cparseXML :: [Node] -> Either String AudioDurationCorrection
Data.FromXML,
      AudioDurationCorrection -> XML
forall a. (a -> XML) -> ToXML a
toXML :: AudioDurationCorrection -> XML
$ctoXML :: AudioDurationCorrection -> XML
Data.ToXML
    )

pattern AudioDurationCorrection_AUTO :: AudioDurationCorrection
pattern $bAudioDurationCorrection_AUTO :: AudioDurationCorrection
$mAudioDurationCorrection_AUTO :: forall {r}.
AudioDurationCorrection -> ((# #) -> r) -> ((# #) -> r) -> r
AudioDurationCorrection_AUTO = AudioDurationCorrection' "AUTO"

pattern AudioDurationCorrection_DISABLED :: AudioDurationCorrection
pattern $bAudioDurationCorrection_DISABLED :: AudioDurationCorrection
$mAudioDurationCorrection_DISABLED :: forall {r}.
AudioDurationCorrection -> ((# #) -> r) -> ((# #) -> r) -> r
AudioDurationCorrection_DISABLED = AudioDurationCorrection' "DISABLED"

pattern AudioDurationCorrection_FRAME :: AudioDurationCorrection
pattern $bAudioDurationCorrection_FRAME :: AudioDurationCorrection
$mAudioDurationCorrection_FRAME :: forall {r}.
AudioDurationCorrection -> ((# #) -> r) -> ((# #) -> r) -> r
AudioDurationCorrection_FRAME = AudioDurationCorrection' "FRAME"

pattern AudioDurationCorrection_TRACK :: AudioDurationCorrection
pattern $bAudioDurationCorrection_TRACK :: AudioDurationCorrection
$mAudioDurationCorrection_TRACK :: forall {r}.
AudioDurationCorrection -> ((# #) -> r) -> ((# #) -> r) -> r
AudioDurationCorrection_TRACK = AudioDurationCorrection' "TRACK"

{-# COMPLETE
  AudioDurationCorrection_AUTO,
  AudioDurationCorrection_DISABLED,
  AudioDurationCorrection_FRAME,
  AudioDurationCorrection_TRACK,
  AudioDurationCorrection'
  #-}