昨天教大家上字幕,今天則是反過來,給文字讓 AI 幫你配音
比起以前文字轉聲音的軟體,AI 的聲音更為自然,角色跟速度也都能調整,讓我們看看如何操作吧
文字轉語音也是劃分在 Audio Model 的部分,Spring AI 目前只支援 OpenAI
為了彈性配置,application.yml 只存放 API KEY,其他參數都放在程式碼內
@RestController
@RequiredArgsConstructor
class AiController {
private final SpeechModel speechModel;
@GetMapping("/tts")
public ResponseEntity<byte[]> speech(String prompt) throws IOException {
OpenAiAudioSpeechOptions speechOptions = OpenAiAudioSpeechOptions.builder()
.withModel("tts-1-hd")
.withVoice(Voice.ALLOY)
.withResponseFormat(AudioResponseFormat.MP3)
.withSpeed(1f)
.build();
SpeechPrompt speechPrompt = new SpeechPrompt(prompt, speechOptions);
SpeechResponse response = speechModel.call(speechPrompt);
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION,
ContentDisposition
.attachment()
.filename("配音.mp3", StandardCharsets.UTF_8)
.build().toString())
.body(response.getResult().getOutput());
}
}
SpeechModel
,跟之前模組不一樣的是這個模組回傳的是 byte[],要做一些處理才能下載檔案,所以回傳值特別使用 ResponseEntity<byte[]>
,昨天的結果是 String,若不下載也能直接顯示在網頁上.withModel("tts-1")
TTS 的模型,可以選 tts-1 以及 tts-1-hd(取樣頻率較高).withVoice(Voice.ALLOY)
選擇要哪種角色的聲音,有以下六種可選@JsonProperty("alloy") ALLOY("alloy"),
@JsonProperty("echo") ECHO("echo"),
@JsonProperty("fable") FABLE("fable"),
@JsonProperty("onyx") ONYX("onyx"),
@JsonProperty("nova") NOVA("nova"),
@JsonProperty("shimmer") SHIMMER("shimmer");
.withResponseFormat(AudioResponseFormat.MP3)
輸出聲音的格式,雖然後面存檔會自訂附檔名,不過格式得匹配,不然程式會無法辨認@JsonProperty("mp3") MP3("mp3"),
@JsonProperty("opus") OPUS("opus"),
@JsonProperty("aac") AAC("aac"),
@JsonProperty("flac") FLAC("flac");
.withSpeed(1.0f)
講話的速度,雖然影音編輯軟體可以調整速度,不過透過 AI 來調整聲調才不會變太多,範圍介於 0.25 ~ 4HttpHeaders.CONTENT_DISPOSITION
指定經過測試,雖然偶有錯誤發生,不過聲音聽起來非常自然,可以跟手機版 ChatGPT 對話就知道效果,雖然有點 ABC 腔調,不過整體來說還蠻好聽的
到目前為止凱文大叔把基本 Model 的操作都介紹過,不過 AI 的變化非常快,搞不好幾個月後又有新的 Model,大家覺得前面介紹這些 Model 可以取代掉那些職業?
程式碼下載:
https://github.com/kevintsai1202/SpringBoot-AI-Day10.git
凱文大叔使用 Java 開發程式超過 20 年,對於 Java 生態非常熟悉,曾使用反射機制開發 ETL 框架,對 Spring 背後的原理非常清楚,目前以 Spring Boot 作為後端開發框架,前端使用 React 搭配 Ant Design
下班之餘在 Amazing Talker 擔任程式語言講師,並獲得學員的一致好評
最近剛成立一個粉絲專頁-凱文大叔教你寫程式 歡迎大家多追蹤,我會不定期分享實用的知識以及程式開發技巧
想討論 Spring 的 Java 開發人員可以加入 FB 討論區 Spring Boot Developer Taiwan
我是凱文大叔,歡迎一起加入學習程式的行列