• 검색 결과가 없습니다.

STEAM R&E 연구결과보고서

N/A
N/A
Protected

Academic year: 2022

Share "STEAM R&E 연구결과보고서"

Copied!
10
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

STEAM R&E 연구결과보고서

(Deep Learning을 활용한 악보제작 어플 상용화 연구)

2016. 11. 30.

경남과학고등학교

< 연구 결과요약 >

과 제 명 Deep Learning기법을 활용한 악보 생성 프로그램 개발

연구목표

합주 동아리 활동을 하면서 우리가 악기를 연주하거나 노래를 부르면 바로 악보가 제작되는 프로그램이 있으면 정말 편리하겠다는 생각이 들었다. 선행 연구된 프로그램들을 검색해 보았는데 우리가 필요로 하는 프로그램은 없었 다. 그래서 악기음과 노래 소리 등을 악보로 즉시 구현할 수 있는 악보제작 프로그램을 직접 개발해보고 싶었다. 그리고 음악관련 학습앱 또는 게임앱 으로 발전시켜 학교나 가정에서 학생들이 더 효과적으로 즐겁게 음악공부를 할 수 있도록 하고 건전한 놀이문화 형성에도 도움이 되고 싶었다.

연구내용

가. 악보제작프로그램 완성

프로그램 인터페이스 및 알고리즘 구상, 음원 파일의 정보 추출 및 분석, 실 제 프로그램 제작 순으로 진행하였다. 첫째, 프로그램 인터페이스 및 알고리 즘 구상: 프로그램을 시작했을 때 나타나는 메뉴 화면과 악보를 제작해 주 고 악보를 나타내는 악보제작 화면으로 나누었다. 둘째, 음원 파일의 정보 추출 및 분석: 음원 파일을 가져오고 난 뒤에는 순간적으로 파형을 분석하 여 음정을 구해내어야 한다. 이를 위해 푸리에 변환을 이용했다. 셋째, 실제 프로그램 제작: 프로그램 제작을 위해 MFC 문법을 공부한 후 메뉴 화면 Dialog 제작, 메뉴 화면의 컨트롤 구현, 악보 제작 화면 Dialog 제작, 악보 제작 화면의 컨트롤 구현을 하였다.

나. 음악관련 학습앱 또는 게임앱 개발(진행중)

부르기 쉬운 곡을 미디에 담아 사람들이 노래를 부르거나 허밍, 휘파람 소 리를 내면 악보제작프로그램에 의해 발현된 악보와 미디에 담긴 원본 악보 와 정확도를 비교해볼 수 있도록 하고 이를 점수화해서 앱으로 발전시켜보 았다.

연구성과

본 연구를 통해 우리는 MFC를 이용해서 음의 주파수 분석과 길이를 분석해 즉시 악보를 구현해내는 악보제작프로그램을 완성했다. 완성 후에는 ‘비행 기’, ‘연날리기’, ‘스승의 은혜’ 등을 멜로디언으로 연주해보았고 악보가 매우 정확하게 제작되는 것을 확인할 수 있었다. 앞으로 딥 러닝 기술을 추가하 기 위해 서버와 클라이언트 사이에 통신이 가능하도록 하였다. 또한 그리고 완성된 악보제작프로그램을 이용해 음악관련 학습앱, 게임앱을 만들 수 있 는 기반이 마련되었다. 악기연주, 노래 연습, 청음훈련 등 음악관련 다양하게 활용될 수 있고 전통 타악기의 리듬까지 악보로 표현할 수 있는 프로그램 개발에도 도움이 될 것이다.

주요어

(Key words) MFC, 고속 푸리에 변환, Deep Learning, 악보 제작

(2)

< 연구 결과보고서 >

1. 개요

□ 연구목적

○ 연구 동기

합주 동아리 활동을 하면서 우리가 악기를 연주하거나 노래를 부르면 나오는 소리를 즉시 악보로 보여주는 프로그램이 있으면 정말 편리하겠다는 생각이 들었다. 그래서 각종 매체를 이용하여 선행 연구된 프로그램이 있어 상용화되고 있는지를 검색해 보았다. 다양한 악보제작프로그램이 있었지만 대부분 악기의 음이나 멜로디를 프로그램에 입력하는 형식인 ‘악보입력’프로그램으로 우리가 필요로 하는 프로그램은 없었다.

우리는 악기에서 나오는 악기음과 마이크에서 들리는 노래 소리를 악보로 구현할 수 있는 프로그램을 직접 제작해보기로 하였다. 우리가 완성할 악보제작프로그램은 첫째, 주파수가 다른 두 개의 악기가 혼합된 연주음이 악보로 변환되는 과정을 보여줄 수 있다. 둘째, 완성된 악보제작프로그램을 이용해 음악관련 학습앱, 게임앱을 만들 것이다. 부르기 쉬운 곡을 미디에 담아 사람들이 노래를 부르거나 허밍, 휘파람 소리를 내면 악보제작프로그램에 의해 발현된 악보와 미디에 담긴 원본 악보와 정확도를 비교해볼 수 있도록 하고 이를 점수화해서 앱으로 발전시켜나가는 것이다. 이 프로그램의 연구범위는 인간의 가청 주파수 범위인 20Hz~20kHz(오르간 최저음~바이올린 최고음)이다.

○ 연구 목적

현재까지 녹음된 음악에서 음정을 인식하는 기술은 악기용 조율기의 발전과 함께 많은 성과가 있었다.

그러나 라이브로 노래를 부르거나 악기를 연주하고 있는 상황에서 실시간으로 음정을 인식하는 기술은 아직까지 해결되지 않고 있다. 그리고 현재 기술로는 여러 음들이 혼합된 음악을 인식하는 것, 즉 가요 나 협주곡 또는 피아노독주곡 등의 인식이 불가능하다. 본 연구의 목적은 이러한 문제점들을 해결하고 사람들이 연주하고 있는 악기나 소리음들을 즉시 악보로 제작할 수 있는 프로그램을 만들어 음악을 전 공한 사람들뿐만 아니라 취미로만 즐기는 비전공자들도 자신만의 감성이 잘 드러난 악보를 손쉽게 제작 해 활용할 수 있도록 하는 것이다. 그리고 더 나아가서는 이 프로그램을 음악관련 학습앱 또는 게임앱으 로 발전시켜 학교나 가정에서도 쉽게 활용할 수 있도록 함으로써 학생들이 더 효과적으로 음악공부를 할 수 있도록 하고 건전한 놀이문화형성에도 도움이 되고자 한다.

□ 연구범위

○ 연구 분야, 진행 단계

MFC 프로그램과 Deep Learning을 다루는 인공지능 융합 IT 분야이다.

음악적 요소들과 대응되는 컴퓨터 정보들을 파악하고 이를 분석하여 음계를 추출한 뒤 악보를 제작 하고 Deep Learning 기법으로 음계 추출과정의 정확도를 늘일 것이다.

2. 연구 수행 내용

□ 이론적 배경 및 선행 연구

○ 이론적 배경

우리는 고속 푸리에 변환 및 기계 학습(Deep Learning) 등의 방법을 이용하여 wav 파일을 악보로

작하는 프로그램을 만들기 위해 다음과 같은 사전 연구를 진행하였다.

가. 고속 푸리에 변환

음성 등의 파형을 기본 주파수(기본음)와 그 정배수의 각 주파수(각 배음)로 분해하는 것으로, 간단 하게 말하면 어떤 파(波) 중에서 어느 주파수 성분이 얼마만큼 포함되어 있는지를 계산하는 방법이 다. 모든 파형은 이 푸리에 변환을 통해 기본파와 고주파의 합으로 나타낼 수 있다. 따라서 하나의 파형이 이어지면 그 파형이 어떤 주파수 성분으로 구성되어 있는지를 이 푸리에 변환을 통해 알 수 있다. 또 기본파나 고조파도 파형으로서는 정현파(正弦波)이기 때문에 아무리 복잡한 파형이라도 각 각의 주파수의 정현파 합성을 통해 만들어지는 것을 푸리에 변환이 나타낸다. 결국 기본파와 고조파 의 주파수 및 진폭을 알 수 있다면, 이것을 합성해서 하나의 파형으로 나타낼 수도 있다. 이것을 역 푸리에 변환 또는 푸리에 합성이라고 한다.

고속 푸리에 변환은 이산적(離散的) 푸리에 변환(DFT)을 행하는 알고리즘의 하나로서 FFT라 약칭된다.

2차원 데이터열인 화상의 2차원 DFT를 할 때 연산 시간이 매우 단축된다.

나. 빅 데이터(Big Data)

빅 데이터란 디지털 환경에서 생성되는 데이터로 그 규모가 방대하고, 생성 주기도 짧고, 형태도 수치 데이터뿐 아니라 문자와 영상 데이터를 포함하는 대규모 데이터를 말한다. 빅데이터 환경은 과거에 비 해 데이터의 양이 폭증했다는 점과 함께 데이터의 종류도 다양해져 사람들의 행동은 물론 위치정보와 SNS를 통해 생각과 의견까지 분석하고 예측할 수 있다.

다. 딥 러닝(Deep Learning)

컴퓨터가 여러 데이터를 이용해 마치 사람처럼 스스로 학습할 수 있게 하기 위해 인공 신경망(ANN:

artificial neural network)을 기반으로 한 기계 학습 기술이다. 딥 러닝은 인간의 두뇌가 수많은 데이터 속에서 패턴을 발견한 뒤 사물을 구분하는 정보처리 방식을 모방해 컴퓨터가 사물을 분별하도록 기계 를 학습시킨다. 딥 러닝 기술을 적용하면 사람이 모든 판단 기준을 정해주지 않아도 컴퓨터가 스스로 인지·추론·판단할 수 있게 된다. 음성·이미지 인식과 사진 분석 등에 광범위하게 활용된다. 구글 알파고 (AlphaGo) 또한 딥러닝 기술에 기반한 컴퓨터 프로그램이다.

○ 사전연구

가. 기존의 악보 제작 프로그램 분석

먼저, 사용자들이 편리하게 사용할 수 있는 악보제작프로그램을 구상하기 위해 현재 사용되고 있는 악보입력 프로그램들(피날레, 앙코르, NWC, 기타프로, 로직, 큐베이스, 소나, 케이크 워크, 시벨리우스 등)을 직접 사용해보고 장점과 단점을 분석해보았다. 피날레는 표현 못할 악상이 거의 없지만 사용법이 어려웠다. 앙코르는 사용법이 쉽고 인터페이스가 간단하여 초보자도 편리하게 사용할 수 있지만 MIDI 로 저장했을 때 소리로 표현이 안 되는 악상이 너무 많았다. 반면 NWC는 사용법이 쉽고 모든 악상기 호를 MIDI로 표현 가능하지만 아르페지오 지원이 되지 않는다. 결국, 악보제작프로그램은 사용법이 간 단하고 모든 악상과 화음 표현이 가능해야 한다는 것을 알 수 있었다.

나. 음악 파일 분석에 대한 방법 분석

악보제작프로그램을 완성하기 위해서는 프로그래밍 활용능력뿐만 아니라 다양한 음의 표현을 물리적 으로 설명하기 위해 여러 신호 중 비주기신호(aperiodic signal)에 대한 주파수 성분 분석이 필요하다.

(3)

주파수를 알면 MIDI 번호를 알 수 있고, MIDI 번호를 알면 계이름 표현이 가능하게 되는 식으로 계이 름, MIDI 번호, 주파수는 서로 변환이 가능하기 때문이다. 우리는 완성도 높은 악보제작프로그램을 만 들어내기 위해 이 분야의 전문가를 멘토로 삼아 꾸준히 자문을 구하기로 했다. 그리고 고속 푸리에 변 환(Fast Fourier transform)을 이용하여 연속적 비주기신호의 주파수 성분을 분석할 것이다.

□ 연구주제의 선정

우리가 구상한 악보제작 프로그램을 제작할 수 있을지에 대해 컴퓨터 공학과 교수님들께 자문을 구하였고, 동명대학교 컴퓨터공학과 전임교수로 활동하고 계신 하성욱 박사님께서 도와주시겠다고 하셔서 이 연구를 시작하게 되었다.

□ 연구 방법

제작하고자 하는 악보제작 프로그램을 제작하기 위해서는 소리 인식, 푸리에 변환, 서버/클라이언트 통신 및 MFC 프로그래밍 등 전문적인 기술들이 필요했고, 이러한 기술적인 어려움을 해결하기 위해 하성욱 박사님께 자문을 구해가며 TCP/IP를 이용한 통신에 대한 강의를 듣고, Deep Learning을 구 현하기 위해 필요한 서버와 클라이언트 사이에 통신을 성공했다.

□ 연구 활동 및 과정

○ 전문가 자문

가. 2015년 12월 5일(토) : MFC 프로그램 전문가를 초빙하여 자문을 시작했다.

기말고사가 다음 주였지만 문제점을 해결하고 프로그램을 빨리 완성하고 싶어서 MFC 프로그래밍 관련해 서 전문가를 구하기 위해 부산의 Real Hub 연구소장을 역임하였고 현재는 “동명대학교 컴퓨터공학과 겸임교수” 및 “(주)시그널웍스 이사”이신 하성욱 컴퓨터공학 박사님을 외부전문가로 초빙하였다. 오늘은 우리가 구상하고 있는 프로그램의 실현 가능성을 점검하고 MFC 프로그래밍을 익히는데 도움이 될 자료와 서적에 대한 조언을 들었다. 그리고 앞으로도 시간이 될 때마다 부산 동명대학교를 방문하여 자문을 구하기 로 했다.

. 2016년 6월 19일(일) : 하성욱교수님께 Deep Learning 관련 자문을 구했다.

기존에 Deep Learning을 구현하기 위한 방법으로 어떤 방법들이 있는지 설명을 듣고, 우리가 만든 프로그램에 Deep Learning을 구현시키기 위해서는 어떤 점이 추가되어야 하는 지에 대한 조언을 구 했다.

1) CNN 접근법

WAV 파형을 스펙트로그램으로 표현한 그림으로 저장하고, 각 음성(예, “A”, “B”, ..., “Z”)별로 파 형을 100개씩 그림으로 저장하여, Caffe 라이브러리의 CNN을 활용한 음성인식에 대한 연구가 진 행되었다.

2) LSTM 접근법

Caffe나 TensorFlow를 통해 LSTM으로 음성인식에 사용한 연구들이 꾸준히 진행되고 있다. 다른 접근으로는 기존의 HMM을 활용하여 연속음을 인식하는데 있어, WFST(Weighted Finite-State Transducer)를 사용하여 오토마타식으로 문장을 인식하는 연구가 CMU에서 진행되고 있다. 우리

는 연속된 음으로부터 노래가 무엇인지 인식하는 것이 아닌 하나의 음을 인식하는 것으로 LSTM 으로 한 음을 인식하는 접근을 사용할 수 있다.

다. 2016년 6월 25일(토): Deep Learning 기술 적용을 위해 2차 자문을 구했다.

Deep Learning을 구 현 하 기 위 해 필 요 한 통 신 기 능 에 대 한 설 명 을 듣 고 , M FC 상 에 서 통 신 기 능 을 구 현 하 기 위 해 적 절 한 방 법 인 TCP/IP에 대 한 자 세 한 설 명 과 , 관 련 자 료 들 에 대 한 정 보 를 받 았 다 .

우리는 Deep Learning 기술을 도입하기 위해 먼저 Big Data를 저장하기 위한 방법으로 Server를 운영하기 위해 준비한 컴퓨터와 악보 제작 프로그램을 실행하는 컴퓨터 사이에서 TCP/IP를 이용하 여 서로 파형 데이터들을 주고받을 수 있도록 할 것이다.

먼저 악보 제작 프로그램을 실행하는 프로그램에서 음성 인식을 시작하면 입력되는 수많은 데이터 들을 받게 되면, 이 데이터를 먼저 Server를 운영하는 컴퓨터에 보낸 후, Server 프로그램의 데이터 중에 전송된 데이터와 일치하는 데이터가 있는지를 이분 탐색 등의 자료 검색 알고리즘을 이용하 여 확인한다. 만약 일치하는 데이터가 있다면, 기존의 데이터에서의 인식되었던 음정 정보를 Client 로 전송하고 일치하는 데이터가 없다면 Server 데이터에 전송된 데이터를 추가하고, 그 데이터를 현 연구에서 고안한 알고리즘을 통해 음정을 인식한 뒤 Client로 전송한다.

이러한 방식으로 Deep Learning 기술을 계속 해 나간다면 프로그램 내에 저장되어 있는 데이터 들의 양이 매우 많아질 것이고, 프로그램의 음정 및 박자 인식 정확도가 높아질 것이다.

라. 2016년 7월 8일(금): Deep Learning 관련 최종 자문을 다녀왔다.

M FC 상 으 로 데 이 터 를 수 신 /전 송 하 는 프 로 그 램 을 이 용 하 여 음 데 이 터 를 클 라 이 언 트 컴 퓨 터 상 에 서 서 버 컴 퓨 터 로 전 송 하 고 , 서 버 컴 퓨 터 상 에 있 는 데 이 터 를 클 라 이 언 트 컴 퓨 터 로 전 송 하 여 클 라 이 언 트 컴 퓨 터 에 서 수 신 할 수 있 도 록 구 현 하 였 다 .

그림 1. TCP/IP를 이용하여 자료를 주고받는 프로그램

○ 프로그램 인터페이스 및 알고리즘 구상 가. 메뉴 화면 구상

메뉴 화면을 실행하게 되면 아래 그림과 같이 세 가지 버튼이 나타난다. 빨간 테두리의 원은 설명을 위한 것으로, 실제 프로그램에는 나타나지 않는다.

(4)

1) 악보 생성 버튼

‘악보 생성’ 버튼을 클릭하게 되면, 악보를 제작해 주는 화면으로 넘어가게 된다.

2) Wav 파일 가져오기 버튼

‘Wav 파일 가져오기’ 버튼을 클릭하게 되면, 탐색기 창이 뜨게 되어 우리가 악보로 제작할 Wav 파일 을 선택할 수 있게 한다.

3) 음악파일 재생하기 버튼

‘음악파일 재생하기’ 버튼을 클릭하게 되면, 우리가 가져온 음악 파일을 시스템 내장 함수를 통해 재 생할 수 있도록 한다.

나. 악보 제작 화면 구상

악보 제작 화면을 실행하게 되면 다음과 같이 나타난다.

그림 2. 악보 제작 화면 인터페이스

1) wav 파일 표시 컨트롤

‘wav 파일 표시’ 컨트롤에는 메뉴 화면에서 선택했던 wav 파일의 이름을 표시한다.

2) 슬라이더 컨트롤

‘슬라이더’ 컨트롤은 악보 제작의 진행 정도를 나타내주는 것으로, 검은색 바가 악보 제작이 진행될 수록 오른쪽으로 이동하게 된다.

3) 오선지

‘오선지’에서는 wav 파일을 분석하여 악보로 재현한다. wav 파일의 주파수 분석 및 시간에 따른 파 형 변화를 통해 음정을 구한 뒤, 악보에 음표을 표시한다.

다. 알고리즘 순서도

위에 나온 내용들을 바탕으로 하여 프로그램의 실행 알고리즘 순서도를 작성하면 다음과 같다.

그림 3. 프로그램의 실행 알고리즘 순서도

○ 음원 파일의 정보 추출 및 분석

음원 파일을 가져오고 난 뒤에는 순간적으로 파형을 분석하여 음정을 구해내어야 한다. 이를 위해 푸리에 변환을 이용한다. (표 1. 참고)

시간을 변수로 하는 와 주파수를 변수로 하는

는 다음과 같은 식을 통해 서로 변환이 가능하다.

  

 ∞

 (푸리에 역변환식)

 

 ∞  (푸리에 변환식)

그림 4. 시간을 변수로 하는 (왼쪽)와 주파수를 변수로 하는

(오른쪽)

(5)

typedef struct { double r;

double i;

} complex;

int DOTPOINT[6] = {32, 64, 128, 256, 512, 1024};

int LOG2[6] = {5, 6, 7, 8, 9, 10};

int Bit_Reverse(int bit, int r) { int i, bitr;

bitr = 0;

for (i = 0; i < r; i++) { bitr <<= 1;

bitr |= (bit&1);

bit >>= 1;

} return(bitr);

}

표 1. 푸리에 변환 구현 코드 void FFT_Swap(complex *data1, complex *data2)

{

double temp;

temp = data1->r;

data1->r = data2->r;

data2->r = temp;

temp = data1->i;

data1->i = data2->i;

data2->i = temp;

}

//data1:입력, data2:출력, sign 1: FFT ,-1: IFFT

void Go_FFT(int log2N, complex *data1, complex *data2, int sign) {

int i, j, p, j1, j2, k, k1, bit;

double a, b, deg;

deg = 2.*pi/DOTPOINT[log2N - 5];

k = 0;

j1 = log2N - 1;

j2 = DOTPOINT[log2N - 5];

for(j = 0; j < log2N; j++){

j2 = j2/2;

for(;;){

for(i = 0; i < j2; i++){

p = k >> j1;

bit = Bit_Reverse(p,log2N);

k1 = k + j2;

a = data1[k1].r*cos(sign*deg*bit) + data1[k1].i*sin(sign*deg*bit);

b = data1[k1].i*cos(sign*deg*bit) - data1[k1].r*sin(sign*deg*bit);

data1[k1].r = data1[k].r - a;

data1[k1].i = data1[k].i - b;

(6)

data1[k].r = data1[k].r + a;

data1[k].i = data1[k].i + b;

k++;

} k += j2;

if (k >= DOTPOINT[log2N - 5]) break;

} k = 0;

j1--;

}

for(k = 0; k < DOTPOINT[log2N - 5]; k++){

bit = Bit_Reverse(k,log2N);

if (bit > k)

FFT_Swap(&data1[k], &data1[bit]);

}

for (k = 0; k < DOTPOINT[log2N - 5]; k++){

data2[k].r = data1[k].r;

data2[k].i = data1[k].i;

} }

○ 파형의 주파수 및 음정 분석 가. 푸리에 변환을 이용한 음정 분석

푸리에 변환을 통해 시간에 따른 파형을 주파수에 따른 파형으로 바꾼다.

푸리에 변환을 하는 프로그램을 만들어서 얻은 파형은 다음과 같다.

음정 푸리에 변환 결과(왼쪽: , 오른쪽:

)

C(도)

D(레)

E(미) 표 1. 푸리에 변환 구현 코드

분석 결과, 표준 주파수가 높아질수록

에서 극값을 가지는 주파수 값이 커진다는 것을 알 수 있다.

이를 이용하여 극값이 나타나는 주파수 값을 기록한 뒤, 그 주파수 값에 해당하는 음정의 값을 구할 수 있다.

또, 화음 같은 경우에는

 함수에서 극값을 가지는 주파수의 값이 여러 개가 중첩되어서 나오게 된다. 따라서 이 여러 개의 주파수 값을 통해 화음도 분석할 수 있다.

음정 푸리에 변환 결과(왼쪽: , 오른쪽:

)

C(도) + E(미)

C(도) + E(미) + G(솔)

D(레) + F(파)

E(미) + A(라)

표 4. 화음에 대한 푸리에 변환 결과 F(파)

G(솔)

A(라)

B(시)

C(도) (높은 도)

(7)

나. 음의 길이 분석

음의 길이를 알기 위해서는 특정한 입력이 들어왔을 때부터 시작해서 다음 입력이 들어올 때까지의 간격을 알아야 한다.

이 값을 구하기 위해서 우리는 FFT를 통해 얻은

에서 극값이 나타나는 주파수 값에 차이가 나타날 때를 입력이 들어올 때라고 가정하였다.

음과 음 사이의 간격을 sec이고 BPM이 min이라면, 60초 동안 n박이 연주된다는 말이므로 1박은



sec

으로 계산할 수 있다. 따라서 음과 음 사이의 간격을 박 단위로 환산하면

sec 



sec

  

박이 된다.

○ 실제 프로그램 제작

우리는 프로그램을 제작하기 위해 MFC 문법을 공부하였다. 그리고 메뉴 화면 Dialog 제작, 메뉴 화면의 컨트롤 구현, 악보 제작 화면 Dialog 제작, 악보 제작 화면의 컨트롤 구현을 하였다.

가. 메뉴 화면 Dialog제작

우리는 Dialog 상에서 메뉴 화면을 디자인하고, 각 버튼에 MFC 내장 함수를 이용하여 기능들을 구현하였다.

그림 5. 프로그램의 메뉴 화면

나. 악보 제작 화면 Dialog제작

다음으로 우리는 Dialog 상에서 악보 제작 화면을 디자인하고, MFC 내장 함수와 사용자 지정 함수를 이용하여 기능들을 구현하였다.

그림 6. 프로그램의 악보 제작 화면

다. 악보 제작 컨트롤 구현

푸리에 변환을 통해 얻은

에서 위의 연구 과정에서 분석한 음원의 정보를 바탕으로 악보를 제작하는 코드를 작성하였다. 코드는 아래와 같다.

(8)

void CMFCApplication1Dlg::Processing() {

int m_iRadioMode = 0 int m_iEditInputLevel = 1 CString str

CClientDC dc(this);

CPen PenRed, PenGreen, PenBlue, *OldPen PenRed.CreatePen(PS_SOLID, 1, RGB(255, 0, 0));

PenGreen.CreatePen(PS_SOLID, 1, RGB(0, 255, 0));

PenBlue.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));

CBitmap Bitmap

CBitmap *pbmOld = NULL

CDC dcMem

dcMem.CreateCompatibleDC(&dc);

//--- // 입력사운드파형그리기

//--- //CRect rcClient(0,0,MAX_SAMPLES, 200);

CRect rt int x, y int energy = 0

if (m_iEditInputLevel == 0) m_iEditInputLevel = 1 for (x = 0 x < MAX_SAMPLES x++){

y = rt.bottom / 2 - SoundIn.InputBuffer[x] / 200

표 5. 악보를 제작하는 코드 energy += pow(SoundIn.InputBuffer[x] * 1.0 / m_iEditInputLevel, 2);

}

energy = (int)energy / MAX_SAMPLES double *mag_spectrum = new double[512];

double maxSpectrum

m_sndAnalysis.PCM2Frequency(SoundIn.InputBuffer, mag_spectrum, &maxSpectrum, MAX_SAMPLES, 512);

maxSpectrum = 100000

CRect rtFreqDisplay = CRect(0, 60, 1024, 300);

rt = CRect(0, 0, rtFreqDisplay.Width(), rtFreqDisplay.Height());

Bitmap.CreateCompatibleBitmap(&dc, rt.right, rt.bottom);

pbmOld = dcMem.SelectObject(&Bitmap);

dcMem.PatBlt(0, 0, rt.right, rt.bottom, WHITENESS);

dcMem.MoveTo(0, rt.bottom);

CPen Red(PS_SOLID, 1, RGB(255, 0, 0));

CPen Green(PS_SOLID, 1, RGB(0, 255, 0));

CPen *oPen

for (x = 0 x < 512 x++){

double k = rt.bottom - mag_spectrum[x] * rt.Height() / maxSpectrum dcMem.LineTo(x*2, k);

if(x<512) data[x] = k }

dc.BitBlt(rtFreqDisplay.left, rtFreqDisplay.top, rtFreqDisplay.right, rtFreqDisplay.bottom, &dcMem, 0, 0, SRCCOPY);

delete mag_spectrum dcMem.DeleteDC();

dc.SelectObject(OldPen);

//--- int nCoveredMax = 5000

m_ptOldEnergy.x = m_frame_num%MAX_SAMPLES m_ptOldEnergy.y = 400 - 1 - energy * 200 / nCoveredMax

//--- if (m_frame_num_toggle % 10 == 0) m_frame_num++;

m_frame_num_toggle++;

}

(9)

○ Deep Learning 기술 도입

프로그램의 정확도를 높이기 위해 Deep Learning 기술을 이용하여 오차를 줄이기로 했다.

서버와 클라이언트를 나누어 ‘인식되는 소리 데이터에 대한 음계 값’을 빅 데이터로 서버에 저장한 후, 클라이언트에서 소리를 인식하면 서버에 저장되어 있던 빅 데이터와 비교하여 수정하면 정확도가 높아질 것이라는 생각을 하고, 현재 서버와 클라이언트를 구분한 뒤 TCP/IP 프로토콜 통신까지 구현하였다. 앞으로 서버에서 빅 데이터를 저장하는 과정과 빅 데이터와 클라이언트에서 인식된 소리 데이터를 비교하는 과정만 구현한다면 Deep Learning을 최종적으로 구현할 수 있을 것이다.

○ 정확도 분석

우리 프로그램과 유사한 프로그램을 조사해본 결과, 'Hum on!' 어플리케이션과, ‘ScoreCloud Express’를 찾을 수 있었던 'Hum on!' 어플리케이션은 개발자와의 음성 통화를 통해 자문한 결과 Deep Learning 기술이 음의 판별 정확도를 위함이 아닌 생성된 악보의 코드를 파악하는데 사용됨을 알 수 있었고,

‘ScoreCloud Express’는 프로그램에 사용된 툴의 오픈 소스를 찾을 수 없었다.

우리는 이 두 프로그램과 우리의 프로그램으로 7음계 각각의 음을 100번, ‘나비야 나비야’, ‘비행기’, 학교종 일 땡땡땡‘ 등의 몇 가지의 간단한 노래를 2번씩 멜로디언으로 연주함으로써 얼마나 음을 정확하게 인식하는 지를 조사하고 비교하였다.

3. 연구 결과 및 시사점

□ 연구 결과

○ 연구 결과 가. 악보 구현

우리는 MFC를 이용해서 음의 주파수 분석과 길이 분석을 하는 프로그램을 제작했다.

프로그램이 잘 작동하는지를 확인하기 위해서 동요 ‘비행기’, ‘연날리기’, ‘스승의 은혜’, ‘학교종이 땡땡땡’

등으로 실험해 보았다.

1) ‘비행기’

그림 7. ‘비행기’ 악보

2) ‘학교 종이 땡땡땡’

그림 8. ‘학교종이 땡땡땡’ 악보

연구 결과, 우리의 프로그램은 악보를 제대로 인식하여 만들어 낼 수 있었다.

나. 정확도 분석

우리가 개발한 프로그램은 거의 98% 이상으로 음을 정확하게 판단함으로써 Hum on!어플리케이션보다 훨씬 정확도가 높음을 알 수 있었다.

□ 시사점

○ 연구활동을 통해 얻은 학습 효과, 개선점

기본적인 컴퓨터 언어인 C언어 부터 MFC 프로그램밍을 위한 컴퓨터 언어들을 익히고 활용할 수 있게 되었고, 프로그래밍을 위한 알고리즘 설계를 많이 해 볼 수 있었다. 또한 고속 푸리에 변환을 접하고 활용하면 서 고속 푸리에 변환이 어떻게 이용되고 어떤 분야들에 이용 되는지 알게 되었다.

악보에 추가되어야 할 요소들 (박자, 쉼표, 숨표, 코드 등)이 추가되어야 하고 이를 추가하기 위해 고려해야할 음악적 요소들도 늘어날 것이다. 또한 플랫이나 샵을 도입하여 보다 다양한 음계들을 표현해야 한다.

4. 홍보 및 사후 활용

□ 후속 연구

○ 사후 활용 계획

연구 결과를 바탕으로 제작된 프로그램을 구글 Deepmind 사에서 제작된 'AlphaGo'와 같이, 여러개의 신경망 네트워크를 만들어서 악보를 재현할 때 정확도를 높일 수 있을 것 같다.

프로그램을 더 발전시켜, 하나의 악기가 아닌, 다양한 악기가 합쳐진(ex : 오케스트라)와 같은 연주곡에서도 여러 개의 악기 성분들을 분류할 수 있을 것 같다.

프로그램 관련 유통 업체를 섭외하여 우리가 제작한 프로그램의 배포와 관련하여 도움을 받아, 인터넷 상에서 프로그램을 배포할 수 있을 것 같다. 또한 더불어, 프로그램의 UI와 관련해서 도움을 받을 수도 있을 것 같다. 아니면 스타트업을 하여 독자적인 회사를 꾸려 프로그램을 인터넷으로 배포하여 사업 가능성을 기대할 수 있다.

(10)

5. 참고문헌

김세훈, 김바울, “유전 알고리즘을 기반으로 한 자동 코드 악보 생성 프로그램 구현”, 한국콘텐츠학회논문지, 15(3), pp.1-10, 2015.

도효환(국내 석사, 2012), “피아노 소리를 악보로 표현하는 시스템의 설계 및 구현: Design and Implementation of Piano Sound Recognition System via the Musical Notation”, 서울시립대학교 일반대학원

윤한철, 김상훈, “악보 작성 어플리케이션에 대한 연구”, 한국컨텐츠학회 2012 춘계종합학술대회, pp.255-256, 2012

최제헌, 김규년, “피아노 연주곡의 wave sound에서의 피치추출 및 악보생성”, 한국음향학회 1999년 학술발 표대회 논문집, 제18권 1호, pp.251-254, 1999 Spring.

참조

관련 문서

철근에 해당하는 것은 교원 섬유로 짜여진 바구니이며, 그 그물눈을 채우고 있는 시멘트에 해당하는 것이 골질이다.. 골질은 탄산 칼슘·인산 칼슘

4번의 설문조사 끝에 별빛 예술제는 문화, 예술과 과학을 융합하여 과학의 흥미를 높이는 데 성공하였다는 것을 알 수 있었고, 추후 다른 천체 관측 행사에 참여하겠다는

혈장과 세균, 감염 예방에 대한 키워드로 논문을 조사해보면 대부분 병에 걸렸을 때 혈장 의 변화, 헌혈 후 세균의 오염가능성 등에 대한 논문이며, 영어

Ÿ 점도가 높은 액제의 단위시간당 이동거리가 달라짐을 관찰하고, 이를 이용 하여 점도에 따는 혈액점도 측정용 종이미세유체칩 개발 및 실제 혈액을 통해

전체의 2%만 수지로 구성돼 있고, 나머지는 공기층이어서 자원절약형 소재로 널리 알려져 있다.. 또한 물에 젖으면 완충, 단열, 포장등의

대덕고등학교 2학년 학생들을 대상으로 현재 학교에서 배우고 있는 미적분에 대해 얼마나 이해하고 있는지, 어떤 내용을 제일 어려워하는가에 대해서

이에 최적의 정유 추출조건을 산출하여 산업계에 제안하기 위하여 연구 주제로 선정하게 되었다..

○ 겨울철에 학교뿐만 아니라 천장형 난방기를 사용 중인 실내에서 적은 비용만으로도 히터의 열효율을 높일 수 있는 방법을 생각하게 되었다.. ○ 천장형 난방기를