Skip to content

Instantly share code, notes, and snippets.

@dustractor
Created April 14, 2024 03:43
Show Gist options
  • Save dustractor/a011f1a7c72630f9a20cda54e03ea605 to your computer and use it in GitHub Desktop.
Save dustractor/a011f1a7c72630f9a20cda54e03ea605 to your computer and use it in GitHub Desktop.
Set a bpm, get values for milliseconds and hertz, click the buttons to copy to clipboard
import tkinter as tk
import tkinter.ttk as ttk
""" Set a bpm and click the buttons to copy ms and hz values to the clipboard
"""
class App(tk.Tk):
def trace_bpm_var(self,*traceargs):
bpm = self.bpm_var.get()
ms_128_bar = 60*512/bpm*1000
ms_64_bar = 60*256/bpm*1000
ms_32_bar = 60*128/bpm*1000
ms_16_bar = 60*64/bpm*1000
ms_8_bar = 60*32/bpm*1000
ms_4_bar = 60*16/bpm*1000
ms_2_bar = 60*8/bpm*1000
ms_1_bar = 60*4/bpm*1000
ms_1_2_note = 60*2/bpm*1000
ms_1_4_note = 60/bpm*1000
ms_1_8_note = 60/2/bpm*1000
ms_1_16_note = 60/4/bpm*1000
ms_1_32_note = 60/8/bpm*1000
ms_1_64_note = 60/16/bpm*1000
ms_1_128_note = 60/32/bpm*1000
self.ms_128_bar.set(f"{ms_128_bar:.06f}")
self.ms_64_bar.set(f"{ms_64_bar:.06f}")
self.ms_32_bar.set(f"{ms_32_bar:.06f}")
self.ms_16_bar.set(f"{ms_16_bar:.06f}")
self.ms_8_bar.set(f"{ms_8_bar:.06f}")
self.ms_4_bar.set(f"{ms_4_bar:.06f}")
self.ms_2_bar.set(f"{ms_2_bar:.06f}")
self.ms_1_bar.set(f"{ms_1_bar:.06f}")
self.ms_1_2_note.set(f"{ms_1_2_note:.06f}")
self.ms_1_4_note.set(f"{ms_1_4_note:.06f}")
self.ms_1_8_note.set(f"{ms_1_8_note:.06f}")
self.ms_1_16_note.set(f"{ms_1_16_note:.06f}")
self.ms_1_32_note.set(f"{ms_1_32_note:.06f}")
self.ms_1_64_note.set(f"{ms_1_64_note:.06f}")
self.ms_1_128_note.set(f"{ms_1_128_note:.06f}")
hz_128_bar = bpm/60/512
hz_64_bar = bpm/60/256
hz_32_bar = bpm/60/128
hz_16_bar = bpm/60/64
hz_8_bar = bpm/60/32
hz_4_bar = bpm/60/16
hz_2_bar = bpm/60/8
hz_1_bar = bpm/60/4
hz_1_2_note = bpm/60/2
hz_1_4_note = bpm/60
hz_1_8_note = bpm/60*2
hz_1_16_note = bpm/60*4
hz_1_32_note = bpm/60*8
hz_1_64_note = bpm/60*16
hz_1_128_note = bpm/60*32
self.hz_128_bar.set(f"{hz_128_bar:.06f}")
self.hz_64_bar.set(f"{hz_64_bar:.06f}")
self.hz_32_bar.set(f"{hz_32_bar:.06f}")
self.hz_16_bar.set(f"{hz_16_bar:.06f}")
self.hz_8_bar.set(f"{hz_8_bar:.06f}")
self.hz_4_bar.set(f"{hz_4_bar:.06f}")
self.hz_2_bar.set(f"{hz_2_bar:.06f}")
self.hz_1_bar.set(f"{hz_1_bar:.06f}")
self.hz_1_2_note.set(f"{hz_1_2_note:.06f}")
self.hz_1_4_note.set(f"{hz_1_4_note:.06f}")
self.hz_1_8_note.set(f"{hz_1_8_note:.06f}")
self.hz_1_16_note.set(f"{hz_1_16_note:.06f}")
self.hz_1_32_note.set(f"{hz_1_32_note:.06f}")
self.hz_1_64_note.set(f"{hz_1_64_note:.06f}")
self.hz_1_128_note.set(f"{hz_1_128_note:.06f}")
def __init__(self):
super().__init__()
self.bpm_var = tk.DoubleVar()
self.ms_128_bar = tk.DoubleVar()
self.ms_64_bar = tk.DoubleVar()
self.ms_32_bar = tk.DoubleVar()
self.ms_16_bar = tk.DoubleVar()
self.ms_8_bar = tk.DoubleVar()
self.ms_4_bar = tk.DoubleVar()
self.ms_2_bar = tk.DoubleVar()
self.ms_1_bar = tk.DoubleVar()
self.ms_1_2_note = tk.DoubleVar()
self.ms_1_4_note = tk.DoubleVar()
self.ms_1_8_note = tk.DoubleVar()
self.ms_1_16_note = tk.DoubleVar()
self.ms_1_32_note = tk.DoubleVar()
self.ms_1_64_note = tk.DoubleVar()
self.ms_1_128_note = tk.DoubleVar()
self.hz_1_128_note = tk.DoubleVar()
self.hz_1_64_note = tk.DoubleVar()
self.hz_1_32_note = tk.DoubleVar()
self.hz_1_16_note = tk.DoubleVar()
self.hz_1_8_note = tk.DoubleVar()
self.hz_1_4_note = tk.DoubleVar()
self.hz_1_2_note = tk.DoubleVar()
self.hz_1_bar = tk.DoubleVar()
self.hz_2_bar = tk.DoubleVar()
self.hz_4_bar = tk.DoubleVar()
self.hz_8_bar = tk.DoubleVar()
self.hz_16_bar = tk.DoubleVar()
self.hz_32_bar = tk.DoubleVar()
self.hz_64_bar = tk.DoubleVar()
self.hz_128_bar = tk.DoubleVar()
self.bpm_var.set(120.0)
self.bpm_var.trace("w",self.trace_bpm_var)
self.bpm_spinbox = tk.Spinbox(self,
textvariable=self.bpm_var,
from_=30.0,
to=420.0,
increment=1.0)
self.bpm_spinbox.pack()
self.bpmlabel = ttk.Label(self,textvariable=self.bpm_var)
self.btnframe = ttk.Labelframe(self,labelwidget=self.bpmlabel)
self.btnframe.pack()
self.lbl_ms = ttk.Label(self.btnframe,text="ms")
self.btn_ms_1_128_note = ttk.Button(self.btnframe,textvariable=self.ms_1_128_note,command=lambda s=self,v=self.ms_1_128_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_1_64_note = ttk.Button(self.btnframe,textvariable=self.ms_1_64_note,command=lambda s=self,v=self.ms_1_64_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_1_32_note = ttk.Button(self.btnframe,textvariable=self.ms_1_32_note,command=lambda s=self,v=self.ms_1_32_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_1_16_note = ttk.Button(self.btnframe,textvariable=self.ms_1_16_note,command=lambda s=self,v=self.ms_1_16_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_1_8_note = ttk.Button(self.btnframe,textvariable=self.ms_1_8_note,command=lambda s=self,v=self.ms_1_8_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_1_4_note = ttk.Button(self.btnframe,textvariable=self.ms_1_4_note,command=lambda s=self,v=self.ms_1_4_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_1_2_note = ttk.Button(self.btnframe,textvariable=self.ms_1_2_note,command=lambda s=self,v=self.ms_1_2_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_1_bar = ttk.Button(self.btnframe,textvariable=self.ms_1_bar,command=lambda s=self,v=self.ms_1_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_2_bar = ttk.Button(self.btnframe,textvariable=self.ms_2_bar,command=lambda s=self,v=self.ms_2_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_4_bar = ttk.Button(self.btnframe,textvariable=self.ms_4_bar,command=lambda s=self,v=self.ms_4_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_8_bar = ttk.Button(self.btnframe,textvariable=self.ms_8_bar,command=lambda s=self,v=self.ms_8_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_16_bar = ttk.Button(self.btnframe,textvariable=self.ms_16_bar,command=lambda s=self,v=self.ms_16_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_32_bar = ttk.Button(self.btnframe,textvariable=self.ms_32_bar,command=lambda s=self,v=self.ms_32_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_64_bar = ttk.Button(self.btnframe,textvariable=self.ms_64_bar,command=lambda s=self,v=self.ms_64_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_ms_128_bar = ttk.Button(self.btnframe,textvariable=self.ms_128_bar,command=lambda s=self,v=self.ms_128_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.lbl_duration = ttk.Label(self.btnframe,text="")
self.lbl_1_128_note = ttk.Label(self.btnframe,text="1/128th")
self.lbl_1_64_note = ttk.Label(self.btnframe,text="1/64th")
self.lbl_1_32_note = ttk.Label(self.btnframe,text="1/32nd")
self.lbl_1_16_note = ttk.Label(self.btnframe,text="1/16th")
self.lbl_1_8_note = ttk.Label(self.btnframe,text="1/8th")
self.lbl_1_4_note = ttk.Label(self.btnframe,text="1/4")
self.lbl_1_2_note = ttk.Label(self.btnframe,text="1/2")
self.lbl_1_bar = ttk.Label(self.btnframe,text="1 bar")
self.lbl_2_bar = ttk.Label(self.btnframe,text="2 bar")
self.lbl_4_bar = ttk.Label(self.btnframe,text="4 bar")
self.lbl_8_bar = ttk.Label(self.btnframe,text="8 bar")
self.lbl_16_bar = ttk.Label(self.btnframe,text="16 bar")
self.lbl_32_bar = ttk.Label(self.btnframe,text="32 bar")
self.lbl_64_bar = ttk.Label(self.btnframe,text="64 bar")
self.lbl_128_bar = ttk.Label(self.btnframe,text="128 bar")
self.lbl_hz = ttk.Label(self.btnframe,text="hz")
self.btn_hz_1_128_note = ttk.Button(self.btnframe,textvariable=self.hz_1_128_note,command=lambda s=self,v=self.hz_1_128_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_1_64_note = ttk.Button(self.btnframe,textvariable=self.hz_1_64_note,command=lambda s=self,v=self.hz_1_64_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_1_32_note = ttk.Button(self.btnframe,textvariable=self.hz_1_32_note,command=lambda s=self,v=self.hz_1_32_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_1_16_note = ttk.Button(self.btnframe,textvariable=self.hz_1_16_note,command=lambda s=self,v=self.hz_1_16_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_1_8_note = ttk.Button(self.btnframe,textvariable=self.hz_1_8_note,command=lambda s=self,v=self.hz_1_8_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_1_4_note = ttk.Button(self.btnframe,textvariable=self.hz_1_4_note,command=lambda s=self,v=self.hz_1_4_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_1_2_note = ttk.Button(self.btnframe,textvariable=self.hz_1_2_note,command=lambda s=self,v=self.hz_1_2_note:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_1_bar = ttk.Button(self.btnframe,textvariable=self.hz_1_bar,command=lambda s=self,v=self.hz_1_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_2_bar = ttk.Button(self.btnframe,textvariable=self.hz_2_bar,command=lambda s=self,v=self.hz_2_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_4_bar = ttk.Button(self.btnframe,textvariable=self.hz_4_bar,command=lambda s=self,v=self.hz_4_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_8_bar = ttk.Button(self.btnframe,textvariable=self.hz_8_bar,command=lambda s=self,v=self.hz_8_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_16_bar = ttk.Button(self.btnframe,textvariable=self.hz_16_bar,command=lambda s=self,v=self.hz_16_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_32_bar = ttk.Button(self.btnframe,textvariable=self.hz_32_bar,command=lambda s=self,v=self.hz_32_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_64_bar = ttk.Button(self.btnframe,textvariable=self.hz_64_bar,command=lambda s=self,v=self.hz_64_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.btn_hz_128_bar = ttk.Button(self.btnframe,textvariable=self.hz_128_bar,command=lambda s=self,v=self.hz_128_bar:[s.clipboard_clear(),s.clipboard_append(str(v.get()))][:])
self.lbl_ms.grid(column=0,row=0)
self.btn_ms_1_128_note.grid(column=0,row=1)
self.btn_ms_1_64_note.grid(column=0,row=2)
self.btn_ms_1_32_note.grid(column=0,row=3)
self.btn_ms_1_16_note.grid(column=0,row=4)
self.btn_ms_1_8_note.grid(column=0,row=5)
self.btn_ms_1_4_note.grid(column=0,row=6)
self.btn_ms_1_2_note.grid(column=0,row=7)
self.btn_ms_1_bar.grid(column=0,row=8)
self.btn_ms_2_bar.grid(column=0,row=9)
self.btn_ms_4_bar.grid(column=0,row=10)
self.btn_ms_8_bar.grid(column=0,row=11)
self.btn_ms_16_bar.grid(column=0,row=12)
self.btn_ms_32_bar.grid(column=0,row=13)
self.btn_ms_64_bar.grid(column=0,row=14)
self.btn_ms_128_bar.grid(column=0,row=15)
self.lbl_duration.grid(column=1,row=0)
self.lbl_1_128_note.grid(column=1,row=1)
self.lbl_1_64_note.grid(column=1,row=2)
self.lbl_1_32_note.grid(column=1,row=3)
self.lbl_1_16_note.grid(column=1,row=4)
self.lbl_1_8_note.grid(column=1,row=5)
self.lbl_1_4_note.grid(column=1,row=6)
self.lbl_1_2_note.grid(column=1,row=7)
self.lbl_1_bar.grid(column=1,row=8)
self.lbl_2_bar.grid(column=1,row=9)
self.lbl_4_bar.grid(column=1,row=10)
self.lbl_8_bar.grid(column=1,row=11)
self.lbl_16_bar.grid(column=1,row=12)
self.lbl_32_bar.grid(column=1,row=13)
self.lbl_64_bar.grid(column=1,row=14)
self.lbl_128_bar.grid(column=1,row=15)
self.lbl_hz.grid(column=2,row=0)
self.btn_hz_1_128_note.grid(column=2,row=1)
self.btn_hz_1_64_note.grid(column=2,row=2)
self.btn_hz_1_32_note.grid(column=2,row=3)
self.btn_hz_1_16_note.grid(column=2,row=4)
self.btn_hz_1_8_note.grid(column=2,row=5)
self.btn_hz_1_4_note.grid(column=2,row=6)
self.btn_hz_1_2_note.grid(column=2,row=7)
self.btn_hz_1_bar.grid(column=2,row=8)
self.btn_hz_2_bar.grid(column=2,row=9)
self.btn_hz_4_bar.grid(column=2,row=10)
self.btn_hz_8_bar.grid(column=2,row=11)
self.btn_hz_16_bar.grid(column=2,row=12)
self.btn_hz_32_bar.grid(column=2,row=13)
self.btn_hz_64_bar.grid(column=2,row=14)
self.btn_hz_128_bar.grid(column=2,row=15)
app = App()
app.mainloop()
@dustractor
Copy link
Author

Screenshot 2024-04-13 224340

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment