python

[혼자하는 파이썬] 파이썬으로 mp3 음원 만들기

알세지 2024. 3. 29. 17:23

혼자한다.

아니다. 지피티와 함께 한다.


파이썬으로 음원 만들기
만들수 있지만, 써먹기는 어렵다.!!!
해피송을 만들어 달라고 지피티한테 요청했지만, 그냥 어이없는 음원이 만들어졌다.
고생은 엄청했는데, 결과물은 대실망

하지만, 이 과정에서
미디파일 > 웨이브 > MP3 로 전환하는 과정에서 필요한 작업들을 했다.

from midiutil import MIDIFile
import subprocess

def create_happy_midi(filename):
    midi = MIDIFile(1)  # 하나의 트랙
    track = 0
    time = 0  # 시작 시간
    midi.addTrackName(track, time, "Happy Track")
    midi.addTempo(track, time, 180)  # 템포를 더 빠르게: 분당 180박

    # 메이저 스케일 노트를 사용, 하지만 리듬과 순서를 다양하게 조정
    notes = [60, 62, 64, 65, 67, 69, 71, 72]  # C 메이저 스케일 노트 + 하이 C
    durations = [1, 0.5, 0.5, 1, 1, 0.5, 0.5, 1]  # 노트 지속 시간을 다양하게
    start_times = [0, 1, 1.5, 2, 3, 4, 4.5, 5]  # 시작 시간 설정

    for i, (note, duration, start_time) in enumerate(zip(notes, durations, start_times)):
        midi.addNote(track, 0, note, start_time, duration, 100)

    # 파일로 저장
    with open(filename, "wb") as output_file:
        midi.writeFile(output_file)

def convert_midi_to_mp3(midi_file, soundfont_path, output_mp3, fluidsynth_path, ffmpeg_path):
    temp_wav = "temp_output.wav"
    try:
        # MIDI를 WAV로 변환
        fluidsynth_command = [fluidsynth_path, '-F', temp_wav, soundfont_path, midi_file]
        subprocess.run(fluidsynth_command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

        # WAV를 MP3로 변환
        ffmpeg_command = [ffmpeg_path, '-i', temp_wav, output_mp3]
        subprocess.run(ffmpeg_command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        
    except subprocess.CalledProcessError as e:
        print(f"명령 실행 중 오류 발생: {e}")
        if e.stderr:
            print(f"오류 출력: {e.stderr.decode()}")
    finally:
        # 임시 WAV 파일 삭제
        subprocess.run(['del', temp_wav], shell=True)  # Windows에서 파일 삭제 명령은 'del'

# 실행 파일 경로 설정
fluidsynth_path = "C:/Users/admin/Downloads/fluidsynth-2.3.4-win10-x64/bin/fluidsynth.exe"  # fluidsynth 실행 파일의 실제 경로로 수정
ffmpeg_path = "C:/Users/admin/Downloads/ffmpeg-6.1.1-essentials_build/ffmpeg-6.1.1-essentials_build/bin/ffmpeg.exe"  # ffmpeg 실행 파일의 실제 경로로 수정

# MIDI 파일 생성 및 MP3 변환 실행
midi_filename = "happy_melody.mid"
create_midi(midi_filename)

soundfont_path = "C:/Users/admin/Downloads/GeneralUser_GS_1.471/GeneralUser_GS_1.471/GeneralUser_sf.sf2"
output_mp3 = "C:/users/admin/happy_melody.v2.mp3"
convert_midi_to_mp3(midi_filename, soundfont_path, output_mp3, fluidsynth_path, ffmpeg_path)