自学HarmonyOS Next记录:使用鸿蒙文本转语音开发
刚到12月的第一天早上,刚刚泡好咖啡还没喝上一口,老板就走到我工位旁边,说有个新任务要我搞定——用鸿蒙的文本转语音(TextToSpeech)API开发一款能朗读文字的应用。他说客户有这个需求,想在他们的设备中增加语音提示功能,不但能朗读文本,还要支持多种语言和不同的语音风格。我拿着咖啡
刚到12月的第一天早上,刚刚泡好咖啡还没喝上一口,老板就走到我工位旁边,说有个新任务要我搞定——用鸿蒙的文本转语音(TextToSpeech)API开发一款能朗读文字的应用。他说客户有这个需求,想在他们的设备中增加语音提示功能,不但能朗读文本,还要支持多种语言和不同的语音风格。我拿着咖啡点点头,心里想着这事说起来不难,但具体怎么实现还得仔细研究。
初识TextToSpeech API
先入为主的是了解TextToSpeech的基本功能,我打开了华为的鸿蒙开发者官网,在鸿蒙Next API找到了TextToSpeech的文档。根据官方描述,这个API可以将输入的文本转换为语音输出,而且还支持多个语言的朗读,非常适合做语音提示或者播报功能。
说干就干,我先决定尝试一个最简单的用例——把一段文本朗读出来。根据文档,首先要初始化TTS引擎,然后调用speak方法来实现文本的朗读。
第一个Demo:朗读一段文本
首先,我先写了一个最简单的代码片段,来测试文本转语音的功能。代码如下:
import TextToSpeech from '@hmscore/hms-ai-texttospeech';
function startTextToSpeech() {
let tts = TextToSpeech.getInstance();
// 配置语音参数
let config = {
language: 'en-US', // 选择语言
person: 'en-US-st-1', // 选择朗读的声音
speed: 1.0, // 语速
volume: 1.0 // 音量
};
tts.init().then(() => {
console.log('TTS 引擎初始化成功');
// 朗读文本
tts.speak('Hello, welcome to HarmonyOS text to speech!', config)
.then(() => {
console.log('文本朗读成功');
})
.catch((error) => {
console.error('朗读失败:', error);
});
}).catch((error) => {
console.error('TTS 引擎初始化失败:', error);
});
}
startTextToSpeech();
上面的代码中,我首先通过TextToSpeech.getInstance()获取了TTS引擎的实例,然后调用init()方法进行初始化,接着就调用speak()方法来朗读一段简单的英文文本。这段代码在第一次运行的时候,其实很顺利,直接听到了设备传来一句“Hello, welcome to HarmonyOS text to speech!”的语音,瞬间让我有了一种成就感。
增加多语言支持
初步成功之后,老板对演示效果表示满意,但是马上又给我提出了新要求:“能不能加一些其他语言,比如中文和西班牙语,让我们产品更国际化?”好嘞,这个其实文档里有提到支持多种语言,那我就继续优化吧。
于是,我决定添加多语言的支持,这里是我改进后的代码:
function startTextToSpeech(text, language) {
let tts = TextToSpeech.getInstance();
// 配置多语言参数
let config = {
language: language,
person: language === 'zh-CN' ? 'zh-CN-st-1' : 'es-ES-st-1', // 根据语言选择不同声音
speed: 1.0,
volume: 1.0
};
tts.init().then(() => {
console.log('TTS 引擎初始化成功');
tts.speak(text, config)
.then(() => {
console.log(`${language} 文本朗读成功`);
})
.catch((error) => {
console.error(`${language} 朗读失败:`, error);
});
}).catch((error) => {
console.error('TTS 引擎初始化失败:', error);
});
}
// 朗读中文文本
startTextToSpeech('你好,欢迎使用鸿蒙系统的文本转语音功能!', 'zh-CN');
// 朗读西班牙语文本
startTextToSpeech('Hola, bienvenido a la función de texto a voz de HarmonyOS!', 'es-ES');
这段代码增加了对中文和西班牙语的支持,我通过动态设置language参数来实现不同语言的朗读。当我运行这段代码时,设备发出了中文和西班牙语的朗读,声音清晰流畅,老板听到“Hola”时也忍不住笑了起来,说:“不错,这个国际化的感觉有了!”
添加暂停与继续功能
既然文本朗读基本功能已经实现得不错,老板又进一步提出了一个实际应用中的新需求:“语音朗读的时候用户可能需要暂停一下,或者继续朗读,能不能把这些功能也加进去?”
我查了文档,发现TextToSpeech模块中有相应的pause()和resume()方法,于是我决定再进一步优化代码,给用户提供更多的交互控制。
// 暂停与继续功能
let ttsInstance = null;
function startTextToSpeechWithControl(text, language) {
ttsInstance = TextToSpeech.getInstance();
let config = {
language: language,
person: 'zh-CN-st-1',
speed: 1.0,
volume: 1.0
};
ttsInstance.init().then(() => {
console.log('TTS 引擎初始化成功');
ttsInstance.speak(text, config)
.then(() => {
console.log('文本朗读成功');
})
.catch((error) => {
console.error('朗读失败:', error);
});
}).catch((error) => {
console.error('TTS 引擎初始化失败:', error);
});
}
function pauseTTS() {
if (ttsInstance) {
ttsInstance.pause()
.then(() => {
console.log('朗读已暂停');
})
.catch((error) => {
console.error('暂停失败:', error);
});
}
}
function resumeTTS() {
if (ttsInstance) {
ttsInstance.resume()
.then(() => {
console.log('朗读已继续');
})
.catch((error) => {
console.error('继续朗读失败:', error);
});
}
}
// 测试代码
startTextToSpeechWithControl('测试暂停与继续功能,试试看效果如何。', 'zh-CN');
// 可以通过调用 pauseTTS() 和 resumeTTS() 进行控制
在这里,我添加了两个新函数:pauseTTS()和resumeTTS()。用户现在可以在朗读过程中随时暂停或者继续播放,这样在实际场景中,用户如果临时需要停一下再继续,也都能通过这两个功能实现。老板看到这个功能后,很满意地说:“这样用户体验就好了,实用!”
结束语:一路探索与成长
通过这次开发,从最初的文本朗读,到多语言支持,再到增加交互控制功能,我感觉自己对鸿蒙系统的AI能力有了更深入的理解。文档确实很详细,但是在实际开发中,还是会遇到一些小坑,比如权限问题、语音包的安装等,但这也正是开发中的乐趣所在——不断探索,不断解决问题,最终实现功能。
希望这篇文章能帮助那些也在探索鸿蒙开发的小伙伴们,了解如何利用鸿蒙的TextToSpeech API实现文本转语音的功能。开发的过程可能充满挑战,但每一次的成功都让我们离更好的产品更近一步。加油吧,一起在鸿蒙的世界里创造更多的可能性!
更多推荐
所有评论(0)