Как прочитать входной файл в pySimpleGUI, а затем передать его на процессор обработки чисел
Я хотел бы взять входные данные из pySimpleGUI, вставить их в обычный Python var, а затем передать их в музыкальный процессор, так как я люблю музыку.
Я уже пытался использовать wxPython для этого, но не смог даже получить простой fileDialog без сбоев.
from pydub import AudioSegment
from os import listdir
import numpy as np
import math
import PySimpleGUI as sg
class Dankify():
song_dir = "songs"
attenuate_db = 0
accentuate_db = 2
yeet = sg.Window('Dankify ALL THE THINGS!'). Layout([[sg.Text('Filename')], [sg.Input(), sg.FileBrowse()], [sg.OK(), sg.Cancel()] ]).Read()
event, values = yeet.Read()
yeet1 = event, values
def bass_line_freq(track):
sample_track = list(track)
# c-value
est_mean = np.mean(sample_track)
# a-value
est_std = 3 * np.std(sample_track) / (math.sqrt(2))
bass_factor = int(round((est_std - est_mean) * 0.005))
return bass_factor
songfile = yeet1
for filename in listdir(songfile):
sample = AudioSegment.from_mp3(songfile)
filtered = sample.low_pass_filter(bass_line_freq(sample.get_array_of_samples()))
combined = (sample - attenuate_db).overlay(filtered + accentuate_db)
combined.export("exports/" + filename.replace(".mp3", "") + "-export.mp3", format="mp3")
Однако он просто ничего не делает, даже не обрабатывает его. Напоминание о том, что я использую некоторый код с открытым исходным кодом и что я новичок, который ничего не знает о том, как все это работает, и пытаюсь создавать реальные вещи, чтобы получить опыт. Спасибо!
2 ответа
Вы делаете 2 Чтения звонков.
Попробуйте перейти на это:
yeet = sg.Window('Dankify ALL THE THINGS!').Layout(
[[sg.Text('Filename')], [sg.Input(), sg.FileBrowse()], [sg.OK(), sg.Cancel()]])
event, values = yeet.Read()
Без Read
в конце первого утверждения.
Вы создаете экземпляр этого класса, верно?
d = Dankify()
Я полагаю, вам не хватает "цикла событий".
Попробуйте что-то вроде этого, надеюсь, это поможет.
import sys
if sys.version_info[0] >= 3:
import PySimpleGUI as sg
else:
import PySimpleGUI27 as sg
layout = [[sg.Text('Your typed chars appear here:'), sg.Text('', key='_OUTPUT_') ],
[sg.Input(do_not_clear=True, key='_IN_')],
[sg.Button('Show'), sg.Button('Exit')]]
window = sg.Window('Window Title').Layout(layout)
while True: # Event Loop
event, values = window.Read()
print(event, values)
if event is None or event == 'Exit':
break
if event == 'Show':
# change the "output" element to be the value of "input" element
window.FindElement('_OUTPUT_').Update(values['_IN_'])
window.Close()