Mengubah Terminalmu Jadi Pemutar Musik Keren dengan Python

Mengubah Terminalmu Jadi Pemutar Musik Keren dengan Python
Photo by Fidias Cervantes/Unsplash

Pernah nggak sih kamu ngerasa bosen sama tampilan pemutar musik yang itu-itu aja? Atau mungkin kamu lagi asyik ngoding di terminal, terus tiba-tiba pengen dengerin musik tanpa harus buka aplikasi lain yang makan RAM dan bikin workflow keganggu? Nah, kalau iya, berarti kamu lagi di tempat yang tepat! Di artikel ini, kita bakal bongkar rahasia gimana caranya mengubah terminal kesayanganmu jadi pemutar musik yang nggak cuma keren tapi juga fungsional, pakai kekuatan Python. Kedengarannya ribet? Tenang aja, ini jauh lebih gampang dan seru dari yang kamu bayangin!

Bayangin aja, dengan beberapa baris kode Python, kamu bisa punya pemutar musik sendiri di terminal. Ini bukan cuma soal gaya-gayaan aja lho, tapi juga soal efisiensi, kustomisasi, dan yang paling penting, belajar hal baru yang aplikatif. Jadi, siap buat petualangan coding kita kali ini? Yuk, langsung aja kita mulai!

Kenapa Sih Harus Pemutar Musik di Terminal? Emang Nggak Ribet?

Mungkin ada yang mikir, "Ngapain sih repot-repot bikin pemutar musik di terminal? Kan udah ada Spotify, Apple Music, atau VLC yang gampang." Eits, tunggu dulu! Ada beberapa alasan kuat kenapa project ini seru dan worth it banget buat dicoba:

  1. Minimalis & Ringan: Pemutar musik berbasis GUI (Graphical User Interface) seringkali memakan banyak sumber daya sistem. Dengan terminal player, kamu bisa menghemat RAM dan CPU, apalagi kalau laptopmu nggak terlalu gahar.
  2. Fokus Tanpa Gangguan: Kalau kamu lagi coding atau kerja di terminal, nggak perlu lagi beralih jendela cuma buat ganti lagu atau pause. Semua kontrol ada di tempatmu bekerja. Ini bantu banget buat menjaga fokus.
  3. Belajar Python Praktis: Ini adalah project yang sangat bagus buat mengaplikasikan skill Python-mu. Kamu bakal belajar tentang file I/O, manajemen library, interaksi user, hingga struktur program.
  4. Kustomisasi Tanpa Batas: Kamu adalah developernya! Mau nambah fitur shuffle? Repeat? Kontrol volume? Atau bahkan integrasi lirik? Semua bisa kamu atur sesuai keinginanmu. Nggak ada batasan, cuma imajinasimu yang jadi batasnya.
  5. Keren Maksimal: Jujur aja, melihat terminalmu memutar musik dengan print() command itu ada sensasi "hacker" atau "developer sejati"-nya. Ini bisa jadi bragging rights di antara teman-teman sesama developer.

Oke, udah cukup ya alasan-alasannya. Sekarang kita masuk ke inti pembahasannya.

Persiapan Tempur: Apa Aja yang Dibutuhin?

Sebelum mulai ngoding, kita perlu beberapa alat dasar:

  1. Python: Pastikan Python sudah terinstal di sistemmu (disarankan versi 3.x ke atas). Kalau belum, bisa download di python.org.
  2. pip: Ini adalah package installer for Python, yang biasanya sudah otomatis terinstal bersama Python. Kita akan pakai pip untuk menginstal library tambahan yang dibutuhkan.
  3. Library Pemutar Audio: Python sendiri nggak punya fungsi bawaan buat memutar audio secara langsung. Kita butuh bantuan dari library pihak ketiga. Ada banyak pilihan, tapi untuk project ini, kita akan pakai pygame.mixer. Kenapa pygame.mixer? Karena relatif mudah digunakan, punya fitur dasar yang lengkap (play, pause, stop, volume), dan cross-platform.
  4. File Musik: Tentu saja, kamu butuh beberapa file musik (format MP3, WAV, OGG, dll.) buat dicoba. Kumpulin di satu folder biar gampang.

Instalasi pygame

Buka terminal atau command prompt kamu, lalu ketik perintah ini:

bash
pip install pygame

Tunggu sampai proses instalasi selesai. Kalau ada error, pastikan koneksi internetmu stabil dan pip sudah terinstal dengan benar (coba pip --version).

Mulai Ngoding: Step-by-Step Menuju Pemutar Musik Impian

Kita bakal mulai dari yang paling sederhana, yaitu memutar satu lagu, lalu kita kembangkan jadi pemutar musik dengan playlist dan kontrol dasar.

Bagian 1: Memutar Satu Lagu Saja

Ini adalah langkah pertama kita. Kita akan buat script Python yang bisa memutar satu file musik.

python
import pygame.mixer
import time # Untuk memberikan jedaInisialisasi mixer
pygame.mixer.init()Path ke file musikmu
Ganti dengan lokasi file musik MP3 atau WAV milikmu
musicfile = "/Users/namakamu/Music/lagukeren.mp3" # Contoh path di macOS/Linux
musicfile = "C:\\Users\\namakamu\\Music\\lagukeren.mp3" # Contoh path di Windowstry:
    # Memuat file musik
    pygame.mixer.music.load(music_file)
    print(f"Memutar: {music_file.split('/')[-1]}") # Ambil nama file aja
    
    # Memutar musik (loop=0 berarti sekali saja, -1 berarti berulang)
    pygame.mixer.music.play()# Agar program tidak langsung berhenti saat lagu belum selesai
    while pygame.mixer.music.get_busy():
        time.sleep(1) # Tunggu 1 detikprint("Selesai memutar.")except pygame.error as e:
    print(f"Error saat memutar musik: {e}")
    print("Pastikan format file didukung dan path file benar.")
except FileNotFoundError:
    print(f"Error: File musik tidak ditemukan di {music_file}")
except Exception as e:
    print(f"Terjadi error tak terduga: {e}")

Penjelasan Kode:

  • pygame.mixer.init(): Ini wajib dipanggil untuk mengaktifkan modul mixer di Pygame.
  • pygame.mixer.music.load(music_file): Untuk memuat file audio ke dalam mixer.
  • pygame.mixer.music.play(): Untuk memulai memutar audio yang sudah dimuat.
  • while pygame.mixer.music.getbusy(): time.sleep(1): Ini adalah trik agar program tetap berjalan selama musik masih diputar. getbusy() akan mengembalikan True jika ada musik yang sedang diputar. time.sleep(1) memberikan jeda 1 detik agar program tidak terlalu banyak memakan CPU saat menunggu.
  • try-except: Penting untuk menangani error, misalnya kalau file musik tidak ditemukan atau ada masalah saat memutar.

Coba jalankan script ini. Kalau berhasil, kamu akan mendengar musikmu diputar di terminal! Keren kan?

Bagian 2: Menambahkan Playlist dan Kontrol Dasar (Play, Pause, Stop, Next, Previous)

Memutar satu lagu itu baru pemanasan. Sekarang kita mau bikin pemutar musik yang sesungguhnya dengan playlist dan kontrol interaktif.

Pertama, kita butuh cara untuk mencari file musik di sebuah folder. Kita akan pakai modul os bawaan Python.

python
import pygame.mixer
import os
import time
import random # Untuk fitur shuffleInisialisasi mixer
pygame.mixer.init()Folder tempat musikmu berada
music_folder = "/Users/namakamu/Music" # Ganti dengan path folder musikmu
music_folder = "C:\\Users\\namakamu\\Music" # Contoh di WindowsList format file audio yang didukung
supported_formats = ('.mp3', '.wav', '.ogg')def getmusicfiles(folder):
    """Mendapatkan daftar file musik dari sebuah folder."""
    music_files = []
    for root, _, files in os.walk(folder):
        for file in files:
            if file.lower().endswith(supported_formats):
                music_files.append(os.path.join(root, file))
    return sorted(music_files) # Urutkan biar rapi--- Variabel Global untuk Kontrol ---
playlist = getmusicfiles(music_folder)
currentsongindex = 0
is_paused = Falseif not playlist:
    print(f"Tidak ada file musik ditemukan di folder: {music_folder}")
    print("Pastikan ada file MP3/WAV/OGG di folder tersebut.")
    pygame.mixer.quit()
    exit()def play_song(index):
    """Memutar lagu berdasarkan indeks di playlist."""
    global currentsongindex, is_paused
    
    if 0 <= index < len(playlist):
        currentsongindex = index
        songpath = playlist[currentsong_index]
        try:
            pygame.mixer.music.load(song_path)
            pygame.mixer.music.play()
            is_paused = False
            print(f"\nMemutar: {os.path.basename(song_path)}")
        except pygame.error as e:
            print(f"Error memutar {os.path.basename(song_path)}: {e}")
            print("Mencoba lagu berikutnya...")
            next_song() # Otomatis lanjut ke lagu berikutnya
    else:
        print("Indeks lagu tidak valid.")def pause_song():
    """Menghentikan sementara lagu yang sedang diputar."""
    global is_paused
    if pygame.mixer.music.getbusy() and not ispaused:
        pygame.mixer.music.pause()
        is_paused = True
        print("Lagu dijeda.")
    elif is_paused:
        print("Lagu sudah dalam mode jeda.")
    else:
        print("Tidak ada lagu yang sedang diputar.")def unpause_song():
    """Melanjutkan lagu yang dijeda."""
    global is_paused
    if is_paused:
        pygame.mixer.music.unpause()
        is_paused = False
        print("Lagu dilanjutkan.")
    elif pygame.mixer.music.get_busy():
        print("Lagu sudah diputar, tidak dalam mode jeda.")
    else:
        print("Tidak ada lagu yang dijeda.")def stop_song():
    """Menghentikan total lagu yang sedang diputar."""
    pygame.mixer.music.stop()
    print("Lagu dihentikan.")
    global is_paused
    is_paused = Falsedef next_song():
    """Memutar lagu berikutnya di playlist."""
    global currentsongindex
    if not playlist: returncurrentsongindex = (currentsongindex + 1) % len(playlist)
    playsong(currentsong_index)def prev_song():
    """Memutar lagu sebelumnya di playlist."""
    global currentsongindex
    if not playlist: returncurrentsongindex = (currentsongindex - 1 + len(playlist)) % len(playlist)
    playsong(currentsong_index)def show_commands():
    """Menampilkan daftar perintah."""
    print("\n--- Kontrol Pemutar Musik ---")
    print("  p   : Play/Lanjutkan")
    print("  s   : Stop")
    print("  j   : Jeda")
    print("  n   : Lagu Berikutnya")
    print("  b   : Lagu Sebelumnya")
    print("  l   : Tampilkan Playlist")
    print("  sh  : Acak Playlist (Shuffle)")
    print("  q   : Keluar")
    print("  h   : Tampilkan Bantuan (Perintah)")
    print("-----------------------------")def shuffle_playlist():
    """Mengacak urutan playlist."""
    global playlist, currentsongindex
    if len(playlist) > 1:
        currentsongpath = playlist[currentsongindex] if pygame.mixer.music.get_busy() else None
        random.shuffle(playlist)
        if currentsongpath: # Coba cari lagu yang sedang diputar setelah diacak
            try:
                currentsongindex = playlist.index(currentsongpath)
            except ValueError:
                currentsongindex = 0 # Jika tidak ketemu, kembali ke awal
        else:
            currentsongindex = 0
        print("Playlist berhasil diacak!")
        show_playlist()
    else:
        print("Playlist terlalu pendek untuk diacak.")def show_playlist():
    """Menampilkan playlist."""
    print("\n--- Daftar Lagu ---")
    if not playlist:
        print("Playlist kosong.")
        return
    for i, song_path in enumerate(playlist):
        prefix = "-> " if i == currentsongindex else "   "
        print(f"{prefix}{i+1}. {os.path.basename(song_path)}")
    print("-------------------")--- Mulai Pemutar Musik ---
print("Selamat datang di Pemutar Musik Terminal!")
show_commands()
show_playlist()Otomatis putar lagu pertama
playsong(currentsong_index)Loop utama untuk input user
while True:
    try:
        command = input("Masukkan perintah (h untuk bantuan): ").strip().lower()if command == 'q':
            stop_song()
            print("Keluar dari pemutar musik. Sampai jumpa!")
            break
        elif command == 'p':
            if is_paused:
                unpause_song()
            else:
                # Jika tidak ada lagu diputar atau lagu sudah selesai, putar lagu saat ini
                if not pygame.mixer.music.get_busy():
                    playsong(currentsong_index)
                else:
                    print("Lagu sudah diputar.")
        elif command == 'j':
            pause_song()
        elif command == 's':
            stop_song()
        elif command == 'n':
            next_song()
        elif command == 'b':
            prev_song()
        elif command == 'h':
            show_commands()
        elif command == 'l':
            show_playlist()
        elif command == 'sh':
            shuffle_playlist()
        else:
            print("Perintah tidak dikenal. Ketik 'h' untuk bantuan.")# Ini penting: Pastikan lagu otomatis lanjut kalau lagu sebelumnya selesai
        if not pygame.mixer.music.getbusy() and not ispaused:
            next_song() # Pindah ke lagu berikutnya secara otomatisexcept KeyboardInterrupt:
        print("\nKeluar dari pemutar musik. Sampai jumpa!")
        stop_song()
        break
    except Exception as e:
        print(f"Terjadi error tak terduga dalam loop utama: {e}")

Penjelasan Kode Bagian 2:

  • getmusicfiles(folder): Fungsi ini akan berjalan menelusuri folder yang kamu tentukan, mencari semua file yang berekstensi MP3, WAV, atau OGG, lalu mengumpulkannya menjadi list playlist.
  • Variabel Global: playlist, currentsongindex, dan is_paused kita jadikan variabel global agar bisa diakses dan diubah oleh fungsi-fungsi kontrol.
  • play_song(index): Fungsi ini memuat dan memutar lagu berdasarkan indeksnya di playlist.
  • pausesong(), unpausesong(), stop_song(): Fungsi-fungsi ini menggunakan metode pygame.mixer.music untuk mengontrol playback lagu.
  • nextsong(), prevsong(): Ini mengatur logika untuk maju dan mundur antar lagu. Perhatikan penggunaan operator % len(playlist) untuk membuat playlist berputar (setelah lagu terakhir kembali ke awal, dan sebelum lagu pertama kembali ke terakhir).
  • show_commands(): Fungsi sederhana untuk menampilkan semua perintah yang bisa digunakan user.
  • shuffle_playlist(): Menggunakan random.shuffle() untuk mengacak urutan lagu di playlist.
  • show_playlist(): Menampilkan daftar lagu di playlist dengan penanda untuk lagu yang sedang diputar.
  • Loop Utama while True: Ini adalah jantung dari interaksi dengan user. Program akan terus menunggu input dari user. Berdasarkan input tersebut, fungsi yang sesuai akan dipanggil.
  • if not pygame.mixer.music.getbusy() and not ispaused: next_song(): Ini adalah logika penting untuk memastikan lagu otomatis berlanjut ke lagu berikutnya setelah lagu saat ini selesai diputar (kecuali jika di-pause).
  • try-except KeyboardInterrupt: Untuk menangani ketika user menekan Ctrl+C agar program bisa keluar dengan rapi.

Coba jalankan script ini, lalu ikuti perintah yang muncul di terminal. Kamu sudah punya pemutar musik terminal yang berfungsi penuh! Keren banget, kan?

Fitur Tambahan dan Ide Pengembangan Keren Lainnya

Project ini bisa kamu kembangkan lebih jauh lagi. Ini beberapa ide buat bikin pemutar musikmu makin "wah":

  1. Kontrol Volume: pygame.mixer.music.set_volume(volume) bisa kamu gunakan untuk mengatur volume. Kamu bisa tambahkan perintah seperti v+ untuk menaikkan dan v- untuk menurunkan volume (nilai volume antara 0.0 sampai 1.0).
  2. Integrasi Metadata (ID3 Tags): Ingin menampilkan judul lagu, artis, atau album, bukan cuma nama file? Kamu bisa gunakan library seperti mutagen. Instal dengan pip install mutagen, lalu baca ID3 tag dari file MP3 dan tampilkan informasinya.
  3. Mencari Lagu (Search): Buat fungsi pencarian yang memungkinkan user mencari lagu berdasarkan nama file atau metadata (jika sudah pakai mutagen).
  4. Menyimpan dan Memuat Playlist: Kalau playlistmu panjang, mungkin kamu ingin menyimpannya dan memuatnya lagi nanti. Kamu bisa menyimpan daftar path lagu ke file teks (misalnya .txt atau .json) dan memuatnya saat program dimulai.
  5. Tampilan Terminal yang Lebih Interaktif (rich): Modul print() dan input() memang fungsional, tapi kadang terasa kurang modern. Kamu bisa pakai library rich (pip install rich) untuk membuat tampilan yang lebih cantik, seperti progress bar untuk lagu, warna-warni teks, atau bahkan tabel playlist. Ini akan membuat pemutar musikmu terlihat jauh lebih profesional dan keren!

* Contoh penggunaan rich untuk menampilkan judul:

python
        from rich.console import Console
        from rich.text import Text
  1. Mode Loop/Repeat: Tambahkan fitur untuk mengulang satu lagu (repeat one) atau mengulang seluruh playlist (repeat all).
  2. Integrasi Lirik: Ini sedikit lebih kompleks, tapi bukan tidak mungkin. Kamu bisa mencoba mengambil lirik dari website lirik menggunakan requests dan BeautifulSoup (web scraping) berdasarkan nama artis dan judul lagu, lalu menampilkannya di terminal.

Tips Tambahan untuk Pengalaman Terbaik

  • Gunakan Virtual Environment: Sebelum menginstal library seperti pygame atau mutagen, biasakan untuk membuat virtual environment (python -m venv venv lalu source venv/bin/activate di Linux/macOS atau venv\Scripts\activate di Windows). Ini menjaga proyekmu terisolasi dari instalasi Python global.
  • Organisir File Musikmu: Punya folder musik yang rapi akan sangat membantu. Pisahkan berdasarkan artis, album, atau genre agar lebih mudah dikelola oleh scriptmu.
  • Perhatikan Error: Setiap kali menambahkan fitur baru, selalu pertimbangkan potensi error dan tambahkan try-except block untuk menanganinya dengan baik. Program yang stabil lebih baik daripada program yang kaya fitur tapi mudah crash.

Penutup: Ini Bukan Sekadar Pemutar Musik, Ini Belajar Coding!

Gimana, seru kan? Dari yang cuma bisa memutar satu lagu, sekarang kamu udah punya pemutar musik terminal sendiri dengan playlist dan kontrol dasar. Ini adalah bukti nyata betapa kuatnya Python dan bagaimana kita bisa memanfaatkannya untuk membuat sesuatu yang keren dan fungsional.

Project ini bukan cuma tentang membuat pemutar musik lho, tapi lebih dari itu:

  • Kamu belajar tentang struktur program yang lebih kompleks.
  • Kamu memahami cara berinteraksi dengan sistem file (membaca folder).
  • Kamu mempraktikkan logika kontrol (play, pause, next, prev, shuffle).
  • Kamu mengasah kemampuan debugging dan error handling.
  • Dan yang paling penting, kamu melihat secara langsung hasil dari kode yang kamu tulis.

Jadi, jangan berhenti di sini! Jadikan project ini sebagai fondasi, dan terus kembangkan dengan ide-ide kreatifmu. Eksplorasi library lain, coba fitur-fitur baru, dan jangan takut untuk eksperimen. Siapa tahu, suatu hari nanti pemutar musik terminal buatanmu ini jadi tools wajib di kalangan developer. Selamat berkarya dan selamat menikmati musik di terminal kesayanganmu!

Read more