适配讲解详情多语言声线播放
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
lyf
2026-07-25 01:04:42 +08:00
parent cb6da6590d
commit 7001ec355a
8 changed files with 567 additions and 31 deletions

View File

@@ -25,6 +25,7 @@ const createStopInfo = (overrides: Partial<GuideStopInfo> = {}): GuideStopInfo =
hasAudio: false,
hasText: false,
supportedLanguages: [],
audioOptions: [],
languageVariants: {},
audioStatus: 'MISSING',
...overrides
@@ -156,4 +157,91 @@ describe('ExplainUseCase stop image policy', () => {
expect((audio as any).getPlayInfo).not.toHaveBeenCalled()
expect((audio as any).getTextInfo).not.toHaveBeenCalled()
})
it('prefers default audio options and switches the selected voice locally', async () => {
const useCase = createUseCase(createStopInfo({
hasAudio: true,
hasText: true,
supportedLanguages: ['zh-CN', 'en-US'],
languageVariants: {
'zh-CN': {
lang: 'zh-CN',
enabled: true,
playable: true,
playUrl: '/audio/legacy-zh.mp3',
textAvailable: true,
text: '普通话讲解词',
hasText: true,
fallback: false,
audioStatus: 'READY'
},
'en-US': {
lang: 'en-US',
enabled: true,
playable: true,
playUrl: '/audio/legacy-en.mp3',
textAvailable: true,
text: 'English narration',
hasText: true,
fallback: false,
audioStatus: 'READY'
}
} as GuideStopInfo['languageVariants'],
audioOptions: [
{
channelCode: 'standard.zh-CN.female',
displayName: '普通话女声',
languageCode: 'zh-CN',
gender: 'female',
playUrl: '/audio/zh-female.mp3',
duration: 50,
isDefault: true
},
{
channelCode: 'standard.zh-CN.male',
displayName: '普通话男声',
languageCode: 'zh-CN',
gender: 'male',
playUrl: '/audio/zh-male.mp3',
duration: 51,
isDefault: false
},
{
channelCode: 'standard.en-US.female',
displayName: '英文女声',
languageCode: 'en-US',
gender: 'female',
playUrl: '/audio/en-female.mp3',
duration: 49,
isDefault: true
}
]
}))
const chinese = await useCase.enterExplainDetail({
exhibitId: 'stop-1', targetType: 'STOP', targetId: 'stop-1', lang: 'zh-CN'
})
const english = useCase.selectExplainDetailLanguage(chinese, 'en-US')
const chineseMale = useCase.selectExplainDetailAudioOption(chinese, 'standard.zh-CN.male')
expect(chinese).toMatchObject({
audioUrl: '/audio/zh-female.mp3',
audioDuration: 50,
audioChannelCode: 'standard.zh-CN.female',
audioVoiceGender: 'female',
guideText: '普通话讲解词'
})
expect(english).toMatchObject({
audioUrl: '/audio/en-female.mp3',
audioChannelCode: 'standard.en-US.female',
guideText: 'English narration'
})
expect(chineseMale).toMatchObject({
audioUrl: '/audio/zh-male.mp3',
audioDuration: 51,
audioChannelCode: 'standard.zh-CN.male',
audioVoiceGender: 'male',
guideText: '普通话讲解词'
})
})
})