Aprende a convertir texto en voz con un sonido natural.
Los modelos tts-1, tts-1-hd y gpt-4o-mini-tts están en desuso y dejarán de funcionar el 6 de enero de 2027. Migra a gpt-realtime-2.1-mini mediante la Realtime API. Esto cambia la forma de usar la API, ya que gpt-realtime-2.1-mini no es compatible con /v1/audio/speech. Las integraciones existentes pueden seguir usando los flujos de trabajo de la API de voz que se muestran a continuación hasta que los modelos dejen de funcionar. Consulta el aviso de retiro.
Nuestras políticas de uso exigen que informes claramente a los usuarios finales que la voz que escuchan es una voz sintética generada por IA y no una voz humana.
Inicio rápido
El punto de acceso speech recibe tres parámetros principales:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import fs from "fs";import path from "path";import OpenAI from "openai";const openai = new OpenAI();const speechFile = path.resolve("./speech.mp3");const mp3 = await openai.audio.speech.create({ model: "gpt-4o-mini-tts", voice: "coral", input: "Today is a wonderful day to build something people love!", instructions: "Speak in a cheerful and positive tone.",});const buffer = Buffer.from(await mp3.arrayBuffer());await fs.promises.writeFile(speechFile, buffer);
1
2
3
4
5
6
7
8
9
10
11
12
13from pathlib import Pathfrom openai import OpenAIclient = OpenAI()speech_file_path = Path(__file__).parent /"speech.mp3"with client.audio.speech.with_streaming_response.create(model="gpt-4o-mini-tts",voice="coral",input="Today is a wonderful day to build something people love!",instructions="Speak in a cheerful and positive tone.",) as response: response.stream_to_file(speech_file_path)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34package mainimport ( "context" "io" "os" "github.com/openai/openai-go/v3")func main() { client := openai.NewClient() response, err := client.Audio.Speech.New(context.Background(), openai.AudioSpeechNewParams{ Model: openai.SpeechModelGPT4oMiniTTS, Voice: openai.AudioSpeechNewParamsVoiceUnion{OfAudioSpeechNewsVoiceString2: openai.String("coral")}, Input: "Today is a wonderful day to build something people love!", Instructions: openai.String("Speak in a cheerful and positive tone."), }) if err != nil { panic(err) } defer response.Body.Close() file, err := os.Create("speech.mp3") if err != nil { panic(err) } if _, err := io.Copy(file, response.Body); err != nil { panic(err) } if err := file.Close(); err != nil { panic(err) }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22import com.openai.client.OpenAIClient;import com.openai.client.okhttp.OpenAIOkHttpClient;import com.openai.core.http.HttpResponse;import com.openai.models.audio.speech.SpeechCreateParams;import java.io.IOException;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.StandardCopyOption;try (HttpResponse audio = client .audio() .speech() .create( SpeechCreateParams.builder() .model("gpt-4o-mini-tts") .voice("coral") .input("Today is a wonderful day to build something people love!") .instructions("Speak in a cheerful and positive tone.") .build())) { Files.copy(audio.body(), Path.of("speech.mp3"), StandardCopyOption.REPLACE_EXISTING);}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17using OpenAI.Audio;#pragma warning disable OPENAI001string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;string model = "gpt-4o-mini-tts";AudioClient client = new(model, key);BinaryData audio = await client.GenerateSpeechAsync( "Today is a wonderful day to build something people love!", GeneratedSpeechVoice.Coral, new SpeechGenerationOptions { Instructions = "Speak in a cheerful and positive tone.", });await File.WriteAllBytesAsync("speech.mp3", audio.ToArray());
1
2
3
4
5
6
7
8
9
10require "openai"client = OpenAI::Client.newaudio = client.audio.speech.create( model: "gpt-4o-mini-tts", voice: "coral", input: "Today is a wonderful day to build something people love!", instructions: "Speak in a cheerful and positive tone.")File.binwrite("speech.mp3", audio.read)
1
2
3
4
5
6
7
8
9
10curl https://api.openai.com/v1/audio/speech \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini-tts", "input": "Today is a wonderful day to build something people love!", "voice": "coral", "instructions": "Speak in a cheerful and positive tone." }' \ --output speech.mp3
1
2
3
4
5
6openai audio:speech create \ --model gpt-4o-mini-tts \ --voice coral \ --instructions "Speak in a cheerful and positive tone." \ --input "Today is a wonderful day to build something people love!" \ --output speech.mp3
De forma predeterminada, el punto de acceso devuelve un archivo MP3 con la voz generada, pero puedes configurarlo para que devuelva el audio en cualquiera de los formatos compatibles.
Modelos de conversión de texto a voz
Si ya tienes una integración con la API de voz, gpt-4o-mini-tts te permite usar prompts para controlar los siguientes aspectos de la voz:
Acento
Gama de emociones
Entonación
Imitaciones de voces
Velocidad del habla
Tono
Susurros
Nuestros otros modelos de conversión de texto a voz son tts-1 y tts-1-hd. El modelo tts-1 ofrece menor latencia, pero la calidad del audio es inferior a la del modelo tts-1-hd.
Opciones de voz
El punto de acceso de conversión de texto a voz ofrece 13 voces integradas para que elijas cómo sonará el texto. Escucha estas voces y experimenta con ellas en OpenAI.fm, nuestra demo interactiva para probar el modelo de conversión de texto a voz más reciente de la API de OpenAI. Por ahora, las voces están optimizadas para el inglés.
alloy
ash
ballad
coral
echo
fable
nova
onyx
sage
shimmer
verse
marin
cedar
Para obtener la mejor calidad, te recomendamos usar marin o cedar.
Las voces disponibles dependen del modelo. Los modelos tts-1 y tts-1-hd admiten menos voces: alloy, ash, coral, echo, fable, onyx, nova, sage y shimmer.
Si usas la Realtime API, ten en cuenta que las opciones de voz son ligeramente distintas. Consulta la guía de conversaciones en tiempo real para conocer las voces disponibles actualmente en esa API.
Transmisión de audio en tiempo real
La API de voz permite transmitir audio en tiempo real mediante la codificación de transferencia por fragmentos. Así puedes empezar a reproducir el audio antes de que se genere y esté disponible el archivo completo.
Transmite la voz generada a partir del texto de entrada directamente a tus altavoces
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14import OpenAI from "openai";import { playAudio } from "openai/helpers/audio";const openai = new OpenAI();const response = await openai.audio.speech.create({ model: "gpt-4o-mini-tts", voice: "coral", input: "Today is a wonderful day to build something people love!", instructions: "Speak in a cheerful and positive tone.", response_format: "wav",});await playAudio(response);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21import asynciofrom openai import AsyncOpenAIfrom openai.helpers import LocalAudioPlayeropenai = AsyncOpenAI()asyncdefmain() -> None:asyncwith openai.audio.speech.with_streaming_response.create(model="gpt-4o-mini-tts",voice="coral",input="Today is a wonderful day to build something people love!",instructions="Speak in a cheerful and positive tone.",response_format="pcm", ) as response:await LocalAudioPlayer().play(response)if__name__=="__main__": asyncio.run(main())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27package mainimport ( "context" "io" "os" "github.com/openai/openai-go/v3")func main() { client := openai.NewClient() response, err := client.Audio.Speech.New(context.Background(), openai.AudioSpeechNewParams{ Model: openai.SpeechModelGPT4oMiniTTS, Voice: openai.AudioSpeechNewParamsVoiceUnion{OfAudioSpeechNewsVoiceString2: openai.String("coral")}, Input: "Today is a wonderful day to build something people love!", Instructions: openai.String("Speak in a cheerful and positive tone."), ResponseFormat: openai.AudioSpeechNewParamsResponseFormatWAV, }) if err != nil { panic(err) } defer response.Body.Close() if _, err := io.Copy(os.Stdout, response.Body); err != nil { panic(err) }}
1
2
3
4
5
6
7
8
9
10curl https://api.openai.com/v1/audio/speech \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini-tts", "input": "Today is a wonderful day to build something people love!", "voice": "coral", "instructions": "Speak in a cheerful and positive tone.", "response_format": "wav" }' | ffplay -i -
Para obtener los tiempos de respuesta más cortos, te recomendamos usar wav o pcm como formato de respuesta.
Formatos de salida compatibles
El formato de respuesta predeterminado es mp3, pero también hay otros formatos disponibles, como opus y wav.
MP3: formato de respuesta predeterminado para uso general.
Opus: ofrece baja latencia para la transmisión y la comunicación por internet.
AAC: formato de compresión de audio digital que prefieren YouTube, Android e iOS.
FLAC: formato de compresión sin pérdida que prefieren los aficionados al audio para archivar grabaciones.
WAV: audio WAV sin comprimir, adecuado para aplicaciones de baja latencia que necesitan evitar el costo de la decodificación.
PCM: similar a WAV, pero contiene las muestras sin procesar a 24 kHz (16 bits con signo, con el byte menos significativo primero) y no incluye encabezado.
Idiomas compatibles
En general, el modelo de conversión de texto a voz admite los mismos idiomas que Whisper. Whisper admite los siguientes idiomas y ofrece buenos resultados, aunque las voces están optimizadas para el inglés:
Para generar voz en cualquiera de estos idiomas, proporciona el texto de entrada en el idioma que elijas.
Voces personalizadas
Crea una voz personalizada aprobada a partir de una grabación en la que la persona da su consentimiento y una muestra de audio de esa misma voz. Consulta Voces personalizadas para saber quién puede usar esta función, qué requisitos deben cumplir las grabaciones, qué frases se usan para dar el consentimiento y cómo realizar las solicitudes a la API.