-- | [@\/v1\/audio\/speech@](https://platform.openai.com/docs/api-reference/audio/createSpeech) module OpenAI.V1.Audio.Speech ( -- * Main types CreateSpeech(..) , _CreateSpeech -- * Other types , Voice(..) , Format(..) -- * Servant , ContentType(..) , API ) where import OpenAI.Prelude import OpenAI.V1.Models (Model) -- | The voice to use when generating the audio -- -- Previews of the voices are available in the -- [Text to speech guide](https://platform.openai.com/docs/guides/text-to-speech#voice-options). data Voice = Alloy | Ash | Ballad | Coral | Echo | Fable | Nova | Onyx | Sage | Shimmer deriving stock (Bounded, Enum, Generic, Show) instance FromJSON Voice where parseJSON = genericParseJSON aesonOptions instance ToJSON Voice where toJSON = genericToJSON aesonOptions -- | The format to generate the audio in data Format = MP3 | Opus | AAC | FLAC | WAV | PCM deriving stock (Bounded, Enum, Generic, Show) instance FromJSON Format where parseJSON = genericParseJSON aesonOptions instance ToJSON Format where toJSON = genericToJSON aesonOptions -- | Request body for @\/v1\/audio\/speech@ data CreateSpeech = CreateSpeech { model :: Model -- ^ Note that only [TTS models](https://platform.openai.com/docs/models#tts) support speech synthesis. , input :: Text -- ^ The text to generate audio for. The maximum length is 4096 characters. , voice :: Voice , instructions :: Maybe Text -- ^ Instructions for the model to follow when generating the audio. -- Does not work with @tts-1@ or @tts-1-hd@ models. , response_format :: Maybe Format -- ^ Defaults to 'MP3'. , speed :: Maybe Double -- ^ Defaults to 1.0 (normal speed). Should be between 0.25 and 4.0. -- Does not work with @gpt-4o-mini-tts@ model. } deriving stock (Generic, Show) instance ToJSON CreateSpeech where toJSON = genericToJSON aesonOptions instance FromJSON CreateSpeech where parseJSON = genericParseJSON aesonOptions -- | Default `CreateSpeech` _CreateSpeech :: CreateSpeech _CreateSpeech = CreateSpeech { instructions = Nothing , response_format = Nothing , speed = Nothing } -- | Content type data ContentType = ContentType instance Accept ContentType where contentTypes _ = "audio/mpeg" :| [ "audio/flac" , "audio/wav" , "audio/aac" , "audio/opus" , "audio/pcm" ] instance MimeUnrender ContentType ByteString where mimeUnrender _ bytes = Right bytes -- | Servant API type API = "speech" :> ReqBody '[JSON] CreateSpeech :> Post '[ContentType] ByteString