>

Python에서 사인파 사운드를 생성해야하며 주파수, 지속 시간 및 상대 볼륨을 제어 할 수 있어야합니다. '생성'이란 파일에 저장하지 않고 스피커를 통해 즉시 재생하기를 원한다는 의미입니다.

이 작업을 수행하는 가장 쉬운 방법은 무엇입니까?


  • 답변 # 1

    import pyaudio
    import numpy as np
    p = pyaudio.PyAudio()
    volume = 0.5     # range [0.0, 1.0]
    fs = 44100       # sampling rate, Hz, must be integer
    duration = 1.0   # in seconds, may be float
    f = 440.0        # sine frequency, Hz, may be float
    # generate samples, note conversion to float32 array
    samples = (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32)
    # for paFloat32 sample values must be in range [-1.0, 1.0]
    stream = p.open(format=pyaudio.paFloat32,
                    channels=1,
                    rate=fs,
                    output=True)
    # play. May repeat with different volume values (if done interactively) 
    stream.write(volume*samples)
    stream.stop_stream()
    stream.close()
    p.terminate()
    
    

  • 답변 # 2

    ivan-onys는 훌륭한 답변을했지만 그에 약간의 추가 사항이 있습니다. 이 스크립트는 Pyaudio 쓰기 메소드에 float32의 문자열 데이터가 필요하기 때문에 예상보다 4 배 짧은 사운드를 생성하지만 numpy 배열을이 메소드에 전달하면 전체 배열을 엔티티로 문자열로 변환하므로 numpy 배열의 데이터를 바이트 시퀀스는 다음과 같습니다 :

    samples = (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes()
    
    

    이 라인도 변경해야합니다 :

    stream.write(samples)
    
    

  • 답변 # 3

    Pygame multimedia 라이브러리는 Python에서 사운드를 처리하는보다 일관되고 쉬운 설치 방법 중 하나입니다.

    이것을 추천합니다-pygame.sndarray 서브 모듈이 있습니다.이 모듈은 pygame.mixer 모듈에서 재생할 수있는 고수준 사운드 객체가되는 데이터 벡터의 숫자를 조작 할 수 있습니다.

    pypy.org 사이트의 문서는 sndarray 모듈을 사용하기에 충분해야합니다.

  • 답변 # 4

    Python 3.5 이상에서 가장 좋은 방법은 개발자가 권장하는 패키지를 설치하는 것입니다.

    http://people.csail.mit.edu/hubert/pyaudio/

    데비안에서는

    sudo apt-get install python3-all-dev portaudio19-dev
    
    

    pyaudio를 설치하기 전에

  • 답변 # 5

    bregman lab 툴박스에는 원하는 기능을 정확하게 수행하는 일련의 기능이 있습니다. 이 파이썬 모듈은 약간 버그가 있지만 자신의 기능을 얻기 위해이 코드를 조정할 수 있습니다

  • 이전 asp.net - C #에서 프로그래밍 방식으로 메타 태그 추가
  • 다음 c++ - char *를 문자열로 복사하거나 그 반대로 복사하는 방법