Python简单的音频生成器

2023-11-25

寻找一些(简单的)Python 音调生成器,用于在带有 USB 声卡的 raspi 上运行的以下脚本。需要动态音调开/关和频率改变。

import serial, time
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=0.1)

def monitor(inp=0):
    if inp != inpold:
        if inp != 0:
            ser.setDTR(1)   # LED on (GPIO?)
                # start tone here, generate tone forever or change tone freq
        else:
            ser.setDTR(0)   # LED off
                # stop tone without clicks
        inpold = inp 
While True:
    time.sleep(0.01)        # min lenght tone pulse 10 milliseconds
    input = ser.getCTS()        # or GPIO input
    monitor(input)

所以我找到了几种方法来做到这一点,我将按可行性顺序排列它们(最容易先申请):-


关于语气的假设:-

  • 波形类型 = 正弦波

  • 频率=440Hz


方式1(离线曲目,没有声音设备/后端麻烦)

1- 使用Audacity软件(或任何类似的软件)来创建 特定的音调并将其导出到文件。

2- 从 Audacity 中,从上面的选项卡中选择“生成”,然后选择 “音调”并在频率旁边输入 440。

3- 在 Audacity 中,从上面的选项卡中选择“文件”,然后选择“导出”并选择 导出为您喜欢的任何扩展名,最好是 mp3。 '输出.mp3'

4-pip安装播放声音

5-在Python中

import playsound
playsound.playsound('out.mp3')

方式2(灵活,但必须确保后端工作正常)

1-pip安装pygame

2-如果您在 Linux 环境下工作,请确保安装以下库

libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev

3-在Python中

import numpy
import pygame

sampleRate = 44100
freq = 440

pygame.mixer.init(44100,-16,2,512)
# sampling frequency, size, channels, buffer

# Sampling frequency
# Analog audio is recorded by sampling it 44,100 times per second, 
# and then these samples are used to reconstruct the audio signal 
# when playing it back.

# size
# The size argument represents how many bits are used for each 
# audio sample. If the value is negative then signed sample 
# values will be used.

# channels
# 1 = mono, 2 = stereo

# buffer
# The buffer argument controls the number of internal samples 
# used in the sound mixer. It can be lowered to reduce latency, 
# but sound dropout may occur. It can be raised to larger values
# to ensure playback never skips, but it will impose latency on sound playback. 

arr = numpy.array([4096 * numpy.sin(2.0 * numpy.pi * freq * x / sampleRate) for x in range(0, sampleRate)]).astype(numpy.int16)
arr2 = numpy.c_[arr,arr]
sound = pygame.sndarray.make_sound(arr2)
sound.play(-1)
pygame.time.delay(1000)
sound.stop()

方式3(正弦波)

如果您需要的只是正弦波,请使用此选项

1-pip安装pysine

2-如果您在Linux环境下工作,请确保安装以下库

portaudio19-dev

但是,如果您在 Windows 环境下工作,请确保使用 pipwin 安装它

pipwin install pysine

3-在Python中

import pysine
pysine.sine(frequency=440.0, duration=1.0) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python简单的音频生成器 的相关文章

随机推荐

  • 如何更改单个提交的提交作者?

    我想更改历史中某个特定提交的作者 这不是最新的提交 Related 如何更改多次提交的作者和提交者姓名 电子邮件 从历史记录中比您需要修改的提交更早的点进行交互式变基 git rebase i
  • JavaScript 中的不可变哈希和数组实现?

    有没有简单的不可变的javascript 中的哈希和数组实现 我不需要最好的速度 比克隆更好的合理速度就很好了 另外 如果有simpleJava 或其他一些语言的实现可以是易于理解和移植对于JavaScript来说 这也很好 UPDATE
  • 为什么 Azure AD 在多租户场景中无法登录非管理员?

    环境 两个 Azure AD Company 顾客 Company发布一个名为的 ASP NET5 Web 应用程序Portal 该应用程序设置为多租户 顾客有 2 个用户 user 谁只是一个用户 和admin 谁是目录中的全局管理员 P
  • 如何使用 django-smart-select

    假设我有以下模型 class Location models Model continent models CharField max length 20 country models ForeignKey Country 我需要创建一个依
  • Javascript nodeValue 返回 null

    标题应该很好地描述我的问题 这是我的代码 div div
  • JSONP的解释和使用[重复]

    这个问题在这里已经有答案了 可能的重复 请解释一下 JSONP 什么是 JSONP 为什么需要它 以及它的一些实际用法示例 JSONP 代表带有填充的 JSON 它为客户端提供了一种方法来指定应添加到 JSON 响应开头的一些代码 这允许
  • 通过曲面细分着色器将数据传递到片段着色器

    我对着色器管道在每个阶段传递数据方面的工作原理感到有点困惑 我想做的是传递在顶点阶段加载的颜色数据glVertexAttrib4fv 通过曲面细分控制着色器 然后是曲面细分评估着色器 这样就可以在片段着色器中使用 我不确定我是否犯了某种概念
  • 使用python输出到两个不同的控制台

    我正在编写一个脚本 并且有两种不同类型的输出 例如 Op1 和 Op2 我想将 Op1 输出到调用 python 进程的终端 而 Op2 应该转储到不同的终端实例 我可以这样做吗 即使答案是特定于 Linux 的也没关系 我需要一个临时解决
  • 为什么 document.getElementsBy__ 方法不返回 HTMLCollection?

    为什么不getElementsByName getElementsByTagName and getElementsByClassName返回一个HTMLCollection W3C MDN 代替NodeList W3C MDN 所有这三个
  • 什么是 org.eclipse.wst.common.component 以及如何将它用于 ant

    我有一个 Eclipse 工作区 用于工作 其中有一个 Ear 项目 我用它来 导出 将 Ear 文件部署到 JBoss 服务器 然而 他们最近要求我创建一个可以构建工作区并创建耳朵的 Ant 脚本 我已经成功地完成了这一点 当我尝试使用使
  • 带有Rails ajax的pushState

    我有一个索引操作页面 显示了用 Kaminari 分页的项目列表 我已经向它们添加了 ajax 功能 现在正在尝试使用 PushState 来获取适合的 URL 我的问题是 当我的分页链接通过以下方式完成时 如何获取传递给 PushStat
  • Gson 可选字段和必填字段

    一个人应该如何应对Gson必填字段与可选字段 由于所有字段都是可选的 因此我无法根据响应 json 是否包含某个键来真正使我的网络请求失败 Gson将简单地将其解析为 null 我正在使用的方法gson fromJson json mCla
  • 增加具有不同线程数的 2 个交替 OpenMP 并行区域的内存消耗

    当我重复在具有不同线程数的 2 个 OpenMP 并行区域之间交替时 内存消耗无限增加 数十 MB 甚至更多 即使在如此简单的代码片段中它也能做到这一点 include
  • 轮盘赌选择算法[重复]

    这个问题在这里已经有答案了 谁能提供一些轮盘赌选择函数的伪代码 我将如何实现这个 我真的不明白如何阅读这个数学符号 我想要通用算法 其他答案似乎假设您正在尝试实现轮盘赌游戏 我认为您问的是进化算法中的轮盘赌选择 这是一些Java代码实现轮盘
  • 如何在 Elixir 中重写 Erlang 组合算法?

    过去几周我一直在修补 Elixir 我刚刚遇到这个简洁的Erlang 中的组合算法 我尝试在 Elixir 中重写但卡住了 艾尔兰版本 comb 0 gt comb gt comb N H T gt H L L lt comb N 1 T
  • 在 Android 应用程序中显示日历

    如果有人能为我提供一个关于使用哪个组件的解决方案 以便我可以在我的 Android 应用程序中显示一个相当漂亮的日历 我将不胜感激 这两天我一直在寻找解决方案 但不幸的是找不到解决方案 由于这是一个非常基本的要求 我相信会有一个完美的解决方
  • C/C++ 编译器可以通过 pthread 库调用合法地将变量缓存在寄存器中吗?

    假设我们有以下代码 include
  • 为 PL/pgSQL 中实现的函数设置配置参数

    我在 PL pgSQL 中编写了几个函数 我想通过一些配置条目来控制它们的行为 这些配置条目也可以在运行时更改 每个会话 是否可以在中定义新的自定义配置条目postgresql conf 如果没有 解决办法是什么 作为我的搜索结果 我发现了
  • Python 多重处理 >= 125 列表永远不会完成

    我正在尝试实现这个多处理tutorial为了我自己的目的 起初我认为它的扩展性不好 但是当我做了一个可重现的示例时 我发现如果项目列表超过 124 它似乎永远不会返回答案 在x 124它在 0 4 秒内运行 但是当我将其设置为x 125它永
  • Python简单的音频生成器

    寻找一些 简单的 Python 音调生成器 用于在带有 USB 声卡的 raspi 上运行的以下脚本 需要动态音调开 关和频率改变 import serial time ser serial Serial dev ttyUSB0 9600