diff --git a/src/models/higgs_audio_tts/codec.cpp b/src/models/higgs_audio_tts/codec.cpp index 658919d3c..33204ad08 100644 --- a/src/models/higgs_audio_tts/codec.cpp +++ b/src/models/higgs_audio_tts/codec.cpp @@ -62,7 +62,7 @@ constexpr int64_t kCodecDecodeCapacityBucketFrames = 32; constexpr int64_t kCodecHopLength = 960; constexpr int64_t kCodecPadSamples = kCodecHopLength / 2; constexpr int64_t kCodecDecodeWindowFrames = 128; -constexpr int64_t kCodecDecodeOverlapFrames = 8; +constexpr int64_t kCodecDecodeContextFrames = 32; constexpr int64_t kCodecFullDecodeMaxFrames = 512; constexpr int64_t kResidualDilations[] = {1, 3, 9}; @@ -1584,11 +1584,14 @@ HiggsCodecDecodeOutput HiggsCodecRuntime::decode_codes(const std::vector window_codes; int64_t emitted_frames = 0; while (emitted_frames < frames) { - const int64_t window_begin = - std::max(0, emitted_frames - kCodecDecodeOverlapFrames); + const int64_t emit_begin = emitted_frames; const int64_t emit_end = - std::min(frames, emitted_frames + kCodecDecodeWindowFrames); - const int64_t window_frames = emit_end - window_begin; + std::min(frames, emit_begin + kCodecDecodeWindowFrames); + const int64_t window_begin = + std::max(0, emit_begin - kCodecDecodeContextFrames); + const int64_t window_end = + std::min(frames, emit_end + kCodecDecodeContextFrames); + const int64_t window_frames = window_end - window_begin; window_codes.resize(static_cast(window_frames * kCodecCodebooks)); for (int64_t frame = 0; frame < window_frames; ++frame) { const auto src = @@ -1602,9 +1605,9 @@ HiggsCodecDecodeOutput HiggsCodecRuntime::decode_codes(const std::vector