正如评论中提到的那样,我无法在16.04上使用提到的节拍(Linux / Ubuntu现有),至少不是开箱即用。我没有花很多时间来使它工作,因为几乎所有的人都给人留下被抛弃的印象。
是时候写一个...
这个答案(正在进行中)最终应该导致一个节拍器,包括GUI。是时候提及您想要的功能了。
1. CLI节拍器
创建一个简单的节拍器非常简单:
#!/usr/bin/env python3
import subprocess
import sys
import time
bpm = int(sys.argv[1])
pauze = 60/bpm
while True:
time.sleep(pauze)
subprocess.Popen(["ogg123", "/usr/share/sounds/ubuntu/stereo/bell.ogg"])
如何使用
节拍器需要使用vorbis工具才能播放声音
sudo apt-get install vorbis-tools
- 将上面的脚本复制到一个空文件中,另存为Metronome.py
使用bpm作为参数运行它:
python3 /path/to/metronome.py <bpm>
例如:
python3 /path/to/metronome.py 100
以每分钟100次的速度运行
注意
对于声音,我使用了文件/usr/share/sounds/ubuntu/stereo/bell.ogg
,默认情况下该文件应位于您的系统上(经过测试14.04 / 16.04)。但是,您可以使用任何.ogg
喜欢的()样本。在最终版本中,将提供许多选项(声音)。
2.令人震惊的简单GUI版本
下一步,一个非常基本的版本,即没有安装程序的最新版本:
剧本
#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
import sys
import subprocess
import time
from threading import Thread
import os
path = os.path.dirname(os.path.realpath(__file__))
class MetroWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Shockingly simple Metronome")
self.speed = 70
self.run = False
# maingrid
maingrid = Gtk.Grid()
maingrid.set_column_homogeneous(True)
maingrid.set_row_homogeneous(False)
maingrid.set_border_width(30)
self.add(maingrid)
# icon
image = Gtk.Image(xalign=0)
image.set_from_file(os.path.join(path, "icon.png"))
maingrid.attach(image, 0, 0, 1, 1)
# vertical slider, initial value, min, max, step, page, psize
self.v_scale = Gtk.Scale(
orientation=Gtk.Orientation.VERTICAL,
adjustment=Gtk.Adjustment.new(self.speed, 10, 240, 1, 0, 0)
)
self.v_scale.set_vexpand(True)
self.v_scale.set_digits(0)
self.v_scale.connect("value-changed", self.scale_moved)
maingrid.attach(self.v_scale, 1, 0, 2, 1)
self.togglebutton = Gtk.Button("_Run", use_underline=True)
self.togglebutton.connect("clicked", self.time_out)
self.togglebutton.set_size_request(70,20)
maingrid.attach(self.togglebutton, 3, 3, 1, 1)
# start the thread
self.update = Thread(target=self.run_metro, args=[])
self.update.setDaemon(True)
self.update.start()
def scale_moved(self, event):
self.speed = int(self.v_scale.get_value())
def time_out(self, *args):
if self.run == True:
self.run = False
self.togglebutton.set_label("Run")
else:
self.run = True
self.togglebutton.set_label("Pauze")
def pauze(self):
return 60/self.speed
def run_metro(self):
soundfile = "/usr/share/sounds/ubuntu/stereo/bell.ogg"
while True:
if self.run == True:
subprocess.Popen([
"ogg123", soundfile
])
time.sleep(self.pauze())
def run_gui():
window = MetroWindow()
window.connect("delete-event", Gtk.main_quit)
window.set_resizable(False)
window.show_all()
Gtk.main()
run_gui()
图片
如何使用
像cli版本一样,这需要vorbis-tools
:
sudo apt-get install vorbis-tools
将脚本复制到一个空文件中,另存为 metro.py
- 右键点击上面的图片,将其保存在同一个目录中的脚本(完全一致)为:
icon.png
。
只需通过以下命令运行节拍器:
python3 /path/to/metro.py
3.橙色节拍器的PPA
完成了!
节拍器已准备好安装。
Orange Metronome带有一组不同的声音可供选择,并且可以将节拍分组。所有更改将立即应用于正在运行的节拍器:
安装:
sudo apt-add-repository ppa:vlijm/orangemetronome
sudo apt-get update
sudo apt-get install orangemetronome
要做的工作
最后
最新(当前)版本0.5.3
增加了许多声音,但更重要的是,可以选择运行不规则(复合)节拍。在此版本中,它们是硬编码的。可从版本> 1。