// cmd/main/main.mbt
//
// 命令行入口:读 .ogg 文件 → 解码 → 输出 16-bit PCM WAV。
///|
fn main {
let args = @env.args()
if args.length() < 2 {
println("用法: moon run cmd/main -- [output.wav]")
return
}
let input = args[1]
let output = if args.length() >= 3 { args[2] } else { "\{input}.wav" }
try {
let data = @fs.read_file_to_bytes(input)
match @moonvorbis.decode_ogg(data) {
Ok(stream) => {
if !stream.is_ready() {
println("错误: 未找到完整的 Vorbis 头")
return
}
let channels = stream.channels()
let frames = if channels > 0 { stream.pcm()[0].length() } else { 0 }
println(
"采样率: \{stream.sample_rate()} Hz, 声道: \{channels}, 样本: \{frames}",
)
match stream.metadata() {
Some(meta) =>
for key in ["TITLE", "ARTIST", "ALBUM"] {
match meta.get(key) {
Some(value) => println("\{key}: \{value}")
None => ()
}
}
None => ()
}
let wav = @moonvorbis.wav_encode_pcm16(
stream.pcm(),
stream.sample_rate(),
)
@fs.write_bytes_to_file(output, wav)
println("已写入: \{output}")
}
Err(e) => println("解码失败: \{e}")
}
} catch {
@fs.IOError::IOError(msg) => println("I/O 错误: \{msg}")
}
}