Created
April 14, 2024 03:43
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
Author
dustractor
commented
Apr 14, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment