有没有一种方法可以在不使用winsound的情况下以特定的频率发出提示音?

时间:2020-05-04 16:51:25

标签: python python-3.x audio python-3.8

我一直在尝试编写一个程序,该程序以给定的频率生成“哔”声。我曾尝试使用winsound,但一直无法启动和停止冲动的声音,只能播放一段时间。是否有一个模块可以通过启动和停止脉冲以特定的频率发出哔哔声?我目前正在运行Python 3.8.2(我拥有pip,因此可以安装未内置的模块)。

1 个答案:

答案 0 :(得分:0)

这可以通过PyAudio-python的Portaudio绑定来完成。

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()