Audio

Trạm AI hỗ trợ cả việc gửi file audio đến các model tương thích lẫn nhận response audio qua API. Hướng dẫn này trình bày cách làm việc với audio đầu vào và audio đầu ra.

Audio đầu vào

Người dùng có thể gửi file audio đến các model tương thích để transcribe, phân tích và xử lý. Request audio đầu vào dùng API /v1/chat/completions với content type input_audio. File audio phải được mã hóa base64 và kèm theo phần khai báo định dạng.

Lưu ý: File audio phải được mã hóa base64 - URL trực tiếp không được hỗ trợ cho nội dung audio.

Người dùng có thể tìm model hỗ trợ audio đầu vào bằng cách lọc theo modality audio đầu vào trên trang Models.

Gửi file audio

Dưới đây là cách gửi một file audio để xử lý:

1import OpenAI from 'openai';
2import fs from "fs/promises";
3
4const openai = new OpenAI({
5 baseURL: 'https://api.staging.tram.ai.vn/v1',
6 apiKey: '<TRAM_AI_API_KEY>',
7});
8
9async function encodeAudioToBase64(audioPath: string): Promise<string> {
10 const audioBuffer = await fs.readFile(audioPath);
11 return audioBuffer.toString("base64");
12}
13
14// Read and encode the audio file
15const audioPath = "path/to/your/audio.wav";
16const base64Audio = await encodeAudioToBase64(audioPath);
17
18const result = await openai.chat.completions.create({
19 model: "google/gemini-2.5-flash",
20 messages: [
21 {
22 role: "user",
23 content: [
24 {
25 type: "text",
26 text: "Please transcribe this audio file.",
27 },
28 {
29 type: "input_audio",
30 inputAudio: {
31 data: base64Audio,
32 format: "wav",
33 },
34 },
35 ],
36 },
37 ],
38 stream: false,
39});
40
41console.log(result);

Các định dạng audio đầu vào hỗ trợ

Các định dạng audio được hỗ trợ sẽ khác nhau tùy provider. Một số định dạng phổ biến gồm:

  • wav - WAV audio
  • mp3 - MP3 audio
  • aiff - AIFF audio
  • aac - AAC audio
  • ogg - OGG Vorbis audio
  • flac - FLAC audio
  • m4a - M4A audio
  • pcm16 - PCM16 audio
  • pcm24 - PCM24 audio

Lưu ý: Hãy kiểm tra tài liệu của model để biết chính xác model đó hỗ trợ những định dạng audio nào. Không phải model nào cũng hỗ trợ tất cả định dạng.

Audio đầu ra

Trạm AI hỗ trợ nhận response audio từ các model có khả năng tạo audio đầu ra. Để yêu cầu audio đầu ra, chỉ cần thêm hai tham số modalitiesaudio vào request.

Người dùng có thể tìm các model hỗ trợ audio đầu ra bằng cách lọc theo modality audio đầu ra trên trang Models.

Yêu cầu audio đầu ra

Để nhận audio đầu ra, hãy đặt modalities thành ["text", "audio"] và cung cấp cấu hình audio với giọng nói cùng định dạng mong muốn:

1import requests
2import json
3import base64
4
5url = "https://api.staging.tram.ai.vn/v1/chat/completions"
6headers = {
7 "Authorization": f"Bearer {API_KEY_REF}",
8 "Content-Type": "application/json"
9}
10
11payload = {
12 "model": "openai/gpt-4o-audio-preview",
13 "messages": [
14 {
15 "role": "user",
16 "content": "Say hello in a friendly tone."
17 }
18 ],
19 "modalities": ["text", "audio"],
20 "audio": {
21 "voice": "alloy",
22 "format": "wav"
23 },
24 "stream": True
25}
26
27# Audio output requires streaming — the response is delivered as SSE chunks
28response = requests.post(url, headers=headers, json=payload, stream=True)
29
30audio_data_chunks = []
31transcript_chunks = []
32
33for line in response.iter_lines():
34 if not line:
35 continue
36 decoded = line.decode("utf-8")
37 if not decoded.startswith("data: "):
38 continue
39 data = decoded[len("data: "):]
40 if data.strip() == "[DONE]":
41 break
42 chunk = json.loads(data)
43 delta = chunk["choices"][0].get("delta", {})
44 audio = delta.get("audio", {})
45 if audio.get("data"):
46 audio_data_chunks.append(audio["data"])
47 if audio.get("transcript"):
48 transcript_chunks.append(audio["transcript"])
49
50transcript = "".join(transcript_chunks)
51print(f"Transcript: {transcript}")
52
53# Combine and decode the base64 audio chunks, then save
54full_audio_b64 = "".join(audio_data_chunks)
55audio_bytes = base64.b64decode(full_audio_b64)
56with open("output.wav", "wb") as f:
57 f.write(audio_bytes)

Định dạng chunk khi streaming

Audio đầu ra yêu cầu phải bật streaming (stream: true). Dữ liệu audio và transcript đều được gửi về theo từng phần qua trường delta.audio trong mỗi chunk:

lines
1{
2 "choices": [
3 {
4 "delta": {
5 "audio": {
6 "data": "<base64-encoded audio chunk>",
7 "transcript": "Hello"
8 }
9 }
10 }
11 ]
12}

Các tùy chọn cấu hình audio

Tham số audio chấp nhận những tùy chọn sau:

Tùy chọnMô tả
voiceGiọng nói dùng để tạo audio (ví dụ: alloy, echo, fable, onyx, nova, shimmer). Các giọng khả dụng khác nhau tùy model.
formatĐịnh dạng audio cho đầu ra (ví dụ: wav, mp3, flac, opus, pcm16). Các định dạng khả dụng khác nhau tùy model.