Open AuthourAkson opened 1 week ago
可以给你浏览器的控制台输出截个图吗?在网页里右键检查,说说话,然后给给主控台截个图
好的,没想到佬你竟然半夜在线www
顺便说下,不论说话不说话主控制台都是这样
emmmm 浏览器的麦克风/vad打开失败,不是很懂... 你可以点几下左下角的麦克风按纽看看吗?你是什么时候下载的这个项目?是最新版吗?
我用的这个项目是最新的,但那个成功的群友用的是0.22版,我也以为是版本问题便要了对方的版本,但成功运行后发现是共性问题,cmd都没有回应。至于左下角的按钮你指的是这个页面上的mic on 吗?这个之前点过,但不知道有什么用,而且这几个图片里的项目都是重新运行的
就随便点几下那个 mic on然后给浏览器控制台截个图,看看他会显示什么。 cmd没有回应是因为前端的麦克风好像没有启动 (要嘛是麦克风没启动要嘛是vad没启动,反正其中一个有问题),前端根本听不见你说话,所以cmd什么也没接收到。具体原因我不是很清楚 (也没办法在我的电脑上复现你的问题...)
好的,但得明天发了,我明早还有课 (°▽°)
另外如果可以的话,你也可以换个浏览器看看会发生什么.... 你也可以检查一下你的浏览器有没有麦克风权限: 开一下这个网站 (https://www.vad.ricky0123.com ),随便说几句话看他能不能听到你(如果听到了,他的方框会加速,等你说完话了会显示刚刚的录音)。
这个网站试过了,能正常录音,mic is on打开后控制台错误也确实变了 麦克风权限也是开了的
还是麦克风(以及vad模块)无法成功初始化,说实话我真的不知道为什么... 你可以换一个浏览器看看问题是否能复现吗?
我稍微更新了一下网页部分的代码,看能不能获取更多信息。用这个static 文件夹替换掉项目代码文件夹中的 static 文件夹。 static.zip
另外可以帮我在这个网页控制台中运行下面这两个代码吗?
这个函数会检查麦克风权限在这个网页上是否开启
navigator.permissions.query({ name: 'microphone' }).then(function(result) {
if (result.state === 'granted') {
console.log("Microphone permission granted");
init_vad();
} else if (result.state === 'prompt') {
console.log("Microphone permission prompt");
// Handle prompt case
} else if (result.state === 'denied') {
console.log("Microphone permission denied");
// Handle denied case
}
});
这个函数会检查 getUserMedia 能不能用
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
console.log("Browser supports getUserMedia");
} else {
console.error("Browser does not support getUserMedia");
}
我说实话我觉得这个问题一点都不科学... 浏览器代码能出个锤子问题,不都是chrome 吗... 我之前传给你的那个 demo网站用的跟我是完全一样的 vad 库,所以根本不应该出问题... 而且这部分的代码(vad 初始化)根本就没有什么出bug 的余地啊... 也没有网络问题因为我把所有的库都放在本地了,没有下载的流程,你断网都能跑... 这个 "Uncaught (in promise): The user aborted a request" 的错误信息也不是很懂... 看了一下可能的原因感觉都不是很像... 而且问题无法复现...
你的chrome 版本是多少? 我真的不知道还能有那出问题了... 😢
以下是控制台 同时我的谷歌版本为version129.0.6668.101
google是实时更新的,顺便说一下跑这个项目一共做了哪些工作。我先是装了ffmpeg,cudnn,mpv,并将它们配置到环境变量里,之后又安装了ollama,cmd运行ollama run qwen2.5下载模型,git以前就下好了,开始跑时下载了large-v3的asr模型,最后就是出现了现在的问题
说实话我真的不知道你为什么会遇到这个问题。你遇到的问题跟python或是什么ffmpeg 甚至是这个项目的配置都没什么关系,完全只跟浏览器和前端代码有关系,具体来说是浏览器中的麦克风和 vad (Voice Activation Detection) 模型没有办法正常初始化 (报错信息是说初始化被中断了,原因未知)。
vad模型是透过浏览器内的 onnx 环境在浏览器内用 web assembly 运行的,所以不应该会出现平台兼容的问题。上面的demo网站用的是同个版本的同个vad 库,且上面的截图排除了麦克风权限没给和浏览器getMedia api不兼容的问题... 而且模型都在本地,所以也没有什么未知网络环境造成的问题... 而且相同的代码无法在其他电脑上稳定复现... 不是很懂...
我们再试试看改从CDN获取 vad 跟 onnx 运行环境好了。帮我把 static/index.html
中, 关于 Voice Activation Detection
的 部分替换成下面的内容...
<!-- Voice Activation Detection -->
<script src="https://cdn.jsdelivr.net/npm/onnxruntime-web@1.14.0/dist/ort.js"></script>
<!-- <script src="libs/ort.js"></script> -->
<script src="https://cdn.jsdelivr.net/npm/@ricky0123/vad-web@0.0.7/dist/bundle.min.js"></script>
<!-- <script src="libs/bundle.min.js"></script> -->
已经修改了,还需要在控制台做什么操作吗
看看能不能用,然后截个图,随便点点麦克风按钮之类的
错误也没有发生变化 mic is on 打开后
换个浏览器试过了吗?我真不知道怎么解决了...
您能看下这个吗,https://github.com/ricky0123/vad/issues/40我是在搜Uncaught (in promise) AbortError: The user aborted a request这个错误时发现的,同时我去看了下原群聊记录,有个跟着操作走的群友最后运行成功但对话的话也没有回应,之后他觉得应该没问题了就没再聊了,我刚与他取得了联系问了下,他的电脑是win10,rtx3080的,所以有可能这是个共性的问题,对方表示等会有时间了再运行下这个项目
跟那位群友联系过后,发现对方也一样无法正常回应,以下是对方返图
async function testVAD() { try { // 请求麦克风访问权限 const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
console.log('获取到音频流', stream);
// 初始化VAD
const vad = new VAD();
// 开始录制(假设你的项目中有类似的方法,将音频流传递给vad处理)
await vad.start(stream);
console.log('VAD初始化成功');
// 这里可以添加监听器等其他逻辑来测试VAD的工作情况
// 例如:vad.on('audio', (data) => { /* 处理音频数据 */ });
} catch (error) {
console.error('发生错误:', error);
}
}
testVAD();
在该页面运行以上代码后,能获取的到音频流
你的那位群友遇到的问题跟你不一样,事实上截图里的log显示他前端的vad初始化成功了,如果他有问题可能是其他地方出了问题。
具体获取音频流的那部分是 vad 包处理的,因为他还要跑vad模型判断你有没有在说话,估计是初始化vad模型那部分失败了,但原因未知。
我们试着运行看看vad包官网的代码吧,看能不能运行。你贴的那段 testVAD 写的不太对,所以 VAD is not defined 是在预料之中的。
运行看看这个吧
async function main() {
const myvad = await vad.MicVAD.new({
onSpeechStart: () => {
console.log("Speech start detected")
},
onSpeechEnd: (audio) => {
// do something with `audio` (Float32Array of audio samples at sample rate 16000)...
}
})
myvad.start()
}
main()
错误变成vad能初始化了却使用不了了,我想顺带问一下调用到vad的python组件叫什么,也就是原代码中 let myvad = null; let previousTriggeredProbability = 0; // the possibility that triggered the last speech start async function init_vad() { try { myvad = await vad.MicVAD.new({ preSpeechPadFrames: 10, onSpeechStart: () => { console.log("Speech start detected: " + previousTriggeredProbability); if (state === "thinking-speaking") { interrupt(); } else { console.log("😀👍 Not interrupted. Just normal conversation"); } }, onFrameProcessed: (probs) => { if (probs["isSpeech"] > previousTriggeredProbability) { previousTriggeredProbability = probs["isSpeech"]; } }, onVADMisfire: () => { console.log("VAD Misfire. The LLM can't hear you."); if (state === "interrupted") { state = "idle"; } document.getElementById("message").textContent = "The LLM can't hear you."; }, onSpeechEnd: (audio) => { if (!voiceInterruptionOn) { stop_mic(); } if (ws && ws.readyState === WebSocket.OPEN) { sendAudioPartition(audio); } } }); } catch (error) { console.error("Error initializing VAD:", error); myvad = null; } } 是webrtcvad吗
python 代码不会直接调用到vad模块。前端网页我是用js写的,在前端javascript 里面调用 vad 模型录音,侦测到用户说完话后,透过websocket 协议把录制的音频传回到后端的python服务端,再做语音识别。
如果你问的是具体是哪里用到了vad,实际上在初始化这个vad组件(myvad)的时候,所有相关的函数就作为回调函数传进去了。跟vad相关的代码除了启动vad跟关掉vad以外,都在这了。代码中,当 vad检测到人说完话的时候,onSpeechEnd 回调函数会被调用,然后sendAudioPartition函数会被执行,并把音频用 websocket 协议传回到 python服务端去。
你截图中的这个问题... 看起来像是 vad 模型在被初始化成功之前,就开始往后执行了。理论上,除非 start_mic()
在短时间内被调用了两次,我不太能想到为什么会出发这个问题,因为vad成功初始化了。我希望你测试的时候,既然vad已经能成功初始化了,就不要再往控制台里贴我之前给你的那些测试代码了,就让整个程序自然的开始。
另外,话说,你现在用的版本是多少? 0.2.2 到 0.2.3 中间我改了一些浏览器那边的东西。实际上我已经强烈不建议任何人使用 0.2.2 了,因为 0.2.3 我修了个很重要的 bug。另外我上面之前给你发的代码都是给 0.2.3用的,如果用在 0.2.2里面可能会导致未知的后果... 我希望你之前没有把我给你的代码贴到 0.2.2版本的软件里面...
还有,为什么他忽然就能初始化 vad 了?你改了什么东西吗?是因为电脑管家的原因吗?你可以稍微测试一下吗?我有点好奇。是不是电脑管家封锁了本地网页的麦克风权限?或是... 算了我猜不出来,随便啦。
(你可能透过观察我的前端代码能发现,其实我前端写的挺屎的... 我最近学了react + typescript还有一些比较正规的前端开发的方式, 在未来大概率会把整个前端代码用react重写一遍,但这会拖得比较久)
测试的时候让程序自然的开始,当小人出现的时候随便说几句话,看看控制台里有没有反应 (正确的反应是他会在你开始说话时发现你在说话,然后在你说完话的时候喷一个数组到控制台里。此时音频就已经被传回后端了,如果还有问题,记得也给后端的log截个图)
怎么说呢,成功初始化的原因我感觉也有可能是因为更新了电脑系统,在电脑重启更新完毕后,我打开电脑抱着电脑管家会不会妨碍本地脚本运行的想法又是运行了一次,然后就变成了这样,但又试了试后猜测应该不是电脑管家的问题,因为再次打开电脑管家它的错误依然是上图的样子。 至于版本的问题,先前已经说过了,我用的是最新版的(10.5号时下的),之后我也怀疑是版本问题便找了完全成功运行的群友要了他的版本(0.2.2),但是实际运行后出错都相同没有任何区别。 我嘞个,当你看到这句话,已经是打完上面两段话十分钟后了,我已经知道为什么会出现之前的Aborterror了,当我试着关掉麦克风权限再打开时,Aborterror又出现了,然后谷歌莫名其妙将页面上的字自动翻译成中文,我直接关了再重新打开这个模型,错误 就变成了上图的样子。 下图为控制台测试画面,顺便说一下,多次点击mic is on后,发现页面上方会出现的暂停的按钮也消失了,但点击后也没有错误出现了。
有一点说的不太清,我是直接让谷歌翻译直接忽略了这个网站,然后才关闭再打开模型就好了,两个版本都一样,当关闭再开启麦克风权限后点击reload website to update settings就出现了aborterror。
emm回应的问题到现在还是没法解决,说话依旧不回应,控制台日志还是和上一个回复中的的一样
我又跟成功的群友对比了一下,发现libs库里的文件系统识别不到,有没有可能是因为这个错误导致的
我们可以试试。
你把 static/index.html
里面的 <head>
元素 改成这个
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Open-LLM-VTuber</title>
<!-- pixi live2d dependencies -->
<!-- Load Cubism and PixiJS -->
<script src="https://cubism.live2d.com/sdk-web/cubismcore/live2dcubismcore.min.js"></script>
<!-- <script src="libs/live2dcubismcore.min.js"></script> -->
<script src="https://cdn.jsdelivr.net/gh/dylanNew/live2d/webgl/Live2D/lib/live2d.min.js"></script>
<!-- <script src="libs/live2d.min.js"></script> -->
<script src="https://cdn.jsdelivr.net/npm/pixi.js@7.x/dist/pixi.min.js"></script>
<!-- <script src="libs/pixi.min.js"></script> -->
<script src="https://cdn.jsdelivr.net/gh/RaSan147/pixi-live2d-display@v0.5.0-ls-7/dist/index.min.js"></script>
<!-- <script src="libs/index.min.js"></script> -->
<script src="TaskQueue.js"></script>
<!-- Voice Activation Detection -->
<script src="https://cdn.jsdelivr.net/npm/onnxruntime-web@1.14.0/dist/ort.js"></script>
<!-- <script src="libs/ort.js"></script> -->
<script src="https://cdn.jsdelivr.net/npm/@ricky0123/vad-web@0.0.7/dist/bundle.min.js"></script>
<!-- <script src="libs/bundle.min.js"></script> -->
<link rel="stylesheet" href="index.css">
</head>
另外你检查一下你的电脑管家或杀毒软件之类的,看看他们有没有莫名其妙封锁了什么requests...
似乎就是组件识别不到的问题。。。
而且我也不知道电脑管家在哪里看封锁了哪些request
啊我刚又看了下代码,发现之前复制粘贴你的那段没保存,保存后之前的报错都消失了,但是依旧无法录音,剩下关于onnxruntime的警告报错,还记得我先前说的运行成功但同样无法对话的win10水友吗?现在我的控制台界面和他一样了,现在只要修复onxx环境的这个问题就可以了。 这是我的截图 那位win10水友的
求助,电脑联想y7000p,win11系统,然后在一个求助群中运行成功的哥们是win10系统,没有任何问题,但当我运行项目完毕,允许网页麦克风接入后,不论怎么对话cmd都没有反应,防火墙关了也没用,asr语音模型是large-v3,qwen2.5模型,和那个成功的哥们一致。