七分鐘 › 語音檔

七分鐘學會製作語音檔並匯入遊戲

七分鐘能完成的是「查出播報員為什麼不唸你的球員名字」,而那正是絕大多數人真正想解決的問題。至於「換掉那個聲音」,本站後來也做到了 ——這一堂先教怎麼查,做法在換掉遊戲的聲音那一課。

⏱ 七分鐘怎麼分配

做什麼分鐘
列出遊戲裡的語音檔1
看懂一個語音檔的內部切法2
搞懂播報員為什麼跳過你的球員3
決定怎麼處理1

前置

🛟 動手之前:先完整備份整個遊戲資料夾

把整個遊戲資料夾複製一份到別的地方包括裡面存放紀錄的資料夾。不要挑檔案,整包複製最省事也最保險。

「紀錄」是指這些(它們跟遊戲檔混在同一個資料夾裡):

dir /s /b "〔你的遊戲資料夾〕\*.sav"
find "〔你的遊戲資料夾〕" -name "*.sav"

上面第一行 Windows、第二行 Mac。 本站每一支工具都會自己備份它要動的那一個檔, 但那只保得住那一個檔 —— 整包備份保的是「你玩到現在的一切」。 完整做法看備份與還原 SOP

👉 你要做的事

1

先看遊戲裡有哪些語音檔。

Windows:

python mvp_read_voice.py "〔你的遊戲資料夾〕" --list

Mac / Linux:

python3 mvp_read_voice.py "〔你的遊戲資料夾〕" --list

主播的全部語音集中在一個 212 MB 的檔裡 —— 本站測試機上是 data\audio\cd\spch_pbp\pbpdat.big它本身就是一長串語音、不是封裝檔,所以不會出現在上面這份清單裡,下一步要直接指它。

2

看它內部是怎麼切的。

Windows:

python mvp_read_voice.py "〔語音檔路徑〕" --blocks

Mac / Linux:

python3 mvp_read_voice.py "〔語音檔路徑〕" --blocks

⚠️ 這裡不能填上一步印出來的那幾個檔。上一步列的是封裝檔 (開頭四個字母是 BIGF,裡面裝著幾千段語音), 而 --blocks 只認開頭就是語音本身的檔(開頭四個字母是 SCHl)—— 把封裝檔餵進去只會得到「停下來了:開頭不是 SCHl,這不是語音檔」。 手邊沒有單獨一段語音的話,直接指上一步提到的 data\audio\cd\spch_pbp\pbpdat.big(它會讀裡面第一段)。

3

搞懂「為什麼不唸我的球員」。

一句話版本

每位球員在名冊裡有一個語音號碼,播報員照那個號碼去語音庫找對應的錄音。新加進來的球員如果沒有配到號碼、或配到的號碼沒有錄音,播報員就跳過名字。

所以要讓他唸得出來,做法是把球員指到一個「已經有錄音」的號碼 ——通常是找一個發音接近的既有名字。這不需要做新的聲音檔。

那我自己的球員是幾號?這個號碼叫 audioid,存在名冊檔 data\database\attrib.dat 裡。上面那兩個指令看不到它,但本站有一支印得出來應援曲那一課mvp_swap_chant.py--give 預覽時會印出「要指給 某某某 audioid 4867」,名字給模糊字串還會一次列出多位。要自己看的話,欄位順序在不同名冊之間會變,永遠不要記欄號,要從檔案第一行的表頭找欄位名。整套查法與本站量到的覆蓋率寫在播報員為什麼不唸新球員的名字那一頁。

✅ 怎麼知道成功了

❌ 出錯處理

症狀怎麼辦
印「停下來了:開頭不是 SCHl,這不是語音檔」你指到的是封裝檔(上一步列出來的那幾個都是)。--blocks 只吃開頭就是語音的檔,改指 pbpdat.big 那一種
印「這是一個資料夾,不是單一語音檔」路徑指到資料夾了。要指到檔案本身,或是照它印出來的那一行改用 --list
看不懂那些數字正常。那一頁的完整版有逐欄解說

⚠️ 這一課到哪裡為止

2026-08-29 更新:本站現在寫得回去了。 EA 的聲音格式已經解開,而且有一支純 Python、零相依的腳本可以 把聲音匯出成 WAV、也把 WAV 編回遊戲的格式 —— 不需要任何二十年前流出的工具

解碼對照第三方工具驗過 21,678,328 個取樣 0 個不同, 編碼來回 98.1 dB。 完整做法見 換掉遊戲的聲音

⚠️ 本站曾經寫過「換播報語音做不到」——那句話是錯的,已經訂正。 後來收窄成「做不到的只是最後一格(把聲音編碼回去)」—— 而那一格現在也有了

仍然做不到的:有些段連第三方工具也解不開(容器層還有分支), 本工具遇到會明說解不出來、不會吐垃圾。

想弄懂為什麼