上次用微軟神經網路語音 API 玩文字轉語音 Text-To-Speech (TTS) (延伸閱讀:跟阿基師去河濱公園吊單槓範例)轉眼已是三年多前,當時適逢 ChatGPT 發表前夕。LLM 出現後,電腦合成語音技術也跟著大幅提升,擬真程度逼近真人,甚至還能調整語氣與語速,表達情緒。

OpenAI 目前最新的 TTS 模型是 GPT-4o mini TTS (2025-12-15 版),支援的人聲語音 (Voice) 種類超級多,文件只寫了 alloy、ash、ballad、coral、echo、fable、nova、onyx、sage、shimmer、verse、marin、cedar 十三種,事實上遠遠不只。錯誤訊息列舉的可用選項高達 35 種,讓我選擇困難症急性發作:(註:jade-hardy 與 megan-wetherall 再多了 3025-03-07 版,合併計算)

用 AI 整理不同人聲的特色 (參考來源:TTS Gallery - Azure OpenAI TTS Voice SamplerOpenAI Realtime VoiceOpenAI FMのボイスキャラ 11種類の声を「男性的?女性的?」で超ざっくり仕分... 等),但聽覺感受是很主觀的,光看別人描述沒實際聽過,就一個字 - 空!

於是我寫了幾行程式,把 35 種語音全部播放一次。另外,相關報導提到 Fathom、Glimmer、Harp、Maple、Orbit、Rainbow、Reef、Ridge、Vale 等語音有加入具表達力的語調與人類的抑揚頓挫,我加碼了一個小實驗,透過提示要求模型「模擬發生緊急狀況,陷入緊張、焦急且激動的語氣,音量提高,上氣不接下氣地說出文字。」挑戰「初四了阿伯」經典對白。

先看測試結果:

OpenAI Text-To-Speech 中文語音測試

程式碼如下:

using Azure.AI.OpenAI;
using System.ClientModel;
using NAudio.Wave;
using System.Text;
using System.Security.Cryptography;
using OpenAI.Audio;

var endPoint = GetSecureEnvVar("TTS_EndPoint");
var key = GetSecureEnvVar("TTS_ApiKey");
var ttsDepName = "gpt-4o-mini-tts";

var azureOpenAIClient = new AzureOpenAIClient(new Uri(endPoint), new ApiKeyCredential(key));
var audioClient = azureOpenAIClient.GetAudioClient(ttsDepName);
var descriptions = new string[] {

    // TTS 傳統語音
    "Alloy 。中性、平衡、用途廣;性別感較弱、可塑性高。",
    "Echo 。男聲,聲音飽滿、有共鳴感,溫暖自然、表達力不錯。",
    "Fable 。男聲,英語系口音偏英式的敘事型聲音,溫暖、有說故事感,咬字清楚。",
    "Onyx 。低沈、帶點沙啞的男聲,權威感強、適合嚴肅旁白或正式場合。",
    "Nova 。明亮、有活力且友善的女聲,常被用在較輕鬆或熱情的場景。",
    "Shimmer 。柔和但清晰的女聲,帶亮度與表達力,常被形容為溫柔、歡快。",

    // 新 Realtime 語音
    "Ash 。清楚、精確又具會話感的男聲,聽起來親切、有日常對話感。",
    "Ballad 。流暢、有旋律感,偏中性的男聲,常被聯想到抒情朗讀或文藝氣質。",
    "Coral 。明亮、積極、友善的女聲,帶一點甜感;社群常拿來做兒童或歡樂場景。",
    "Sage 。冷靜、沉穩、知性的女聲,給人有智慧且不急不慢的感覺。",
    "Verse 。表達力強但偏中性、性別感不強,適合多種情境的萬用語音。",
    "Marin 。清新、帶「海岸/清爽」氛圍的高品質女聲,多被歸在高音質組。",
    "Cedar 。溫暖、厚實、有穩重感的高品質男聲印象,常被形容有質感。",
    "Brook 。溫柔、流暢,像流水般的女聲;適合平靜敘述或背景旁白。",
    "Clover 。輕快、有朝氣,帶點俏皮感的女聲。",
    "Dan 。清楚、專業、偏典型美式口音的男聲,常被拿來做說明、支援類場景。",
    "Elan 。有動感、時尚感的中性/年輕語音,節奏感偏快。",
    "Jazz 。流暢、稍帶成熟「酷」感的男聲,常被聯想到夜店/音樂調性。",
    "Marilyn 。帶成熟魅力與優雅氛圍的女聲。",
    "Meadow 。自然、放鬆、開闊感的女聲,常被形容有野外/田園氣氛。",
    "Rio 。有節奏感、活潑熱情的中性偏男聲,部分人會聯想到南美風情。",    
    "Jade-Hardy-2025-03-07 :高擬真 HD 女聲,語音自信、有力,常被拿來做高級商業/產品內容。",
    "Megan-Wetherall-2025-03-07 :高擬真 HD 女聲,溫暖、電影感強,適合敘事或精品級旁白。",

    "Breeze 。情緒豐富、認真又帶活力的中性語音,適合熱情互動。",
    "Cove 。冷靜、有條理、說話直接的男聲,偏務實/理性風格。",
    "Ember 。自信、樂觀、偏積極的男聲,給人鼓勵與向上感。",
    "Juniper 。開放、愉快、有輕快節奏的中性女聲。",
    "Maple 。開朗、誠懇、說話直接但友善的女聲。",
    "Orbit 。中性語音,音質乾淨、數位機械感強,語氣前衛且精準,適用於太空科技、AI 系統導航。",
    "Vale 。明亮、好奇的女聲,常被聯想成愛提問、探索型角色。",
    "Amuch 。熱情有活力,略帶磁性的男聲。",
    "Aster 。中性敘事或系統語音,適合資訊型輸出。",
    "Fathom 。低沈、穩重的男聲,適合分析、說明、技術或商務場合。",
    "Glimmer 。輕快、有活力的女聲,適合聊天、故事或帶點俏皮的場景。",
    "Harp 。柔和、偏溫暖的女聲,適合敘事、安撫型互動(例如冥想、睡前故事、照護相關內容)",
    
};

Console.Clear();
Console.WriteLine("OpenAI Text-to-Speech 中文語音展示");
// Console.WriteLine("OpenAI Text-to-Speech「初四了阿北」語音測試");
Console.WriteLine();
Console.Write($"現在播放語音: ");
foreach (var description in descriptions)
{
    var voice = description.Split(' ')[0];
    Console.CursorLeft = 15;
    Console.ForegroundColor = ConsoleColor.Yellow;
    Console.Write($"{voice,-30}");
    Console.ResetColor();
    Console.CursorLeft = 15;
    var result = await audioClient.GenerateSpeechAsync(
        description,
        // "阿北! 出事了,阿北!  怎麼辦?",
        voice: voice.ToLower(),
        new SpeechGenerationOptions()
        {
            Instructions = "Please read the text in a clear and engaging manner.",
            // Instructions = "請模擬發生緊急狀況,陷入緊張、焦急且激動的語氣,音量提高,上氣不接下氣地說出文字。",
            SpeedRatio = 1.2f,
        }
    );
    var mp3Binary = result.Value.ToArray();
    using var ms = new MemoryStream(mp3Binary);
    using var mp3Reader = new Mp3FileReader(ms);
    using var waveOut = new WaveOutEvent();
    waveOut.Init(mp3Reader);
    waveOut.Play();
    while (waveOut.PlaybackState == PlaybackState.Playing)
    {
        await Task.Delay(100);
    }
}

// GetSecureEnvVar() 參考: https://blog.darkthread.net/blog/secure-apikey-for-console-app/
static string GetSecureEnvVar(string varName) {
    // ... 略 ...
};

分享給大家參考。

Experiments with OpenAI’s GPT‑4o mini TTS by auditioning 35+ voices via code, comparing styles and expressiveness. Demonstrates a C# console app that generates and plays multilingual speech, including an emotional stress-test inspired by a classic meme.


Comments

# by NoobTW

內文打成 3025 了~

Post a comment