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()
Как петь
Импорт ткинтэр Эз тИ
Фрам ткинтэр Импорт ттк, филэдиэлог
Импорт рЭндэм
Импорт pretty_midi
Фрам пидуб Импорт Эудиосэгмэнт
Импорт зипфилэ
Импорт Ас
# ------------------------
# Мйузик Сири
# ------------------------
Скэйлз = {
"C Мэйджэр": ['C','D','E','F','G','A','B']
"Э Майнэр": ['A','B','C','D','E','F','G']
}
Кордз = {
"C": ["C","E","G"]
"Дидиэм": ["D","F","A"]
"Эм": ["E","G","B"]
"Ф": ["F","A","C"]
"Г": ["G","B","D"]
"Эм": ["A","C","E"]
}
Плэйлист = []
# ------------------------
# Джнэрэторс
# ------------------------
Дэф generate_melody():
Скэйл = scales[scale_var.get()]
Мэлэди = [random.choice(scale) фОр _ ин рЭйндж(8)]
Melody_box.delete(0, tk.END)
Фор н ин мЭлэди:
Melody_box.insert(tk.END, н)
Дэф generate_chords():
Прэгрэшэн = random.choices(list(chords.keys()), к=4)
Chord_box.delete(0, tk.END)
Фор c ин прэгрЭшэн:
Chord_box.insert(tk.END, c)
Дэф generate_drums():
Пэтэрн = []
Фор Ай ин рЭйндж(16):
Стэп = random.choice(["Kick","Snare","Hat","-"])
Pattern.append(step)
Drum_box.delete(0, tk.END)
Фор п ин пЭтэрн:
Drum_box.insert(tk.END, п)
# ------------------------
# Миди Криэйшэн
# ------------------------
Дэф create_midi(filename):
Пиэм = pretty_midi.PrettyMIDI()
Инстрэмэнт = pretty_midi.Instrument(
Program=pretty_midi.instrument_name_to_program(instrument_var.get())
)
Тэмпоу = int(tempo_entry.get())
Дурэйшэн = 60/тЭмпоу
Старт = 0
Фор note_name ин melody_box.get(0,tk.END):
Пич = pretty_midi.note_name_to_number(note_name+"4")
Ноут = pretty_midi.Note(
Вэласэти=100
Pitch=pitch
Start=start
End=start+duration
)
Instrument.notes.append(note)
Старт += дУрэйшэн
Pm.instruments.append(instrument)
Pm.write(filename)
# ------------------------
# Экспорт Систэм
# ------------------------
Дэф export_audio():
Нэйм = file_entry.get()
Иф нЭйм == "":
Нэйм = "сОнг"
Midi_file = нЭйм + ".мИд"
Wav_file = нЭйм + ".вАв"
Create_midi(midi_file)
# кАнвэрт мИди тУ вАв йУзинг pretty_midi синсэсис
Пиэм = pretty_midi.PrettyMIDI(midi_file)
Адиоу = pm.fluidsynth()
Эудиосэгмэнт(
Audio.tobytes()
Frame_rate=44100
Sample_width=audio.dtype.itemsize
Чэнэлз=1
).export(wav_file, format="wav")
Саунд = 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 = нЭйм + "_exports.zip"
Виз zipfile.ZipFile(zip_name,"w") Эз з:
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 кэмплИт!")
# ------------------------
# Плэйлист
# ------------------------
Дэф add_to_playlist():
Айтэм = melody_box.get(tk.ACTIVE)
Playlist.append(item)
Playlist_box.insert(tk.END,item)
# ------------------------
# Гуи
# ------------------------
Рут = tk.Tk()
Root.title("Python Мйузик Уоркстэтион")
Root.geometry("500x600")
Тэбз = ttk.Notebook(root)
Тэб1 = ttk.Frame(tabs)
Тэб2 = ttk.Frame(tabs)
Тэб3 = ttk.Frame(tabs)
Tabs.add(tab1,text="Melody")
Tabs.add(tab2,text="Drums")
Tabs.add(tab3,text="Playlist")
Tabs.pack(expand=1, fill="both")
# ------------------------
# Мэлэди Тэб
# ------------------------
Scale_var = tk.StringVar(value="C Мэйджэр")
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 Грэнд Пиэноу")
Tk.Label(tab1,text="Instrument").pack()
Ttk.Combobox(
Тэб1
Textvariable=instrument_var
Вэлйуз=[
"Экустик Грэнд Пиэноу"
"Вайэлин"
"Флут"
"Трампэт"
"Экустик Гитар (нАйлан)"
"Илэктрик Гитар (клИн)"
]
).пЭк()
File_entry = tk.Entry(tab1)
File_entry.insert(0,"my_song")
File_entry.pack()
Tk.Button(tab1,text="Export Ол Formats",command=export_audio).pack()
Status_label = tk.Label(tab1,text="")
Status_label.pack()
Tk.Button(tab1,text="Add Ту Playlist",command=add_to_playlist).pack()
# ------------------------
# Драм Тэб
# ------------------------
Drum_box = tk.Listbox(tab2)
Drum_box.pack()
Tk.Button(tab2,text="Generate Драм Pattern",command=generate_drums).pack()
# ------------------------
# Плэйлист Тэб
# ------------------------
Playlist_box = tk.Listbox(tab3)
Playlist_box.pack()
Root.mainloop()
Создать аннотацию
Выбранный текст:
Аннотации
Аннотаций пока нет. Выделите текст, чтобы добавить первую.