문화 파이썬으로 화음 쌓는 프로그램 생성하기(feat: rtmidi)

2024-12-01 02:18:11 | 조회수: 12 | 좋아요: 0

사실 나의 상황을 아는 사람은 이런 짓을 보고 미쳤다 할 수 있겠다. 프로젝트 발등에 불이 떨어진 상황이며 여기저기 일해줄 사람을 구하는 중이다.

AI가 작곡을 해준다고 하는데, 일단 기본적으로 나는 음악에는 인간의 영역이 있어야 한다고 생각하기 때문에 AI가 멜로디까지 작성해주는 것은 좀 아니라고 본다.

듀스 노래들을 들어보면(물론 악보를 봐서 아는 거지만) 메이저 세븐(M7) 코드진행을 잘 쓴다.

대표적으로 여름 안에서.. 엄청 쉬운 곡이다. 그런데 그렇게 엄청난 히트를 할 수 있는 이유가 뭐였을까? 코드 진행이 좀 다르다. 우리나라에서는 기본적으로 메이저 보단 마이너 코드를 잘 사용하는 경향이 있다. 듀스 노래는 쉬운 진행 같은데 M7을 많이 사용해 독특하다. 이현도가 어렸을 때 아마 재즈 공부를 많이 했던 것 같다.

하고 싶은 말이 뭐냐면,
코드진행이 뭐냐, 결국 실험이란 얘기다.
1-4-5-6 으로 해보다가 이걸 반마디씩도 넣어보고, 1.5마디씩도 넣어보고 하면서 좋은 소리를 찾는 거다.
세개로 이뤄진 화음 말고 네개로 이뤄진 화음을 만들 때는 메이저 세븐, 마이너 세븐 등의 음을 넣어보면서 그게 새롭고 매력적인 사운드를 만들어내는지 확인한다.

게다가 중요한 코드진행들은 이미 대체로 공식이 나와 있기 때문에 심지어 '머니 코드'라고도 부른다.

조금 말이 길었는데,
결국 우리가 필요한 건 좋은 화음과 좋은 화음 진행(코드 진행)을 찾아내는 건데,
이 때 필요한 건 파이썬이다.

아래 만든 프로그램은 C4음에서부터 반음씩 올려가면서 반음씩 쳐보는 프로그램이다. 이건 아주 기초 중 기초일 뿐, 우리가 생각하는 거의 모든 종류의 실험을 해볼 수 있다.

리듬은 또 어떻고?

10개의 코드 진행에 10개의 대표 리듬을 넣어서 샘플 사운드를 만들어 본다. 그럼 벌써 100개의 샘플이 나온다.

이렇게 변형시키면, 거의 인간이 상상할 수 있는 거의 모든 코드진행과 음악패턴을 라이브러리화 할 수 있다는 결론에 도달한다.

그리고 이미 알려진 유명한 곡들이 어떤 패턴을 따르는지 체크해서 일종의 '머니코드' 지도를 매핑할 수도 있다.

거꾸로 말하면 어떤 화음과 어떤 리듬이 결합이 덜 되었는지도 확인할 수 있다. 그런 조합을 찾아보면 그 조합이 매력적이지 않아서, 즉 어울리지 않아서 그런 것인지, 아니면 아직 발견되지 않은 조합인지, 그건 우리의 귀가 확인해줄 것이다.(들었을 때 좋으면 좋은 거)

먼저 pip 로 rtmidi를 설치하고

c:\python>pip install rtmidi

코드는 아래와 같음


import time
import rtmidi

midiout = rtmidi.MidiOut()
available_ports = midiout.get_ports()

if available_ports:
___midiout.open_port(0) # 무단 복사를 방지하기 위해 들여쓰기를 ___라고 표현함
else:
___midiout.open_virtual_port("My virtual output")
i=0
while i < 10:
___note1_on = [0x90, 60, 112] # 60번 노트를 연주합니다.
___note2_on = [0x90, 60 + i, 112] # 반음씩 올려가면서 코드를 만듦
___note_off = [0x80, 60, 0] # 노트를 멈춥니다.
___midiout.send_message(note1_on)
___midiout.send_message(note2_on)
___time.sleep(0.5)
___midiout.send_message(note_off)
___i += 1

since 2021
시공간 압축 대학원에서 살아남는 레시피 여행이 부르는 노래 파이썬 생활프로그래밍 질러 유라시아 발밑의 세계사

The source code is licensed MIT.