mirror of
https://github.com/idootop/mi-gpt.git
synced 2025-04-28 03:31:44 +00:00
feat: 添加 debug 开关
This commit is contained in:
parent
0c4c83eccf
commit
fca974761a
@ -5,7 +5,7 @@ import {
|
||||
getMiIOT,
|
||||
getMiNA,
|
||||
} from "mi-service-lite";
|
||||
import { clamp, sleep } from "../../utils/base";
|
||||
import { clamp, jsonEncode, sleep } from "../../utils/base";
|
||||
import { Logger } from "../../utils/log";
|
||||
import { Http } from "../http";
|
||||
import { StreamResponse } from "./stream";
|
||||
@ -22,6 +22,7 @@ type Speaker = {
|
||||
type ActionCommand = [number, number];
|
||||
|
||||
export type BaseSpeakerConfig = MiServiceConfig & {
|
||||
debug?: boolean;
|
||||
/**
|
||||
* 语音合成服务商
|
||||
*/
|
||||
@ -56,7 +57,7 @@ export class BaseSpeaker {
|
||||
logger = Logger.create({ tag: "Speaker" });
|
||||
MiNA?: MiNA;
|
||||
MiIOT?: MiIOT;
|
||||
|
||||
debug = false;
|
||||
checkInterval: number;
|
||||
tts: TTSProvider;
|
||||
ttsCommand: ActionCommand;
|
||||
@ -65,12 +66,14 @@ export class BaseSpeaker {
|
||||
constructor(config: BaseSpeakerConfig) {
|
||||
this.config = config;
|
||||
const {
|
||||
debug = false,
|
||||
checkInterval = 1000,
|
||||
tts = "xiaoai",
|
||||
ttsCommand = [5, 1],
|
||||
wakeUpCommand = [5, 3],
|
||||
audioBeep = process.env.audioBeep,
|
||||
} = config;
|
||||
this.debug = debug;
|
||||
this.audioBeep = audioBeep;
|
||||
this.checkInterval = clamp(checkInterval, 500, Infinity);
|
||||
this.tts = tts;
|
||||
@ -207,7 +210,7 @@ export class BaseSpeaker {
|
||||
// 播放回复
|
||||
const play = async (args?: { tts?: string; url?: string }) => {
|
||||
// 播放开始提示音
|
||||
if (playSFX) {
|
||||
if (playSFX && this.audioBeep) {
|
||||
await this.MiNA!.play({ url: this.audioBeep });
|
||||
}
|
||||
// 在播放 TTS 语音之前,先取消小爱音箱的唤醒状态,防止将 TTS 语音识别成用户指令
|
||||
@ -225,6 +228,9 @@ export class BaseSpeaker {
|
||||
// 等待回答播放完毕
|
||||
while (true) {
|
||||
const res = await this.MiNA!.getStatus();
|
||||
if (this.debug) {
|
||||
this.logger.debug(jsonEncode(res));
|
||||
}
|
||||
if (
|
||||
!this.responding || // 有新消息
|
||||
(res?.status === "playing" && res?.media_type) // 小爱自己开始播放音乐
|
||||
@ -232,13 +238,13 @@ export class BaseSpeaker {
|
||||
// 响应被中断
|
||||
return "break";
|
||||
}
|
||||
if (res && res?.status !== "playing") {
|
||||
if (res && res.status !== "playing") {
|
||||
break;
|
||||
}
|
||||
await sleep(this.checkInterval);
|
||||
}
|
||||
// 播放结束提示音
|
||||
if (playSFX) {
|
||||
if (playSFX && this.audioBeep) {
|
||||
await this.MiNA!.play({ url: this.audioBeep });
|
||||
}
|
||||
// 保持唤醒状态
|
||||
|
@ -42,6 +42,13 @@ class _LoggerManager {
|
||||
}
|
||||
}
|
||||
|
||||
debug(tag: string, args: any[]) {
|
||||
const logs = this._getLogs(tag + " 🐛", ...args);
|
||||
if (logs.length > 0) {
|
||||
console.log(...logs);
|
||||
}
|
||||
}
|
||||
|
||||
success(tag: string, args: any[]) {
|
||||
const logs = this._getLogs(tag + " ✅", ...args);
|
||||
if (logs.length > 0) {
|
||||
@ -90,6 +97,12 @@ class _Logger {
|
||||
}
|
||||
}
|
||||
|
||||
debug(...args: any[]) {
|
||||
if (!this.disable) {
|
||||
LoggerManager.debug(this.tag, args);
|
||||
}
|
||||
}
|
||||
|
||||
success(...args: any[]) {
|
||||
if (!this.disable) {
|
||||
LoggerManager.success(this.tag, args);
|
||||
|
@ -13,11 +13,11 @@ dotenv.config();
|
||||
async function main() {
|
||||
// println(kBannerASCII);
|
||||
// testDB();
|
||||
// testSpeaker();
|
||||
testSpeaker();
|
||||
// testOpenAI();
|
||||
// testMyBot();
|
||||
// testLog();
|
||||
testMiGPT();
|
||||
// testMiGPT();
|
||||
}
|
||||
|
||||
main();
|
||||
|
@ -3,21 +3,20 @@ import { StreamResponse } from "../src/services/speaker/stream";
|
||||
import { sleep } from "../src/utils/base";
|
||||
|
||||
export async function testSpeaker() {
|
||||
const config: any = {
|
||||
const speaker = new AISpeaker({
|
||||
userId: process.env.MI_USER!,
|
||||
password: process.env.MI_PASS!,
|
||||
did: process.env.MI_DID,
|
||||
tts: "doubao",
|
||||
};
|
||||
|
||||
const speaker = new AISpeaker(config);
|
||||
tts: "xiaoai",
|
||||
debug: true,
|
||||
});
|
||||
await speaker.initMiServices();
|
||||
// await testSpeakerResponse(speaker);
|
||||
// await testSpeakerStreamResponse(speaker);
|
||||
await testSpeakerStreamResponse(speaker);
|
||||
// await testSpeakerGetMessages(speaker);
|
||||
// await testSwitchSpeaker(speaker);
|
||||
// await testSpeakerUnWakeUp(speaker);
|
||||
await testAISpeaker(speaker);
|
||||
// await testAISpeaker(speaker);
|
||||
}
|
||||
|
||||
async function testAISpeaker(speaker: AISpeaker) {
|
||||
@ -61,23 +60,43 @@ async function testSpeakerResponse(speaker: AISpeaker) {
|
||||
|
||||
async function testSpeakerStreamResponse(speaker: AISpeaker) {
|
||||
const stream = new StreamResponse();
|
||||
const text = `
|
||||
明朝是中国历史上一个极具影响力的王朝,它涌现了众多杰出的历史人物和令人感动的故事。下面我会为你介绍一些明朝的主要历史人物和故事。
|
||||
|
||||
### 明朝的主要历史人物
|
||||
|
||||
1. **朱元璋(太祖)**:明朝的开国皇帝,他出身于农家,后来成为了农民起义军的领袖,最终建立了明朝,并自称为皇帝,即洪武帝。他实行了一系列改革,开创了明朝初期的盛世。
|
||||
|
||||
2. **永乐皇帝**:明朝第三位皇帝,朱棣之子,被誉为明朝的“盛世之君”。他以永乐大典著称,是中国古代历史上最宏大的一次全国性修订和总结,同时也是世界上最早的百科全书之一。
|
||||
|
||||
3. **郑和**:明朝的航海家和探险家,他率领庞大的船队七次下西洋,到达东南亚、南亚、阿拉伯半岛和非洲东岸。他的航海活动开拓了明朝的海外贸易,加强了中国与其他国家的交流。
|
||||
|
||||
4. **文征明**:明朝的杰出将领,他在抵御蒙古族的入侵、收复失地等方面做出了重大贡献。他曾率领明军成功收复了被蒙古族侵占的大片土地,为明朝的稳定和发展立下了汗马功劳。
|
||||
|
||||
5. **张居正**:明朝中期的重要政治家和改革者,他实行了一系列政治、经济和军事改革,加强了中央集权,提高了国家的统治效率,被誉为“明代的政治家典范”。
|
||||
|
||||
### 明朝的主要历史故事
|
||||
|
||||
1. **洪武三年征诏案**:这是明朝开国之初发生的一起重大政治事件,朱元璋在此案中发布了“永久大赦”的诏书,显示了他对国家的信任和恢复法制的决心。
|
||||
|
||||
2. **郑和下西洋**:郑和率领的七次下西洋活动是明朝海上远洋活动的高峰,展现了中国古代航海技术的高超水平,也促进了中外贸易和文化交流。
|
||||
|
||||
3. **靖难之役**:这是明朝中期的一场内乱,明英宗与明成祖之间的争斗导致了一场激烈的军事冲突,最终明成祖战胜了明英宗,稳固了自己的统治地位。
|
||||
|
||||
4. **杨廷和献计征蒙**:在明朝初期,面对蒙古族的入侵,杨廷和献计建议明太祖采取防御策略,最终成功挫败了蒙古族的进攻,保卫了明朝的疆土。
|
||||
|
||||
5. **文官武将齐聚南京**:明朝的一场盛会,明成祖为了加强中央集权,特意邀请了全国的文官武将前来南京,通过研讨国家大政方针来稳固统治。
|
||||
|
||||
以上是一些明朝的主要历史人物和故事,展现了这个伟大王朝的兴衰荣辱。
|
||||
`;
|
||||
const add = async (text: string) => {
|
||||
stream.addResponse(text);
|
||||
await sleep(100);
|
||||
};
|
||||
setTimeout(async () => {
|
||||
await add(`地球是圆的主要原因`);
|
||||
await add(`是由于地球的引力和自转。`);
|
||||
await add(`地球的引力使得地球在形成过程中变得更加圆滑,因为引力会使得地球`);
|
||||
await add(`的物质向地心靠拢,从而使得地球的形状更接近于一个球体。此外,`);
|
||||
await add(
|
||||
`地球的自转也会导致地球呈现出圆形,因为地球自转会使得地球的物质在赤道附近向外扩散,从而使得`
|
||||
);
|
||||
await add(
|
||||
`地球在赤道处稍微膨胀,而在极地处稍微收缩,最终形成一个近似于球体的形状。因此,地球是圆的`
|
||||
);
|
||||
await add(`主要原因是由于地球的引力和自转共同作用所致。`);
|
||||
console.log("finished!");
|
||||
for (const s of text.split(",")) {
|
||||
await add(s);
|
||||
}
|
||||
stream.finish();
|
||||
});
|
||||
await speaker.response({ stream });
|
||||
|
Loading…
x
Reference in New Issue
Block a user