2013-10-29 3 views
5

기타 코드를 밴조 코드로 변환하는 응용 프로그램에서 작업하고 있으며 객체를 만들 때 오디오의 "print 문을 사용하고 싶습니다. "탭으로 쓰거나 쓴 코드를 재빨리 연주합니다.파이썬에서 주파수, 화음에서 스트리밍 사운드 재생

필자는 어떤 종류의 혼합 노력이나 파이 게임 (pygame) 모두 포함 또는 파일에 쓰지 않고도 파이썬을 사용하여 여러 사운드를 동시에 재생하는 방법에 대해 혼란스러워했습니다. (440)과 같은 그 옥타브를 생산, 880는 A를 생산하는 --- 반복 가능

  • 로 -

    내가 찾고 할 수있는 뭔가 ...

    1. 테이크 주파수입니다 디스크에 쓰지 않고도 미디 악기를 통해 재생할 수 있습니다.

      fretboard.play([440, 880]) 
      

      및 신호음이 들리면 :

    내가 그에 주파수에 프렛, 주어진 악기 튜닝 변환 및 기반 수 있습니다 장소에 기능을 가지고, 내가 말할 싶습니다. 아니면 시간을 지정할 수 있다면 ...

    fretboard.play([(440,1), (880,1)]) 
    

    각 1 초 동안 동시에들을 수 있습니다.

    이런 종류의 사운드를 얻는 가장 좋은 방법은 무엇이며, 원초적인 멜로디를 만들고 싶다면이 중 몇 가지를 시퀀싱 할 수있는 방법으로 무엇을 할 수 있을까요?

    또한 완전히 다른 종류의 프로그래밍이고 제 질문이 순진한 것처럼 보이는 경우 ("안녕하세요 mittenchops, 채널에 대해 자세히 알아야합니다!") 알려 주시기 바랍니다. 특히 나를 좋은 학습 자원으로 인도하십시오.

  • 답변

    1

    이전에 파이썬에 대한 사운드 분석을 찾고 있었지만, 나는이 사이트 PythonInMusic에 마주 쳤습니다.이 사이트에는 파이썬을위한 음악 소프트웨어 링크가 많이 있습니다.

    다시 한번 생각해 보면, 실시간으로 미디 노트를 출력하려고 할 때 가장 먼저 생각하는 것을 PyFluidSynth이라고합니다. 그것은 파이썬을위한 미디 신디사이저입니다. 다음은 사이트의 몇 가지 예제 코드입니다.

    import time 
    import fluidsynth 
    
    fs = fluidsynth.Synth() 
    fs.start() 
    
    sfid = fs.sfload("example.sf2") 
    fs.program_select(0, sfid, 0, 0) 
    
    fs.noteon(0, 60, 30) 
    fs.noteon(0, 67, 30) 
    fs.noteon(0, 76, 30) 
    
    time.sleep(1.0) 
    
    fs.noteoff(0, 60) 
    fs.noteoff(0, 67) 
    fs.noteoff(0, 76) 
    
    time.sleep(1.0) 
    
    fs.delete() 
    

    올바른 방향으로 안내 할 수있는 희망입니다.

    +1

    쿨, 감사합니다! 이것은 죽은 프로젝트인가요? 다운로드하고 성공적으로 설치했지만 https://code.google.COM/P/pyfluidsynth/나는 ''' 수입 시간 수입 fluidsynth FS = fluidsynth.Synth() 얻을 : 역 추적 (마지막으로 가장 최근 통화) : 파일 "", 라인 1,에서를 AttributeError은 '모듈'개체가없는 속성 '신디' ''' – Mittenchops

    +1

    당신은 다음 Windows에서이 작업을 수행하는 방법에 대한 기사의 링크 당신이 FluidSynth도 (단지 PyFluidSynth)이 설치되어 있는지 확인해야합니다있다 http://stackoverflow.com/questions/5783913/python-synthesize-midi-with-fluidsynth d Linux/OSX에서 업데이트 된 링크 (요구 사항 섹션 아래에 나열된 항목이 다운되었으므로 http://sourceforge.net/apps/trac/fluidsynth/ – user1475777

    +0

    ) 이들은 주파수가 아닌 MIDI 노트입니다. 임의의 주파수를 MIDI 노트 번호로 변환하려고하면 ArgumentError : argument 3 : : wrong type'이 발생합니다. – endolith

    1

    Windows를 사용하는 경우 이전 노트에서 사용한 것과 같은 방법으로 여러 가지 음을 동시에 연주 할 수 있습니다 (예 : C, E 및 G를 동시에 연주하는 대신 재생 C를 누른 다음 E를 누른 다음 G를 매우 빠르며 마지막 메모 (가급적이면 강장제)에서 다소 잡으십시오. 이것은 화음의 효과를 제공하지만, 기타 또는 밴조 사운드 (다른 화음을 연주하는 다른 방법 간의 차이 포함)에서 다른 화음이 얼마나 다른지 보여주고 싶다면 충분하지 않을 수 있습니다. 그러나이 방법은 표준 라이브러리 외부에서 아무 것도 사용하지 않고 (최소한 Windows에서) 가능합니다.

    예제 코드 :

    import winsound 
    import time 
    
    def chord(root_frequency): 
    winsound.Beep(int(root_frequency), 60) 
    winsound.Beep(int(root_frequency*1.25), 60) 
    winsound.Beep(int(root_frequency*1.5), 60) 
    winsound.Beep(int(root_frequency*2), 100) 
    
    while True: 
        chord(261.626) 
        time.sleep(0.35) 
        chord(261.626) 
        time.sleep(0.05) 
        chord(233.082) 
        time.sleep(0.35) 
        chord(233.082) 
        time.sleep(0.05) 
        chord(207.652) 
        time.sleep(0.35) 
        chord(207.652) 
        time.sleep(0.05) 
        chord(195.998) 
        time.sleep(0.35) 
        chord(195.998) 
        time.sleep(0.05)