Mr.Pakorn Music Studio

🎹 คู่มือสกัดโน้ตเปียโนระดับ Pro

เทคนิคการใช้ ByteDance AI (High-Resolution Piano Transcription)

Piano Keys

💡หลักการทำงาน

คู่มือนี้อธิบายการใช้งาน AI สายลึกที่ถูกเทรนมาเพื่อฟังเสียง "เปียโน" โดยเฉพาะ แตกต่างจากการแปลงเสียงแบบครอบจักรวาล เพราะ AI ตัวนี้สามารถแกะคอร์ด เมโลดี้ และแยกแยะ น้ำหนักการเหยียบ Sustain Pedal ได้อย่างแม่นยำ

⚙️ส่วนที่ 1: การเตรียมห้องทำงานและติดตั้ง Library

ทำขั้นตอนนี้ แค่ครั้งแรกครั้งเดียว เพื่อสร้าง Virtual Environment ใน Miniconda ป้องกันระบบเวอร์ชันตีกันกับ Python หลักของเครื่อง

Terminal Coding

1. สร้างและเข้าสู่ห้องทำงาน (ใช้ Python 3.11 เสถียรสุดสำหรับ AI)

เปิดโปรแกรม Anaconda Prompt แล้วรันคำสั่ง:

conda create -n piano_ai_env python=3.11 -y
conda activate piano_ai_env

2. ติดตั้งสมองกล PyTorch (เวอร์ชัน CPU สำหรับ Windows)

ไฟล์มีขนาดใหญ่ ให้ใช้คำสั่งบังคับโหลดสำหรับ CPU โดยเฉพาะ:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

3. ติดตั้งไลบรารีตัวอ่านไฟล์เสียง (Librosa)

⚠️ สำคัญ: ต้องเจาะจงเวอร์ชันให้ต่ำกว่า 0.10.0 เพื่อป้องกัน Error หาโมดูลไม่เจอ

pip install "librosa<0.10.0"

4. ติดตั้งเครื่องมือสกัดโน้ตหลักของ ByteDance

pip install piano_transcription_inference

📥ส่วนที่ 2: โค้ดดาวน์โหลดไฟล์ "สมองกล"

ระบบ Windows ไม่มีคำสั่ง wget เราจึงต้องใช้ Python โหลดไฟล์น้ำหนักโมเดล (Model Weights ขนาด ~165MB) มาวางในเครื่อง ทำแค่ครั้งแรกเช่นกัน

สร้างไฟล์ชื่อ download_model.py (ที่ D:\pinno) แล้วใส่โค้ดนี้:

import os
import urllib.request

# 1. กำหนดโฟลเดอร์ปลายทางที่ AI จะมาค้นหาไฟล์
target_dir = os.path.join(os.path.expanduser('~'), 'piano_transcription_inference_data')
os.makedirs(target_dir, exist_ok=True)

# 2. ลิงก์ตรงสำหรับดาวน์โหลดและชื่อไฟล์ที่ระบบต้องการ
file_path = os.path.join(target_dir, 'note_F1=0.9677_pedal_F1=0.9186.pth')
url = "https://zenodo.org/record/4034264/files/CRNN_note_F1%3D0.9677_pedal_F1%3D0.9186.pth?download=1"

print(f"📁 กำลังตรวจสอบโฟลเดอร์: {target_dir}")

if not os.path.exists(file_path):
    print("⏳ กำลังดาวน์โหลดสมองกล AI (165 MB)... กรุณารอสักครู่")
    try:
        urllib.request.urlretrieve(url, file_path)
        print("✅ ดาวน์โหลดสำเร็จ! ระบบพร้อมใช้งานแล้ว")
    except Exception as e:
        print(f"❌ ดาวน์โหลดไม่สำเร็จ: {e}")
else:
    print("✅ มีไฟล์สมองกลในเครื่องแล้ว ไม่ต้องดาวน์โหลดใหม่")

วิธีรัน: python D:\pinno\download_model.py

💻ส่วนที่ 3: โค้ดหลักสำหรับแปลง MP3 ทั้งโฟลเดอร์

Music Studio

สร้างไฟล์ชื่อ mp3tomidi_pro.py (ที่ D:\pinno) แล้วใส่โค้ดนี้:

import os
import glob
from piano_transcription_inference import PianoTranscription, sample_rate, load_audio

def convert_folder_to_midi_pro(input_folder, output_folder):
    os.makedirs(output_folder, exist_ok=True)
    
    mp3_files = glob.glob(os.path.join(input_folder, "*.mp3"))
    if not mp3_files:
        print(f"❌ ไม่พบไฟล์เพลงใน: {input_folder}")
        return

    print(f"🔎 พบไฟล์ทั้งหมด {len(mp3_files)} ไฟล์")
    print("🧠 กำลังอุ่นเครื่อง AI (ใช้ CPU)...")
    
    transcriptor = PianoTranscription(device='cpu')
    print("✅ AI พร้อมทำงานแล้ว!\n")

    for mp3_file in mp3_files:
        filename = os.path.basename(mp3_file)
        midi_filename = filename.replace(".mp3", ".mid")
        midi_path = os.path.join(output_folder, midi_filename)
        
        print(f"⏳ กำลังแปลง: {filename}")
        try:
            audio, _ = load_audio(mp3_file, sr=sample_rate, mono=True)
            transcriptor.transcribe(audio, midi_path)
            print(f"🌟 สำเร็จ: ได้ไฟล์ {midi_filename} แล้ว\n")
        except Exception as e:
            print(f"❌ ข้ามไฟล์ {filename} เนื่องจาก Error: {e}\n")

    print("🎉 กระบวนการเสร็จสิ้นทั้งหมด!")

if __name__ == "__main__":
    # ⚠️ ตั้งค่าโฟลเดอร์ตรงนี้ก่อนรันทุกครั้ง
    INPUT_DIR = r"D:\pinno\@20260405\test" 
    OUTPUT_DIR = r"D:\pinno\@20260405\pythonconvert_pro" 

    convert_folder_to_midi_pro(INPUT_DIR, OUTPUT_DIR)

🚀ส่วนที่ 4: สรุปวิธีรันใช้งานจริง (Workflow ประจำวัน)

เมื่อตั้งค่าทุกอย่างเสร็จแล้ว วันหลังถ้าต้องการแปลงเพลง ให้ทำตาม 3 ขั้นตอนนี้ง่ายๆ:

  1. นำไฟล์เพลง MP3 ไปใส่ในโฟลเดอร์ที่ตั้งค่าไว้ และตรวจสอบตัวแปร INPUT_DIR ในโค้ด
  2. เปิด Anaconda Prompt แล้วเข้าห้องทำงานด้วยคำสั่ง:

    CMDconda activate piano_ai_env

  3. สั่งรันโค้ดแปลงไฟล์:

    CMDpython D:\pinno\mp3tomidi_pro.py

*หมายเหตุ: คำเตือน FutureWarning หรือการนับตัวเลข Segment... ระหว่างรัน คือการทำงานปกติของระบบที่กำลังวิเคราะห์ทีละท่อน ไม่ต้องตกใจ ปล่อยให้ระบบรันจนจบได้เลย