Where can I find a metronome for music practice?
Solution 1
As mentioned in a comment, I couldn't get the mentioned metronomes (existing for Linux/Ubuntu) working on 16.04, at least not out of the box. I didn't spend much time in getting it to work, since practically all of them give the impression to be abandoned.
Time to write one...
This answer (work in progress) should eventually lead to a metronome, including GUI. A good time to mention possible features you'd like.
1. CLI metronome
Creating a straightforward metronome turns out to be shockingly simple:
#!/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"])
How to use
-
The metronome needs vorbis-tools, to play the sound
sudo apt-get install vorbis-tools
- Copy the script above into an empty file, save it as metronome.py
-
Run it with the bpm as argument:
python3 /path/to/metronome.py <bpm>
e.g.:
python3 /path/to/metronome.py 100
To run it with 100 beats per minute
Note
For the sound, I used the file /usr/share/sounds/ubuntu/stereo/bell.ogg
, which should be on your system by default (tested 14.04/16.04). You can however use any (.ogg
) sample you like. In the final version, A number of options (sounds) will be available.
2. Shockingly simple GUI version
As a next step, a very basic version, the last version without an installer:
The script
#!/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()
The image
How to use
-
Like the cli version, this one needs
vorbis-tools
:sudo apt-get install vorbis-tools
Copy the script into an empty file, save it as
metro.py
- Right- click on the image above, save it In one and the same directory as the script (exactly) as:
icon.png
. -
Simply run the metronome by the command:
python3 /path/to/metro.py
3. PPA for the Orange Metronome
It is done!
The metronome is ready for installation.
The Orange Metronome comes with a set of different sounds to choose from, and the beats can be grouped. All changes are applied immediately on the running metronome:
To install:
sudo apt-add-repository ppa:vlijm/orangemetronome
sudo apt-get update
sudo apt-get install orangemetronome
Work to do
Currently, the metronome comes with four different sounds to choose from. Probably a few will be added in the next few days, some of them will be replaced/updated
On the longer term
For the longer term, I am thinking of adding the option for (custom) complex structures like 3+3+2, 2+2+2+3 etc., which I always missed in existing metronomes.
Finally
The latest (current) version 0.5.3
adds a number of sounds, but more importantly, the option to run irregular (composite) beats. In this version, they are hard coded. Will be customizable from version > 1.
Solution 2
Simple Bash metronome
Usage
metronome.sh [beats per minute] [beats per measure]
Info
- It plays at 120 bpm in 4 by default
- More info and a much more sophisticated script is available on my GitHub repo: metronome.sh. The below script is there under
metronome-core.sh
For example
metronome.sh
metronome.sh 75 # 75 BPM
metronome.sh 120 3 # 120 BPM, 3 beats per measure
Script
#!/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
Solution 3
I play Guitar and I use gtick. It works pretty well for me. I can adjust the beats per minute, volume and even time signatures, 1/4,2/4,3/4, and so on. You can install it from the command line using:
sudo apt-get install gtick
Related videos on Youtube
Parto
Far better it is to dare mighty things, to win glorious triumphs, even though checkered by failure, than to take rank with those poor spirits who neither enjoy much nor suffer much, because they live in the gray twilight that knows neither victory nor defeat. ― Theodore Roosevelt
Updated on September 18, 2022Comments
-
Parto over 1 year
This is somehow a follow up of this question:
How can I detect the BPM (beats per minute) of a song?
But now instead of detecting them in songs, I want to generate them.
I am looking for an application that will output a sound (something short like a beep) a configurable number of times per minute.
If I say 20bpm, it will output that sound every 3 seconds. (60/20)
If 60bpm, every sec.
If 120bpm every half a sec.The reason for this is that I am learning how to play drum sets and the bpm looks really important. I am following this video on youtube.
update
Seems they are called
metronomes
and even Google got one. Cool Stuff.
https://www.google.com/search?q=metronomes
Thanks Nick. -
Jacob Vlijm over 7 years@Parto cool, I will continue on this. What is your Ubuntu version btw?
-
Parto over 7 yearsCool, will be here. Ubuntu version: 14.04.
-
Jacob Vlijm over 7 years@Parto ...and the first gui version...
-
Parto over 7 yearsThanks man. Seems to be working alright...now off to version 3, right? I know you not finished with this.
-
Parto over 7 yearsI will give you the +15 for the correct answer but +100 to Nick to get him to over 2K rep.
-
Jacob Vlijm over 7 years@Parto absolutely! Might take a day or two, I would like to build in a few options.
-
Parto over 7 yearsThe answer not the person...cool. Let me see what I can do...
-
Parto over 7 yearsAwesome. I like what I see...you will get your bounty - no worries.
-
Jacob Vlijm over 7 years@Parto Done! Will add a few sounds probably, but since it is a ppa, it will be updated automatically :)
-
Parto over 7 yearsAwesome. Let me check it out.
-
Parto over 7 yearsAwesome one too. Tried it out.
-
Jacob Vlijm over 7 yearsAlready mentioned by Nick. Also doesn't work on my system (Ubuntu Unity 16.04).
-
Abel Tom over 7 yearsI know its mentioned by Nick, but i have used gtick myself, he has not, as he mentioned. I use Ubuntu 16.04 LTS and it works for me, are you missing some missing audio dependencies or so?
-
Jacob Vlijm over 7 yearsSee this: dl.dropboxusercontent.com/u/1155139/error.png happens no matter the settings etc., on multiple systems. Read something about it, had it running with tricks in the past, don't remember what it was. Don't want to remember. It should simply work. If something like this is not fixed after years, I prefer to write my own stuff.
-
Jacob Vlijm over 7 yearsAlso already mentioned by Nick.
-
Abel Tom over 7 yearsim sorry it did not work for you, heres my gtick: i.imgsafe.org/f2dc6c70f2.png
-
Jacob Vlijm over 7 yearsWOW @Parto you are extremely generous. I am impressed by the gesture! You are something.