我又修好了开源配音工具的一个 bug!
这篇还是聊 OmniVoice。先说结论:我找到了一个能把整个应用卡死的 bug,把它修好了,第二天这个修复就进了新版本(v0.3.15),发布说明里还带上了我的 GitHub 名字。不过走到这一步,过程可没那么顺。
西班牙语配音里突然蹦出了韩语
我把一段韩语视频往西班牙语配,结果有几句话压根没翻译,原封不动地出来了。一片西班牙语的声音中间,突然一字一句、清清楚楚地念起了韩语。
我和 Claude 一起排查了原因。这个应用为了模仿声音,会从原视频里剪出一小段一小段的音频,每段旁边还配着一条"这里说的是什么"的文字。问题就出在这儿:这两样偶尔会对不上:声音是在这里剪的,文字记的却是差半拍那个位置的内容。一旦对不上,模型就懵了,干脆把那段文字原样念出来,翻译反倒不念了。
我把原因整理成 issue 发了上去,顺手把修好的代码也用 PR 一起交了。思路很简单:每次剪出一段音频,就把这段声音重新转一遍文字,强行让声音和文字对上。
第一个 PR 没能合并,就差了几个小时
作者只看到了我的 issue,几个小时内就自己动手改了同样的内容,直接合了进去。我早就挂在那儿的 PR,他压根没看见。于是我的 PR 就这么落空了。
挺遗憾的。解决方案我都写成代码带过去了,最后却成了一个只报了 bug 的人。不过他关掉我的 PR 时留了一段评论:说我的报告在这个项目收到过的里面算是最清楚的那一档,没先检查一遍挂着的 PR 是他的失误,还为此道了歉。末了他补了一句:要是哪天发现我的代码有哪里处理得比合进去的版本更好,随时发过来,他会认真看。
关闭 PR #1005 时留下的评论
重读被采纳的代码,我发现了一个漏洞
他说他的代码跟我的功能一样。是不是真的一样,我挺好奇,况且我刚收到"发现不同就发过来"的邀请。于是我把两份代码摆在一起,一行一行地对。还真有一处不一样。
这个应用里有个专门"听写"的小工人,负责把声音转成文字。它有个老毛病:偶尔会突然没反应,怎么叫都不吭声。所以每次让它听写,都会顺手给它设个闹钟:时间到了还没回音,就不等了,跳过去接着干。可新合进去的代码里,偏偏有一处漏掉了这个闹钟。万一它正好在那儿卡住,整个应用就跟死机了一样,一动不动。我的代码里有闹钟,被采纳的那份没有。
这次一天就被合并了
这回我交了个 PR,把该有的全放了进去:问题出在哪儿、放着不管会发生什么,还有一个修之前会失败、修之后能通过的测试。
第二天,一个字都没让我改,原样被接受了。评论里说:这是个真实存在的漏洞,写法完全照着文件原有的风格来,测试写得教科书级,他自己也另外验证过。还谢了我一句:谢谢我把上次那个邀请当了真。
PR #1031 的合并评论
而且当天发布的 v0.3.15 版本说明里,写上了我的名字。
v0.3.15 更新说明里提到我 GitHub 名字的部分
我用新版本把当初出问题的那段视频重新配了一遍。这次,韩语没有再蹦出来。
原视频(韩语)
有 bug 的版本:中间直接冒出韩语
修好的版本(v0.3.15):从头到尾都是英语
这次配音是韩语转英语。这个 bug 不管往哪种语言配都会出现。
学到的事
这次修代码,让我明白了一件事:PR 被关掉不等于结束。静下心把被采纳的代码重新读一遍,就看到了大家都漏掉的地方;再带着证据、客客气气地送回去,一天之后它就进了官方版本。要是当初 PR 没合并我就撒手不管,我根本不会再去碰那些代码,这个修复也永远进不了官方版本。
一边修开源的 issue,一边学到了不少东西。这么多人在一起出力,一起把工具做得更好,现在我也是其中之一了。因为自己天天在用,哪里有 bug 一用就能感觉出来,也就更愿意动手去改。改得越多,感情也越深。真希望开源越来越热闹,有更多人加入进来。
除了我,还有在给开源项目出力的朋友吗?欢迎在评论里聊聊你的经历。
想看代码的朋友:这是合并进去的 PR #1031。前面的故事在第一篇和第二篇里。
订阅每周 AI 配音简报
每周帮你梳理 AI 配音动态和新鲜事,用你选的语言发送。绝不发垃圾邮件,随时可以退订。
评论 (0)
还没有评论,来抢个沙发吧。