Аудио
Узнайте, как преобразовать аудио в текст или создать аудио из текста.
Связанное руководство: Речь в текст
Создание речи
Запрос на создание речи
POST
https://api.openai.com/v1/audio/speech
Создаёт аудио из входного текста.
Тело запроса
Параметр | Описание | Обязательный |
---|---|---|
model | Тип данных: строка. Одно из доступных моделей TTS: tts-1 или tts-1-hd . | Да |
input | Тип данных: строка. Текст, для которого генерируется аудио. Максимальная длина: 4096 символов. | Да |
voice | Тип данных: строка. Голос, используемый при создании аудио. Поддерживаемые голоса: alloy , echo , fable , onyx , nova и shimmer . Предпросмотр доступен в руководстве по Текст в речь. | Да |
response_format | Тип данных: строка. По умолчанию: mp3 . Формат создаваемого аудио. Поддерживаемые форматы: mp3 , opus , aac , flac , wav , pcm . | Нет |
speed | Тип данных: число. По умолчанию: 1. Скорость воспроизведения создаваемого аудио. Выберите значение от 0.25 до 4.0. Стандартное значение: 1.0. | Нет |
Возвращает
Содержимое аудиофайла.
Пример запроса
python
from pathlib import Path
import openai
speech_file_path = Path(__file__).parent / "speech.mp3"
response = openai.audio.speech.create(
model="tts-1",
voice="alloy",
input="Быстрая бурая лиса перепрыгнула через ленивую собаку."
)
response.stream_to_file(speech_file_path)
bash
curl https://api.openai.com/v1/audio/speech \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1",
"input": "The quick brown fox jumped over the lazy dog.",
"voice": "alloy"
}' \
--output speech.mp3
javascript
import fs from "fs";
import path from "path";
import OpenAI from "openai";
const openai = new OpenAI();
const speechFile = path.resolve("./speech.mp3");
async function main() {
const mp3 = await openai.audio.speech.create({
model: "tts-1",
voice: "alloy",
input: "Today is a wonderful day to build something people love!",
});
console.log(speechFile);
const buffer = Buffer.from(await mp3.arrayBuffer());
await fs.promises.writeFile(speechFile, buffer);
}
main();
Создание транскрипции
Пост-запрос
https://api.openai.com/v1/audio/transcriptions
Описание: Преобразуйте аудио в текст на исходном языке.
Тело запроса
Поле | Тип | Обязательное | Описание |
---|---|---|---|
file | file | Да | Объект аудиофайла (не имя файла), который следует транскрибировать. Поддерживаемые форматы: flac , mp3 , mp4 , mpeg , mpga , m4a , ogg , wav , или webm . |
model | string | Да | ID используемой модели. На данный момент доступна только whisper-1 , поддерживаемая нашей открытой моделью Whisper V2 . |
language | string | Нет | Язык входного аудио. Указание языка в формате ISO-639-1 улучшит точность и уменьшит задержку. |
prompt | string | Нет | Необязательный текст для указания стиля модели или продолжения предыдущего аудиосегмента. Подсказка должна соответствовать языку аудио. |
response_format | string | Нет | По умолчанию json . Формат вывода: json , text , srt , verbose_json или vtt . |
temperature | number | Нет | По умолчанию 0 . Температура выборки от 0 до 1 . Высокие значения, такие как 0.8 , делают вывод более случайным, низкие (0.2 ) более сфокусированным и детерминированным. При значении 0 модель автоматически изменяет температуру для достижения определенных порогов, используя логарифмическую вероятность. |
timestamp_granularities | array | Нет | По умолчанию segment . Гранулярности временных меток, которые должны быть заполнены при транскрипции. Для использования временных меток необходимо установить response_format в verbose_json . Поддерживаются варианты: word , segment . Обратите внимание, что нет дополнительной задержки для временных меток сегментов, но генерация временных меток слов увеличивает задержку. |
Возвращает: Объект транскрипции или подробный объект транскрипции.
Пример простого запроса
JS
import fs from "fs";
import OpenAI from "openai";
const openai = new OpenAI();
async function main() {
const transcription = await openai.audio.transcriptions.create({
file: fs.createReadStream("audio.mp3"),
model: "whisper-1",
});
console.log(transcription.text);
}
main();
bash
curl https://api.openai.com/v1/audio/transcriptions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F file="@/path/to/file/audio.mp3" \
-F model="whisper-1"
Python
from openai import OpenAI
client = OpenAI()
audio_file = open("speech.mp3", "rb")
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
)
Ответ:
json
{
"text": "Представьте себе самую безумную идею, которая когда-либо приходила вам в голову, и вы хотите понять, как она может масштабироваться в 100, в 1 000 раз больше. Это место, где вы можете это сделать."
}
Пример запроса с временными метками слов
JS
import fs from "fs";
import OpenAI from "openai";
const openai = new OpenAI();
async function main() {
const transcription = await openai.audio.transcriptions.create({
file: fs.createReadStream("audio.mp3"),
model: "whisper-1",
response_format: "verbose_json",
timestamp_granularities: ["word"]
});
console.log(transcription.text);
}
main();
bash
curl https://api.openai.com/v1/audio/transcriptions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F file="@/path/to/file/audio.mp3" \
-F "timestamp_granularities[]=word" \
-F model="whisper-1" \
-F response_format="verbose_json"
Python
from openai import OpenAI
client = OpenAI()
audio_file = open("speech.mp3", "rb")
transcript = client.audio.transcriptions.create(
file=audio_file,
model="whisper-1",
response_format="verbose_json",
timestamp_granularities=["word"]
)
print(transcript.words)
Ответ:
json
{
"task": "transcribe",
"language": "english",
"duration": 8.470000267028809,
"text": "The beach was a popular spot on a hot summer day. People were swimming in the ocean, building sandcastles, and playing beach volleyball.",
"words": [
{
"word": "The",
"start": 0.0,
"end": 0.23999999463558197
},
...
{
"word": "volleyball",
"start": 7.400000095367432,
"end": 7.900000095367432
}
]
}
Пример запроса с временными метками сегментов
JS
import fs from "fs";
import OpenAI from "openai";
const openai = new OpenAI();
async function main() {
const transcription = await openai.audio.transcriptions.create({
file: fs.createReadStream("audio.mp3"),
model: "whisper-1",
response_format: "verbose_json",
timestamp_granularities: ["segment"]
});
console.log(transcription.text);
}
main();
bash
curl https://api.openai.com/v1/audio/transcriptions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F file="@/path/to/file/audio.mp3" \
-F "timestamp_granularities[]=segment" \
-F model="whisper-1" \
-F response_format="verbose_json"
Python
from openai import OpenAI
client = OpenAI()
audio_file = open("speech.mp3", "rb")
transcript = client.audio.transcriptions.create(
file=audio_file,
model="whisper-1",
response_format="verbose_json",
timestamp_granularities=["segment"]
)
print(transcript.words)
Ответ:
json
{
"task": "transcribe",
"language": "english",
"duration": 8.470000267028809,
"text": "The beach was a popular spot on a hot summer day. People were swimming in the ocean, building sandcastles, and playing beach volleyball.",
"segments": [
{
"id": 0,
"seek": 0,
"start": 0.0,
"end": 3.319999933242798,
"text": " The beach was a popular spot on a hot summer day.",
"tokens": [
50364, 440, 7534, 390, 257, 3743, 4008, 322, 257, 2368, 4266, 786, 13, 50530
],
"temperature": 0.0,
"avg_logprob": -0.2860786020755768,
"compression_ratio": 1.2363636493682861,
"no_speech_prob": 0.00985979475080967
},
...
]
}
Создание перевода
Пост-запрос
https://api.openai.com/v1/audio/translations
Перевод аудио на английский язык.
Тело запроса
Поле | Тип | Обязательность | Описание |
---|---|---|---|
file | файл | Обязательно | Аудиофайл, который необходимо перевести, в одном из следующих форматов: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, или webm. |
model | строка | Обязательно | Идентификатор модели для использования. В настоящее время доступна только whisper-1 , основанная на нашей открытой модели Whisper V2. |
prompt | строка | Опционально | Дополнительный текст для задания стиля модели или продолжения предыдущего аудио сегмента. Подсказка должна быть на английском. |
response_format | строка | Опционально | По умолчанию: json. Формат вывода: json, text, srt, verbose_json, или vtt. |
temperature | число | Опционально | По умолчанию: 0. Температура выборки от 0 до 1. Высокие значения, такие как 0.8, сделают вывод более случайным, в то время как низкие значения, такие как 0.2, сделают его более целенаправленным и детерминированным. Если установлено в 0, модель будет использовать логарифмическую вероятность для автоматического увеличения температуры до достижения определенных порогов. |
Возвращаемое значение
Переведенный текст.
bash
curl https://api.openai.com/v1/audio/translations \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F file="@/path/to/file/german.m4a" \
-F model="whisper-1"
Python
from openai import OpenAI
client = OpenAI()
audio_file = open("speech.mp3", "rb")
transcript = client.audio.translations.create(
model="whisper-1",
file=audio_file
)
JS
import fs from "fs";
import OpenAI from "openai";
const openai = new OpenAI();
async function main() {
const translation = await openai.audio.translations.create({
file: fs.createReadStream("speech.mp3"),
model: "whisper-1",
});
console.log(translation.text);
}
main();
Ответ
json
{
"text": "Hello, my name is Wolfgang and I come from Germany. Where are you heading today?"
}
Объект транскрипции (Подробный JSON)
Представляет собой подробный ответ трансляции в формате JSON, основанный на предоставленном входе.
Свойство | Тип | Описание |
---|---|---|
language | строка | Язык входного аудио. |
duration | строка | Продолжительность входного аудио. |
text | строка | Переписанный текст. |
words | массив | Извлеченные слова и их соответствующие временные метки. |
Свойства words
Свойство | Тип | Описание |
---|---|---|
word | строка | Текстовое содержимое слова. |
start | число | Время начала слова в секундах. |
end | число | Время окончания слова в секундах. |
Сегменты текста
Свойство | Тип | Описание |
---|---|---|
id | целое | Уникальный идентификатор сегмента. |
seek | целое | Смещение поиска сегмента. |
start | число | Время начала сегмента в секундах. |
end | число | Время окончания сегмента в секундах. |
text | строка | Текстовое содержание сегмента. |
tokens | массив | Массив идентификаторов токенов для текстового содержимого. |
temperature | число | Параметр температуры, используемый для генерации сегмента. |
avg_logprob | число | Среднее логарифмическое значение вероятности сегмента. Если значение ниже -1, считается, что логарифмические вероятности неудачны. |
compression_ratio | число | Коэффициент сжатия сегмента. Если значение больше 2.4, считается, что сжатие неудачно. |
no_speech_prob | число | Вероятность отсутствия речи в сегменте. Если значение выше 1.0, а avg_logprob ниже -1, сегмент считается тихим. |
Пример объекта транскрипции
json
{
"task": "transcribe",
"language": "english",
"duration": 8.470000267028809,
"text": "The beach was a popular spot on a hot summer day. People were swimming in the ocean, building sandcastles, and playing beach volleyball.",
"segments": [
{
"id": 0,
"seek": 0,
"start": 0.0,
"end": 3.319999933242798,
"text": " The beach was a popular spot on a hot summer day.",
"tokens": [
50364, 440, 7534, 390, 257, 3743, 4008, 322, 257, 2368, 4266, 786, 13, 50530
],
"temperature": 0.0,
"avg_logprob": -0.2860786020755768,
"compression_ratio": 1.2363636493682861,
"no_speech_prob": 0.00985979475080967
},
...
]
}
Теперь любые инструменты перевода аудио могут работать на данной информации.