버미육

버미육 도전일기... - 10부

K66Google 2022. 11. 23. 15:45

벌써 버미육 도전일기가 10부까지 왔단 말인가? 시간이 참 빠르다...

아무래도 10부는 좀 더 알찬 내용으로 연재를 해야 될 것 같다.

 

방종곡(쵸비츠 - 인형공주) 영상의 화질을 1080p급으로 향상시켰다.

가사 자막 등은 과거 애니원TV 방영때의 스타일과 최대한 비슷하게 맞추었다.

11월 18일 방송부터 적용하였으며, 영상은 내 유튜브 채널에도 업로드되어 있다.

 

 

자, 이쯤에서 도전일기도 10부를 맞이했으니 몇 가지 의문사항을 탐구해보고자 한다.

첫번째 의문은 '나와 같은 형태로 방송을 하는 자가 일본에도 있을까?' 라는 내용이다.

버미육이든, 버츄얼 유튜버든 결국 다 일본에서 시작된 거 아닌가?

 

일본의 유명한 보이스웨어 프로그램... 생각나는 건 유즈키 유카리의 'VOICEROID' 밖에 없었다.

그래서 유튜브와 구글에 'バ美肉 voiceroid' 로 검색해보았더니 의외로 흥미로운 결과를 얻을 수 있었다.

 

우선 유튜브 검색 결과부터다.

검색 결과 중에 '스칼렛 넥서스' 라는 게임 실황 영상이 있어서 보았더니 VOICEROID로 목소리 출력을 하는 버미육 유튜버가 있었다. (링크)

현재는 CeVIO라는 다른 TTS 프로그램으로 목소리를 내고 있는 것 같다. 다만 음성 인식이 완전하지는 않은지 몇몇 다시보기 영상에 음성 인식 정확도의 문제로 오독하는 경우가 많으니 주의하라는 설명이 있었다.

이 유튜버는 이 글을 쓰고 있는 현재(2022년 11월)도 꾸준히 게임 스트리밍을 하고 있다. 이러한 형태로 최근까지 게임 스트리밍을 하는 유튜버는 그 외에도 더 있는 것 같다. (ゆかりねっと 으로 검색한 뒤 '정렬 기준 - 업로드 날짜' 로 지정하면 확인할 수 있다.)

 

 

다음은 구글 검색 결과다.

먼저 '보이스로이드2로 버미육을 해보았다.' 라는 글을 읽어보았다. (링크)

다만 그 글은 나처럼 실시간 스트리밍에 쓰는 것이 아닌, 프로그램에서 미리 대사를 입력해서 MP3 파일화 한 후에 캐릭터와 입모양을 맞추는 방식이었다.

 

그 다음으로 본 글은 '일반 아저씨가 버미육이 될 때까지의 정리' 라는 글이었다. (링크)

여기서 가장 인상 깊은 내용은 바로 '유카리 넷' 이라는 프로그램을 설명하는 구절이었다.

유카리 넷마이크로 음성을 인식해서 텍스트화 시킨 뒤, 그걸 VOICEROID에 전달시켜주는 프로그램이라고 한다. 작동 영상은 니코니코동화에서 볼 수 있다. (링크)

위에서 설명한 유튜버도 유카리넷으로 음성 인식을 하는 것 같다.

 

 

Voidol 이라는 프로그램도 조사 도중 알게 되었다.

마이크 음성을 유즈키 유카리 등의 보이스로이드 톤으로 바꿔주는 프로그램인 것 같다.

다만 한국어는 지원을 안 해서 발음이 뭉개져서 나온다는 후기가 있었다. (링크)

그 외에는 VOICEVOX 라는 TTS 엔진이 있다고 한다.

 

 

아무튼, 나도 유카리넷처럼 그냥 컴퓨터 상에서 음성인식을 해주면 어떨까하고 'C#으로 만드는 음성인식 프로그램' 같은 코드도 참고해서 짜봤는데, 도저히 음성 인식 기능이 설치가 안돼서 포기했다.

MSSpeech_SR_ko-KR_TELE이나 MSSpeech_TTS_ko-KR_Heami나 설치하려고 더블 클릭하면 Gathering required information... 창에서 그냥 꺼져버린다. 윈도우10이라서 그런가? UWP 프로그램으로 구성하면 (링크) 될 지도 모르겠는데... 머리 아프니 그냥 이쯤에서 끝내자.

 

 

어쩔 수 없이, 지난 도전일기 9부 마지막에서 언급했던 Tampermonkey 스크립트를 반자동화시켜주는 기능을 클립보드 뷰어에 추가시키기로 하였다.

SpeechTexter가 열린 브라우저· 클로바더빙이 열린 브라우저· 단축키 등을 config.ini에서 지정한 뒤, 프로그램 실행 후 단축키를 누르면 바로 SpeechTexter의 브라우저 창이 활성화된 후 마이크 입력을 받게 한다. 그 후 음성 인식된 텍스트가 클립보드로 들어오면, 클로바더빙 브라우저를 활성화시켜서 대사 창에 인식 텍스트를 집어넣게 한다.

이런 식으로 Tampermonkey 스크립트를 보완해주는 기능인데, 이 기능은 별로 사용할 생각이 없다. 그저 시간 투자한게 아까워서 미봉책으로 추가한 것 뿐이다.

 

어쩌다가 얘기가 여기까지 왔는지 모르겠는데, 아무튼 첫번째 의문사항에 대한 답은 '있다' 라는 것이다.

 

 

여기서 잠시 방송 관련 얘기로 돌아가겠다. 11월 19일.

내가 ublock origin으로 안 보이게 막아놓은 팔로워 수가 보이기 시작했다. 트위치 쪽이 변수명을 바꾼 모양이다.

그래서 다시 고쳤다. 팔로워 수는 빨리 잊어버리자...

 

 

역시 같은 날인 11월 19일. 새로운 채팅봇인 OWN3D와 포사봇(Fossabot)을 영입했다. 다만 OWN3D는 커맨드 기능이 작동하지 않고 타이머 기능만 작동하였다.

그래도 봇이 2명 더 증가하니까, 오랜만에 채팅창이 시끌벅적해졌다.

다만, 10분 단위로 타이머를 맞춰서 그런지 매 시간 10분 대역일때만 (10분, 20분, 30분...) 그렇고 나머지 시간대엔 여전히 조용하기만 하다.

그렇다고 5분 단위로 말하게 하면 너무 똑같은 말이 반복되서 금방 지루해진다. 그럼 어떻게 하면 좋을까?

 

여기서 두번째 의문'채팅봇은 어떻게 하면 만들 수 있을까?' 를 탐구해보기로 한다.

시행 착오 과정은 자세히 설명하면 글이 너무 길어지므로 최대한 축약해서 서술하도록 한다.

 

본래는 C#, VB.Net의 TwitchLib이라는 기능을 통해 제작하려고 했으나 무슨 넷프레임워크 버전을 트집잡길래 그냥 포기했다.

그 후 정보 검색 도중 트게더의 어떤 게시물 (링크) 을 보았는데, Glitch라는 사이트에 Node-JS로 코드를 짜서 돌리는 방식이었다. 이걸 참조해서 만들어보기로 한다.

게시물의 twitch-chatbot 페이지로 들어가서 (링크) 먼저 Glitch 로고를 누르고 홈페이지로 간 뒤 회원가입을 한다.

회원가입은 Github나 Google 아이디 연동으로 가입할 수 있다. 그런 다음 다시 twitch-chatbot 페이지로 돌아온 뒤 Remix to Edit을 누른다.

 

 

그러면 얼마 후에 버튼이 사라지는데, 오른쪽 상단의 프로필 사진을 클릭하고 Your Projects에 간다.

 

 

그러면 아까의 채팅봇 소스가 들어와있다. 나는 시행착오를 거쳐서 중복된 게 몇 가지 더 있다.

Glitch에서는 Remix를 눌러버리면 복사가 되는데, 이건 삭제할 수 없는 것 같다. 따라서 신중해야 한다.

 

 

어쨌든 클릭해서 들어가면 다시 아까 본 화면들이 보이는데, 왼쪽 상단의 프로젝트 이름을 클릭하면 옵션에서 이 프로젝트의 이름을 변경할 수 있다.

채팅봇을 가동하려면 Files의 .env에다 3가지 값을 적어야 하는데... BOT_USERNAME은 채팅봇 계정의 아이디. OAUTH_TOKEN은 채팅봇 계정의 토큰, CHANNEL_NAME은 채팅봇이 들어가서 채팅을 칠 계정. 즉 방송 계정의 아이디를 말한다.

 

 

먼저 채팅봇으로 쓸 트위치 부계정을 만들기로 한다.

트게더 게시물에는 CLIENT_ID를 얻기 위해 트위치 개발자 페이지에 가서 뭘 등록하라는데 안 해도 된다.

바로 OAuth 발급 페이지 (링크) 로 가서 토큰을 발급받는다. 여기 토큰은 절대! 다른 사람에게 공개해서는 안 된다.

 

 

이제 채팅봇 계정의 아이디와 토큰, 방송 계정 아이디를 등록한다.

등록하는 순간 채팅봇 계정이 방송 계정 채팅창에 들어오게 된다.

 

 

기본으로 들어있는 !d20 이라는 명령어를 사용하니까 바로 인식해서 대답을 해 주었다.

 

 

이렇게 else if 문으로 !d20 아래에 인식할 명령어를 넣어주고 대답하게도 해보았다.

자, 그렇다면 타이머 기능은 어떻게 도입하면 될까? ...온갖 삽질을 거친 끝에 드디어 알아낼 수 있었다.

 

 

먼저 onConnectedHandler 안에다 타이머 함수를 최초 1회 실행할 수 있게 한다.

그리고 코드 위쪽에 (const client... 위에)

 

var channel_name = process.env.CHANNEL_NAME; 

 

이라고 삽입한다. 그래야 타이머 함수에 써먹는다.

이후 타이머 함수에서 '현재 시간'을 가져오고 거기서 '분'을 추출하게 한다.

그리고 특정 '분' 이 되면 채팅을 하도록 if문을 구성한다. 채팅 출력 명령어는

 

client.say(채팅 칠 채널명, 채팅 내용);

 

이런 식으로 한다.

첫번째 인수에 무슨 값을 넣어줘야 하는 지 몰라서 한참을 헤매다 인터넷의 어느 코드를 보고 겨우 힌트를 얻었다... (링크)

나는 위에서 선언한 channel_name을 첫번째 인수로 지정하였다.

 

 

타이머 함수의 마지막에는 setTimeout을 넣어줘야 한다. 첫번째 인수는 자기 함수명을, 두번째 인수는 60000이다.

60000은 60초를 의미한다. (밀리초 방식)

이걸 30000 (30초) 로 줄여버리면 특정 '분' 이 됐을때 채팅봇이 두 번 채팅을 치게 되니까 꼭 60000으로 해야 한다.

 

이렇게 하면 채팅봇이 방송 계정 채팅창에 접속 후 타이머 함수를 1회 실시한다.

1회 실시 이후 타이머 함수는 60초에 한 번씩 현재 시간을 가져와서 '분' 을 확인하고, 특정 '분' 이라면 채팅을 친다.

 

 

자, 이렇게 하면 성공...이라고 생각했는데 마지막 난관이 남아있었다.

Glitch 창을 꺼버리면 채팅 봇이 잠들어버리는 것이다. 즉, 방송 중에는 Glitch의 채팅 봇 프로젝트를 켜놓아야 채팅 봇이 작동을 하게 된다. (또는 프로젝트명.glitch.me 로 접속하고 있으면 작동된다.)

잠들지 않도록 트게더 게시물에 있는 Uptimerobot 이라는 사이트에 가입했는데... 자꾸 URL이 잘못됐다면서 등록을 못 하게 막는다. 젠장...

 

 

그래서 이번에는 컴퓨터에서 직접 채팅봇을 돌리는 방법을 물색했다.

nodejs-portable (링크) 이라는 프로그램을 도입한 뒤 Glitch의 파일들을 컴퓨터에 베껴왔는데, 처음에는 자꾸 트위치 서버가 응답이 없다는 소리만 하면서 실행이 되지 않았다.

그렇게 삽질만 하다가 관련 인터넷 페이지(링크) 를 보고 약간의 코드를 수정한 끝에...

 

 

겨우 컴퓨터에서 채팅봇을 구동시키는 데 성공했다.

하지만 이러면 작업 표시줄을 잡아먹어서 방송 중에는 혼란스럽기만 하다. 안 그래도 켜야 하는 프로그램이 많은데...

또한 배치파일을 통해 자동 실행이 되게 하는 식으로는 안되는 것 같다. 도스창 켠 다음에 또 명령어를 쳐야 한다.

차라리 그냥 방송 시작때 Glitch 탭을 띄워놓고 하는 게 더 편할 것 같다. 이건 그냥 시도에 의의를 두겠다.

앞으로는 방송 전에 (프로젝트명).glitch.me 로 접속해놓도록 하자.

 

아무튼 이런 식으로 두번째 의문도 해결되었다.

 

 

지난 10월 중순에 있었던 카카오 서버의 화재 여파때문에 그런지, 버미육 도전일기의 URL 대부분이 구글에 색인되지 않고 있었다.
그래서 구글 서치콘솔에 가보니... 나를 인증 안 된 사용자 취급하고 있었다. 이상해서 블로그 HTML을 확인해보니 소유주임을 확인하는 메타 태그(google-site-verification) 가 보이지 않았다. 화재 복구 중에 삭제된 건가?
아무튼 다시 메타 태그를 넣어주고 검색 색인을 요청했다.

 

이렇게 시간이 흘러서 다시 휴방일이 되었다.

11월 1일부터 11월 22일까지의 생방송 시청 수 통계는 다음과 같았다.

 

일차 데뷔일차 프로그램명 생방송 시청수
2022-11-01 화 22일차 역사의 시대2 8
2022-11-02 수 23일차 휴방  
2022-11-03 목 24일차 원신 7
2022-11-04 금 25일차 유로트럭2 37
2022-11-05 토 26일차 삼국지13 13
2022-11-06 일 27일차 휴방  
2022-11-07 월 28일차 시티즈 스카이라인 14
2022-11-08 화 29일차 심즈3 14
2022-11-09 수 30일차 역사의 시대2 12
2022-11-10 목 31일차 원신 7
2022-11-11 금 32일차 유로트럭2 26
2022-11-12 토 33일차 삼국지13 9
2022-11-13 일 34일차 시티즈 스카이라인 9
2022-11-14 월 35일차 심즈3 11
2022-11-15 화 36일차 역사의 시대2 4
2022-11-16 수 37일차 휴방  
2022-11-17 목 38일차 원신 11
2022-11-18 금 39일차 유로트럭2 16
2022-11-19 토 40일차 삼국지13 16
2022-11-20 일 41일차 시티즈 스카이라인 24
2022-11-21 월 42일차 심즈3 18
2022-11-22 화 43일차 역사의 시대2 14

 

11월 17일 이후는 유로트럭2를 제외한 모든 프로그램의 생방송 시청수가 올랐다. 유로트럭2는 큰 폭으로 감소하면서 다른 프로그램들과 비슷한 수준이 되었다.

시청수 증가 원인으로 채팅 봇들이 본격적으로 활동을 시작해서 그런 거 아닌가라고 생각했지만, 채팅 봇은 시청자 수에 포함되지 않으므로 생방송 시청 수에 영향을 주지 않는 것 같다. (링크)

그럼 무엇 때문일까? 수능이 끝나서? 잘 모르겠다...

 

아무튼 방송 시작하면서 참 여러가지 기술들을 배워가고 있다.

이런 기술들이 나중에 살면서 도움이 되는 날이 올까? 아마 그럴 일은 없겠지...

 

 

- 11부에서 계속

 

'버미육' 카테고리의 다른 글

버미육 도전일기... - 12부  (0) 2022.12.07
버미육 도전일기... - 11부  (0) 2022.11.30
버미육 도전일기... - 9부  (0) 2022.11.16
버미육 도전일기... - 8부  (0) 2022.11.11
버미육 도전일기... - 7부  (0) 2022.11.02