UNPKG

@minto-ai/huoshan-tts

Version:

借助“火山引擎在线语音合成API”实现浏览器端“文本转语音

86 lines (75 loc) 2.29 kB
import type { BusinessParams, SystemConfig } from './types' import { isIos } from '@minto-ai/tools' import TtsController from './tts-controller' import 'core-js' let systemConfig: SystemConfig const defaultSystemConfig: SystemConfig = { ttsRequestBaseUrl: 'wss://audio.workbrain.cn/tts', } const defaultBusinessParams: BusinessParams = { voice_type: 'zh_female_daimengchuanmei_moon_bigtts', speed_ratio: 1, volume_ratio: 1, pitch_ratio: 1, language: 'cn', provider: 0, cache: false, stream: true, } function requestAudioPermission(): Promise<MediaStream> { return new Promise((resolve, reject) => { navigator.mediaDevices .getUserMedia({ audio: true }) .then((stream) => { resolve(stream) }) .catch((error) => { if (error.name === 'NotAllowedError') { reject(new Error('用户拒绝了音频权限请求')) } else if (error.name === 'NotFoundError') { reject(new Error('设备上没有可用的音频输入设备')) } else { reject(new Error(`音频权限请求失败: ${error.message}`)) } }) }) } /** * 用于管理文本转语音的配置和创建实例 */ export default { /** * 配置系统参数。 * @param {Partial<SystemConfig>} [_systemConfig] - 系统配置参数。 * @returns {TtsController} 返回TtsController实例。 */ config(_systemConfig: Partial<SystemConfig>) { systemConfig = { ...defaultSystemConfig, ..._systemConfig, } /** * @iss IOS浏览器无法文字转语音,需要申请权限 */ if (isIos()) { requestAudioPermission().catch((error) => { throw new Error(error.message) }) } return this }, /** * 创建文本转语音控制器实例。 * @param {Partial<BusinessParams>} [_businessParams] - 业务参数,默认为空对象。 * @returns {TtsController} 返回TtsController实例。s */ create(_businessParams: Partial<BusinessParams> = {}): TtsController { const businessParams = { ...defaultBusinessParams, ..._businessParams, } return new TtsController(systemConfig, businessParams) }, }