Gesprochene Audiodaten in mehreren Sprachen erzeugen
Audio per Streaming in Echtzeit ausgeben
Hier hörst du ein Beispiel mit der Stimme alloy:
Unsere Nutzungsrichtlinien verpflichten dich dazu,
deine Nutzenden klar darauf hinzuweisen, dass die TTS-Stimme, die sie hören,
KI-generiert ist und keine menschliche Stimme.
Schnellstart
Der speech-Endpunkt benötigt drei wesentliche Eingaben:
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
Standardmäßig gibt der Endpunkt die gesprochene Sprache als MP3 aus. Du kannst ihn jedoch so konfigurieren, dass er ein beliebiges unterstütztes Format ausgibt.
Text-to-Speech-Modelle
Verwende für intelligente Echtzeitanwendungen das Modell gpt-4o-mini-tts, unser neuestes und zuverlässigstes Text-to-Speech-Modell. Mit Prompts kannst du verschiedene Aspekte der Sprachausgabe steuern, darunter:
Akzent
Emotionale Bandbreite
Intonation
Stimmimitationen
Sprechgeschwindigkeit
Tonfall
Flüstern
Unsere weiteren Text-to-Speech-Modelle sind tts-1 und tts-1-hd. Das Modell tts-1 bietet eine geringere Latenz, allerdings bei geringerer Qualität als das Modell tts-1-hd.
Verfügbare Stimmen
Der TTS-Endpunkt bietet 13 integrierte Stimmen, mit denen du festlegen kannst, wie Text als Sprache wiedergegeben wird. Höre dir diese Stimmen in OpenAI.fm an und experimentiere mit ihnen. In unserer interaktiven Demo kannst du das neueste Text-to-Speech-Modell der OpenAI API ausprobieren. Die Stimmen sind derzeit für Englisch optimiert.
alloy
ash
ballad
coral
echo
fable
nova
onyx
sage
shimmer
verse
marin
cedar
Für die beste Qualität empfehlen wir marin oder cedar.
Welche Stimmen verfügbar sind, hängt vom Modell ab. Die Modelle tts-1 und tts-1-hd unterstützen eine kleinere Auswahl: alloy, ash, coral, echo, fable, onyx, nova, sage und shimmer.
Wenn du die Realtime API verwendest, beachte, dass die Auswahl der verfügbaren Stimmen etwas abweicht. Die aktuell verfügbaren Echtzeitstimmen findest du im Leitfaden zu Echtzeitgesprächen.
Audio in Echtzeit streamen
Die Speech API unterstützt Audiostreaming in Echtzeit mithilfe von Chunked Transfer Encoding. Dadurch kann die Audiowiedergabe beginnen, bevor die vollständige Datei erzeugt und bereitgestellt wurde.
Gesprochene Audiodaten aus Eingabetext direkt an deine Lautsprecher streamen
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 -
Für die kürzesten Antwortzeiten empfehlen wir wav oder pcm als Antwortformat.
Unterstützte Ausgabeformate
Das Standardantwortformat ist mp3. Es stehen aber auch andere Formate wie opus und wav zur Verfügung.
MP3: Das Standardantwortformat für allgemeine Anwendungsfälle.
Opus: Für Streaming und Kommunikation über das Internet, mit geringer Latenz.
AAC: Für digitale Audiokompression, bevorzugt von YouTube, Android und iOS.
FLAC: Für verlustfreie Audiokompression, bei Audiofans zur Archivierung beliebt.
WAV: Unkomprimierte WAV-Audiodaten, geeignet für Anwendungen mit geringer Latenz, da kein zusätzlicher Aufwand für die Dekodierung anfällt.
PCM: Ähnlich wie WAV, enthält jedoch die Roh-Samples mit 24 kHz (16 Bit, vorzeichenbehaftet, Little-Endian) ohne Header.
Unterstützte Sprachen
Das TTS-Modell orientiert sich bei der Sprachunterstützung weitgehend am Whisper-Modell. Whisper unterstützt die folgenden Sprachen und liefert gute Ergebnisse, obwohl die Stimmen für Englisch optimiert sind:
Du kannst gesprochene Audiodaten in diesen Sprachen erzeugen, indem du den Eingabetext in der gewünschten Sprache bereitstellst.
Benutzerdefinierte Stimmen
Erstelle eine genehmigte benutzerdefinierte Stimme aus einer Aufnahme, in der die sprechende Person ihre Einwilligung erteilt, und einer passenden
Audioprobe. Unter Benutzerdefinierte Stimmen findest du Informationen zu den Zugangsvoraussetzungen,
Anforderungen an die Aufnahmen, Einwilligungsformulierungen und API-Anfragen.