Есть ли способ создания звукового сигнала с определенной частотой c без использования winsound? - PullRequest
0 голосов
/ 04 мая 2020

Я пытался написать программу, которая генерирует звуковые сигналы с заданной частотой. Я пытался использовать winsound, но я не мог запускать и останавливать звуки в импульсном режиме, просто проигрывал их какое-то время. Есть ли модуль, который позволяет генерировать звуковые сигналы с определенной частотой c с импульсом запуска и остановки? В настоящее время я использую Python 3.8.2 (у меня есть pip, поэтому я могу устанавливать не встроенные модули).

1 Ответ

0 голосов
/ 09 мая 2020

Это можно сделать с помощью PyAudio - привязки Portaudio для python.

import pyaudio
from math import pi
import numpy as np

p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paFloat32, channels=1, rate=44100, output=1,)


def make_sinewave(frequency, length, sample_rate=44100):
    length = int(length * sample_rate)
    factor = float(frequency) * (pi * 2) / sample_rate
    waveform = np.sin(np.arange(length) * factor)

    return waveform

wave = make_sinewave(500, 1)

stream.write(wave.astype(np.float32).tostring())
stream.stop_stream()
stream.close()
...