1 个回答

使用 TextReader 实现文本朗读

import TextReader from '@ohos.multimedia.textreader';
import { Resource } from '@ohos.global.resource';
import { DEFAULT_STRING } from '@ohos.console.default_string';
import { CommonEventManager } from '@ohos.multimedia.media';

// 定义文本阅读器的参数
const readerParam: TextReader.ReaderParam = {
  isVoiceBrandVisible: true,
  businessBrandInfo: {
    panelName: ' XiaoYiReading '
  }
};

// 初始化 TextReader
async function initTextReader() {
  try {
    await TextReader.init(readerParam);
    return true;
  } catch (err) {
    console.error(`TextReader failed to init. Code: ${err.code}, message: ${err.message}`);
    return false;
  }
}

// 设置 TextReader 事件监听器
function setEventListener() {
  TextReader.on('stop', () => {
    console.log('TextReader stopped');
  });
  TextReader.on('stateChange', (state: TextReader.ReadState) => {
    if (state.state === TextReader.ReadState.COMPLETED) {
      console.log('TextReader completed');
    }
  });
}

// 播放文本
async function playText(text: string) {
  const playParam: TextReader.PlayParam = {
    text: text,
    textId: '1',
    voiceType: TextReader.VoiceType.NORMAL,
    speed: 1.0,
    pitch: 1.0,
    volume: 1.0,
    language: 'zh-CN',
    interrupt: TextReader.InterruptType.NORMAL
  };
  try {
    await TextReader.play(playParam);
    return true;
  } catch (err) {
    console.error(`TextReader failed to play. Code: ${err.code}, message: ${err.message}`);
    return false;
  }
}

// 暂停文本播放
async function pauseText() {
  try {
    await TextReader.pause();
    return true;
  } catch (err) {
    console.error(`TextReader failed to pause. Code: ${err.code}, message: ${err.message}`);
    return false;
  }
}

// 停止文本播放
async function stopText() {
  try {
    await TextReader.stop();
    return true;
  } catch (err) {
    console.error(`TextReader failed to stop. Code: ${err.code}, message: ${err.message}`);
    return false;
  }
}

//释放 TextReader 资源
async function releaseTextReader() {
  try {
    await TextReader.release();
    return true;
  } catch (err) {
    console.error(`TextReader failed to release. Code: ${err.code}, message: ${err.message}`);
    return false;
  }
}

// 页面组件示例
@Entry
@Component
struct TextReaderExample {
  @State isPlaying: boolean = false;
  @State text: string = 'Hello, HarmonyOS Next!';

  build() {
    Column() {
      Text(this.text)
        .fontSize(20)
        .margin(20)
      Button(this.isPlaying ? 'Pause' : 'Play')
        .onClick(async () => {
          if (this.isPlaying) {
            this.isPlaying = await pauseText();
          } else {
            this.isPlaying = await playText(this.text);
          }
        })
        .margin(20)
      Button('Stop')
        .onClick(async () => {
          this.isPlaying = false;
          await stopText();
        })
        .margin(20)
    }
    .onAppear(async () => {
      const isInit = await initTextReader();
      if (isInit) {
        setEventListener();
      }
    })
    .onDisappear(async () => {
      await releaseTextReader();
    })
  }
}

代码说明
初始化 TextReader :在组件的 onAppear 生命周期方法中调用 initTextReader 函数来初始化 TextReader,并在初始化成功后调用 setEventListener 设置事件监听器。
播放文本 :点击 “Play” 按钮时,调用 playText 函数,将文本内容传递给 TextReader 进行播放,并更新播放状态。
暂停播放 :点击 “Pause” 按钮时,调用 pauseText 函数暂停文本播放,并更新播放状态。
停止播放 :点击 “Stop” 按钮时,调用 stopText 函数停止文本播放,并重置播放状态。
释放资源 :在组件的 onDisappear 生命周期方法中调用 releaseTextReader 函数释放 TextReader 资源

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进