python.org , FFmpeg , The Code , pyinstaller - Music Maker DAW Code

0 слов
0 символов
0 строк
0 мин
Import tkinter as tk From tkinter import ttk, filedialog Import random Import pretty_midi From pydub import AudioSegment Import zipfile Import os # ------------------------ # MUSIC THEORY # ------------------------ Scales = { "C Major": ['C’,'D',’E','F','G','A',’B’] "A Minor": ['A’,'B','C’,'D','E','F','G'] } Chords = { "C": ["C","E","G"] "Dm": ["D","F","A"] "Em": ["E","G","B"] "F": ["F","A","C"] "G": ["G","B","D"] "Am": ["A","C","E"] } Playlist = [] # ------------------------ # GENERATORS # ------------------------ Def generate_melody(): Scale = scales[scale_var.get()] Melody = [random.choice(scale) for _ in range(8)] Melody_box.delete(0, tk.END) For n in melody: Melody_box.insert(tk.END, n) Def generate_chords(): Progression = random.choices(list(chords.keys()), k=4) Chord_box.delete(0, tk.END) For c in progression: Chord_box.insert(tk.END, c) Def generate_drums(): Pattern = [] For i in range(16): Step = random.choice(["Kick","Snare","Hat","-"]) Pattern.append(step) Drum_box.delete(0, tk.END) For p in pattern: Drum_box.insert(tk.END, p) # ------------------------ # MIDI CREATION # ------------------------ Def create_midi(filename): Pm = pretty_midi.PrettyMIDI() Instrument = pretty_midi.Instrument( Program=pretty_midi.instrument_name_to_program(instrument_var.get()) ) Tempo = int(tempo_entry.get()) Duration = 60/tempo Start = 0 For note_name in melody_box.get(0,tk.END): Pitch = pretty_midi.note_name_to_number(note_name+"4") Note = pretty_midi.Note( Velocity=100 Pitch=pitch Start=start End=start+duration ) Instrument.notes.append(note) Start += duration Pm.instruments.append(instrument) Pm.write(filename) # ------------------------ # EXPORT SYSTEM # ------------------------ Def export_audio(): Name = file_entry.get() If name == "": Name = "song" Midi_file = name + ".mid" Wav_file = name + ".wav" Create_midi(midi_file) # convert midi to wav using pretty_midi synthesis Pm = pretty_midi.PrettyMIDI(midi_file) Audio = pm.fluidsynth() AudioSegment( Audio.tobytes() Frame_rate=44100 Sample_width=audio.dtype.itemsize Channels=1 ).export(wav_file, format="wav") Sound = AudioSegment.from_wav(wav_file) Sound.export(name+".mp3", format="mp3") Sound.export(name+".flac", format="flac") Sound.export(name+".ogg", format="ogg") Sound.export(name+".m4a", format="ipod") Sound.export(name+".m4r", format="ipod") Zip_name = name + "_exports.zip" With zipfile.ZipFile(zip_name,"w") as z: Z.write(midi_file) Z.write(wav_file) Z.write(name+".mp3") Z.write(name+".flac") Z.write(name+".ogg") Z.write(name+".m4a") Z.write(name+".m4r") Status_label.config(text="Export complete!") # ------------------------ # PLAYLIST # ------------------------ Def add_to_playlist(): Item = melody_box.get(tk.ACTIVE) Playlist.append(item) Playlist_box.insert(tk.END,item) # ------------------------ # GUI # ------------------------ Root = tk.Tk() Root.title("Python Music Workstation") Root.geometry("500x600") Tabs = ttk.Notebook(root) Tab1 = ttk.Frame(tabs) Tab2 = ttk.Frame(tabs) Tab3 = ttk.Frame(tabs) Tabs.add(tab1,text="Melody") Tabs.add(tab2,text="Drums") Tabs.add(tab3,text="Playlist") Tabs.pack(expand=1, fill="both") # ------------------------ # Melody Tab # ------------------------ Scale_var = tk.StringVar(value="C Major") Tk.Label(tab1,text="Scale").pack() Ttk.Combobox(tab1,textvariable=scale_var,values=list(scales.keys())).pack() Melody_box = tk.Listbox(tab1) Melody_box.pack() Tk.Button(tab1,text="Generate Melody",command=generate_melody).pack() Chord_box = tk.Listbox(tab1) Chord_box.pack() Tk.Button(tab1,text="Generate Chords",command=generate_chords).pack() Tempo_entry = tk.Entry(tab1) Tempo_entry.insert(0,"120") Tempo_entry.pack() Instrument_var = tk.StringVar(value="Acoustic Grand Piano") Tk.Label(tab1,text="Instrument").pack() Ttk.Combobox( Tab1 Textvariable=instrument_var Values=[ "Acoustic Grand Piano" "Violin" "Flute" "Trumpet" "Acoustic Guitar (nylon)" "Electric Guitar (clean)" ] ).pack() File_entry = tk.Entry(tab1) File_entry.insert(0,"my_song") File_entry.pack() Tk.Button(tab1,text="Export All Formats",command=export_audio).pack() Status_label = tk.Label(tab1,text="") Status_label.pack() Tk.Button(tab1,text="Add To Playlist",command=add_to_playlist).pack() # ------------------------ # Drum Tab # ------------------------ Drum_box = tk.Listbox(tab2) Drum_box.pack() Tk.Button(tab2,text="Generate Drum Pattern",command=generate_drums).pack() # ------------------------ # Playlist Tab # ------------------------ Playlist_box = tk.Listbox(tab3) Playlist_box.pack() Root.mainloop()
3

Аннотации

Аннотаций пока нет. Выделите текст, чтобы добавить первую.