2012-12-26 2 views
1

멜로디를 프로그래밍 방식으로 연주하고 싶습니다.재미 있고 간단한 멜로디 API

재미있는 멜로디를 만들 수있는 API/라이브러리에서 멋진 프로토 타입이 있습니까?

나는 내가 원하는 추상화 수준의 라이브러리를 찾지 못했을 것이라고 생각한다.

음색에 대해서는별로 신경 쓰지 않아도됩니다. 멋지게 될 오래된 학교의 8 비트 음악처럼 들릴 수는 있지만.

각 음표의 길이, 연주 시간 (노래 시작 부분부터 시작) 및 음높이를 간단히 지정하여 음악을 재생할 수 있기를 바랍니다.

from awesomeMelodyLibrary import play 

# Perhaps play accepts an iterable of 3-tuples where 
# the items of the tuple are (pitch, duration_of_note, when_to_play) 
# and then it would play those notes. 
play([ (440, 200, 0), # A4 
     (440, 200, 200), 
     (660, 200, 400), # E5 
     (660, 200, 600), 
     (740, 200, 800), # F#5 
     (740, 200,1000), 
     (660, 400,1200) ]) 

그리고 그것은 알파벳 노래의 시작 부분을 재생합니다 : 같은 멋진 오디오/멜로디 라이브러리 파이썬 존재한다면

그래서 예를 들어, 나는 다음과 같은 방법을 사용할 수 있습니다 .

정확히 그렇게 할 필요는 없으며 몇 가지 제한 사항이 있습니다 (예 : 동시에 최대 3 개의 메모까지 재생할 수 있음).하지만 요점은 내가 원하지 않는 것입니다. 원시 사운드 데이터로 더러워 지거나 코드, 사운드 클립 등을 재생하기 위해 다른 사운드 클립을 믹스하는 세부 사항을 처리하십시오.

언어 선택은 너무 중요하지 않습니다. 파이썬은 훌륭 하겠지만 루비, 자바, 하스켈, 라켓, C/C++, 심지어 HTML5 + 자바 스크립트 등도 괜찮습니다. 언어 선택에 대한 유일한 제한은 사용하기 쉽고 프로토 타입 인 성숙한 GUI 라이브러리가 있다는 것입니다. 왜냐하면 사운드를 만드는 간단한 대화 형 응용 프로그램을 만들고 싶기 때문입니다.

OS X Lion, Windows 7 및 Ubuntu에서 라이브러리가 지원되는 경우 운영 체제가 작동하는 한, 모든 라이브러리가 다른 시간에 모두 작동하므로 (라이브러리의 일부가 아닐지라도) 라이브러리를 사용하고 싶습니다. 지원, 윈도우 7 및 우분투 지원이 더 중요 할 것입니다). 또한 기본 Raspbian 설치로 Raspberry Pi에서 쉽게 설정할 수 있다면 달콤한 보너스가됩니다. 실제로 Pi에서 작동하는 경우 OS X 또는 Windows 지원이 필요하지 않습니다.

답변

1

파이썬 프론트 엔드로 RTcmix를 시도해보십시오.

그것은 우분투에서 사용하지만 OS X에서 가장 잘 작동합니다. 쉬운 빌드 프로세스는 아니지만 Ubuntu 12.04의 설치 프로세스에 대한 내 토론 목록에 내 post이 표시됩니다.

다양한 악기를 사용할 수 있습니다. 내가 좋아하는 것 중 하나는 뽑아 낸 현악기 인 STRUM2입니다.

다음은 Python에서 몇 가지 노트를 재생하는 방법입니다.

from rtcmix import * 
rtsetparams(44100, 2) 
load("STRUM2") 
noteOnset = 0 #in seconds 
duration = 1.0 # in seconds 
amplitude = 10000 
pitch = 440 # specified in hertz 
squish = 1 
decay = 1.0 
pan = .5 
STRUM2(noteOnset, duration, amplitude, pitch, squish, decay, pan) 

그것은 기본적으로 헤르츠에서 피치 필요하지만이 기능을 헤르츠로 MIDI 키 숫자로 변환 할 수 있습니다.

def keynumToHertz(keynum): 
    lowestfreq = 8.175 #C-1 
    return lowestfreq * math.pow(2.0, float(keynum)/12.0) 

당신은 당신이 내가 쓴 nameToNum 기능을 사용할 수있는 표준 표기법 ('Bb6', 'G#8', 'F-1', 'A4')에 메모를 지정하려면

. 그것을 here 찾으십시오.

더 복잡한 예제는 해당 사이트의 설명서를 참조하십시오. 의 여러 장을 구현 한 Github repo 노트는 알고리즘 구성에 관한 텍스트 인 Metalevel의 정보를 참조하십시오. 손으로 노트를 연주하는 것 이상을하는 데 관심이 있다면 그 책을 읽는 것이 좋습니다. 그것은 Lisp/Common Music을 위해 작성되었지만 제 repo는 많은 것을 위해 Python/RTcmix 번역본을 가지고 있습니다.