| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import { v4 as uuid4 } from 'uuid'
- import _ from 'lodash'
- export async function registerVoiceprint({ name, userId, organizeId, file }) {
- // 检查文件的 MIME 类型是否为 WAV 文件
- if (file.type !== 'audio/wav') {
- throw new Error('文件类型必须是 WAV');
- }
- const formData = new FormData();
- formData.append('file', file, file.name);
- const registerRes = await fetch('https://conference.voiceaitech.com/api/convoice/feature/extract', { // 替换为实际的上传URL
- method: 'POST',
- body: formData,
- }).then(response => response.json())
- if (!_.get(registerRes, ['result', 'featureData'])) {
- throw new Error("声音文件不达标,请注意文件时长大于1分钟和音量");
- }
- const featureData = registerRes.result.featureData
- const insertRes = await fetch('https://gpt4.cocorobo.cn/insert_sy_voiceprint', {
- method: 'POST',
- body: JSON.stringify({
- name,
- featureData,
- user_id: userId,
- organize_id: organizeId,
- }),
- headers: {
- 'Content-Type': 'application/json',
- hwMac: organizeId
- }
- }).then(res => res.json())
- if (!_.get(insertRes, ['FunctionResponse'])) {
- throw new Error('上传失败')
- }
- return featureData
- }
- export async function getVoiceprints({ userId, organizeId }) {
- const res = await fetch('https://gpt4.cocorobo.cn/get_sy_voiceprint', {
- method: 'POST',
- body: JSON.stringify({
- user_id: userId,
- }),
- headers: {
- 'Content-Type': 'application/json',
- hwMac: organizeId
- }
- }).then(res => res.json())
- if (!_.get(res, ['FunctionResponse'])) {
- throw new Error('获取声纹列表失败')
- }
- return JSON.parse(res.FunctionResponse)
- }
- export async function createWs({ enroll_infos }) {
- // 创建一个WebSocket实例
- const ws = new WebSocket(
- 'wss://conference.voiceaitech.com/api/convoice/streaming'
- );
- let _resolve
- // const p = new Promise(resolve => _resolve = resolve)
- ws.onopen = () => {
- const data = {
- eventName: 'start',
- sessionId: uuid4(),
- timestamp: new Date().getTime(),
- convoiceInfo: {
- options: 2,
- hotwords: [
- {
- weight: 5,
- hotword: '上课',
- },
- // TODO
- ],
- enroll_infos,
- },
- };
- ws.send(JSON.stringify(data));
- // setTimeout(() => {
- // _resolve()
- // }, 3000)
- };
- // await p
- // 处理来自服务器的消息
- // ws.onmessage = (e) => {
- // const res = JSON.parse(e.data);
- // if (res?.userdata?.results?.length > 0) {
- // this.role_arr = res.userdata.results;
- // }
- // if (res?.userdata?.last_block) {
- // ws.close();
- // }
- // };
- // 处理错误
- // ws.onerror = (error) => {
- // console.error('WebSocket error:', error);
- // };
- return ws
- }
|