브라우저 버전의 라쿠토 시스템 : 웹 브라우저의 음성 인식/독서 API를 사용하여 VRChat에서 음성 발레없이 핸즈프리 대화
12606 단어 VRChatWebSpeechAPI음성 합성음성 인식
바로 사용하고 싶은 사람에게
바로 사용하고 싶은 사람은 이쪽 h tps : // spee ch-Agen t. 어리석은 p. 코m/
이 기사에서는 무엇을하고 있는지
"웹 브라우저에서 Web Speech API를 사용하여 마이크의 목소리를 인식하고 텍스트화하고 목소리 입력이 끝나면 Web Speech API에서 텍스트를 읽는 것을 반복한다"라는 웹 앱입니다.
이 Web Speech API에 의한 읽기는 브라우저로부터의 음성 출력이므로, Windows의 설정→시스템→사운드→어플리의 음량과 디바이스의 기본 설정으로부터 브라우저의 음성 출력처를 NetDuetto(가상 라인 입출력)로 해, VRChat측에서도 Microphone의 설정을 NetDuetto로 하면 브라우저에서 읽은 음성이 VRChat에서 흐릅니다! (이어서 브라우저상에서 흐르고 있는 임의의 소리도 VRChat로 흘릴 수 있다/흐른다)
실현까지의 사이에 시도해 좌절한 다른 수법에 대해서
녹음한 음성 데이터의 음성 인식은 아무리 짧아도 1요청으로 카운트되어 버리므로 어쨌든 말할 수 없다. 스트리밍 음성 인식은 1분이라는 제한이 있다. 거기서 말하기 시작하고 나서 스트리밍 리퀘스트를 던지게 하고 싶었지만 Python2에 의한 선인의 코드를 Python3에 이식하는 곳에서 挫挫, 일정 시간마다 차분을 취한다든가?)
nmake했지만 bin의 내용이 엉망진창 빠져 버렸다(잘 된 분의 코멘트 기다리고 있습니다!!) 실시간으로 음성 스트림을 받아 피치를 펄스 음원으로 대체 로봇 음성으로 하는 최유력 후보였다 하지만...
Linux 환경이라면 SPTK의 설치는 용이한 한편, VRChat의 동작이나 가상 라인 출력 등 너무 태스크가 늘어 버린다, Ubuntu on WSL은 Windows측과의 음성 파일의 교환이 귀찮아, Cygwin도 그다지 부드럽지 않을 것 같다
예 아바타도 만들고 싶지만 거기까지 할 수 없다고 생각하면 시도합니다.
특징 량 검출을 걸면 엉망이 되어 듣는 커녕 이야기가 아니게 되었다
(내 발성에 문제가 있는지 녹음 방법에 문제가 있는지)
본가 WORLD를 컴파일하고 시험하는 것은 또 마음이 향하면 시험해 보겠습니다…
음성인식·판독 페이지 만들기
【입문 샘플】Web Speech API를 사용해 브라우저와 음성으로 교환 가 대단히 참고가 되었습니다.
그 대부분을 상속하면서 콘솔의 로그를 출력하지 않도록 변경하고 설정을 추가했습니다. 또한 API 사양 변경에 대응하기 위해 버튼 클릭으로 speak()시켜 음성 인식을 시작하도록 했습니다.
htps : // 기주 b. 코 m / 나 피에 r JP / 시 mp ぇ S 페에 찬 t 에 최소 구성의 것을 ready-to-deploy인 상태로 두고 있습니다.
htps : // spee ch-Gen t. 어리석은 p. 코m/ 의 내용은 htps : // 기주 b. 코 m / 나 피에 r JP / S 페에 찬 t 에.
index.html
<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="UTF-8">
<title>Speech-to-Talkback</title>
<script>
let talkbackEnabled = false;
function talkback() {
// 利用するWebAPIをインスタンス化する
window.SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recog = new SpeechRecognition();
const synth = new SpeechSynthesisUtterance();
// 設定項目
const pitchSetting = 1.0; // ピッチ 0(min) - 2(max), default 1.0
const volumeSetting = 1.0; // 音量 0(min) - 1(max), default 1.0
const rateSetting = 1.0; // 話す速さ 0.1(min) - 10(max), default 1.0
// 設定項目終わり
const defaultInput = "";
let input = defaultInput;
recog.lang = "ja-JP";
synth.lang = "ja-JP";
synth.pitch = pitchSetting;
synth.volume = volumeSetting;
synth.rate = rateSetting;
// 聞き取り中に、マイクからの入力があったときのイベント
recog.addEventListener("result", e => {
// 入力結果をテキストで取得し、それをグローバル変数に格納し、聞き取りを終了する
input = e.results[0][0].transcript;
recog.stop();
});
// 聞き取りを終了したときのイベント
recog.addEventListener("end", () => {
// 入力結果が初期状態の場合は聞き取りが自動終了したと判断し、聞き取りを再開する
if (input === defaultInput) {
recog.start();
}
// 入力結果に値があればそれを読み上げ、入力結果を初期化する
else {
synth.text = input;
document.querySelector("#recognizedText").textContent = input;
input = defaultInput;
speechSynthesis.speak(synth);
}
});
// 読み上げを終了したときのイベント
synth.addEventListener("end", () => {
// 聞き取りを再開する
recog.start();
});
// 聞き取りを開始する
recog.start();
}
function initSpeak() {
let initSynth = new SpeechSynthesisUtterance("自動読み上げ 有効");
initSynth.lang = "ja-JP";
speechSynthesis.speak(initSynth);
talkback();
}
</script>
</head>
<body>
認識内容:<div id="recognizedText"></div><br>
<button onclick="initSpeak();">最初に一度押してください</button><br>
(APIの仕様変更によりユーザーがボタンを押して許可することが必要になりました。「自動読み上げ有効」と読み上げられます)<br>
</body>
</html>
실현할 수 있었던 것, 할 수 없었던 것
화면을 전환하지 않고 항상 마이크에서의 음성 입력을 기다려 주고, 게다가 무료이고 고정밀도로 인식해 주는 것이 실현될 수 있었다
일단 Web 어플리를 deploy 하면, 음성 출력처와 마이크마저 준비하면 다른 Win10기로 이행이 용이(웹사이트이므로)
말을 끝내지 않으면 소리내어 읽기 시작하지 않기 때문에, 몇 초의 타임 래그는 여전히 남는다. 시간 지연을 짧게 하고 오인식을 줄이기 위해서도 말을 끊으면서 말할 필요가 있다
참고 사이트
【입문 샘플】Web Speech API를 사용해 브라우저와 음성으로 교환
[HTML5] Web Speech API 시작
Reference
이 문제에 관하여(브라우저 버전의 라쿠토 시스템 : 웹 브라우저의 음성 인식/독서 API를 사용하여 VRChat에서 음성 발레없이 핸즈프리 대화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Napier-JP/items/a22dfabbca8bc37eac34텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)