Post

협화음찾아주는프로젝트

협화음찾아주는프로젝트

정리

목차

  1. 서론
  2. 문제인식
  3. 문제정의
  4. 아이디어도출및평가
  5. 프로토타입제작및테스트
  6. 참고문헌

  7. 서론 ‘하모니아’는노래에어울리는화음을찾아주는서비스를개발하여사용자들에게음악적 영감을제공하고화음을쌓는것에도움을주고자한다.이서비스는원하는노래에 어울리는화음을찾아주는기능을제공한다.

  8. 문제인식 2.1. 주제 선정과정 01) 교내 팀프로젝트매칭사이트 02) 협화음찾아주는프로젝트 03) 카메라로대상인식하여분리수거방법알려주는앱 04) 교내 도서관분리수거개선프로젝트 이렇게네가지주제를고민했다.제시한주제들을구현가능성,필요성,창의성을 기준으로 평가했다.

2.2. 각 주제평가및비교 첫번째로팀매칭서비스는구현가능성은2점으로평가되었다.이미취업 매칭이나학업매칭같은서비스가존재하기때문에,이를응용해교내팀매칭 서비스를만들수있을것으로생각돼2점으로평가되었다.필요성은3점이다.많은 학생들이프로젝트나대회에서적합한팀원을구하는데어려움을겪고있기 때문에,이서비스가유용할것이라고생각되어필요성이3점으로평가되었다. 창의성은1점으로다소낮은점수를받았다.이유는이미존재하는매칭서비스와 비슷한점이많아서,새로운아이디어라고보기는어려웠기때문이다. 두번째는협화음을찾아주는서비스다.구현가능성은3점이다.현재음성처리 기술이나음악생성프로그램같은관련기술이잘발달해있기때문에,이를 활용하면협화음을자동으로만들어주는프로그램을충분히개발할수있다. 필요성은2점이다.이서비스는전문음악가나취미로음악을만드는사람들에게는 유용하지만,모든사람이필요한서비스는아닙니다.그래서필요성은2점으로 평가되었다.창의성은3점으로높은점수를받았다.화음을자동으로만들어주는 아이디어는독창적이고사전조사결과비슷한서비스를찾지못했기때문이다. 세번째는카메라로분리수거할물건을인식하고방법을알려주는서비스다.구현 가능성은1점이다.이서비스는물체를인식하는기술과분리수거정보를제공하는 데이터베이스가필요하기때문에주어진시간내에만들기가쉽지않다.필요성도 1점으로낮았다.환경보호는중요하지만,이미인터넷이나지역시설에서분리수거 방법에대한정보를쉽게찾을수있기때문에이서비스가꼭필요하지는않다. 창의성은2점이다.환경문제를해결하려는독창적인접근이라는점에서는의미가 있지만,물체인식기술은이미여러곳에서사용되고있어서창의성은”보통”으로 평가되었다. 마지막은도서관의분리수거문제를개선하는서비스다.구현가능성은2점으로 평가되었다.구체적인방법을생각하면이를구현하는것은쉬울것이기때문이다. 필요성은2점이다.도서관은많은사람들이이용하는공간이지만,분리수거개선 프로젝트는다른환경개선에비해중요도가상대적으로낮다고평가되었다. 창의성도2점이다.실용적인아이디어이지만기존의문제를개선하는정도고맘에 드는개선안이떠오르지않아창의성은2점으로평가되었다. 최종적으로협화음이가장높은점수,다음으로팀매칭,도서관분리수거,카메라 분리수거가되었다. 높은창의성과구현가능성으로협화음을찾아주는프로젝트를주제로선정하게 되었다.

  1. 문제정의

3.1. 인터뷰를통한사용자니즈파악 서비스주요기능을구상하기위해사용자들의필요를이해하고자인터뷰를 진행했다. 화음넣을때겪는어려움은어느순간원래멜로디를부르고있어어렵다고 응답했다. 화음을넣는것을잘하지않는다고했는데이유를질문에본인이노래를엄청 잘하지않는이상화음을맞추는것이쉽지않다고답변했다.또단순히노래 실력보다는음에대한감각이더중요하다고생각한다는의견도있었다. 화음을잘 넣으려면노래실력을넘어선감각과재능이필요하다는인식이존재한다는것을 확인할수있었다 저희서비스에서원하는노래에맞는화음을악보로제공해줄지음성으로 제공할지에대한고민이있어이부분도질문했다.인터뷰대상자모두음성을 선호했다.따라하기편하고절대음감이아닌이상악보만을보고파악하기어렵다는 의견이있었다.또한악보를잘보지못한다는사람도존재했다.

  1. 아이디어도출및평가

4.1. 사용자인터뷰분석 인터뷰내용을바탕으로노래에화음을넣어부르고싶은데조화로운화음을찾기 힘들고‘화음을넣는것이어렵다’는문제를정의했다.

4.2. 문제 근본원인분석 근본원인을분석하기위해‘왜?’라는질문을반복했다. | 왜화음을넣는것이어려운가? 한멜로디에어울리는화음이무엇인지모른다. | 왜어울리는화음이무엇인지모를까? 음에대한감각이부족하다. | 왜감각이부족할까? 음에대한감각을늘리기쉽지않다. | 왜감각을늘리기쉽지않을까? 스스로연습하기가어렵다. | 왜연습하기어려울까? 연습을돕는플랫폼이부족하다. “화음을잘넣고싶은데어울리는화음을찾기어렵다.”라는처음문제정의에서 “이를해결하기위한연습플랫폼이필요하다.”라는결론을내리게되었다.

4.3. 관련된지식재산권조사 아이디어도출과평가과정에앞서,화음을찾아주는프로그램과관련된지식 재산권현황을조사하였다.특허정보검색서비스키프리스를활용해조사한결과,아래의 사진4.3.-1, 4.3.-2와 같이 보컬 연습을 돕는다양한지식재산권은다수확인되었으나 보컬에화음을쌓는연습을돕는지식재산권은존재하지않는것으로나타났다. (사진4.3.-1) [1] (사진4.3.-2) [2]

4.4. 아이디어도출과정 협화음을찾아주는프로그램의구체적인구현방식을결정하기위해프로그램의 주요기능과관련된아이디어를도출하였다.브레인스토밍을통해최종적으로 선정된다섯가지아이디어는다음과같다.

  1. mr제거기능:반주를제거하여목소리만을추출하는기능
  2. 어울리는화음이추가된목소리추출기능:원본목소리에적합한화음을 추가하여새로운음성을생성하는기능
  3. 어울리는화음만있는목소리추출기능:원본목소리에적합한화음부분만 추출하는기능
  4. 생성된화음파일공유기능:사용자가생성한화음파일을공유할수있는 기능
  5. 화음생성결과보관라이브러리기능:생성된화음을저장하고관리할수 있는라이브러리기능

4.5. 아이디어평가과정 아이디어도출과정에서생성된다섯가지아이디어를가중순위비교법을사용하여 평가하였다.평가기준은구현가능성,편의성,혁신성으로설정하였으며,각기준에따라 가중치를부여해아이디어를평가하였다.평가결과는다음과같다. (사진4.5.-1) 구현가능성의경우mr제거기능이가장구현하기쉬운기능으로판단되어 최고점(4점)을부여하였다. 편의성의경우사용자관점에서어울리는화음만있는목소리를듣는것이가장 편리하다고판단하여최고점(4점)을부여하였다. 혁신성또한어울리는화음을추출하는기능이가장혁신적이라고판단되어 최고점(4점)을부여하였였다. 이와같은평가를바탕으로다섯가지기능의우선순위를다음과같이결정하였다. 1순위:3. 어울리는화음만있는목소리추출기능 2순위:1. mr 제거기능 2순위:2. 어울리는화음이추가된목소리추출기능 4순위:5. 화음생성결과보관라이브러리기능 5순위:4. 생성된화음파일공유기능

  1. 프로토타입제작및테스트

5.1 앱 시연설명 앱의이름은하모니아(Harmonia)로화음을뜻하는단어‘Harmony’에서유래하였다.앱의 이름을직관적이게지어서사람들이화음과관련된앱이라는것을한눈에알수있도록 의도하였다. 보컬이포함된원곡의음원파일대부분은음원저작권(또는공연권,실연자권, 음반제작자권등)에의해보호된다.서비스가이음원을활용해변형(화음추가,피치 변환)을한다면,이는저작권법상‘2차적저작물’을작성하는행위로간주될여지가있다. 따라서사용자는음원이아닌자신이직접녹음한목소리파일만을업로드하여화음을 추출할수있다. 화음생성코드는구현했지만앱을직접적으로구현하는대신피그마(figma)를활용하여 프로토타입을제작했다.아래는하모니아앱의UI사진과시연설명이다. 1) 앱의처음실행화면 앱을처음실행할시 오른쪽과같이로그인이나 회원가입을할수있는 버튼이있다. 2) 로그인화면 자신의이메일과 비밀번호를이용해 로그인을할수있다. 3) start로시작하기 로그인후start버튼을 누르면시작할수있다. 4) 파일업로드와 히스토리 자신의목소리가담긴 파일을업로드할수있는 버튼과이제까지 추출한화음파일을볼 수있는history버튼이 있다.업로드할목소리 파일은mr과에코가없는 생목소리파일이어야 한다.만약음원파일을 넣을경우앱이음원임을 인식해서업로드에 실패하게된다. 5) 화음선택화면 원곡에대하여몇반음을 올리고내릴건지결정하는 화면이다.예를들어-1을 선택하면원곡에대해1반음 낮춰주고 2를선택하면2반음을 올려준다. 6) 로딩화면 화음을생성하고있다는 것을알려주는 로딩화면이다. 7) 원하는화음파일 화음을테스트해보기위해 자신이업로드한파일과 합체한mixed파일을 출력할건지오직화음 파일만단독으로추출할 건지결정하는화면이다. 화음이맘에들지않을시 changechord!버튼을눌러 화음을다시선택할수있다. 8) 결과파일형식선택 결과를보기전어떤 파일형식으로화음 파일을받을건지 선택하는화면이다. WAV파일이mp3파일 보다음질손상이적은 대신파일용량이크다. 9) history화면 이제까지추출한화음을 들어볼수있는화면이다. 화음연습을도와주는앱인 만큼추출한파일은 자동으로저장되고파일의 제목과썸네일사진을 지정할수있다. 10) 공유기능 보다나은화음을추출할 수있게자신이추출한 화음을공유하여남도 들어볼수있는기능을 제공한다.음원파일의 업로드기능을금지한 이유중하나는공유할시 저작권문제가발생할수 있기때문이다.

5.2화음생성구현 처음에구상한화음생성과정은다음과같다. 1.원곡파일을받아원곡의조성,코드진행파악 2.보컬파일에서보컬의피치추출 3.피치를분석하여음기준으로분리 4.각음에대한화음의음간격결정 5.피치조절을통해화음생성 6.화음을원곡에믹싱 7.화음이추가된최종본과화음파일저장 이과정을따라코드를작성해보았지만그과정에서여러문제점이있었다. 각음에대해어떤화음을넣는게좋은지명확하게결정하기어려웠다.이론적으로음을 맞추어서생성해도듣기에는이상한경우가있었다.또,음기준으로음성을분리하니 구간이너무많이나뉘어서각구간의피치를조절하는데너무오래걸린다는문제점도 있었다.그래서음기준이아니라프레임기준으로나누어서처리해보았지만화음의 부정확함과더불어서프레임단위로끊기는소리때문에듣기불편한화음파일이 생성되었다.다양한시행착오를거쳤으나마땅한해결법을찾지못하여결론적으로음하나 하나화음을결정하는것이아니라전체의피치를조절하는식으로제작하는게최선이라고 판단했다. librosa와pydub,그리고numpy를이용해구현한최종코드는다음과같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 fromgoogle.colabimportdrive
 import librosa
 importnumpyasnp
 frompydubimportAudioSegment
 importos
 #1.GoogleDrive마운트
drive.mount('/content/drive')
 #2.출력폴더지정및생성
save_folder="/content/drive/MyDrive/Processed_Audio"
 ifnotos.path.exists(save_folder):
 os.makedirs(save_folder)
 print(f"폴더생성완료:{save_folder}")
 else:
 print(f"폴더가이미존재합니다:{save_folder}")
 #3.오디오파일로드
input_file='/content/drive/MyDrive/ColabNotebooks/1_1_1_거리에서---성시경_(Vocals)_(Vocals)_(No
 Reverb).wav' #오디오파일경로
try:
 y,sr=librosa.load(input_file,sr=None) #샘플링레이트유지
print(f"오디오파일'{input_file}'로드성공!샘플링레이트:{sr}Hz")
 exceptExceptionase:
 print(f"오디오파일로드중오류발생:{e}")
 raise
 #4.피치시프팅을통한하모니생성
try:
 n_steps=int(input()) #반음단위로이동(4은반음4개위,음수는아래)
 harmony_y=librosa.effects.pitch_shift(y=y,sr=sr,n_steps=n_steps)
 print("피치시프팅성공:하모니생성완료!")
 exceptExceptionase:
 print(f"피치시프팅중오류발생:{e}")
 harmony_y=None
 #5.16비트PCM변환함수
def to_16bit_pcm(y):
 """오디오데이터를16비트PCM형식으로변환"""
 max_int16=np.iinfo(np.int16).max
 y_pcm=(y*max_int16).astype(np.int16)
 returny_pcm
 #6.NumPy배열을16비트PCM형식으로변환
ifharmony_yisnotNone:
 try:
 y_pcm=to_16bit_pcm(y)
 harmony_y_pcm=to_16bit_pcm(harmony_y)
 exceptExceptionase:
 print(f"PCM변환중오류발생:{e}")
raise
 else:
 print("하모니생성실패:원본오디오만처리됩니다.")
 harmony_y_pcm=None
 #7.AudioSegment변환및믹싱
try:
 original=AudioSegment(
 y_pcm.tobytes(),
 frame_rate=sr,
 sample_width=y_pcm.dtype.itemsize,
 channels=1
 )
 ifharmony_y_pcmisnotNone:
 harmony=AudioSegment(
 harmony_y_pcm.tobytes(),
 frame_rate=sr,
 sample_width=harmony_y_pcm.dtype.itemsize,
 channels=1
 )
 #오디오믹싱
mixed=original.overlay(harmony)
 else:
 mixed=original #하모니없이원본만저장
exceptExceptionase:
 print(f"AudioSegment변환중오류발생:{e}")
 raise
 #8.결과저장
try:
 #화음음원저장
harmony_mp3_path=os.path.join(save_folder,"harmony.mp3")
 harmony_wav_path=os.path.join(save_folder,"harmony.wav")
 harmony.export(harmony_mp3_path, format="mp3")
 harmony.export(harmony_wav_path, format="wav")
 print(f"하모니오디오가저장되었습니다:\nMP3:{harmony_mp3_path}\nWAV:{harmony_wav_path}")
 #원보컬+하모니저장
mixed_mp3_path=os.path.join(save_folder,"final_mix.mp3")
 mixed_wav_path=os.path.join(save_folder,"final_mix.wav")
 mixed.export(mixed_mp3_path, format="mp3")
 mixed.export(mixed_wav_path, format="wav")
 print(f"하모니가추가된오디오가저장되었습니다:\nMP3:{mixed_mp3_path}\nWAV:{mixed_wav_path}")
 exceptExceptionase:
 print(f"오디오저장중오류발생:{e}")

코드의동작과정은다음과같다.

  1. librosa를이용하여보컬파일을로드
  2. n반음피치조절을통해화음생성.(librosa의피치시프팅함수를사용)
  3. librosa로로드된오디오데이터를16비트PCM형식으로변환 4.변환된PCM데이터를사용하여Pydub의AudioSegment객체를생성 5.원본오디오위에하모니오디오를오버레이.화음을원본보컬에믹싱 6.완성된최종본과화음파일을저장 5.3 프로토타입의한계점
  4. 화음의단조로움 원곡을그대로올리거나내려화음을생성하기때문에원곡의음조성을따라가지 않는화음이나아카펠라와같이원곡과박자를달리하는화음을만드는것은 불가능했다.
  5. 화음의어색함 이론상으로듣게좋은화음과실제로듣기좋은화음이다를수있기때문에 중간중간어색하게느껴지는화음을전부바꾸지못한다.
  6. 편의성문제 사용자는화음을실시간으로들어보고다른화음과비교하면서화음을선택해야 하는데프로토타입에서는화음을바꿀시다시처음부터파일을업로드하여 기다려야하기때문에시간이오래걸린다. 5.4 개선방안 제작과정에서느낀이러한한계점들을보완하는방법두가지를생각해냈다.
  7. 악보와목소리파형이용하기 사용자가목소리파일을업로드하면목소리의주파수를분석해위와같이악보와목소리 파형을추출한다.기본적으로프로토타입의방식과같이원하는반음의크기만큼올리고 내린다음악보의경우사용자가실시간으로들어보며어색한화음을악보위에있는 음표를클릭하여바꿀수있다.파형의경우사진과같이원하는구간을선택하여화음을 각각다르게설정할수있다.이러한기능이추가되면두번째와세번째한계점이해결된다.
  8. 생성형AI이용하기 음악을작곡하는AI인SUNO에서아이디어를얻어생각해낸 방법이다. SUNO는화음을생성하는기능은따로없지만제작한 음악에는화음이일부섞여있고그화음들은조화롭게들린다. 따라서잘훈련된AI모델을이용하면조화로운화음을만들수 있다는것을알수있다.사용자는프롬프트에화음에대한 요구사항을적을수있고이에맞춰AI는화음을만든다.또한 자신의목소리를변형시켜새로운화음을만들어마치남녀가 듀엣을하는듯한화음파일을생성하는기능도추가한다.생성형AI를이용하면자신이 직접들어가면서화음을지정할수는없지만앞서서나온한계점들을대부분해결할수 있다.

노션주소

https://www.notion.so/1204991ad3ac808c99c0c4e8a487d2d4?v=1204991ad3ac8050abc8000ce17f4e19&pvs=4

  1. 참고문헌

[1] 키프리스(2023.11.01). AI 학습에 기반한 직관 및 항목레벨보컬평가방법. http://www.kipris.or.kr/khome/main.jsp에서 2024.12.19. 인출.

[2] 키프리스(2024.04.23). 인공지능 보컬트레이닝 시스템. http://www.kipris.or.kr/khome/main.jsp에서 2024.12.19. 인출.

[3] 나도 애드립거리에서크로매틱악보 https://www.nadoadlib.com/product/aa-113250/에서 2024.12.19 인출.

This post is licensed under CC BY 4.0 by the author.