dudu MVP:五端语音输入法初始提交
- server:Go 网关(WS 流式识别中继/计费配额/微信登录支付 mock/反馈/埋点),gummy provider 已真实联调 - desktop:Tauri 2(全局快捷键 push-to-talk/浮层/托盘/设置/登录购买/反馈/首启引导) - android:Compose 主 App + IME(键盘内录音直传) - ios:App + 键盘扩展(1A spike 实证键盘内不可录音,走 deep link 听写) - design/design-pipeline:设计系统 + token 导出 iOS/Android 主题 - doc:前后端设计文档(HTML);web:官网宣传页;todo:任务看板 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
package asr
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"dudu/server/pkg/protocol"
|
||||
)
|
||||
|
||||
func TestMockProviderStreams(t *testing.T) {
|
||||
p := NewMock()
|
||||
p.Script = []string{"你好,世界。"}
|
||||
s, err := p.StartSession(context.Background(), SessionConfig{SampleRate: 16000})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
frame := make([]byte, protocol.FrameBytes)
|
||||
for i := 0; i < 10; i++ { // 1s 音频 = 10 帧 → 全句 6 字识别完
|
||||
if err := s.SendAudio(frame); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
if err := s.Close(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
var finals []string
|
||||
partials := 0
|
||||
for r := range s.Results() {
|
||||
if r.IsFinal {
|
||||
finals = append(finals, r.Text)
|
||||
} else {
|
||||
partials++
|
||||
}
|
||||
}
|
||||
got := strings.Join(finals, "")
|
||||
if got != "你好,世界。" {
|
||||
t.Fatalf("final text mismatch: %q (finals=%v)", got, finals)
|
||||
}
|
||||
if partials == 0 {
|
||||
t.Fatal("expect partial results before finals")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user