#python #audio #io #pysimplegui
#python #Аудио #io #pysimplegui
Вопрос:
Я хотел бы взять входные данные из pySimpleGUI, передать их в обычный Python var, а затем передать их в музыкальный процессор, поскольку я люблю музыку.
Я уже пытался использовать wxPython для этого, но не смог даже получить простой файловый каталог без сбоев.
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")
Однако он просто ничего не делает, даже не обрабатывает его. Напоминание о том, что я использую некоторый открытый исходный код и что я новичок, который ничего не знает о том, как все это работает, и пытаюсь создавать реальные вещи, чтобы набраться опыта. Спасибо!
Ответ №1:
Я предполагаю, что вам не хватает «цикла событий».
Попробуйте что-то подобное, надеюсь, это поможет.
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()
Ответ №2:
Вы выполняете 2 вызова Read.
Попробуйте изменить на это:
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()
Комментарии:
1. Разве это не решило вашу проблему, Ismail?
2. извините, я всегда был от компьютера 🙂 TBD
3. Нет, так как мне нужно включить функцию усиления басов звука. Извините, что беспокою вас!
4. Я имею в виду часть графического интерфейса. Я смог запустить ваш код после удаления дополнительного вызова .Read().
5. Он отлично работает с графическим интерфейсом. Однако, из-за моего невежества, я не могу конвертировать аудио.