这在某种程度上是对这个问题的后续回答:
但现在我不想在歌曲中检测它们,而是想生成它们。
我正在寻找一个可以每分钟输出可配置次数的声音(类似哔哔声的短暂声音)的应用程序。
如果我说 20bpm,它会每 3 秒输出一次该声音。(60/20)
如果是 60bpm,则每秒输出一次。
如果是 120bpm,则每半秒输出一次。
原因是我正在学习如何演奏架子鼓,而 bpm 看起来非常重要。我正在关注这个视频YouTube。
更新
好像他们叫这个名字metronomes
,甚至谷歌也叫这个名字。很酷的东西。
https://www.google.com/search?q=metronomes
谢谢尼克。
答案1
正如评论中提到的,我无法让上述节拍器(适用于 Linux/Ubuntu)在 16.04 上运行,至少不是开箱即用的。我没有花太多时间让它工作,因为它们几乎全部都给人一种被遗弃的印象。
是时候写一篇了...
这个答案(工作正在进行中) 最终应该会指向一个节拍器,包括 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-tools 来播放声音
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. Orange Metronome 的 PPA
完成了!
节拍器已准备好安装。Orange
节拍器带有一组不同的声音可供选择,并且可以对节拍进行分组。所有更改都会立即应用于正在运行的节拍器:
安装:
sudo apt-add-repository ppa:vlijm/orangemetronome
sudo apt-get update
sudo apt-get install orangemetronome
要做的工作
目前,节拍器有四种不同的声音可供选择。未来几天可能会添加一些,其中一些将被替换/更新
从长远来看
从长远来看,我正在考虑添加(自定义)复杂结构的选项,例如 3+3+2、2+2+2+3 等,这些选项在现有的节拍器中我总是没有找到。
最后
最新(当前)版本0.5.3
添加了许多声音,但更重要的是,添加了运行不规则(复合)节拍的选项。在此版本中,它们是硬编码的。从版本 1 开始将可自定义。
答案2
听起来你正在寻找节拍器!
音频编辑软件大胆可以生成稳定的、节拍器般的节拍或音调(查看“生成”菜单),不过下面我会列出一些更简单的程序。Audacity 位于 Ubuntu 软件存储库中,可以通过软件中心或sudo apt install audacity
在终端窗口中输入来安装。
如果您计划在练习期间访问互联网,则在线节拍器有很多。
Ubuntu 软件库中提供的其他节拍器软件包括勾选,克利克,点按, 和节拍器,尽管我自己还没有尝试过任何一个。
答案3
简单的 Bash 节拍器
用法
metronome.sh [beats per minute] [beats per measure]
信息
- 默认以 120 bpm 的速度播放,每 4
- 我的 GitHub repo 上提供了更多信息和更复杂的脚本:节拍器。下面的脚本位于
metronome-core.sh
例如
metronome.sh
metronome.sh 75 # 75 BPM
metronome.sh 120 3 # 120 BPM, 3 beats per measure
脚本
#!/bin/bash
# metronome.sh - Is a metronome.
# Usage: metronome.sh [beats per minute] [beats per measure]
# Set BPM and beats per measure.
bpm="${1-120}"
msr="${2-4}"
# Get seconds per beat using bc.
# "-0.004" accounts for approximate execution time.
beat_time="$(bc -l <<< "scale=5; 60/$bpm-0.004")"
echo "Metronome playing $bpm BPM, $msr beats per measure"
echo -n "Press Ctrl+C to quit."
while true; do
for ((i=1; i<=$msr; i++)); do
if [[ $i -eq 1 ]]; then
# Accentuated beat.
canberra-gtk-play --id='dialog-information' &
else
# Unaccentuated beat
canberra-gtk-play --id='button-toggle-on' &
fi
# Wait before next beat. Will exit if beat time is invalid.
sleep "$beat_time" || exit
done
done
答案4
你试过 kmetronome 吗?应该可以使用 apt-get/synaptic。