HarmonyOS 鸿蒙Next 使用textToSpeech转换成音频,使用AudioRenderer播放时经常容易出现杂音

发布于 1周前 作者 eggper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 使用textToSpeech转换成音频,使用AudioRenderer播放时经常容易出现杂音

在Demo中我们不能一定复现杂音,但是在我们的APP中,经常会出现杂音,我们APP中会开启语音识别,但关闭时有时也会出现杂音,我们不能确定出现杂音的原因是什么,请帮忙分析下出现杂音的原因以及该如何消除杂音?

2 回复

按以下尝试修改下TTSSpeakerUtil文件内容:

[@Concurrent](/user/Concurrent)
function writeBuf(filePath: string, buf: ArrayBuffer, offset: number = 0, seq: number) {
 console.info(`Demo start:${offset}, seq: ${seq}`)
 // 新建并打开文件
 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
 fs.writeSync(file.fd, buf, { offset });
 // 关闭文件
 fs.closeSync(file);
 console.info(`Demo end:${offset}, seq: ${seq}`)
}

class FileWriter {
 private offset: number = 0;
 private path: string = '';
 private count = 0;
 private group: taskpool.SequenceRunner = new taskpool.SequenceRunner();
 private pcmData: TreeMap<number, ArrayBuffer> = new TreeMap();
 constructor(contentId: string) {
   this.path = getPlayItemPath(contentId)
 }
 public write(buff: ArrayBuffer, seq: number): Promise<void> {
   this.pcmData.set(seq, buff);
   while (this.pcmData.length > 0 && this.count == this.pcmData.getFirstKey()) {
     let buf: ArrayBuffer = this.pcmData.remove(this.pcmData.getFirstKey());
     let task = new taskpool.Task(writeBuf, this.path, buf, this.offset, this.count);
     let length = buf.byteLength;
     this.group.execute(task);
     this.offset += length;
     this.count++;
   }
 }
 public delete() {
   fs.unlink(this.path)
 }
 public close(): void {
 }
 canRead(): boolean {
   return this.count > 100
 }
}
// onData回调修改
 // 返回音频流
 async onData(requestId: string, audio: ArrayBuffer, response: textToSpeech.SynthesisResponse) {
   ZHGLog.info("covert Listener ", 'onData: ' + 'requestId: ' + requestId + ' response: ' + JSON.stringify(response));
   fileManager.get(requestId).write(audio, response.sequence);
   if (needPlay && fileManager.get(requestId).canRead()) {
     audioPlayerManager.playOrPause(requestId, false)
     needPlay = false
   }
 },

更多关于HarmonyOS 鸿蒙Next 使用textToSpeech转换成音频,使用AudioRenderer播放时经常容易出现杂音的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS 鸿蒙Next使用textToSpeech转换成音频,再通过AudioRenderer播放时出现的杂音问题,以下是一些可能的解决方案:

  1. 检查音频源:首先确认textToSpeech生成的音频本身是否存在杂音。可以尝试将生成的音频文件在其他设备上播放,以判断问题是否出在生成环节。
  2. 优化AudioRenderer设置:检查AudioRenderer的配置,确保音频解码、采样率、位深度等参数与音频文件匹配,避免因参数不匹配导致的杂音。
  3. 检查系统资源:系统资源紧张(如内存不足)也可能导致音频播放时出现杂音。确保设备有足够的资源来运行音频播放服务。
  4. 更新系统和应用:确保HarmonyOS系统以及使用的textToSpeech和AudioRenderer相关应用都是最新版本,以排除软件bug导致的问题。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部