2012-10-15 3 views
1

나는 song1과 song2 (주석 처리 된 것)를 동시에 연주하려고 시도하고 있지만 myro 또는 winsound를 사용하여 그 방법을 알지 못합니다. 누군가 스레딩을 사용하라고 제안했지만, 나는 그저 아주 초보 프로그래머이기 때문에 어떻게해야할지 모르겠습니다. 누군가 이걸 알아낼 수 있도록 도와 주겠습니까? 그리고/또는 어떻게하는지 자세히 설명해 주시겠습니까? 여기에 지금까지이 작업은 다음과 같습니다어떻게 파이썬에서 동시에 두 개의 다른 노래 파일을 재생하나요?

import winsound 
from myro import * 
def main(): 

    HftM1 = makeSong("Db4 3/8; C4 3/8; Bb3 1/4; Bb3 3/8; Ab3 3/8; Gb3 3/8; Ab3 1/16; C4 3/8; Bb3 3/8; Ab3 1/8; Eb3 1/16; F3 1/16; Ab3 3/8; G3 3/8; F3 3/8; C4 1/16; Db4 3/8; C4 3/8; Bb3 1/8; F3 1/16; Gb3 1/16; Bb3 3/8; Ab3 3/8; Gb3 3/8; C4 3/8; Bb3 3/8; Ab3 1/8; Eb3 1/16; F3 1/16; Ab3 3/8; G3 3/8; F3 3/8") 

    saveSong(HftM1, "HymnfortheMissing1.txt", append=1) 

    HftM2 = makeSong("Bb2 1/8; F3 1/8; Bb3 1/4; Bb2 1/8; F3 3/8; Gb2 1/8; Db3 1/8; Gb3 1/4; Gb2 1/8; Db3 3/8; Ab2 1/8; Eb3 1/8; Ab3 1/4; Ab2 1/8; Eb3 3/8; F2 1/8; C3 1/8; F3 1/4; F2 1/8; C3 3/8; Bb2 1/8; F3 1/8; Bb3 1/4; Bb2 1/8; F3 3/8; Gb2 1/8; Db3 1/8; Gb3 1/4; Gb2 1/8; Db3 3/8; Ab2 1/8; Eb3 1/8; Ab3 1/4; Ab2 1/8; Eb3 3/8; F2 1/8; C3 1/8; F3 1/4; F2 1/8; C3 3/8") 

    saveSong(HftM2, "HymnfortheMissing2.txt", append=1) 

    song1 = readSong("HymnfortheMissing1.txt") 

    #song2 = readSong("HymnfortheMissing2.txt") #This part of the song is supposed to be played at the same time as the first part, but I don't know how to do that so... 

    play = [] 

    for n in range(len(song1)): 
     play = song1[n] 
     note = play[0] 
     duration = play[1] 
     winsound.Beep(int(note), int(duration*2000)) 
main() 
+1

며칠 전에이 정확한 질문을했습니다. – Blender

+0

@ 블렌더 나도 안다. 내가 얻은 대답은별로 도움이되지 않았다. 그래서 나는 그것을 내려 놓고 좀 더 자세하게 다시 올려 놓았다. 더 좋은 것을 얻기를 희망했다. –

답변

3

난 당신이 이런 일에 대한 PyGame를 사용하는 것이 좋습니다,이 related question을 확인하십시오. 믹서 모듈을 사용해야합니다.

일반적으로 오디오 스트림에 대한 수학적 조작을 사용하여 PCM 데이터를 혼합해야합니다 (예제 토론 see this question).


업데이트 : Myro (내가 사용한 적이 있음) beep 기능을 사용하여이 작업을 수행 할 수있는 방법이 있다는 것을 in the docs 말한다 :

경고음 (자기, 지속 시간, 빈도, frequency2 =이 없음) : 소리를 내십시오. 두 개의 톤이 주어지면 로봇이이를 결합합니다. 당신이 기간 1 첫번째 노래에서 두 번째, 그리고 노트 B, 기간 참고 A를 경우

간단한 예를 들어

, 두 번째 노래 2 초에 두 번 beep를 호출해야합니다 : 먼저 두 노트 A를 재생 B를 1 초 동안 동시에 누른 다음 다른 1 초 동안 B 만 연주합니다.

물론이 코드는 PyGame과 같은 것을 사용하여 오디오 파일의 사운드를 재생하고 믹싱하는 것보다 훨씬 복잡합니다.

+0

나는 이미 관련된 질문을 체크 아웃했다. 나머지 부분에 관해서는, 저는 어떻게 아기 프로그래머가 그렇게하는지 알 수있는 방법입니다. 나는 아직 파이 게임을 보지 못했기 때문에 좀 더 단순하거나 상세하게해야 할 것이다. –

+0

'myro'에 대한 링크를 추가했습니다.이 링크는 라이브러리를 사용하여 수행 할 수 있다고 주장합니다. – sinelaw

+0

예,이 프로그램은 노래 파일을 읽습니다. 따라서 "saveSong (HftM1,"HymnfortheMissing1.txt ", append = 1)"코드의 일부입니다. 두 개의 서로 다른 음색을 결합하려는 경우에만 작동합니다. 기본적으로 서로 다른 두 장의 음악 또는 음색 세트를 결합하려고합니다. –

관련 문제