Python 中的节拍器脚本中的计时问题(使用 Pygame)[重复]

2023-12-07

我正在尝试编写一个节拍器脚本,它可以为我提供音频反馈并将 MIDI 消息发送到合成器。我用Python 2.7.5+ and Pygame 1.9.1.release在 Linux Mint 16 上。我对 MIDI 部分很满意。令我烦恼的是时机。

首先,这基本上是我所做的:

import time
import pygame.mixer

pygame.mixer.init()
sound = pygame.mixer.Sound('click.wav')

interval = 0.5 #should be equivalent to 120 bpm

t0 = time.time()

while True: #infinite loop, use keyboard interrupt Ctrl-C
    if time.time() - t0 >= interval:
        sound.play()
        t0 = time.time()

然而,这是相当不稳定的并且不可能演奏乐器。

我也调查过time.clock():

import time
import pygame.mixer

pygame.mixer.init()
sound = pygame.mixer.Sound('click.wav')

interval = 0.5 #should be equivalent to 120 bpm

t0 = time.clock()

while True:
    if time.clock() - t0 >= interval:
        sound.play()
        t0 = time.clock()

...也pygame.time.Clock(), 具体来说pygame.time.Clock.tick_busy_loop(),据说它通过消耗更多的处理器来提供更好的精度:

import pygame.time
import pygame.mixer

pygame.mixer.init()
#pygame.time has no init function

sound = pygame.mixer.Sound('click.wav')
clock = pygame.time.Clock()

interval = 0.5 #should be equivalent to 120 bpm

time_passed = 0
clock.tick_busy_loop()

while True: #infinite loop, use keyboard interrupt Ctrl-C
    time_passed += clock.tick_busy_loop()
    if time_passed >= interval:
        sound.play()
        time_passed = 0

所有这些都产生了相同的问题。虽然,我不得不承认,当我尝试这些最小的例子时,pygame.time溶液非常稳定。这里的问题是,在我的实际脚本中,我在while循环似乎会影响循环所需的时间,并且点击开始结巴和绊倒。

我在看这个答案,但我不太了解 MIDI 文件的概念。这会有帮助吗?一些解释会是最有帮助的。

此外,我试图把

import os
os.nice(-19)

一开始,为了获得更高的进程优先级,但没有明显的改善。

我想知道如何才能像 Cubase、Ableton 和 Logic 等常见 DAW 那样实现稳定的节拍器。我读到了生成或预先录制相关节奏的音频样本并链接这些样本以实现更高精度的方法,但我真的很想避免这种方法,因为它看起来非常费力。

有什么聪明的方法我可以使用马厩pygame.time变体并在其他地方进行处理?

如果有任何用处:这是实际的while我正在运行的循环:

bpm = 80.0
beats_in_one_second = bpm/60.0
midi_send_interval = beats_in_one_second/24.0 #MIDI convention

playing = True
player.write_short(250) #start
frame_count = 0
quarter_count = 0
time_0 = time.time()

while playing:
    if time.time() - time_0 >= midi_send_interval:
        player.write_short(248) #clock tick
        time_0 = time.time()
        frame_count += 1
        if frame_count == 24:
            sound.play()
            quarter_count += 1
            frame_count = 0
            if quarter_count == 16:
                playing = False

player.write_short(252) #stop

问题是 MIDI 标准要求每个四分音符有 24 个消息,这显着增加了对精度的要求。


None

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

Python 中的节拍器脚本中的计时问题(使用 Pygame)[重复] 的相关文章

  • 随机“pythonw.exe 已停止工作”崩溃

    SO 有问题的代码如下 但是它也可能随机发生在其他脚本上 我不认为错误在于代码中 由于某种原因 它有时会完全随机地崩溃并弹出 pythonw exe 已停止工作 的消息 可能是在 5 小时 24 小时或 5 天后 我不明白为什么会崩溃 fr
  • Pandas HD5-查询,其中表达式失败

    我想查询 HDF5 文件 我愿意 df to hdf pfad df format table 将数据帧写入光盘 为了阅读我使用 hdf pandas HDFStore pfad 我有一个列表 其中包含numpy datetime64值称为
  • jQuery 时间戳之前的时间?

    下面是一个非常好的 jQuery 插件 与他们在 SO 上使用的插件非常相似 对我来说问题是它用它来转换时间
  • C 代码获取相对于 UTC 的本地时间偏移(以分钟为单位)?

    我没有找到一种简单的方法来获取本地时间和 UTC 时间之间的时间偏移 以分钟为单位 起初我打算使用tzset 但它不提供夏令时 根据手册页 如果夏令时有效 它只是一个不为零的整数 虽然通常是一个小时 但在某些国家 地区可能是半小时 我宁愿避
  • os.path.expanduser("~") 的替代方案?

    在Python 2 7 x中 os path expanduser Unicode 已损坏 这意味着如果 的扩展中包含非 ASCII 字符 则会出现异常 http bugs python org issue13207 http bugs p
  • 我使用 tm/mktime 是否错误,如果没有,有解决方法吗?

    我认为下面的程序应该输出从公元 1 年到 1970 年每年第一天到 1970 年的秒数 前面是time t在编译它的系统上 CHAR BIT是一个宏 所以我认为你不能只是复制编译后的可执行文件并假设它是正确的 尽管实际上一切都使用 8 位c
  • 使用 pyinstaller 制作的可执行文件出现运行时错误

    所以我使用 Pygame 制作了一个游戏 现在我想用它制作一个可执行文件 首选独立可执行文件 所以我用它来制作可执行文件 pyinstaller onefile main py 编译顺利 但运行时出现错误 这是错误 Traceback mo
  • 马里奥在 pygame 中跑过屏幕太快

    首先是代码 import pygame sys from pygame locals import class Person pygame sprite Sprite def init self screen self screen scr
  • Pygame:有人可以帮我实现双跳吗?

    我知道已经有其他关于此问题的帖子了 但我的运动系统与我发现的有点不同 所以随后我问这个问题 我的运动系统基于一个名为的命名元组Move up left right down 然后就是这个 def update self move block
  • Python:多处理和请求

    以下是我正在运行的使用多处理并行触发 HTTP 请求的代码片段 在控制台上运行后 它挂在 requests get url 处 既不继续前进也不抛出错误 def echo 100 q print before r requests get
  • 在 Python 中比较日期 - 如何处理时区修饰符

    我正在做Python日期比较 假设我有一个这样的约会 Fri Aug 17 12 34 00 2012 0000 我按以下方式解析它 dt datetime strptime Fri Aug 17 12 34 00 2012 0000 a
  • 如何在 Numpy 中实现垃圾收集

    我有一个名为main py 它引用另一个文件Optimisers py它仅具有功能并用于for循环进入main py 这些函数都有不同的优化功能 This Optimisers py然后引用另外两个类似的文件 其中也只有函数 它们位于whi
  • 使用python删除未访问的文件

    My django app解析用户上传的一些文件 用户上传的文件可能会在服务器中保留很长时间 而没有被应用程序解析 如果很多用户上传大量文件 这可能会增加大小文件 我需要删除应用程序最近未解析的那些文件 比如not accessed for
  • 如何将 PyTTSx 的输出保存到 wav 文件

    我正在尝试找到为什么我的代码无法正常工作的解决方案 我使用的解决方案来自在 Python 中将合成的文本转语音记录到文件中 https stackoverflow com questions 9900137 recording synthe
  • 如何使网页在 python selenium 中加载时完全显示?

    我的主要目标是阅读网页中的表格并解释它所具有的总元素 但是因为你必须向下滚动才能找到其他不被这句话 追赶 的元素 table css driver find elements by id DeletButtn 然后我决定放大到 30 以捕捉
  • 为什么 python 3 中的 json.dumps() 返回与 python 2 不同的值? [复制]

    这个问题在这里已经有答案了 我需要在 Python 3 中生成 MD5 哈希 以便与在 Python 2 上生成的 MD5 哈希进行比较 但 json dumps 的结果不同 因为在 Python 2 上 元素的位置发生了变化 MD5 结果
  • Youtube + Selenium ChromeDriver (Python) - 如何知道视频何时结束?

    编辑 已解决 请参阅问题文本的中间 关于理解正在播放视频的 Youtube 页面内容的简单问题 总之 我使用 Selenium 在 Youtube 上播放视频 作为基于浏览器的 GUI 的一部分 我需要知道视频何时播放完毕 以便 GUI 执
  • 为 Python 终端提供持久的历史记录

    有没有办法告诉交互式 Python shell 保留会话之间执行命令的历史记录 当会话运行时 在执行命令后 我可以向上箭头并访问所述命令 我只是想知道是否有某种方法可以保存一定数量的这些命令 直到下次使用 Python shell 时 这将
  • 将字符转换为日期时间 odoo 9

    我有两个字符字段 从 odoo 中的 excel 或 csv 导入数据 time 1 fields Char string Time 1 time 2 fields Char string Time 2 result fields Floa
  • 如何在python中将所有参数转换为字典

    我想要我的功能func args kwargs 返回一本字典 其中包含我提供给它的所有参数 例如 func arg1 arg2 arg3 value3 arg4 value4 应该返回一本这样的字典 arg1 value1 arg2 val

随机推荐

  • Powershell 网页抓取 SSL/TLS 问题

    我想在服务器上运行网页抓取脚本 当前脚本收集指定页面上的 html url http websms net httpWebRequest request net webRequest create url net httpWebRespon
  • UITableview ,动态部分和行

    想要动态创建一个 uitableview 其中一个部分有 2 行 我编写了这段代码 但我遇到了所有部分中仅重复前 2 行的问题 现在我有这行 0 1 gt 第 0 节 第 0 1 行 gt 第 1 节 第 0 1 行 gt 第 2 节 想要
  • Magento 购物车/magento 外部的会话数据

    这可能会有点令人困惑 因为我已经尝试了一切来使这项工作成功 我想要的只是我的品牌网站 domain com 中的一个链接 该链接显示我的 magento 1 5 1 购物车 domain com shop 中的数量我很容易提取产品数据和导航
  • Velocity 模板 - 正则表达式

    我刚刚开始在新工作中使用速度 但我真的不喜欢我已经发现的东西 在这一点上 我实际上更喜欢 freemarker X 不管怎样 我正在尝试做一个正则表达式 我看到了这点 搜索 正则表达式 但这并不完全是我正在做的实现 我没有任何对java的访
  • 我想在 ping 主机后获取 ping 执行时间和结果字符串

    我想在 ping 主机后获取 ping 执行时间和结果字符串 我该怎么做 long currentTime System currentTimeMillis boolean isPinged InetAddress getByName se
  • Defer 块未执行

    我在操场上执行以下快速代码 func A print Hello guard 1 2 else return defer print World A 我期待看到 Hello World 相反 只有Hello被打印 为什么是这样 我缺少什么
  • Matlab中两点之间的距离

    我有 2 个向量 一个的尺寸为 200 2 另一个的尺寸为 3 2 它们都是笛卡尔坐标系中的点 我想计算前 200 个点和其他 3 个点之间的距离并将它们存储在向量中 我正在使用这样的函数 for i 1 cur for j 1 200 L
  • 带有 SpriteKit 的 iOS 通用设备应用程序,如何缩放所有视图的节点?

    我想做一个景观 app to be 普遍的 以便精灵节点根据运行应用程序的任何视图大小按比例缩放 我想要一个完全程序化解决方案 因为我不喜欢IB 我的游戏非常简单 我不需要任何类型的滚动或缩放 因此整个游戏将始终存在并占据整个视图 我正在寻
  • java将数组刷新到jList中

    好的 我有一个 JList 内容是通过数组提供的 我知道如何向数组添加元素 但我想知道如何刷新 JList 或者甚至可能吗 我试过谷歌 import java applet Applet import java awt import jav
  • 如何满足迭代器特征界限才能在这里使用 Rayon?

    我正在尝试使用 Rayon 的并行化 Ramer Douglas Peucker 线简化算法par iter代替iter extern crate num traits use num traits Float ToPrimitive ex
  • 属性访问器[重复]

    这个问题在这里已经有答案了 之间有什么根本区别吗 public string Name get return name set name value and public string Name get set 您可以访问内部字段 在第二种
  • 使用循环创建菱形图案

    我正在尝试编写一个程序 该程序读取整数并使用星号显示给定边长的实心菱形 例如 如果边长是4 程序应该显示 这就是我正在尝试做的事情 它正在执行 但我似乎无法为程序提供正确的空间来正确显示菱形形状 userInput int input Pl
  • 如果 json 字段具有特殊字符(如点),则访问 json 字段值

    如果我有一个 json 文件 其中的字段具有特殊字符 在我的例子中是点 我如何访问空手道中的字段值 例如有一个名为 example json 的 json 文件 field1 field2 value2 field 3 value3 如果我
  • 根 ViewController 内的 UIViewController 不旋转

    我有一个 UIViewController 我想将其作为独立层添加到整个应用程序的顶部 所以我尝试在应用程序委托中使用 self window addSubview viewController view 将其添加到 UIWindow 中
  • 将 9 位值作为字节写入 C 中的文件

    我有一个整数值从 0 511 最多 9 位 的数组 我正在尝试将其写入文件fwrite 例如 对于数组 257 258 259 Which is 100000001 100000010 100000011 I am trying to wr
  • 设置配置文件的过期时间

    是否可以设置配置文件的到期日期 我正在公司内部进行试用 我想设定expiration审判结束的日期 而不是仅仅一年之后creation日期 是否有可能 或者总是需要一年的时间creation date 另外 如果无法设置expiration
  • 无法从 json 对象访问数据

    我已将 json 数据结构存储在具有单列的数据框中 名为json 数据在R中 所以我的 json 文本以这种格式存储 row 1 results formatted address Sahibzada Ajit Singh Nagar Pu
  • 使用 Dumper 不会触发故障

    当运行这样的代码时 use strict print Dumper something 编译和运行时没有打印任何内容 也没有发生错误 为什么会出现这种情况 为什么不strict阻止此代码运行 尽管 Dumper 未知 但为什么运行时没有错误
  • 在docker容器内运行maven集成测试

    在运行集成测试之前 我使用 dockerfile maven 插件将我的 jar 文件移动到 docker 容器内 但是 mvn verify 命令构建图像并运行集成测试 结果测试失败 有人可以帮我在运行集成测试之前运行 docker 镜像
  • Python 中的节拍器脚本中的计时问题(使用 Pygame)[重复]

    这个问题在这里已经有答案了 我正在尝试编写一个节拍器脚本 它可以为我提供音频反馈并将 MIDI 消息发送到合成器 我用Python 2 7 5 and Pygame 1 9 1 release在 Linux Mint 16 上 我对 MID