Add Files
This commit is contained in:
parent
7fc1e4ca2c
commit
78e9cc1d1b
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[submodule "OffiTracker"]
|
||||
path = OffiTracker
|
||||
url = https://git.muellers-software.org/Minki/OffiTracker
|
1
OffiTracker
Submodule
1
OffiTracker
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit fb3665eb8cfaff83b4a69dd58527cfb364e7258e
|
918
PyOffiMaker.py
Normal file
918
PyOffiMaker.py
Normal file
|
@ -0,0 +1,918 @@
|
|||
#!/usr/bin/env python
|
||||
from turtle import width
|
||||
from webbrowser import BackgroundBrowser
|
||||
import PySimpleGUI as sg
|
||||
import csv,re
|
||||
import math
|
||||
import OffiTracker.offitracker as oftr
|
||||
import pandas as pd
|
||||
frequencyTable = []
|
||||
|
||||
frequencyTable.append(["C0","16.35"])
|
||||
frequencyTable.append(["C#0","17.32"])
|
||||
frequencyTable.append(["D0","18.35"])
|
||||
frequencyTable.append(["D#0","19.45"])
|
||||
frequencyTable.append(["E0","20.60"])
|
||||
frequencyTable.append(["F0","21.83"])
|
||||
frequencyTable.append(["F#0","23.12"])
|
||||
frequencyTable.append(["G0","24.50"])
|
||||
frequencyTable.append(["G#0","25.96"])
|
||||
frequencyTable.append(["A0","27.50"])
|
||||
frequencyTable.append(["A#0","29.14"])
|
||||
frequencyTable.append(["B0","30.87"])
|
||||
|
||||
frequencyTable.append(["C1","32.70"])
|
||||
frequencyTable.append(["C#1","34.65"])
|
||||
frequencyTable.append(["D1","36.71"])
|
||||
frequencyTable.append(["D#1","38.89"])
|
||||
frequencyTable.append(["E1","41.20"])
|
||||
frequencyTable.append(["F1","43.65"])
|
||||
frequencyTable.append(["F#1","46.25"])
|
||||
frequencyTable.append(["G1","49.00"])
|
||||
frequencyTable.append(["G#1","51.91"])
|
||||
frequencyTable.append(["A1","55.00"])
|
||||
frequencyTable.append(["A#1","58.27"])
|
||||
frequencyTable.append(["B1","61.74"])
|
||||
|
||||
frequencyTable.append(["C2","65.41"])
|
||||
frequencyTable.append(["C#2","69.30"])
|
||||
frequencyTable.append(["D2","73.42"])
|
||||
frequencyTable.append(["D#2","77.78"])
|
||||
frequencyTable.append(["E2","82.41"])
|
||||
frequencyTable.append(["F2","87.31"])
|
||||
frequencyTable.append(["F#2","92.50"])
|
||||
frequencyTable.append(["G2","98.00"])
|
||||
frequencyTable.append(["G#2","103.83"])
|
||||
frequencyTable.append(["A2","110.00"])
|
||||
frequencyTable.append(["A#2","116.54"])
|
||||
frequencyTable.append(["B2","123.47"])
|
||||
|
||||
frequencyTable.append(["C3","130.81"])
|
||||
frequencyTable.append(["C#3","138.59"])
|
||||
frequencyTable.append(["D3","146.83"])
|
||||
frequencyTable.append(["D#3","155.56"])
|
||||
frequencyTable.append(["E3","164.81"])
|
||||
frequencyTable.append(["F3","174.61"])
|
||||
frequencyTable.append(["F#3","185.00"])
|
||||
frequencyTable.append(["G3","196.00"])
|
||||
frequencyTable.append(["G#3","207.65"])
|
||||
frequencyTable.append(["A3","220.00"])
|
||||
frequencyTable.append(["A#3","233.08"])
|
||||
frequencyTable.append(["B3","246.94"])
|
||||
|
||||
frequencyTable.append(["C4","261.63"])
|
||||
frequencyTable.append(["C#4","277.18"])
|
||||
frequencyTable.append(["D4","293.66"])
|
||||
frequencyTable.append(["D#4","311.13"])
|
||||
frequencyTable.append(["E4","329.63"])
|
||||
frequencyTable.append(["F4","349.23"])
|
||||
frequencyTable.append(["F#4","369.99"])
|
||||
frequencyTable.append(["G4","392.00"])
|
||||
frequencyTable.append(["G#4","415.30"])
|
||||
frequencyTable.append(["A4","440.00"])
|
||||
frequencyTable.append(["A#4","466.16"])
|
||||
frequencyTable.append(["B4","493.88"])
|
||||
|
||||
frequencyTable.append(["C5","523.25"])
|
||||
frequencyTable.append(["C#5","554.37"])
|
||||
frequencyTable.append(["D5","587.33"])
|
||||
frequencyTable.append(["D#5","622.25"])
|
||||
frequencyTable.append(["E5","659.25"])
|
||||
frequencyTable.append(["F5","698.46"])
|
||||
frequencyTable.append(["F#5","739.99"])
|
||||
frequencyTable.append(["G5","783.99"])
|
||||
frequencyTable.append(["G#5","830.61"])
|
||||
frequencyTable.append(["A5","880.00"])
|
||||
frequencyTable.append(["A#5","932.33"])
|
||||
frequencyTable.append(["B5","987.77"])
|
||||
|
||||
frequencyTable.append(["C6","1046.50"])
|
||||
frequencyTable.append(["C#6","1108.73"])
|
||||
frequencyTable.append(["D6","1174.66"])
|
||||
frequencyTable.append(["D#6","1244.51"])
|
||||
frequencyTable.append(["E6","1318.51"])
|
||||
frequencyTable.append(["F6","1396.91"])
|
||||
frequencyTable.append(["F#6","1479.98"])
|
||||
frequencyTable.append(["G6","1567.98"])
|
||||
frequencyTable.append(["G#6","1661.22"])
|
||||
frequencyTable.append(["A6","1760.00"])
|
||||
frequencyTable.append(["A#6","1864.66"])
|
||||
frequencyTable.append(["B6","1975.53"])
|
||||
|
||||
frequencyTable.append(["C7","2093.00"])
|
||||
frequencyTable.append(["C#7","2217.46"])
|
||||
frequencyTable.append(["D7","2349.32"])
|
||||
frequencyTable.append(["D#7","2489.02"])
|
||||
frequencyTable.append(["E7","2637.02"])
|
||||
frequencyTable.append(["F7","2793.83"])
|
||||
frequencyTable.append(["F#7","2959.96"])
|
||||
frequencyTable.append(["G7","3135.96"])
|
||||
frequencyTable.append(["G#7","3322.44"])
|
||||
frequencyTable.append(["A7","3520.00"])
|
||||
frequencyTable.append(["A#7","3729.31"])
|
||||
frequencyTable.append(["B7","3951.07"])
|
||||
|
||||
frequencyTable.append(["C8","4186.01"])
|
||||
frequencyTable.append(["C#8","4434.92"])
|
||||
frequencyTable.append(["D8","4698.63"])
|
||||
frequencyTable.append(["D#8","4978.03"])
|
||||
frequencyTable.append(["E8","5274.04"])
|
||||
frequencyTable.append(["F8","5587.65"])
|
||||
frequencyTable.append(["F#8","5919.91"])
|
||||
frequencyTable.append(["G8","6271.93"])
|
||||
frequencyTable.append(["G#8","6644.88"])
|
||||
frequencyTable.append(["A8","7040.00"])
|
||||
frequencyTable.append(["A#8","7458.62"])
|
||||
frequencyTable.append(["B8","7902.13"])
|
||||
|
||||
global currentTable
|
||||
currentTable = 1
|
||||
|
||||
|
||||
|
||||
global emptyrow
|
||||
emptyrow = ["C0", "0"]
|
||||
|
||||
sg.theme('Dark Red')
|
||||
def openFile(window = None):
|
||||
filename = sg.popup_get_file('filename to open', no_window=True, file_types=(("CSV Files","*.csv"),))
|
||||
data = []
|
||||
header_list = []
|
||||
print(filename)
|
||||
if filename is not None and filename != "":
|
||||
pandaData = pd.read_csv(filename)
|
||||
|
||||
newData1 = pandaData.loc[:,["Frequency1","Effect1"]]
|
||||
newData2 = pandaData.loc[:,["Frequency2","Effect2"]]
|
||||
newData3 = pandaData.loc[:,["Frequency3","Effect3"]]
|
||||
newData4 = pandaData.loc[:,["Noise","Duration"]]
|
||||
|
||||
reader = []
|
||||
reader1 = []
|
||||
reader2 = []
|
||||
reader3 = []
|
||||
reader4 = []
|
||||
|
||||
readers = []
|
||||
|
||||
df1 = pd.DataFrame(newData1).fillna(0)
|
||||
df2 = pd.DataFrame(newData2).fillna(0)
|
||||
df3 = pd.DataFrame(newData3).fillna(0)
|
||||
df4 = pd.DataFrame(newData4).fillna(0)
|
||||
|
||||
listF1 = df1['Frequency1'].values.tolist()
|
||||
listF2 = df2['Frequency2'].values.tolist()
|
||||
listF3 = df3['Frequency3'].values.tolist()
|
||||
|
||||
listE1 = df1['Effect1'].values.tolist()
|
||||
listE2 = df2['Effect2'].values.tolist()
|
||||
listE3 = df3['Effect3'].values.tolist()
|
||||
|
||||
listN = df4['Noise'].values.tolist()
|
||||
listD = df4['Duration'].values.tolist()
|
||||
|
||||
|
||||
for entry, data in enumerate(listF1):
|
||||
reader1.append([listF1[entry],listE1[entry]])
|
||||
reader2.append([listF2[entry],listE2[entry]])
|
||||
reader3.append([listF3[entry],listE3[entry]])
|
||||
reader4.append([listN[entry],listD[entry]])
|
||||
|
||||
|
||||
data1 = list(reader1)
|
||||
data2 = list(reader2)
|
||||
data3 = list(reader3)
|
||||
data4 = list(reader4)
|
||||
for index1, row in enumerate(data1):
|
||||
# or cell == row[3] or cell == row[5] or cell == row[6] or cell == row[7]
|
||||
for index, cell in enumerate(row):
|
||||
if cell == row[1]:
|
||||
pass
|
||||
else:
|
||||
if cell == "" or cell =='' or cell == "nan":
|
||||
cell = 0
|
||||
for note in frequencyTable:
|
||||
|
||||
|
||||
if str(math.ceil(float(note[1]))) == str( cell) or str(math.floor(float(note[1]))) == str( cell):
|
||||
#print(str(math.ceil(float(note[1]))) + " : " + str( cell))
|
||||
cell = note[0]
|
||||
row[index] =cell
|
||||
data1[index1] = row
|
||||
# read everything else into a list of rows
|
||||
for index1, row in enumerate(data2):
|
||||
# or cell == row[3] or cell == row[5] or cell == row[6] or cell == row[7]
|
||||
for index, cell in enumerate(row):
|
||||
if cell == row[1]:
|
||||
pass
|
||||
else:
|
||||
if cell == "" or cell =='' or cell == "nan":
|
||||
cell = 0
|
||||
for note in frequencyTable:
|
||||
|
||||
|
||||
if str(math.ceil(float(note[1]))) == str( cell) or str(math.floor(float(note[1]))) == str( cell):
|
||||
#print(str(math.ceil(float(note[1]))) + " : " + str( cell))
|
||||
cell = note[0]
|
||||
row[index] =cell
|
||||
data2[index1] = row
|
||||
for index1, row in enumerate(data3):
|
||||
# or cell == row[3] or cell == row[5] or cell == row[6] or cell == row[7]
|
||||
for index, cell in enumerate(row):
|
||||
if cell == row[1]:
|
||||
pass
|
||||
else:
|
||||
if cell == "" or cell =='' or cell == "nan":
|
||||
cell = 0
|
||||
for note in frequencyTable:
|
||||
|
||||
|
||||
if str(math.ceil(float(note[1]))) == str( cell) or str(math.floor(float(note[1]))) == str( cell):
|
||||
#print(str(math.ceil(float(note[1]))) + " : " + str( cell))
|
||||
cell = note[0]
|
||||
row[index] =cell
|
||||
data3[index1] = row
|
||||
for index1, row in enumerate(data4):
|
||||
# or cell == row[3] or cell == row[5] or cell == row[6] or cell == row[7]
|
||||
for index, cell in enumerate(row):
|
||||
if cell == "" or cell =='' or cell == "nan":
|
||||
cell = 0
|
||||
row[index] =cell
|
||||
data4[index1] = row
|
||||
readers.append(data1)
|
||||
readers.append(data2)
|
||||
readers.append(data3)
|
||||
readers.append(data4)
|
||||
|
||||
|
||||
#print(readers)
|
||||
return readers
|
||||
def make_table(val,uid,num_rows, num_cols):
|
||||
data = [[j for j in range(num_cols)] for i in range(num_rows)]
|
||||
data[0] = ["0" for _ in range(num_cols)]
|
||||
for i in range(0, num_rows):
|
||||
if uid == 4:
|
||||
emptyrow = ["0","100"]
|
||||
else:
|
||||
emptyrow = ["C4","50"]
|
||||
data[i] = emptyrow
|
||||
val.append(data[i])
|
||||
return data
|
||||
|
||||
def playThread(window):
|
||||
oftr.stop_signal = False
|
||||
oftr.play_csv_file("./temp.csv")
|
||||
|
||||
|
||||
def save_csv(name,data):
|
||||
|
||||
with open(name, 'w', newline='', encoding='utf-8') as file:
|
||||
# Create a CSV writer object
|
||||
|
||||
csv_writer = csv.DictWriter(file,quoting=csv.QUOTE_NONE,dialect="unix",fieldnames=header_list)
|
||||
csv_writer.writeheader()
|
||||
if isinstance(data, list):
|
||||
for row in data:
|
||||
|
||||
for index, cell in enumerate(row):
|
||||
|
||||
if cell == "" or cell == "nan":
|
||||
cell = 0
|
||||
row[index] =(cell)
|
||||
for note in frequencyTable:
|
||||
|
||||
if cell == note[0]:
|
||||
cell = note[1]
|
||||
|
||||
row[index] =float(cell)
|
||||
csv_writer.writerow({'Frequency1': row[0], 'Effect1': row[1], 'Frequency2': row[2], 'Effect2': row[3], 'Frequency3': row[4], 'Effect3': row[5], 'Noise': row[6], 'Duration': row[7]})
|
||||
|
||||
# Write multiple rows of data
|
||||
else:
|
||||
for row in data.values.tolist():
|
||||
|
||||
for index, cell in enumerate(row):
|
||||
|
||||
if cell == "" or cell == "nan":
|
||||
cell = 0
|
||||
row[index] =(cell)
|
||||
for note in frequencyTable:
|
||||
|
||||
if cell == note[0]:
|
||||
cell = note[1]
|
||||
|
||||
row[index] =float(cell)
|
||||
|
||||
csv_writer.writerow({'Frequency1': row[0], 'Effect1': row[1], 'Frequency2': row[2], 'Effect2': row[3], 'Frequency3': row[4], 'Effect3': row[5], 'Noise': row[6], 'Duration': row[7]})
|
||||
|
||||
# Write multiple rows of data
|
||||
new_lines = re.compile('\n{2,9}')
|
||||
with open(name) as f:
|
||||
contents = f.read()
|
||||
contents = re.sub(new_lines, '\n\n\n', contents.strip())
|
||||
with open(name, 'w') as f:
|
||||
f.write(contents)
|
||||
def initButtons(window,state = True):
|
||||
window["-SAVEEDITNEXT-"].update(disabled=state)
|
||||
window["-NR-"].update(disabled=state)
|
||||
window["-RR-"].update(disabled=state)
|
||||
window["o1-"].update(disabled=state)
|
||||
window["o2-"].update(disabled=state)
|
||||
window["o3-"].update(disabled=state)
|
||||
window["o1+"].update(disabled=state)
|
||||
window["o2+"].update(disabled=state)
|
||||
window["o3+"].update(disabled=state)
|
||||
window["n1-"].update(disabled=state)
|
||||
window["n2-"].update(disabled=state)
|
||||
window["n3-"].update(disabled=state)
|
||||
window["n1+"].update(disabled=state)
|
||||
window["n2+"].update(disabled=state)
|
||||
window["n3+"].update(disabled=state)
|
||||
window["n"].update(disabled=state)
|
||||
window["d"].update(disabled=state)
|
||||
window["f1"].update(disabled=state)
|
||||
window["e1"].update(disabled=state)
|
||||
window["f2"].update(disabled=state)
|
||||
window["e2"].update(disabled=state)
|
||||
window["f3"].update(disabled=state)
|
||||
window["e3"].update(disabled=state)
|
||||
def changeButtonset1(window,state = False):
|
||||
|
||||
window["o1-"].update(disabled=state)
|
||||
window["o1+"].update(disabled=state)
|
||||
window["n1-"].update(disabled=state)
|
||||
window["n1+"].update(disabled=state)
|
||||
window["f1"].update(disabled=state)
|
||||
window["e1"].update(disabled=state)
|
||||
|
||||
def changeButtonset2(window,state = False):
|
||||
window["o2-"].update(disabled=state)
|
||||
window["o2+"].update(disabled=state)
|
||||
window["n2-"].update(disabled=state)
|
||||
window["n2+"].update(disabled=state)
|
||||
window["f2"].update(disabled=state)
|
||||
window["e2"].update(disabled=state)
|
||||
def changeButtonset3(window,state = False):
|
||||
window["o3-"].update(disabled=state)
|
||||
window["o3+"].update(disabled=state)
|
||||
window["n3-"].update(disabled=state)
|
||||
window["n3+"].update(disabled=state)
|
||||
window["f3"].update(disabled=state)
|
||||
window["e3"].update(disabled=state)
|
||||
|
||||
def changeButtonset4(window,state = False):
|
||||
window["d"].update(disabled=state)
|
||||
window["n"].update(disabled=state)
|
||||
|
||||
def main():
|
||||
global canInit
|
||||
canInit = True
|
||||
global lastRow
|
||||
lastRow = 0
|
||||
global cur_row
|
||||
cur_row = 0
|
||||
global cur_col
|
||||
cur_col = 0
|
||||
global edit
|
||||
global data_values
|
||||
data_values = []
|
||||
data_values1 = []
|
||||
data_values2 = []
|
||||
data_values3 = []
|
||||
data_values4 = []
|
||||
edit = False
|
||||
data = make_table(data_values,0, num_rows=1, num_cols=2)
|
||||
data1 = make_table(data_values1,1, num_rows=1, num_cols=2)
|
||||
data2 = make_table(data_values2,2, num_rows=1, num_cols=2)
|
||||
data3 = make_table(data_values3,3, num_rows=1, num_cols=2)
|
||||
data4 = make_table(data_values4,4, num_rows=1, num_cols=2)
|
||||
|
||||
global header_list
|
||||
header_list = ["Frequency1", "Effect1", "Frequency2", "Effect2", "Frequency3","Effect3", "Noise", "Duration"]
|
||||
headers1 = [header_list[0],header_list[1]]
|
||||
headers2 = [header_list[2],header_list[3]]
|
||||
headers3 = [header_list[4],header_list[5]]
|
||||
headers4 = [header_list[6],header_list[7]]
|
||||
|
||||
filename = "template.csv"
|
||||
currentTable = 1
|
||||
global BackgroundData
|
||||
BackgroundData = []
|
||||
for i in range(0, 1000):
|
||||
BackgroundData.append([])
|
||||
tab1_layout = [[sg.Table(values=data, headings=header_list, max_col_width=25,
|
||||
auto_size_columns=True,
|
||||
#display_row_numbers=True,
|
||||
justification='right',
|
||||
num_rows=20,
|
||||
#alternating_row_color=sg.theme_button_color()[1],
|
||||
key='-TABLE-',
|
||||
selected_row_colors='red on yellow',
|
||||
enable_events=True,
|
||||
# select_mode=sg.TABLE_SELECT_MODE_BROWSE,
|
||||
select_mode=sg.TABLE_SELECT_MODE_BROWSE,
|
||||
expand_x=True,
|
||||
expand_y=True,
|
||||
visible=False,
|
||||
#enable_click_events=True, # Comment out to not enable header and other clicks
|
||||
),
|
||||
sg.Table(values=data1, headings=headers1, max_col_width=25,
|
||||
auto_size_columns=True,
|
||||
display_row_numbers=True,
|
||||
justification='right',
|
||||
num_rows=20,
|
||||
#alternating_row_color=sg.theme_button_color()[1],
|
||||
key='-TABLE1-',
|
||||
selected_row_colors='red on yellow',
|
||||
enable_events=True,
|
||||
# select_mode=sg.TABLE_SELECT_MODE_BROWSE,
|
||||
select_mode=sg.TABLE_SELECT_MODE_BROWSE,
|
||||
expand_x=True,
|
||||
expand_y=True,
|
||||
|
||||
#enable_click_events=True, # Comment out to not enable header and other clicks
|
||||
),
|
||||
sg.Table(values=data2, headings=headers2, max_col_width=25,
|
||||
auto_size_columns=True,
|
||||
display_row_numbers=True,
|
||||
justification='right',
|
||||
num_rows=20,
|
||||
#alternating_row_color=sg.theme_button_color()[1],
|
||||
key='-TABLE2-',
|
||||
selected_row_colors='red on yellow',
|
||||
enable_events=True,
|
||||
# select_mode=sg.TABLE_SELECT_MODE_BROWSE,
|
||||
select_mode=sg.TABLE_SELECT_MODE_BROWSE,
|
||||
expand_x=True,
|
||||
expand_y=True,
|
||||
#enable_click_events=True, # Comment out to not enable header and other clicks
|
||||
),
|
||||
sg.Table(values=data3, headings=headers3, max_col_width=25,
|
||||
auto_size_columns=True,
|
||||
display_row_numbers=True,
|
||||
justification='right',
|
||||
num_rows=20,
|
||||
#alternating_row_color=sg.theme_button_color()[1],
|
||||
key='-TABLE3-',
|
||||
selected_row_colors='red on yellow',
|
||||
enable_events=True,
|
||||
# select_mode=sg.TABLE_SELECT_MODE_BROWSE,
|
||||
select_mode=sg.TABLE_SELECT_MODE_BROWSE,
|
||||
expand_x=True,
|
||||
expand_y=True,
|
||||
#enable_click_events=True, # Comment out to not enable header and other clicks
|
||||
),
|
||||
sg.Table(values=data4, headings=headers4, max_col_width=25,
|
||||
auto_size_columns=True,
|
||||
display_row_numbers=True,
|
||||
justification='right',
|
||||
num_rows=20,
|
||||
#alternating_row_color=sg.theme_button_color()[1],
|
||||
key='-TABLE4-',
|
||||
selected_row_colors='red on yellow',
|
||||
enable_events=True,
|
||||
# select_mode=sg.TABLE_SELECT_MODE_BROWSE,
|
||||
select_mode=sg.TABLE_SELECT_MODE_BROWSE,
|
||||
expand_x=True,
|
||||
expand_y=True,
|
||||
#enable_click_events=True, # Comment out to not enable header and other clicks
|
||||
)],
|
||||
[sg.Text("Current Row: " + str(cur_row),key="-counter-"),sg.Text("Current Col: None",key="-countercol-")],
|
||||
[sg.Text('Note 1', size =(15, 1)),sg.Button("O-",key="o1-",size=(2,1)),sg.Button("N-",key="n1-",size=(2,1)), sg.InputText(size =(3, 1),key="f1",default_text="C0"),sg.Button("N+",key="n1+",size=(2,1)),sg.Button("O+",key="o1+",size=(2,1)),sg.Text('Effect 1', size =(15, 1)), sg.InputText(size =(3, 1),key="e1",default_text="50")],
|
||||
[sg.Text('Note 2', size =(15, 1)),sg.Button("O-",key="o2-",size=(2,1)), sg.Button("N-",key="n2-",size=(2,1)),sg.InputText(size =(3, 1),key="f2",default_text="C0"),sg.Button("N+",key="n2+",size=(2,1)),sg.Button("O+",key="o2+",size=(2,1)),sg.Text('Effect 2', size =(15, 1)), sg.InputText(size =(3, 1),key="e2",default_text="50")],
|
||||
[sg.Text('Note 3', size =(15, 1)),sg.Button("O-",key="o3-",size=(2,1)),sg.Button("N-",key="n3-",size=(2,1)), sg.InputText(size =(3, 1),key="f3",default_text="C0"),sg.Button("N+",key="n3+",size=(2,1)),sg.Button("O+",key="o3+",size=(2,1)),sg.Text('Effect 3', size =(15, 1)), sg.InputText(size =(3, 1),key="e3",default_text="50")],
|
||||
[sg.Text('Noise', size =(15, 1)), sg.InputText(size =(3, 1),key="n",default_text="0"),sg.Text('Duration', size =(15, 1)), sg.InputText(size =(3, 1),key="d",default_text="100")],
|
||||
[sg.Button("Save Row",key="-SAVE-"),sg.Button("Save Row & Edit next",key="-SAVEEDITNEXT-"),sg.Checkbox("New Line on end?",key="nl")],
|
||||
[sg.Button("Create new Row at last Position",key="-NR-",visible=False),sg.Button("Remove selected Row",key="-RR-",visible=False)],
|
||||
[sg.Button("New File",key="-NF-"),sg.InputText(size =(16, 1),key="-sfname-",enable_events=False,default_text="unnamed.csv"),sg.Button("Save File",key="-SaF-"),sg.Button("Load File",key="-LF-"),sg.Button("Play File",key="-PF-"),sg.Button("Stop File",key="-StF-")]
|
||||
]
|
||||
|
||||
tab2_layout = [[sg.Text('Tab 2')]]
|
||||
tab3_layout = [[sg.Text('Tab 3')]]
|
||||
tab4_layout = [[sg.Text('Tab 3')]]
|
||||
|
||||
# The TabgGroup layout - it must contain only Tabs
|
||||
tab_group_layout = [[sg.Tab('Edit', tab1_layout, key='-TAB1-'),
|
||||
sg.Tab('Samples', tab2_layout, key='-TAB2-'),
|
||||
sg.Tab('Settings', tab3_layout, key='-TAB3-')]]
|
||||
|
||||
# The window layout - defines the entire window
|
||||
layout = [[sg.TabGroup(tab_group_layout,
|
||||
enable_events=True,
|
||||
key='-TABGROUP-')]]
|
||||
|
||||
window = sg.Window('OffiMAKER - OffiTracker Editor', layout, grab_anywhere=False,size=(1020, 640))
|
||||
event, values = window.read()
|
||||
window.bind("<Alt_L><q>", "ALT-q")
|
||||
|
||||
initButtons(window,True)
|
||||
row_colors = [(0, "yellow","dark red")]
|
||||
window["-TABLE1-"].update(row_colors=row_colors)
|
||||
window["-TABLE2-"].update(row_colors=row_colors)
|
||||
window["-TABLE3-"].update(row_colors=row_colors)
|
||||
window["-TABLE4-"].update(row_colors=row_colors)
|
||||
BackgroundData[cur_row] = [window["-TABLE1-"].get()[cur_row],window["-TABLE2-"].get()[cur_row],window["-TABLE3-"].get()[cur_row],window["-TABLE4-"].get()[cur_row]]
|
||||
|
||||
def OctavePlus(window,field):
|
||||
if window[field].get() == "":
|
||||
window[field].update("C0")
|
||||
for index, entry in enumerate(frequencyTable):
|
||||
if window[field].get() == entry[0] and index+12 < len(frequencyTable):
|
||||
window[field].update(frequencyTable[index+12][0])
|
||||
return
|
||||
elif window[field].get() == entry[1] and index+12 < len(frequencyTable):
|
||||
window[field].update(frequencyTable[index+12][1])
|
||||
return
|
||||
def OctaveMinus(window,field):
|
||||
if window[field].get() == "":
|
||||
window[field].update("C0")
|
||||
for index, entry in enumerate(frequencyTable):
|
||||
if window[field].get() == entry[0] and index-12 >= 0:
|
||||
window[field].update(frequencyTable[index-12][0])
|
||||
return
|
||||
elif window[field].get() == entry[1] and index-12 >= 0:
|
||||
window[field].update(frequencyTable[index-12][1])
|
||||
return
|
||||
def NotePlus(window,field):
|
||||
if window[field].get() == "":
|
||||
window[field].update("C0")
|
||||
for index, entry in enumerate(frequencyTable):
|
||||
if window[field].get() == entry[0] and index+1 < len(frequencyTable):
|
||||
window[field].update(frequencyTable[index+1][0])
|
||||
return
|
||||
elif window[field].get() == entry[1] and index+1 < len(frequencyTable):
|
||||
window[field].update(frequencyTable[index+1][1])
|
||||
return
|
||||
def NoteMinus(window,field):
|
||||
if window[field].get() == "":
|
||||
window[field].update("C0")
|
||||
for index, entry in enumerate(frequencyTable):
|
||||
if window[field].get() == entry[0] and index-1 >= 0:
|
||||
window[field].update(frequencyTable[index-1][0])
|
||||
return
|
||||
elif window[field].get() == entry[1] and index-1 >= 0:
|
||||
window[field].update(frequencyTable[index-1][1])
|
||||
return
|
||||
while True:
|
||||
|
||||
event, values = window.read()
|
||||
#sg.popup_non_blocking(event, values)
|
||||
print(event,values)
|
||||
|
||||
if event == sg.WIN_CLOSED: # always, always give a way out!
|
||||
break
|
||||
elif event == '-TABGROUP-':
|
||||
pass
|
||||
elif event == '-TAB1-':
|
||||
pass
|
||||
elif event == 'nl':
|
||||
pass
|
||||
elif event == 'o1-':
|
||||
OctaveMinus(window,"f1")
|
||||
elif event == 'o2-':
|
||||
OctaveMinus(window,"f2")
|
||||
elif event == 'o3-':
|
||||
OctaveMinus(window,"f3")
|
||||
elif event == 'n1-':
|
||||
NoteMinus(window,"f1")
|
||||
elif event == 'n2-':
|
||||
NoteMinus(window,"f2")
|
||||
elif event == 'n3-':
|
||||
NoteMinus(window,"f3")
|
||||
elif event == 'o1+':
|
||||
OctavePlus(window,"f1")
|
||||
elif event == 'o2+':
|
||||
OctavePlus(window,"f2")
|
||||
elif event == 'o3+':
|
||||
OctavePlus(window,"f3")
|
||||
elif event == 'n1+':
|
||||
NotePlus(window,"f1")
|
||||
elif event == 'n2+':
|
||||
NotePlus(window,"f2")
|
||||
elif event == 'n3+':
|
||||
NotePlus(window,"f3")
|
||||
elif event == "-NF-":
|
||||
ch = sg.popup_yes_no("Create new File and discard current changes?", title="New File?")
|
||||
if ch == "Yes":
|
||||
window["-TABLE1-"].update(make_table(data_values1,1, num_rows=1, num_cols=2))
|
||||
window["-TABLE2-"].update(make_table(data_values2,2, num_rows=1, num_cols=2))
|
||||
window["-TABLE3-"].update(make_table(data_values3,3, num_rows=1, num_cols=2))
|
||||
window["-TABLE4-"].update(make_table(data_values4,4, num_rows=1, num_cols=2))
|
||||
else:
|
||||
pass
|
||||
elif event == "-StF-":
|
||||
oftr.stop_signal = True
|
||||
elif event == "-SaF-":
|
||||
ch = sg.popup_yes_no("Do you want to Save the File?", title="Save File?")
|
||||
if ch == "Yes":
|
||||
df1 = pd.DataFrame(window["-TABLE1-"].get(),columns=headers1)
|
||||
df2 = pd.DataFrame(window["-TABLE2-"].get(),columns=headers2)
|
||||
df3 = pd.DataFrame(window["-TABLE3-"].get(),columns=headers3)
|
||||
df4 = pd.DataFrame(window["-TABLE4-"].get(),columns=headers4)
|
||||
|
||||
tosave = df1.join(df2).join(df3).join(df4)
|
||||
print(tosave)
|
||||
if window["-sfname-"].get() == "unnamed.csv":
|
||||
ch2 = sg.popup_yes_no("Default Filename will be used. This could lead to data loss. Are you sure to save?", title="Default Filename will be used.")
|
||||
if ch2 == "Yes":
|
||||
save_csv(window["-sfname-"].get(),tosave)
|
||||
else:
|
||||
save_csv(window["-sfname-"].get(),tosave)
|
||||
else:
|
||||
pass
|
||||
elif event == "-LF-":
|
||||
#data_values = []
|
||||
#openFile(window)
|
||||
returned = openFile(window)
|
||||
#print(returned)
|
||||
if returned is not None:
|
||||
for i in returned[0]:
|
||||
data_values1.append(["", ""])
|
||||
data_values2.append(["", ""])
|
||||
data_values3.append(["", ""])
|
||||
data_values4.append(["", ""])
|
||||
for i in returned:
|
||||
print("i:" + str(i))
|
||||
print("\n\n")
|
||||
BackgroundData[cur_row] = [i[0],i[1],i[3],i[4]]
|
||||
|
||||
window["-TABLE1-"].update(returned[0])
|
||||
window["-TABLE2-"].update(returned[1])
|
||||
window["-TABLE3-"].update(returned[2])
|
||||
window["-TABLE4-"].update(returned[3])
|
||||
elif event == "-PF-":
|
||||
df1 = pd.DataFrame(window["-TABLE1-"].get(),columns=headers1)
|
||||
df2 = pd.DataFrame(window["-TABLE2-"].get(),columns=headers2)
|
||||
df3 = pd.DataFrame(window["-TABLE3-"].get(),columns=headers3)
|
||||
df4 = pd.DataFrame(window["-TABLE4-"].get(),columns=headers4)
|
||||
|
||||
tosave = df1.join(df2).join(df3).join(df4)
|
||||
save_csv("temp.csv",tosave)
|
||||
window.start_thread(lambda: playThread(window), ('-THREAD-', '-THEAD ENDED-'))
|
||||
elif event == '-THREAD-' or event == '-THEAD ENDED-':
|
||||
pass
|
||||
elif event == '-NR-':
|
||||
# newData = window["-TABLE-"].get()
|
||||
# newData.append(["C0", "50", "C0", "50", "C0", "50", "0","100"])
|
||||
# data_values.append(["", "", "", "", "","", "", ""])
|
||||
# window["-TABLE-"].update(newData)
|
||||
pass
|
||||
elif event == '-RR-':
|
||||
try:
|
||||
if cur_row != 0:
|
||||
newData = window["-TABLE-"].get()
|
||||
del newData[cur_row]
|
||||
del data_values[cur_row]
|
||||
window["-TABLE-"].update(newData)
|
||||
else:
|
||||
print("Dont remove last Row")
|
||||
except Exception as e:
|
||||
print (e)
|
||||
elif event == '-TABLE1-':
|
||||
|
||||
try:
|
||||
#if lastRow != 0:
|
||||
# row_colors = [(lastRow, "yellow","dark red")]
|
||||
# window["-TABLE"+ str(currentTable) + "-"].update(row_colors=row_colors)
|
||||
if canInit == True:
|
||||
initButtons(window,False)
|
||||
canInit = False
|
||||
print(values[event])
|
||||
data_selected = [data_values1[row] for row in values[event]]
|
||||
row = values[event]
|
||||
if row:
|
||||
changeButtonset1(window,False)
|
||||
changeButtonset2(window,True)
|
||||
changeButtonset3(window,True)
|
||||
changeButtonset4(window,True)
|
||||
lastRow = row
|
||||
print(f'Selected row is {row}')
|
||||
print(data_selected)
|
||||
cur_row = row[0]
|
||||
currentTable = 1
|
||||
window["-counter-"].update("Current Row: " + str(cur_row))
|
||||
window["-countercol-"].update("Current Col: Note/Frequency 1")
|
||||
# window['-TABLE1-'].update(select_rows=(row))
|
||||
window['-TABLE2-'].update(select_rows=())
|
||||
window['-TABLE3-'].update(select_rows=())
|
||||
window['-TABLE4-'].update(select_rows=())
|
||||
|
||||
print(f'Selected data is {BackgroundData[cur_row]}')
|
||||
|
||||
window["f1"].update(BackgroundData[cur_row][0][0])
|
||||
window["e1"].update(BackgroundData[cur_row][0][1])
|
||||
except Exception as e:
|
||||
print (e)
|
||||
elif event == '-TABLE2-':
|
||||
try:
|
||||
#if lastRow != 0:
|
||||
# row_colors = [(lastRow, "yellow","dark red")]
|
||||
# window["-TABLE"+ str(currentTable) + "-"].update(row_colors=row_colors)
|
||||
if canInit == True:
|
||||
initButtons(window,False)
|
||||
canInit = False
|
||||
print(values[event])
|
||||
data_selected = [data_values2[row] for row in values[event]]
|
||||
row = values[event]
|
||||
print(row)
|
||||
if row:
|
||||
changeButtonset1(window,True)
|
||||
changeButtonset2(window,False)
|
||||
changeButtonset3(window,True)
|
||||
changeButtonset4(window,True)
|
||||
lastRow = row
|
||||
print(f'Selected row is {row}')
|
||||
print(data_selected)
|
||||
cur_row = row[0]
|
||||
currentTable = 2
|
||||
window["-counter-"].update("Current Row: " + str(cur_row))
|
||||
window["-countercol-"].update("Current Col: Note/Frequency 2")
|
||||
window['-TABLE1-'].update(select_rows=())
|
||||
# window['-TABLE2-'].update(select_rows=(row))
|
||||
window['-TABLE3-'].update(select_rows=())
|
||||
window['-TABLE4-'].update(select_rows=())
|
||||
window["f2"].update(BackgroundData[cur_row][1][0])
|
||||
window["e2"].update(BackgroundData[cur_row][1][1])
|
||||
except Exception as e:
|
||||
print (e)
|
||||
elif event == '-TABLE3-':
|
||||
try:
|
||||
#if lastRow != 0:
|
||||
# row_colors = [(lastRow, "yellow","dark red")]
|
||||
# window["-TABLE"+ str(currentTable) + "-"].update(row_colors=row_colors)
|
||||
if canInit == True:
|
||||
initButtons(window,False)
|
||||
canInit = False
|
||||
print(values[event])
|
||||
data_selected = [data_values3[row] for row in values[event]]
|
||||
row = values[event]
|
||||
print(row)
|
||||
if row:
|
||||
changeButtonset1(window,True)
|
||||
changeButtonset2(window,True)
|
||||
changeButtonset3(window,False)
|
||||
changeButtonset4(window,True)
|
||||
lastRow = row
|
||||
|
||||
print(f'Selected row is {row}')
|
||||
print(data_selected)
|
||||
cur_row = row[0]
|
||||
currentTable = 3
|
||||
window["-counter-"].update("Current Row: " + str(cur_row))
|
||||
window["-countercol-"].update("Current Col: Note/Frequency 3")
|
||||
window['-TABLE1-'].update(select_rows=())
|
||||
window['-TABLE2-'].update(select_rows=())
|
||||
# window['-TABLE3-'].update(select_rows=(row))
|
||||
window['-TABLE4-'].update(select_rows=())
|
||||
window["f3"].update(BackgroundData[cur_row][2][0])
|
||||
window["e3"].update(BackgroundData[cur_row][2][1])
|
||||
except Exception as e:
|
||||
print (e)
|
||||
elif event == '-TABLE4-':
|
||||
try:
|
||||
|
||||
#if lastRow != 0:
|
||||
#row_colors = [(lastRow, "yellow","dark red")]
|
||||
#window["-TABLE"+ str(currentTable) + "-"].update(row_colors=row_colors)
|
||||
if canInit == True:
|
||||
initButtons(window,False)
|
||||
canInit = False
|
||||
print(values[event])
|
||||
data_selected = [data_values4[row] for row in values[event]]
|
||||
row = values[event]
|
||||
print(row)
|
||||
if row:
|
||||
changeButtonset1(window,True)
|
||||
changeButtonset2(window,True)
|
||||
changeButtonset3(window,True)
|
||||
changeButtonset4(window,False)
|
||||
lastRow = row
|
||||
|
||||
print(f'Selected row is {row}')
|
||||
print(data_selected)
|
||||
cur_row = row[0]
|
||||
currentTable = 4
|
||||
window["-counter-"].update("Current Row: " + str(cur_row))
|
||||
window["-countercol-"].update("Current Col: Noise/Duration")
|
||||
window['-TABLE1-'].update(select_rows=())
|
||||
window['-TABLE2-'].update(select_rows=())
|
||||
window['-TABLE3-'].update(select_rows=())
|
||||
# window['-TABLE4-'].update(select_rows=(row))
|
||||
|
||||
|
||||
window["n"].update(BackgroundData[cur_row][3][0])
|
||||
window["d"].update(BackgroundData[cur_row][3][1])
|
||||
except Exception as e:
|
||||
print (e)
|
||||
elif event == '-TABLE-':
|
||||
# print(values[event])
|
||||
# data_selected = [data_values[row] for row in values[event]]
|
||||
# row = values[event]
|
||||
# print(row)
|
||||
# if row:
|
||||
# print(f'Selected row is {row}')
|
||||
# print(data_selected)
|
||||
# cur_row = row[0]
|
||||
# window["-counter-"].update("Current Row: " + str(cur_row))
|
||||
# window["f1"].update(data_selected[0][0])
|
||||
# window["e1"].update(data_selected[0][1])
|
||||
# window["f2"].update(data_selected[0][2])
|
||||
# window["e2"].update(data_selected[0][3])
|
||||
# window["f3"].update(data_selected[0][4])
|
||||
# window["e3"].update(data_selected[0][5])
|
||||
# window["n"].update(data_selected[0][6])
|
||||
# window["d"].update(data_selected[0][7])
|
||||
pass
|
||||
elif event == '-SAVE-':
|
||||
try:
|
||||
if cur_row >= 0 and currentTable < 4:
|
||||
newData = window["-TABLE"+ str(currentTable) + "-"].get()
|
||||
|
||||
#print(window["f1"].get())
|
||||
newData[cur_row][0] = str(window["f"+ str(currentTable)].get())
|
||||
newData[cur_row][1] = str(window["e"+ str(currentTable)].get())
|
||||
print(newData)
|
||||
window["-TABLE"+ str(currentTable) + "-"].update(newData)
|
||||
#row_colors = [(cur_row+1, sg.theme_button_color()[1])]
|
||||
#row_colors2 = [(cur_row, "yellow","dark red")]
|
||||
#window["-TABLE"+ str(currentTable) + "-"].update(row_colors=row_colors)
|
||||
#window["-TABLE"+ str(currentTable) + "-"].update(row_colors=row_colors2)
|
||||
elif cur_row >= 0 and currentTable == 4:
|
||||
newData = window["-TABLE"+ str(currentTable) + "-"].get()
|
||||
|
||||
#print(window["f1"].get())
|
||||
newData[cur_row][0] = str(window["n"].get())
|
||||
newData[cur_row][1] = str(window["d"].get())
|
||||
|
||||
window["-TABLE"+ str(currentTable) + "-"].update(newData)
|
||||
#row_colors = [(cur_row+1, sg.theme_button_color()[1])]
|
||||
#row_colors2 = [(cur_row, "yellow","dark red")]
|
||||
#window["-TABLE"+ str(currentTable) + "-"].update(row_colors=row_colors)
|
||||
#window["-TABLE"+ str(currentTable) + "-"].update(row_colors=row_colors2)
|
||||
BackgroundData[cur_row] = [window["-TABLE1-"].get()[cur_row],window["-TABLE2-"].get()[cur_row],window["-TABLE3-"].get()[cur_row],window["-TABLE4-"].get()[cur_row]]
|
||||
except Exception as e:
|
||||
print(e)
|
||||
#print(str(cur_row+1) + " : " + str(len(window["-TABLE-"].get())))
|
||||
elif event == '-SAVEEDITNEXT-' or event == "ALT-q":
|
||||
try:
|
||||
if cur_row >= 0 and currentTable < 4:
|
||||
newData = window["-TABLE"+ str(currentTable) + "-"].get()
|
||||
|
||||
#print(window["f1"].get())
|
||||
newData[cur_row][0] = str(window["f"+ str(currentTable)].get())
|
||||
newData[cur_row][1] = str(window["e"+ str(currentTable)].get())
|
||||
|
||||
window["-TABLE"+ str(currentTable) + "-"].update(newData)
|
||||
row_colors = [(cur_row+1, sg.theme_button_color()[1])]
|
||||
#row_colors2 = [(cur_row, "yellow","dark red")]
|
||||
window["-TABLE"+ str(currentTable) + "-"].update(row_colors=row_colors)
|
||||
#window["-TABLE"+ str(currentTable) + "-"].update(row_colors=row_colors2)
|
||||
elif cur_row >= 0 and currentTable == 4:
|
||||
newData = window["-TABLE"+ str(currentTable) + "-"].get()
|
||||
|
||||
#print(window["f1"].get())
|
||||
newData[cur_row][0] = str(window["n"].get())
|
||||
newData[cur_row][1] = str(window["d"].get())
|
||||
|
||||
window["-TABLE"+ str(currentTable) + "-"].update(newData)
|
||||
row_colors = [(cur_row+1, sg.theme_button_color()[1])]
|
||||
#row_colors2 = [(cur_row, "yellow","dark red")]
|
||||
window["-TABLE"+ str(currentTable) + "-"].update(row_colors=row_colors)
|
||||
#window["-TABLE"+ str(currentTable) + "-"].update(row_colors=row_colors2)
|
||||
BackgroundData[cur_row] = [window["-TABLE1-"].get()[cur_row],window["-TABLE2-"].get()[cur_row],window["-TABLE3-"].get()[cur_row],window["-TABLE4-"].get()[cur_row]]
|
||||
except Exception as e:
|
||||
print(e)
|
||||
#print(str(cur_row+1) + " : " + str(len(window["-TABLE-"].get())))
|
||||
print(window["nl"].get())
|
||||
if window["nl"].get() == True:
|
||||
|
||||
if cur_row+1 == len(window["-TABLE1-"].get()):
|
||||
print("Made new Row")
|
||||
newData1 = window["-TABLE1-"].get()
|
||||
newData1.append(["", ""])
|
||||
data_values1.append(["", ""])
|
||||
window["-TABLE1-"].update(newData1)
|
||||
|
||||
newData2 = window["-TABLE2-"].get()
|
||||
newData2.append(["", ""])
|
||||
data_values2.append(["", ""])
|
||||
window["-TABLE2-"].update(newData2)
|
||||
|
||||
newData3 = window["-TABLE3-"].get()
|
||||
newData3.append(["", ""])
|
||||
data_values3.append(["", ""])
|
||||
window["-TABLE3-"].update(newData3)
|
||||
|
||||
newData4 = window["-TABLE4-"].get()
|
||||
newData4.append(["", "100"])
|
||||
data_values4.append(["", ""])
|
||||
window["-TABLE4-"].update(newData4)
|
||||
|
||||
cur_row += 1
|
||||
#window["-TABLE"+ str(currentTable) + "-"].update(select_rows=(cur_row))
|
||||
row_colors = [(cur_row, sg.theme_button_color()[1])]
|
||||
window["-TABLE"+ str(currentTable) + "-"].update(row_colors=row_colors)
|
||||
BackgroundData[cur_row] = [window["-TABLE1-"].get()[cur_row],window["-TABLE2-"].get()[cur_row],window["-TABLE3-"].get()[cur_row],window["-TABLE4-"].get()[cur_row]]
|
||||
window.close()
|
||||
|
||||
main()
|
383
demo1.csv
Normal file
383
demo1.csv
Normal file
|
@ -0,0 +1,383 @@
|
|||
Frequency1,Effect1,Frequency2,Effect2,Frequency3,Effect3,Noise,Duration
|
||||
293.66,60,146.83,30,0.0,0.0,0.0,165
|
||||
293.66,51,73.42,30,0.0,0.0,0.0,165
|
||||
293.66,60,146.83,30,0.0,0.0,0.0,165
|
||||
293.66,47,73.42,30,0.0,0.0,0.0,165
|
||||
329.63,60,146.83,30,0.0,0.0,0.0,165
|
||||
329.63,60,73.42,30,0.0,0.0,0.0,165
|
||||
349.23,60,146.83,30,0.0,0.0,0.0,165
|
||||
349.23,56,73.42,30,0.0,0.0,0.0,165
|
||||
233.08,49,116.54,30,0.0,0.0,0.0,165
|
||||
233.08,47,58.27,30,0.0,0.0,0.0,165
|
||||
261.63,60,116.54,30,0.0,0.0,0.0,165
|
||||
293.66,49,58.27,30,0.0,0.0,0.0,165
|
||||
293.66,48,116.54,30,0.0,0.0,0.0,165
|
||||
293.66,49,58.27,30,0.0,0.0,0.0,165
|
||||
329.63,55,116.54,30,0.0,0.0,0.0,165
|
||||
329.63,42,58.27,30,0.0,0.0,0.0,165
|
||||
349.23,51,174.61,30,0.0,0.0,0.0,165
|
||||
349.23,59,87.31,30,0.0,0.0,0.0,165
|
||||
349.23,58,174.61,30,0.0,0.0,0.0,165
|
||||
349.23,59,87.31,30,0.0,0.0,0.0,165
|
||||
440.0,40,174.61,30,0.0,0.0,0.0,165
|
||||
440.0,57,87.31,30,0.0,0.0,0.0,165
|
||||
349.23,55,174.61,30,0.0,0.0,0.0,165
|
||||
349.23,60,87.31,30,0.0,0.0,0.0,165
|
||||
392.0,44,130.81,30,0.0,0.0,0.0,165
|
||||
392.0,57,65.41,30,0.0,0.0,0.0,165
|
||||
349.23,51,130.81,30,0.0,0.0,0.0,165
|
||||
329.63,55,65.41,30,0.0,0.0,0.0,165
|
||||
329.63,58,130.81,30,0.0,0.0,0.0,165
|
||||
329.63,60,65.41,30,0.0,0.0,0.0,165
|
||||
349.23,58,130.81,30,0.0,0.0,0.0,165
|
||||
349.23,43,65.41,30,0.0,0.0,0.0,165
|
||||
293.66,56,146.83,30,0.0,0.0,0.0,165
|
||||
293.66,52,73.42,30,0.0,0.0,0.0,165
|
||||
293.66,60,146.83,30,0.0,0.0,0.0,165
|
||||
293.66,55,73.42,30,0.0,0.0,0.0,165
|
||||
329.63,60,146.83,30,0.0,0.0,0.0,165
|
||||
329.63,60,73.42,30,0.0,0.0,0.0,165
|
||||
349.23,54,146.83,30,0.0,0.0,0.0,165
|
||||
349.23,60,73.42,30,0.0,0.0,0.0,165
|
||||
392.0,60,116.54,30,0.0,0.0,0.0,165
|
||||
392.0,55,58.27,30,0.0,0.0,0.0,165
|
||||
349.23,46,116.54,30,0.0,0.0,0.0,165
|
||||
329.63,60,58.27,30,0.0,0.0,0.0,165
|
||||
329.63,50,116.54,30,0.0,0.0,0.0,165
|
||||
329.63,55,58.27,30,0.0,0.0,0.0,165
|
||||
392.0,43,116.54,30,0.0,0.0,0.0,165
|
||||
392.0,52,58.27,30,0.0,0.0,0.0,165
|
||||
349.23,50,87.31,30,0.0,0.0,0.0,165
|
||||
349.23,42,43.65,30,0.0,0.0,0.0,165
|
||||
349.23,48,87.31,30,0.0,0.0,0.0,165
|
||||
349.23,56,43.65,30,0.0,0.0,0.0,165
|
||||
440.0,51,87.31,30,0.0,0.0,0.0,165
|
||||
440.0,60,43.65,30,0.0,0.0,0.0,165
|
||||
349.23,41,87.31,30,0.0,0.0,0.0,165
|
||||
349.23,57,43.65,30,0.0,0.0,0.0,165
|
||||
392.0,43,130.81,30,0.0,0.0,0.0,165
|
||||
392.0,48,65.41,30,0.0,0.0,0.0,165
|
||||
349.23,41,130.81,30,0.0,0.0,0.0,165
|
||||
392.0,40,65.41,30,0.0,0.0,0.0,165
|
||||
392.0,54,130.81,30,0.0,0.0,0.0,165
|
||||
392.0,59,65.41,30,0.0,0.0,0.0,165
|
||||
440.0,60,130.81,30,0.0,0.0,0.0,165
|
||||
440.0,58,65.41,30,0.0,0.0,0.0,165
|
||||
293.66,45,146.83,30,0.0,0.0,0.0,165
|
||||
293.66,54,73.42,30,0.0,0.0,0.0,165
|
||||
293.66,60,146.83,30,0.0,0.0,0.0,165
|
||||
293.66,55,73.42,30,0.0,0.0,0.0,165
|
||||
329.63,60,146.83,30,0.0,0.0,0.0,165
|
||||
329.63,45,73.42,30,0.0,0.0,0.0,165
|
||||
349.23,60,146.83,30,0.0,0.0,0.0,165
|
||||
349.23,53,73.42,30,0.0,0.0,0.0,165
|
||||
233.08,41,116.54,30,0.0,0.0,0.0,165
|
||||
233.08,60,58.27,30,0.0,0.0,0.0,165
|
||||
261.63,60,116.54,30,0.0,0.0,0.0,165
|
||||
293.66,57,58.27,30,0.0,0.0,0.0,165
|
||||
293.66,49,116.54,30,0.0,0.0,0.0,165
|
||||
293.66,53,58.27,30,0.0,0.0,0.0,165
|
||||
329.63,60,116.54,30,0.0,0.0,0.0,165
|
||||
329.63,40,58.27,30,0.0,0.0,0.0,165
|
||||
349.23,46,174.61,30,0.0,0.0,0.0,165
|
||||
349.23,42,87.31,30,0.0,0.0,0.0,165
|
||||
349.23,60,174.61,30,0.0,0.0,0.0,165
|
||||
349.23,59,87.31,30,0.0,0.0,0.0,165
|
||||
440.0,60,174.61,30,0.0,0.0,0.0,165
|
||||
440.0,50,87.31,30,0.0,0.0,0.0,165
|
||||
349.23,53,174.61,30,0.0,0.0,0.0,165
|
||||
349.23,60,87.31,30,0.0,0.0,0.0,165
|
||||
392.0,52,130.81,30,0.0,0.0,0.0,165
|
||||
392.0,49,65.41,30,0.0,0.0,0.0,165
|
||||
349.23,60,130.81,30,0.0,0.0,0.0,165
|
||||
329.63,60,65.41,30,0.0,0.0,0.0,165
|
||||
329.63,47,130.81,30,0.0,0.0,0.0,165
|
||||
329.63,60,65.41,30,0.0,0.0,0.0,165
|
||||
349.23,45,130.81,30,0.0,0.0,0.0,165
|
||||
349.23,55,65.41,30,0.0,0.0,0.0,165
|
||||
293.66,42,146.83,30,0.0,0.0,0.0,165
|
||||
293.66,45,73.42,30,0.0,0.0,0.0,165
|
||||
293.66,60,146.83,30,0.0,0.0,0.0,165
|
||||
293.66,60,73.42,30,0.0,0.0,0.0,165
|
||||
329.63,52,146.83,30,0.0,0.0,0.0,165
|
||||
329.63,59,73.42,30,0.0,0.0,0.0,165
|
||||
349.23,43,146.83,30,0.0,0.0,0.0,165
|
||||
349.23,60,73.42,30,0.0,0.0,0.0,165
|
||||
392.0,60,116.54,30,0.0,0.0,0.0,165
|
||||
392.0,60,58.27,30,0.0,0.0,0.0,165
|
||||
349.23,60,116.54,30,0.0,0.0,0.0,165
|
||||
329.63,60,58.27,30,0.0,0.0,0.0,165
|
||||
329.63,60,116.54,30,0.0,0.0,0.0,165
|
||||
329.63,60,58.27,30,0.0,0.0,0.0,165
|
||||
392.0,45,116.54,30,0.0,0.0,0.0,165
|
||||
392.0,43,58.27,30,0.0,0.0,0.0,165
|
||||
349.23,42,87.31,30,0.0,0.0,0.0,165
|
||||
349.23,41,43.65,30,0.0,0.0,0.0,165
|
||||
349.23,60,87.31,30,0.0,0.0,0.0,165
|
||||
349.23,60,43.65,30,0.0,0.0,0.0,165
|
||||
440.0,51,87.31,30,0.0,0.0,0.0,165
|
||||
440.0,53,43.65,30,0.0,0.0,0.0,165
|
||||
349.23,45,87.31,30,0.0,0.0,0.0,165
|
||||
349.23,42,43.65,30,0.0,0.0,0.0,165
|
||||
392.0,60,130.81,30,0.0,0.0,0.0,165
|
||||
392.0,40,65.41,30,0.0,0.0,0.0,165
|
||||
349.23,60,130.81,30,0.0,0.0,0.0,165
|
||||
392.0,46,65.41,30,0.0,0.0,0.0,165
|
||||
392.0,60,130.81,30,0.0,0.0,0.0,165
|
||||
392.0,53,65.41,30,0.0,0.0,0.0,165
|
||||
392.0,41,130.81,30,0.0,0.0,0.0,165
|
||||
392.0,46,65.41,30,0.0,0.0,0.0,165
|
||||
587.33,58,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,51,73.42,30,0.0,0.0,0.0,165
|
||||
587.33,48,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,55,73.42,30,0.0,0.0,0.0,165
|
||||
659.25,60,146.83,30,0.0,0.0,0.0,165
|
||||
659.25,60,73.42,30,0.0,0.0,0.0,165
|
||||
698.46,49,146.83,30,0.0,0.0,0.0,165
|
||||
698.46,57,73.42,30,0.0,0.0,0.0,165
|
||||
1046.5,48,116.54,30,0.0,0.0,0.0,165
|
||||
1046.5,45,58.27,30,0.0,0.0,0.0,165
|
||||
1046.5,52,116.54,30,0.0,0.0,0.0,165
|
||||
1046.5,54,58.27,30,0.0,0.0,0.0,165
|
||||
783.99,60,116.54,30,0.0,0.0,0.0,165
|
||||
783.99,51,58.27,30,0.0,0.0,0.0,165
|
||||
783.99,60,116.54,30,0.0,0.0,0.0,165
|
||||
783.99,60,58.27,30,0.0,0.0,0.0,165
|
||||
698.46,42,174.61,30,0.0,0.0,0.0,165
|
||||
698.46,43,87.31,30,0.0,0.0,0.0,165
|
||||
783.99,42,174.61,30,0.0,0.0,0.0,165
|
||||
783.99,51,87.31,30,0.0,0.0,0.0,165
|
||||
880.0,47,174.61,30,0.0,0.0,0.0,165
|
||||
880.0,60,87.31,30,0.0,0.0,0.0,165
|
||||
783.99,60,174.61,30,0.0,0.0,0.0,165
|
||||
698.46,52,87.31,30,0.0,0.0,0.0,165
|
||||
783.99,60,130.81,30,0.0,0.0,0.0,165
|
||||
783.99,59,65.41,30,0.0,0.0,0.0,165
|
||||
698.46,60,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,60,65.41,30,0.0,0.0,0.0,165
|
||||
659.25,49,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,60,65.41,30,0.0,0.0,0.0,165
|
||||
523.25,40,130.81,30,0.0,0.0,0.0,165
|
||||
523.25,60,65.41,30,0.0,0.0,0.0,165
|
||||
587.33,48,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,44,73.42,30,0.0,0.0,0.0,165
|
||||
587.33,43,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,48,73.42,30,0.0,0.0,0.0,165
|
||||
659.25,54,146.83,30,0.0,0.0,0.0,165
|
||||
659.25,56,73.42,30,0.0,0.0,0.0,165
|
||||
698.46,48,146.83,30,0.0,0.0,0.0,165
|
||||
698.46,57,73.42,30,0.0,0.0,0.0,165
|
||||
587.33,43,116.54,30,0.0,0.0,0.0,165
|
||||
587.33,43,58.27,30,0.0,0.0,0.0,165
|
||||
587.33,60,116.54,30,0.0,0.0,0.0,165
|
||||
587.33,42,58.27,30,0.0,0.0,0.0,165
|
||||
523.25,60,116.54,30,0.0,0.0,0.0,165
|
||||
523.25,60,58.27,30,0.0,0.0,0.0,165
|
||||
523.25,48,116.54,30,0.0,0.0,0.0,165
|
||||
523.25,58,58.27,30,0.0,0.0,0.0,165
|
||||
880.0,60,87.31,30,0.0,0.0,0.0,165
|
||||
880.0,49,43.65,30,0.0,0.0,0.0,165
|
||||
783.99,47,87.31,30,0.0,0.0,0.0,165
|
||||
783.99,55,43.65,30,0.0,0.0,0.0,165
|
||||
698.46,55,87.31,30,0.0,0.0,0.0,165
|
||||
698.46,45,43.65,30,0.0,0.0,0.0,165
|
||||
659.25,42,87.31,30,0.0,0.0,0.0,165
|
||||
698.46,60,43.65,30,0.0,0.0,0.0,165
|
||||
783.99,60,130.81,30,0.0,0.0,0.0,165
|
||||
783.99,49,65.41,30,0.0,0.0,0.0,165
|
||||
698.46,58,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,40,65.41,30,0.0,0.0,0.0,165
|
||||
659.25,53,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,49,65.41,30,0.0,0.0,0.0,165
|
||||
698.46,58,130.81,30,0.0,0.0,0.0,165
|
||||
698.46,50,65.41,30,0.0,0.0,0.0,165
|
||||
587.33,42,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,60,73.42,30,0.0,0.0,0.0,165
|
||||
587.33,43,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,55,73.42,30,0.0,0.0,0.0,165
|
||||
659.25,41,146.83,30,0.0,0.0,0.0,165
|
||||
659.25,60,73.42,30,0.0,0.0,0.0,165
|
||||
698.46,55,146.83,30,0.0,0.0,0.0,165
|
||||
698.46,60,73.42,30,0.0,0.0,0.0,165
|
||||
1046.5,43,116.54,30,0.0,0.0,0.0,165
|
||||
1046.5,41,58.27,30,0.0,0.0,0.0,165
|
||||
1046.5,58,116.54,30,0.0,0.0,0.0,165
|
||||
1046.5,56,58.27,30,0.0,0.0,0.0,165
|
||||
783.99,45,116.54,30,0.0,0.0,0.0,165
|
||||
783.99,51,58.27,30,0.0,0.0,0.0,165
|
||||
783.99,42,116.54,30,0.0,0.0,0.0,165
|
||||
783.99,55,58.27,30,0.0,0.0,0.0,165
|
||||
698.46,58,174.61,30,0.0,0.0,0.0,165
|
||||
698.46,43,87.31,30,0.0,0.0,0.0,165
|
||||
783.99,43,174.61,30,0.0,0.0,0.0,165
|
||||
783.99,60,87.31,30,0.0,0.0,0.0,165
|
||||
880.0,60,174.61,30,0.0,0.0,0.0,165
|
||||
880.0,60,87.31,30,0.0,0.0,0.0,165
|
||||
783.99,59,174.61,30,0.0,0.0,0.0,165
|
||||
698.46,60,87.31,30,0.0,0.0,0.0,165
|
||||
783.99,60,130.81,30,0.0,0.0,0.0,165
|
||||
783.99,60,65.41,30,0.0,0.0,0.0,165
|
||||
698.46,60,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,60,65.41,30,0.0,0.0,0.0,165
|
||||
659.25,40,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,58,65.41,30,0.0,0.0,0.0,165
|
||||
523.25,60,130.81,30,0.0,0.0,0.0,165
|
||||
523.25,53,65.41,30,0.0,0.0,0.0,165
|
||||
587.33,55,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,60,73.42,30,0.0,0.0,0.0,165
|
||||
587.33,60,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,48,73.42,30,0.0,0.0,0.0,165
|
||||
659.25,46,146.83,30,0.0,0.0,0.0,165
|
||||
659.25,52,73.42,30,0.0,0.0,0.0,165
|
||||
698.46,60,146.83,30,0.0,0.0,0.0,165
|
||||
698.46,60,73.42,30,0.0,0.0,0.0,165
|
||||
587.33,57,116.54,30,0.0,0.0,0.0,165
|
||||
587.33,48,58.27,30,0.0,0.0,0.0,165
|
||||
587.33,60,116.54,30,0.0,0.0,0.0,165
|
||||
587.33,60,58.27,30,0.0,0.0,0.0,165
|
||||
523.25,60,116.54,30,0.0,0.0,0.0,165
|
||||
523.25,40,58.27,30,0.0,0.0,0.0,165
|
||||
523.25,46,116.54,30,0.0,0.0,0.0,165
|
||||
523.25,51,58.27,30,0.0,0.0,0.0,165
|
||||
880.0,60,87.31,30,0.0,0.0,0.0,165
|
||||
880.0,53,43.65,30,0.0,0.0,0.0,165
|
||||
783.99,54,87.31,30,0.0,0.0,0.0,165
|
||||
783.99,60,43.65,30,0.0,0.0,0.0,165
|
||||
698.46,45,87.31,30,0.0,0.0,0.0,165
|
||||
698.46,43,43.65,30,0.0,0.0,0.0,165
|
||||
659.25,50,87.31,30,0.0,0.0,0.0,165
|
||||
698.46,60,43.65,30,0.0,0.0,0.0,165
|
||||
783.99,53,130.81,30,0.0,0.0,0.0,165
|
||||
783.99,60,65.41,30,0.0,0.0,0.0,165
|
||||
698.46,60,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,53,65.41,30,0.0,0.0,0.0,165
|
||||
659.25,47,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,50,65.41,30,0.0,0.0,0.0,165
|
||||
659.25,60,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,60,65.41,30,0.0,0.0,0.0,165
|
||||
587.33,60,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,60,73.42,30,0.0,0.0,0.0,165
|
||||
587.33,60,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,48,73.42,30,0.0,0.0,0.0,165
|
||||
698.46,60,146.83,30,0.0,0.0,0.0,165
|
||||
698.46,60,73.42,30,0.0,0.0,0.0,165
|
||||
783.99,56,146.83,30,0.0,0.0,0.0,165
|
||||
783.99,52,73.42,30,0.0,0.0,0.0,165
|
||||
880.0,60,116.54,30,0.0,0.0,0.0,165
|
||||
880.0,60,58.27,30,0.0,0.0,0.0,165
|
||||
698.46,47,116.54,30,0.0,0.0,0.0,165
|
||||
698.46,52,58.27,30,0.0,0.0,0.0,165
|
||||
698.46,45,116.54,30,0.0,0.0,0.0,165
|
||||
698.46,60,58.27,30,0.0,0.0,0.0,165
|
||||
783.99,44,116.54,30,0.0,0.0,0.0,165
|
||||
698.46,60,58.27,30,0.0,0.0,0.0,165
|
||||
659.25,44,174.61,30,0.0,0.0,0.0,165
|
||||
659.25,44,87.31,30,0.0,0.0,0.0,165
|
||||
698.46,58,174.61,30,0.0,0.0,0.0,165
|
||||
783.99,52,87.31,30,0.0,0.0,0.0,165
|
||||
783.99,41,174.61,30,0.0,0.0,0.0,165
|
||||
659.25,58,87.31,30,0.0,0.0,0.0,165
|
||||
659.25,44,174.61,30,0.0,0.0,0.0,165
|
||||
659.25,60,87.31,30,0.0,0.0,0.0,165
|
||||
783.99,60,130.81,30,0.0,0.0,0.0,165
|
||||
783.99,59,65.41,30,0.0,0.0,0.0,165
|
||||
698.46,49,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,49,65.41,30,0.0,0.0,0.0,165
|
||||
659.25,60,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,60,65.41,30,0.0,0.0,0.0,165
|
||||
523.25,60,130.81,30,0.0,0.0,0.0,165
|
||||
523.25,60,65.41,30,0.0,0.0,0.0,165
|
||||
587.33,55,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,45,73.42,30,0.0,0.0,0.0,165
|
||||
587.33,55,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,59,73.42,30,0.0,0.0,0.0,165
|
||||
698.46,59,146.83,30,0.0,0.0,0.0,165
|
||||
698.46,60,73.42,30,0.0,0.0,0.0,165
|
||||
783.99,56,146.83,30,0.0,0.0,0.0,165
|
||||
783.99,60,73.42,30,0.0,0.0,0.0,165
|
||||
880.0,60,116.54,30,0.0,0.0,0.0,165
|
||||
880.0,43,58.27,30,0.0,0.0,0.0,165
|
||||
698.46,48,116.54,30,0.0,0.0,0.0,165
|
||||
880.0,48,58.27,30,0.0,0.0,0.0,165
|
||||
880.0,60,116.54,30,0.0,0.0,0.0,165
|
||||
880.0,60,58.27,30,0.0,0.0,0.0,165
|
||||
932.33,60,116.54,30,0.0,0.0,0.0,165
|
||||
880.0,60,58.27,30,0.0,0.0,0.0,165
|
||||
1046.5,59,87.31,30,0.0,0.0,0.0,165
|
||||
1046.5,56,43.65,30,0.0,0.0,0.0,165
|
||||
698.46,57,87.31,30,0.0,0.0,0.0,165
|
||||
783.99,46,43.65,30,0.0,0.0,0.0,165
|
||||
783.99,50,87.31,30,0.0,0.0,0.0,165
|
||||
659.25,60,43.65,30,0.0,0.0,0.0,165
|
||||
659.25,41,87.31,30,0.0,0.0,0.0,165
|
||||
659.25,53,43.65,30,0.0,0.0,0.0,165
|
||||
783.99,60,130.81,30,0.0,0.0,0.0,165
|
||||
783.99,54,65.41,30,0.0,0.0,0.0,165
|
||||
698.46,55,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,41,65.41,30,0.0,0.0,0.0,165
|
||||
659.25,42,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,48,65.41,30,0.0,0.0,0.0,165
|
||||
698.46,41,130.81,30,0.0,0.0,0.0,165
|
||||
698.46,51,65.41,30,0.0,0.0,0.0,165
|
||||
587.33,41,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,60,73.42,30,0.0,0.0,0.0,165
|
||||
587.33,58,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,40,73.42,30,0.0,0.0,0.0,165
|
||||
698.46,51,146.83,30,0.0,0.0,0.0,165
|
||||
698.46,60,73.42,30,0.0,0.0,0.0,165
|
||||
783.99,57,146.83,30,0.0,0.0,0.0,165
|
||||
783.99,49,73.42,30,0.0,0.0,0.0,165
|
||||
880.0,60,116.54,30,0.0,0.0,0.0,165
|
||||
880.0,55,58.27,30,0.0,0.0,0.0,165
|
||||
698.46,60,116.54,30,0.0,0.0,0.0,165
|
||||
698.46,44,58.27,30,0.0,0.0,0.0,165
|
||||
698.46,60,116.54,30,0.0,0.0,0.0,165
|
||||
698.46,40,58.27,30,0.0,0.0,0.0,165
|
||||
783.99,50,116.54,30,0.0,0.0,0.0,165
|
||||
698.46,44,58.27,30,0.0,0.0,0.0,165
|
||||
659.25,51,174.61,30,0.0,0.0,0.0,165
|
||||
659.25,48,87.31,30,0.0,0.0,0.0,165
|
||||
698.46,40,174.61,30,0.0,0.0,0.0,165
|
||||
783.99,60,87.31,30,0.0,0.0,0.0,165
|
||||
0,60,174.61,30,0.0,0.0,0.0,165
|
||||
659.25,60,87.31,30,0.0,0.0,0.0,165
|
||||
0,60,174.61,30,0.0,0.0,0.0,165
|
||||
783.99,60,87.31,30,0.0,0.0,0.0,165
|
||||
783.99,60,130.81,30,0.0,0.0,0.0,165
|
||||
698.46,51,65.41,30,0.0,0.0,0.0,165
|
||||
659.25,47,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,60,65.41,30,0.0,0.0,0.0,165
|
||||
659.25,53,130.81,30,0.0,0.0,0.0,165
|
||||
523.25,46,65.41,30,0.0,0.0,0.0,165
|
||||
523.25,60,130.81,30,0.0,0.0,0.0,165
|
||||
587.33,56,65.41,30,0.0,0.0,0.0,165
|
||||
587.33,43,146.83,30,0.0,0.0,0.0,165
|
||||
587.33,53,73.42,30,0.0,0.0,0.0,165
|
||||
587.33,42,146.83,30,0.0,0.0,0.0,165
|
||||
698.46,48,73.42,30,0.0,0.0,0.0,165
|
||||
698.46,54,146.83,30,0.0,0.0,0.0,165
|
||||
783.99,60,73.42,30,0.0,0.0,0.0,165
|
||||
783.99,60,146.83,30,0.0,0.0,0.0,165
|
||||
880.0,42,73.42,30,0.0,0.0,0.0,165
|
||||
880.0,44,116.54,30,0.0,0.0,0.0,165
|
||||
698.46,57,58.27,30,0.0,0.0,0.0,165
|
||||
880.0,60,116.54,30,0.0,0.0,0.0,165
|
||||
880.0,60,58.27,30,0.0,0.0,0.0,165
|
||||
880.0,60,116.54,30,0.0,0.0,0.0,165
|
||||
932.33,53,58.27,30,0.0,0.0,0.0,165
|
||||
880.0,59,116.54,30,0.0,0.0,0.0,165
|
||||
1046.5,42,58.27,30,0.0,0.0,0.0,165
|
||||
1046.5,48,87.31,30,0.0,0.0,0.0,165
|
||||
698.46,43,43.65,30,0.0,0.0,0.0,165
|
||||
783.99,45,87.31,30,0.0,0.0,0.0,165
|
||||
0,60,43.65,30,0.0,0.0,0.0,165
|
||||
659.25,60,87.31,30,0.0,0.0,0.0,165
|
||||
0,44,43.65,30,0.0,0.0,0.0,165
|
||||
783.99,54,87.31,30,0.0,0.0,0.0,165
|
||||
783.99,43,43.65,30,0.0,0.0,0.0,165
|
||||
698.46,48,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,60,65.41,30,0.0,0.0,0.0,165
|
||||
659.25,43,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,60,65.41,30,0.0,0.0,0.0,165
|
||||
659.25,42,130.81,30,0.0,0.0,0.0,165
|
||||
659.25,43,65.41,30,0.0,0.0,0.0,165
|
|
1
drums/drum1.txt
Normal file
1
drums/drum1.txt
Normal file
File diff suppressed because one or more lines are too long
BIN
drums/drum1.wav
Normal file
BIN
drums/drum1.wav
Normal file
Binary file not shown.
1
drums/drum2.txt
Normal file
1
drums/drum2.txt
Normal file
File diff suppressed because one or more lines are too long
BIN
drums/drum2.wav
Normal file
BIN
drums/drum2.wav
Normal file
Binary file not shown.
1
drums/drum3.txt
Normal file
1
drums/drum3.txt
Normal file
|
@ -0,0 +1 @@
|
|||
[0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 1.4296875, 1.421875, 1.421875, 1.421875, 1.421875, 1.4375, 0.9921875, 0.9921875, 0.9921875, 0.9921875, 0.984375, 0.984375, 0.984375, 0.984375, 0.9765625, 0.9765625, 0.9765625, 0.96875, 0.96875, 0.96875, 0.9609375, 0.9609375, 0.9609375, 0.9609375, 0.9609375, 0.9609375, 0.9609375, 0.9609375, 0.9609375, 0.9609375, 0.9609375, 0.9609375, 0.953125, 0.953125, 0.9453125, 0.9453125, 0.9453125, 0.9375, 0.9375, 0.9375, 0.9296875, 0.921875, 0.921875, 0.921875, 0.90625, 0.90625, 0.90625, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.8984375, 0.890625, 0.890625, 0.8828125, 0.8828125, 0.875, 0.875, 0.8671875, 0.8671875, 0.859375, 0.859375, 0.859375, 0.859375, 0.859375, 0.859375, 0.8515625, 0.8515625, 0.8515625, 0.8515625, 0.8515625, 0.8515625, 0.8515625, 0.8515625, 0.84375, 0.84375, 0.8359375, 0.828125, 0.8203125, 0.8203125, 0.8125, 0.8125, 0.8046875, 0.796875, 0.796875, 0.7890625, 0.78125, 0.7734375, 0.765625, 0.75, 0.7421875, 0.734375, 0.7265625, 0.71875, 0.7109375, 0.6953125, 0.6875, 0.671875, 0.6640625, 0.65625, 0.640625, 0.6328125, 0.6171875, 0.609375, 0.59375, 0.578125, 0.5625, 0.546875, 0.5390625, 0.53125, 0.5078125, 0.4921875, 0.484375, 0.4765625, 0.46875, 0.453125, 0.4375, 0.421875, 0.40625, 0.390625, 0.3828125, 0.375, 0.3671875, 0.3515625, 0.34375, 0.328125, 0.3203125, 0.3125, 0.296875, 0.2890625, 0.2734375, 0.265625, 0.25, 0.2421875, 0.2265625, 0.21875, 0.203125, 0.1953125, 0.1875, 0.171875, 0.1640625, 0.1484375, 0.140625, 0.1328125, 0.125, 0.1015625, 0.0859375, 0.078125, 0.078125, 0.0703125, 0.0546875, 0.046875, 0.03125, 0.015625, 0.015625, 0.0078125, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875, 0.0, 1.9921875, 0.0, 0.0, 1.9921875]
|
BIN
drums/drum3.wav
Normal file
BIN
drums/drum3.wav
Normal file
Binary file not shown.
1
drums/drum4.txt
Normal file
1
drums/drum4.txt
Normal file
File diff suppressed because one or more lines are too long
BIN
drums/drum4.wav
Normal file
BIN
drums/drum4.wav
Normal file
Binary file not shown.
1
drums/drum5.txt
Normal file
1
drums/drum5.txt
Normal file
File diff suppressed because one or more lines are too long
BIN
drums/drum5.wav
Normal file
BIN
drums/drum5.wav
Normal file
Binary file not shown.
64
drums/wav2drumtxt.py
Normal file
64
drums/wav2drumtxt.py
Normal file
|
@ -0,0 +1,64 @@
|
|||
import os
|
||||
import wave
|
||||
import numpy as np
|
||||
|
||||
def save_noise_data(file_path, noise_data):
|
||||
try:
|
||||
with open(file_path, 'w') as file:
|
||||
file.write(str(noise_data.tolist()))
|
||||
print(f"Noise data saved to {file_path}")
|
||||
except Exception as e:
|
||||
print(f"Error saving noise data to {file_path}: {e}")
|
||||
|
||||
def extract_noise_data(file_path, duration_ms=100, sample_rate=44100):
|
||||
try:
|
||||
with wave.open(file_path, 'rb') as wav_file:
|
||||
num_channels = wav_file.getnchannels()
|
||||
sample_width = wav_file.getsampwidth()
|
||||
frame_rate = wav_file.getframerate()
|
||||
total_frames = wav_file.getnframes()
|
||||
|
||||
if num_channels > 1:
|
||||
print("Input file must be mono (single channel).")
|
||||
return
|
||||
|
||||
# Adjust for 8-bit audio
|
||||
if sample_width == 1:
|
||||
dtype = np.uint8
|
||||
elif sample_width == 2:
|
||||
dtype = np.int16
|
||||
else:
|
||||
print("Unsupported sample width.")
|
||||
return
|
||||
|
||||
# Use the minimum of specified duration and actual duration of the file
|
||||
duration_secs = min(duration_ms / 1000.0, total_frames / frame_rate)
|
||||
num_frames = int(duration_secs * frame_rate)
|
||||
|
||||
signal = np.frombuffer(wav_file.readframes(num_frames), dtype=dtype)
|
||||
|
||||
# Normalize the signal for 8-bit audio
|
||||
if sample_width == 1:
|
||||
signal = (signal - 128) / 128.0
|
||||
|
||||
return signal
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
return None
|
||||
|
||||
def main():
|
||||
directory_path = input("Enter the path to the directory containing WAV files (press Enter for current directory): ").strip() or '.'
|
||||
duration_ms = float(input("Enter the maximum duration in milliseconds: "))
|
||||
|
||||
for file_name in os.listdir(directory_path):
|
||||
if file_name.endswith(".wav"):
|
||||
input_wave_file = os.path.join(directory_path, file_name)
|
||||
output_noise_data = extract_noise_data(input_wave_file, duration_ms)
|
||||
|
||||
if output_noise_data is not None:
|
||||
output_file_name = os.path.splitext(file_name)[0] + ".txt"
|
||||
save_noise_data(output_file_name, output_noise_data)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
Loading…
Reference in New Issue
Block a user