엔트리와 함께하는 인공지능 교실 > Chapter 12. 인공지능 모델 기반 융합교육

[Session 01] 함께해요! 발성연습(음성 분류)

 함께해요! 발성연습(음성 분류)

음악시간에 노래를 부르는 날이면 본격적으로 노래를 부르기 전에 발성연습을 통해 목을 가볍게 풀어준다. 발성연습은 대부분 선생님이 피아노로 연주해주시는 음이나 컴퓨터에서 나오는 기본 음을 듣고 따라서 소리내어보는 방식으로 진행한다. 하지만 발성연습을 하다 보면 종종 다음과 같은 의문이 들 때가 있다. ‘과연 내가 듣고 따라서 내는 음이 정확한가?’, ‘보다 정확하게 음을 소리내고 확인할 수 있는 방법은 없을까?’ 인공지능 음성 인식 모델을 만들어 내가 소리 내는 음의 정확도를 확인해보고 정확한 소리를 낼 수 있는 발성연습 프로그램을 만들어보고자 한다.


학습 목표 

인공지능 음성 인식 모델을 적용하여 음악시간에 사용할 수 있는 정확한 발성연습 프로그램을 구현할 수 있다.

학습 준비물

음성 인식이 가능한 PC 또는 노트북

데이터 수집 아이디어


▲  #음악, #, #음성 인식, #지도학습, #분류 학습, #함께해요! 발성연습



 1-1 인공지능 모델 학습하기

주제에 알맞은 인공지능 모델을 만들기 위해 제일 중요한 것은 좋은 데이터를 수집하는 것이다. ‘함께해요! 발성연습’은 인공지능 음석 인식 모델을 기반으로 하기에 좋은 음성 데이터를 수집하는 것이 우선되어야 한다.

음성 데이터는 사용자가 직접 녹음하거나 기존에 사운드 자료를 통해 만들어진 별도의 mp3 데이터를 사용 할 수 있다. 인공지능 모델은 아무것도 없는 백지 상태에서 사용자가 제공한 음성 데이터만을 바탕으로 인공지능 학습을 한다. 따라서 사용자가 어떤 데이터를 제공하느냐에 따라 인공지능 모델의 정확도가 달라지며 인공지능의 학습이 용이할 수 있게 명확하게 구분되는 데이터를 선별하여 제공하는 것이 좋다.

본 주제에서는 엔트리 인공지능 서버처리의 부하를 줄이고자 발성연습의 음계를 ‘도’에서 ‘높은 도’까지 총 8음으로 제한한다. 각 음계에 해당하는 데이터 샘플은 리코더, 피아노, 바이올린 등의 다양한 악기에서 또는 정확한 음계를 소리낼 수 있는 사람의 목소리를 통해 추출할 수 있다. 본 주제는 사용자가 내는 소리를 인식하고 음의 정확도를 제공하는 것을 목적으로 하기에 데이터 샘플의 정확도가 중요하다. 따라서 튜너 등을 활용하여 사전에 추출한 데이터 샘플의 음계가 정확한지 확인하면 더 정확한 인공지능 모델을 만들 수 있다.

 

1) 먼저, 엔트리 프로그램에서 를 클릭하여 다음과 같이 ‘분류:음성’ 학습모델을 선택한 후 를 클릭하여 음성 모델 학습하기로 들어간다. 


 

2) 다음으로 분류: 음성 모델 학습하기 화면에서 음성 모델의 이름을 설정한다. 교재에서는 ‘함께해요! 발성연습’으로 설정하였다.


3) 이제 음성 모델 학습을 위한 분류 범주를 설정하고 데이터를 입력할 차례이다. ‘함께해요! 발성연습’에서는 총 8개의 클래스로 데이터를 분류한다. 버튼을 눌러 8개의 클래스를 생성하고 ‘도’, ‘레’, ‘미’, ‘파’, ‘솔’, ‘라’, ‘시’, ‘높은 도’의 순서대로 각각의 클래스 이름을 설정한다. 각각의 클래스에 학습할 음성 데이터를 입력해야 하는데 이 때, 클래스 당 5개 이상의 음성 데이터를 입력해야 인공지능 모델 학습을 진행할 수 있다. 음성 데이터의 입력 길이는 3초이며 데이터는 사전에 파일로 저장된 음성 데이터를 업로드하여 입력하거나 바로 녹음하여 입력한다.


 

 

4) 각각의 클래스에 데이터 입력이 완료되면 학습단계에서  버튼을 클릭하여 인공지능 음성 분류가 가능하도록 학습모델을 제작한다. 엔트리 서버의 환경에 따라 모델 학습이 완료되기까지 시간이 걸릴 수 있으며 인터넷 연결 환경이 원활한지 확인할 필요가 있다.  


5) 학습이 완료되면 업로드 또는 녹음의 방식을 통해 학습 결과를 확인할 수 있다. 학습 결과는 분류된 클래스별 정확도를 아래와 같이 퍼센트로 나타내어 보여준다.

















 

6) 엔트리 블록 탭의 에 다음의 블록들이 생성되었는지 확인한다.



 1-2 엔트리 코딩하기

‘함께해요! 발성연습’ 프로그램은 피아노 건반을 눌러 음을 들어보는 부분과 발성연습을 해보는 두 부분으로 나누어 볼 수 있다. 엔트리 프로그램이 시작되면 안내멘트와 함께 피아노 건반을 하나씩 눌러 각 음의 정확한 소리를 들어볼 수 있도록 한다. 그 후 나팔 그림의 버튼을 등장시켜 버튼을 눌렀을 때 직접 발성연습을 할 수 있게 한다. 그리고 발성연습을 통해 내가 내는 소리의 정확도를 확인해본다.


 

1) 우선, 엔트리 오브젝트를 다음과 같이 불러온다. 에서 , 에서 , 에서 을 배치한다. 


 

2) 피아노 건반은 아래와 같이 오브젝트를 하나씩 불러와 생성한다.


3) 생성한 피아노 건반은 피아노 배경에 맞게 위치를 설정한다.



피아노 배경 오브젝트 구성하기

피아노 배경 오브젝트에서 엔트리 프로그램이 실행되었을 때 실행할 부분을 구성해 본다.


1)  을 클릭하여  블록을 가져온다.


2) 를 클릭하여  블록을 가져와 아래와 같이 ‘건반을 눌러 피아노 소리를 들어보세요’ 문구과 2초 동안 말하기로 변경 후 결합한다. 


 

3) 말하고 잠시 기다릴 수 있도록 에서 블록을 추가한다.

  

  


4) 나팔 그림을 누르고 발성연습을 시작할 수 있도록 말히기 블록을 통해 안내한다.


 

 

 

5) ‘나팔그림을 누르고 발성연습을 시작합니다’ 안내멘트 이후 나팔그림을 등장시키기 위해 를 사용한다. 시작하기 버튼을 눌렀을 때, 나팔그림의 발성연습이 바로 실행되는 경우, 피아노 소리를 들어보는 안내 멘트와 동시에 진행되며 프로그램이 원활하게 진행되지 않을 수 있다. 따라서 발성연습을 시작한다는 안내 멘트가 나온 뒤에 나팔 그림이 등장할 수 있도록 배치 한다. 버튼을 클릭하고 아래 화면에서 를 클릭한다. 





 6)  클릭 후 아래와 같이 ‘발성연습 시작’이라고 신호 이름을 설정한다.


 


 

7) 피아노 배경 오브젝트에서 신호를 보내면 나팔 오브젝트가 등장해 다음 작업을 실행하도록 에서  블록을 가져와 결합한다. 엔트리 프로그램이 시작되면 기존에 안내멘트로 말하던 내용을 모두 지우고 시작할 수 있게 시작하기 버튼 블록 아래에 의 를 추가한다.


 

 



 피아노건반 오브젝트 구성하기

피아노 건반을 누르면 해당하는 건반의 피아노 소리가 날 수 있도록 설정한다.

피아노 건반 소리는 엔트리 프로그램에 기본데이터로 탑재되어 있다. 각 건반의 오브젝트를 눌렀을 때 해당 데이터 음이 재생될 수 있도록 만들어본다.


1) 해당 건반 모양의 오브젝트를 클릭하고 에서 버튼을 누른다.  카테코리 중 를 누르고 버튼을 누르면 다양한 음계의 피아노 음을 찾을 수 있다.

2) 원하는 음을 누르고 추가한다.


 

3) 따로 직접 녹음한 피아노 소리가 있다면 를 통해 소리를 추가할 수도 있다.

4) 에서  블록을 가져온다. 에서  에서 블록을 가져와 함께 결합한다. ‘도’에서 ‘높은 도’까지 각각의 건반 오브젝트와 8개 음을 아래와 같이 연결한다.


 


나팔 오브젝트 구성하기

나팔 오브젝트는 발성연습을 시작할 때 클릭한다. 나팔 모양 그림을 클릭하고 음성 인식 기능을 통해 인공지능 학습 모델이 작동되게 만들어본다.

 

1) 시작하기 버튼을 눌렀을 때, 피아노 음계 버튼을 먼저 누르고 듣기 위해 나팔 오브젝트는 보이지 않게 숨겨둔다. 에서 록을 가져온다.   블록을 가져와 결합한다.


 

 

2) 피아노 배경 오브젝트에서 ‘발성연습 시작’ 신호를 보내면, 겨두었던 나팔 그림을 나타나게 하고 발성연습을 시작한다. 에서  블록을 가져온다.   블록을 가져와 결합한다.

 

 

3) 나팔 오브젝트를 클릭했을 때 바로 음성인식 기능이 실행되도록 한다. 음성 인식을 통해 음성데이터를 업로드 또는 녹음하여 수집 후, 이전에 생성한 인공지능 학습모델에 따라 8가지 클래스 중 해당하는 곳에 분류되도록 한다. 에서  블록을 가져온다. 

에서 와  블록을 가져와 결합한다.


 

4) 입력한 음성데이터를 인공지능 학습모델이 확인 후, 몇 퍼센트의 정확도로 어떤 음인지 말해보도록 설정해본다. 음성데이터가 ‘도’음인 경우, ‘몇 퍼센트로 도입니다’라고 출력하고자 한다. 에서 블록을, 에서 블록을, 에서 블록을, 가져와 결합한다.


음의 정확도는 의 로 나타낼 수 있으며 의 블록을 이용하여 말하고자 하는 내용을 결합해서 다음과 같이 표현한다.


 

이때, 는 %가 아닌 0.95482 등의 1 이하의 소수로 표현되기도 하며 음성 데이터에 따라 소수점 이하 숫자의 길이는 다양하게 나타난다. 이를 자연수의 % 값으로 변환하여 길이를 짧게 나타내본다. 의   블록을 가져오고 아래와 같이 결합한다.

‘도’음의 결과를 나타내기 위해 다음과 같이 프로그래밍 한다.


5) 나머지 7개 음의 결과도 같은 방식으로 프로그래밍하며 아래와 같이 나타낸다.


 

 

6) 엔트리 프로그램에서 나팔 오브젝트를 누르면 아래와 같은 화면이 뜬다.


이어서 데이터를 입력하는 창이 다음과 같이 뜨게 되는데 또는 중 선택 하여 음성데이터를 입력한다. 음성 데이터 입력 후에는 플레이 버튼을 눌러 음성 데이터를 재생해보고 버튼을 클릭하면 엔트리 프로그램에 음성 데이터가 적용된다.


음성 데이터 적용 후에는 다음과 같이 화면에 음성 데이터에 대한 인공지능 모델의 학습 결과값이 나타난다. 이후 발성연습을 계속 하고 싶다면 나팔 그림을 눌러 다시 음성 데이터를 입력할 수 있다. 음성 데이터를 다시 입력하여 발성 연습의 정확도를 높일 수 있다.


이후 음성데이터 결과값에 따라 해당하는 음을 피아노 건반에 표시하고 싶거나, 나팔을 누지 않아도 지속적인 학습을 할 수 있게 프로그래밍을 하며 아쉬웠던 점을 찾아 고쳐볼 수 있다.