開發過程

唱給他聽

把一句想對他說的話,變成一首唱給他聽的歌。開發途中最大的一次驚嚇是:AI 唱得很好聽,但唱的不是使用者寫的那句話。

網頁 App AI 生成歌曲 最新的一個
唱給他聽的產品畫面:輸入訊息、選擇曲風、生成歌曲
2026 年 8 月第一個 commit
377 次累積 commit(三週內)
已上線目前免費試用

01起點:這不是音樂產品

傳一封簡訊,不如傳一首歌。生日、道謝、道歉、告白、過年拜年 —— 這些場合大家都想講點什麼,但打成文字就是乾乾的一行。

所以我們一開始就把定位釘死:這是一個溝通產品,不是音樂工具。 這句話聽起來像廢話,但它其實是整個產品最重要的一條規則, 因為它決定了後面每一次取捨要往哪邊倒 —— 使用者不是來做音樂的,他是來把一句話送出去的。

02第一條紅線:歌詞必須是使用者寫的字

AI 生成音樂的工具都很願意「幫你潤飾一下歌詞」。對音樂工具來說這是功能, 對這個產品來說這是災難 —— 如果把使用者寫給媽媽的話改得更押韻, 那首歌就不再是他寫的了。

所以「歌詞逐字等於使用者輸入」變成產品的第一條不可違反的規則。 而且這條規則沒有寫在給 AI 的提示裡,是寫在程式碼的檢查關卡裡 —— 因為提示只能建議,關卡才能保證。

03那次驚嚇:它唱了別人的歌詞

我們想讓使用者可以選曲風,做法是餵一段「參考音檔」給模型,讓它知道台語老歌、 嘻哈或抒情大概長什麼樣子。技術上這叫風格條件化,聽起來很合理。

結果生出來的歌很好聽、很像那個曲風 —— 唱的卻是參考音檔本身的歌詞, 不是使用者寫的字。我們把生成的歌詞跟使用者的原句逐字比對, 29 個字裡面只對上 2 個。

更麻煩的是,它不是壞掉。沒有錯誤訊息、沒有失敗狀態, 產出的是一首完全正常、完全合格、內容完全錯誤的歌。 如果當時沒有做逐字比對,這個東西會一路上線,而使用者只會覺得「這什麼鬼」。

學到的事

「叫 AI 像某個東西」這件事,會連內容一起像過去,不只是風格。 任何「讓它模仿這個」的功能,都同時是一個內容風險 —— 所以它預設關閉,而且必須先過內容比對這一關才准用。

04從「不要失敗」改成「不要默默出錯」

我們曾經想追求「百分之百不會出錯、不需要備案」。認真想過之後, 接受了一個比較誠實的答案:生成式的東西沒辦法保證,只能保證被檢查到。

所以現在每一首歌生出來之後,都會被量一次:唱的字對不對、咬字清不清楚、 有沒有大段空白、節奏會不會拖。不合格的就重生一次,而不是丟給使用者去發現。 目標從「永不失敗」換成「絕不默默出貨錯的東西」—— 這個目標做得到,前一個做不到。

05換引擎、比引擎

中間我們認真評估過換一家生成引擎。兩家一起跑同一批輸入, 用同一套檢查去量結果 —— 因為我們的檢查器是吃「音檔 + 原文」的, 跟哪一家沒關係,所以它剛好可以拿來當公正的裁判。

比出來的結果不只是音質差異:挑戰者的版權掃描把我們 39 個參考音檔擋下 15 個, 這是任何規格表和報價單都不會寫的遷移成本。 換供應商真正的代價,通常藏在「現有的東西還能不能用」裡面。

06送出去這一段,比生成還難

歌做好只是一半。這是一個溝通產品,所以「怎麼傳給他」跟「歌好不好聽」一樣重要。 這一段花掉的時間遠超過預期:LINE 裡面開的網頁跟一般瀏覽器行為不一樣、 分享要能一鍵跳到聊天室、對方點開要能直接播, 還做了一支會把歌詞燒在畫面上的 KTV 字幕影片,因為在群組裡影片比連結更容易被點開。

07用了哪些 AI 工具和服務

Claude Code整個產品的實作主力。三週內累積 377 次 commit。
Mureka目前的歌曲生成引擎,把歌詞唱成歌。
ElevenLabs評估過的挑戰者。用同一套檢查器公平比過。
逐字對齊檢查器自己做的品管:吃音檔 + 原文,吐出每個字的時間點與命中率。既是品管也是選供應商的裁判。
Supabase歌曲、設定、用量與成本紀錄。
Vercel網站與所有後端函式。
ffmpeg剪出 30 秒版本、合成 KTV 字幕影片。
LINE MINI App讓分享出去的連結在 LINE 裡直接開、直接播。

08付費還沒打開,因為成本還沒算完

付費機制已經做好但是關著 —— 因為每生成一首歌都是真的在燒錢, 我們想先把成本算清楚、把品質關卡站穩,再決定價格。 目前每一筆生成的花費都會被記下來,跟供應商帳單對得起來。

所以下一個要解的不是功能,是單位成本:一首歌要壓到多少錢,付費才打得開。 在那之前它維持免費,錢由我們自己吸收。

想聽聽看?

寫一句話,選一個曲風,大概一分鐘後你會拿到一首歌。

前往唱給他聽 →