// Package audio 提供基于 oto/v3 的音频播放功能。
//
// 播放模式:
//   - 一次性播放: PlayWav(), PlayMP3() - 阻塞直到完成或 context 取消
//   - 循环播放: PlayMP3Loop() - 非阻塞,返回 player 和清理函数
//
// 使用示例:
//
//	// 一次性播放 WAV
//	err := audio.PlayWav(ctx, wavReader)
//	if err != nil && !errors.Is(err, context.Canceled) {
//	    log.Printf("播放失败: %v", err)
//	}
//
//	// 循环播放 MP3
//	player, cleanup, err := audio.PlayMP3Loop(mp3Reader)
//	if err != nil {
//	    return err
//	}
//	defer cleanup()
//	// ... 播放中 ...
//
// 采样率说明:
//   - 统一采样率：固定使用 16000 Hz（TTS 原生采样率）
//   - oto/v3 只支持一个全局 Context，统一采样率可避免冲突
//   - 其他采样率会自动重采样到 16000 Hz（线性插值）
//   - 16000 Hz 音频（TTS）：正常速度 ✅
//   - 44100 Hz 音频（BGM）：自动重采样，正常速度 ✅
//   - 其他采样率：自动重采样，正常速度 ✅
//
// 资源管理:
//   - 一次性播放: 函数内部自动管理所有资源
//   - 循环播放: 调用者必须调用 defer cleanup() 清理资源
package audio
