python - 有没有一种方法可以在不使用 winsound 的情况下产生特定频率的哔声?
问题描述
我一直在尝试编写一个以给定频率生成“哔”声的程序。我曾尝试使用 winsound,但我无法随心所欲地开始和停止声音,只能播放一段时间。是否有一个模块可以在特定频率下产生带有启动和停止脉冲的哔声?我目前正在运行 Python 3.8.2(我有 pip,因此可以安装未内置的模块)。
解决方案
这可以通过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()
推荐阅读
- salt-stack - 使用 cmd.run 和 onfail 发送自定义的 salt 事件
- python-3.x - 有没有办法在 sympy 中更改 LaTeX 预览输出大小或字体大小
- laravel - Laravel 在登录前检查用户是否属于某个公司
- javascript - 使用 redux-saga 的 post 请求问题
- c# - 在 HttpWebRequest 调用中获取 400 异常
- google-play - 应用评论在 GooglePlay 控制台中可见,但在 GooglePlay 中不可见
- r - 如何在 R 中应用与 NIS(国家住院患者样本)相关的权重
- java - 如果数据库(oracle)中没有记录结合使用spring jpa的日期列,如何将零显示为计数?
- grep - 通过匹配词过滤json文件
- javascript - 获取url后斜线之间的第一个字符串