feat(audio): 添加音频重采样支持,修复播放速度问题
问题: - TTS 返回 16000 Hz 音频,但 Context 使用 44100 Hz - 播放速度快 2.75 倍(44100/16000) - 不同采样率的音频播放速度不正确 解决方案: - 集成 gomplerate 库(纯 Go,零依赖) - 自动检测音频采样率并重采样到 44100 Hz - 支持任意采样率的音频文件正常播放 技术实现: - resampler.go: 封装 gomplerate,实现流式重采样 - play.go: WAV/MP3 播放自动重采样 - loop.go: BGM 循环播放支持重采样 测试: - 所有单元测试通过(6/6) - 支持采样率自动转换(如 16000 Hz → 44100 Hz) 依赖: - github.com/zeozeozeo/gomplerate v0.0.0
This commit is contained in:
@@ -13,15 +13,15 @@ var (
|
||||
)
|
||||
|
||||
const (
|
||||
DefaultSampleRate = 44100 // 采样率
|
||||
DefaultChannelCount = 2 // 声道数(立体声)
|
||||
UniversalSampleRate = 44100 // 通用采样率(高质量音频)
|
||||
DefaultChannelCount = 2 // 声道数(立体声)
|
||||
)
|
||||
|
||||
func initContext() (*oto.Context, error) {
|
||||
var initErr error
|
||||
otoOnce.Do(func() {
|
||||
op := &oto.NewContextOptions{}
|
||||
op.SampleRate = DefaultSampleRate
|
||||
op.SampleRate = UniversalSampleRate
|
||||
op.ChannelCount = DefaultChannelCount
|
||||
op.Format = oto.FormatSignedInt16LE
|
||||
|
||||
@@ -31,7 +31,7 @@ func initContext() (*oto.Context, error) {
|
||||
return
|
||||
}
|
||||
<-ready
|
||||
zap.S().Infoln("oto/v3 音频系统就绪")
|
||||
zap.S().Infof("oto/v3 音频系统就绪 (%d Hz)", UniversalSampleRate)
|
||||
})
|
||||
return otoCtx, initErr
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user