Как прочитать входной файл в pySimpleGUI, а затем передать его на процессор обработки чисел - PullRequest
2 голосов
/ 23 марта 2019

Я хотел бы взять входные данные из pySimpleGUI, передать их в обычный Python-файл, а затем передать их в музыкальный процессор, поскольку я люблю музыку.

Я уже пытался использовать для этого 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 ]

0 голосов
/ 23 марта 2019

Вы делаете 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()
0 голосов
/ 23 марта 2019

Полагаю, вам не хватает "цикла событий".

Попробуйте что-то вроде этого, надеюсь, это поможет.

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()
...