python - 有没有一种方法可以在不使用 winsound 的情况下产生特定频率的哔声?

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

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

最佳答案

这可以通过 PyAudio 来完成- 用于 python 的 Portaudio 绑定(bind)。

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

关于python - 有没有一种方法可以在不使用 winsound 的情况下产生特定频率的哔声?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61597455/

相关文章:

Python - 更新 GUI,使其始终使用更新后的列表

python - 使用 super() 和使用 self 从父类调用方法有什么区别?

python - pytest - 在输出中显示测试模块名称

python - QValidator的正确使用

python - 如何在不先构建列表的情况下创建对象的 numpy 数组?

android-studio - 如何在Android Studio中播放声音的同时记录声音?

ios - 音频中的淡入淡出效果通过在ios中使用AVAssetExportSession

python - 无法使用 Django ORM 关闭脚本中的自动提交

python - API端点上莫名其妙的格式化魔术

ios - AVAudioPlayer 在使用调试脚本之前无法播放声音