Как прочитать входные данные файла в pySimpleGUI, а затем передать их процессору обработки чисел

#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. Он отлично работает с графическим интерфейсом. Однако, из-за моего невежества, я не могу конвертировать аудио.