[인랑게임에 딱] Discord의 통화전송봇을 discord.js로 만들고 싶어💭
5204 단어 discord.js디스코드
Among Us
에 빠져 있습니다. 유행하고 있네요.온라인으로 인랑 같은 게임을 할 때, Discord에서 음성 채팅을 하면서 하는 일이 많습니다만, 「추방」이나 「무잔인 모습으로 발견된」 후에는 회의에 참가할 수 없는 특성이 붙는 것입니다 .
탈락했을 때는 어느 쪽인가의 선택을 강요당하게 됩니다.
둘 다 채우고 싶다는 욕심 정신의 전, 'Discord의 음성 채팅이 다른 채널로 전송할 수 있으면 모습을 보면서 더 즐길 수 있는 것은 아닐까? ? 』라고 생각하고 작성하기로 했습니다.
※ 후술합니다만, 문제로서 AudioStream의 합성이 되어 있지 않기 때문에 복수인으로 동시에 말했을 때에 음성이 중단되는 일이 있어, 해결책 모집중입니다.
완성 이미지
이 이미지를 바탕으로 개발하겠습니다.
개발 환경
12.18.4
12.3.1
구현
전체는 이렇게 되었습니다. GitHub
채널 선택 등으로 커져 버렸으므로, 전송의 코어의 부분만 여기에서 소개하겠습니다.
전송원측의 클라이언트로부터 음성을 취득해, 그대로 전송처의 클라이언트로부터 송신하고 있습니다.
module/core.js// 前略
// Streamにデータを流して初期化しないと正常に動作しないようです
this.connection.from.play(new Silence(), { type: "opus" })
this.connection.to.play(new Silence(), { type: "opus" })
this.connection.from.on("speaking", (user, speaking) => {
// 転送元の誰かが発話した際のみ処理を行う
if (speaking.bitfield !== 1) return
const stream = this.connection.from.receiver.createStream(user.id)
// TODO: ここで他のStreamと合成をしたい
this.connection.to.play(stream, { type: "opus" })
})
// 後略
요약
탈락 후도 모습을 보면서 이야기를 할 수 있는 음성 채팅을 준비할 수 있었습니다.
Discord.js는 처음으로 Bot의 디렉토리 구성 등이 아직 갖추어지지 않았기 때문에 앞으로 조정을 실시합니다.
또, 현상의 문제점으로서 AudioStream가 합성할 수 없고 복수인이 발화했을 때는 1프레임을 서로 빼앗아, 끊어져 끊어져 버린다고 하는 것이 있습니다.
이쪽을 해결하지 않는 것에는 그다지 쓰기가 좋다고 말할 수 없기 때문에, 어떻게든 해결해 나가고 싶다고 생각하고 있습니다.
// 前略
// Streamにデータを流して初期化しないと正常に動作しないようです
this.connection.from.play(new Silence(), { type: "opus" })
this.connection.to.play(new Silence(), { type: "opus" })
this.connection.from.on("speaking", (user, speaking) => {
// 転送元の誰かが発話した際のみ処理を行う
if (speaking.bitfield !== 1) return
const stream = this.connection.from.receiver.createStream(user.id)
// TODO: ここで他のStreamと合成をしたい
this.connection.to.play(stream, { type: "opus" })
})
// 後略
탈락 후도 모습을 보면서 이야기를 할 수 있는 음성 채팅을 준비할 수 있었습니다.
Discord.js는 처음으로 Bot의 디렉토리 구성 등이 아직 갖추어지지 않았기 때문에 앞으로 조정을 실시합니다.
또, 현상의 문제점으로서 AudioStream가 합성할 수 없고 복수인이 발화했을 때는 1프레임을 서로 빼앗아, 끊어져 끊어져 버린다고 하는 것이 있습니다.
이쪽을 해결하지 않는 것에는 그다지 쓰기가 좋다고 말할 수 없기 때문에, 어떻게든 해결해 나가고 싶다고 생각하고 있습니다.
marge-stream 을 사용한 방법에서는 음성 합성을 하는 것은 아니므로 음성이 차례로 풀려나는 것만으로 해결에는 이르지 않았습니다.
WebAudioAPI를 사용한 방법 도 생각했습니다만, 브라우저를 만지고 있는 것은 아니기 때문에 받아들이기가 어렵다고 생각하고 있습니다.
해결책 생각해 온 분 계시시면 코멘트나 풀 요청 받을 수 있으면 대단히 도움이 됩니다🙏
여러분도 Discord Bot에서 좋은 게임 라이프를!
Reference
이 문제에 관하여([인랑게임에 딱] Discord의 통화전송봇을 discord.js로 만들고 싶어💭), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/suzukey/items/87e075f43da2a714fe71텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)