Header Ads

CODEFLARE ADVERTISING
OPEN AD SPACE
Pasang Iklan di Mobzter
Promosikan bisnis, produk, website atau layanan Anda.
SLOT TERSEDIA
PASANG IKLAN
  • Bikin Jarvis Bisa Mendengar Suara: Cara Membuat voice.py untuk Speech-to-Text di Windows

    Membuat voice.py speech to text untuk Jarvis di Windows

    Setelah app.py bisa membuka aplikasi, mencari file, mengecek storage dan menjalankan command dasar, langkah berikutnya adalah membuat Jarvis bisa mendengar suara. Kita akan membuat satu file baru bernama voice.py, lalu menghubungkannya ke app.py tanpa membongkar struktur yang sudah bekerja.

    Versi ini sengaja dibuat untuk pemula. Speech recognition menggunakan library SpeechRecognition dan input microphone melalui PyAudio. Untuk pengenalan suara, contoh utama memakai Google recognizer bawaan library sehingga butuh koneksi internet, tetapi di bagian akhir ada jalur upgrade ke Vosk kalau ingin offline.

    Target artikel iniSetelah selesai, kamu bisa berkata “buka notepad”, “storage”, atau “cari invoice” lewat microphone. Hasil suara diubah menjadi teks lalu dikirim ke router app.py.

    Pastikan app.py sebelumnya sudah bekerja

    Sebelum menambah input suara, pastikan command router sudah bekerja. Jika belum, gunakan contoh app.py Jarvis untuk menyiapkan fungsi dasar seperti membuka aplikasi, mengecek storage dan mencari file.

    buka notepad
    storage
    cari invoice
    catat beli SSD minggu depan

    Kalau bagian ini belum bekerja, selesaikan dulu fondasi app.py. Voice input hanya mengganti cara memasukkan command, bukan mengganti router dan fungsi yang sudah ada.

    Install library voice yang dibutuhkan

    Buka terminal di folder project lalu jalankan:

    python -m pip install "SpeechRecognition[audio]"

    Dokumentasi SpeechRecognition saat ini menyebut Python 3.9+ sebagai syarat utama, sedangkan PyAudio diperlukan ketika kita ingin memakai class Microphone. Pada Windows, paket audio bisa dipasang langsung melalui extra [audio]. Kalau ingin memasangnya terpisah:

    python -m pip install SpeechRecognition
    python -m pip install pyaudio

    Setelah instalasi selesai, tes cepat:

    python -c "import speech_recognition as sr; print(sr.__version__)"

    Kalau nomor versi muncul tanpa error, library sudah terbaca.

    Cek microphone Windows lebih dulu

    Sebelum menyalahkan Python, pastikan microphone benar-benar aktif di Windows. Buka Settings → System → Sound → Input, pilih microphone yang ingin dipakai, lalu lihat apakah indikator input bergerak ketika kamu bicara.

    Kalau microphone tidak bergerak di Settings, voice.py juga tidak akan bisa merekam suara.

    Lihat daftar microphone yang dibaca Python

    Buat file sementara atau jalankan kode berikut di terminal Python:

    import speech_recognition as sr
    
    for index, name in enumerate(sr.Microphone.list_microphone_names()):
        print(index, name)

    Output-nya kira-kira seperti ini:

    0 Microsoft Sound Mapper - Input
    1 Microphone (USB Audio Device)
    2 Headset Microphone

    Catat nomor perangkat yang benar kalau PC punya banyak microphone. Kita akan memakai indeks tersebut jika default microphone salah.

    Buat file voice.py

    Struktur project sekarang menjadi:

    jarvis-mini/
    ├─ app.py
    └─ voice.py

    Isi voice.py dengan kode lengkap berikut:

    import speech_recognition as sr
    
    LANGUAGE = "id-ID"
    MICROPHONE_INDEX = None
    TIMEOUT = 5
    PHRASE_TIME_LIMIT = 8
    
    recognizer = sr.Recognizer()
    recognizer.dynamic_energy_threshold = True
    
    
    def listen_command():
        try:
            with sr.Microphone(device_index=MICROPHONE_INDEX) as source:
                print("Jarvis: Menyesuaikan noise ruangan...")
                recognizer.adjust_for_ambient_noise(source, duration=0.8)
    
                print("Jarvis: Mendengarkan...")
    
                audio = recognizer.listen(
                    source,
                    timeout=TIMEOUT,
                    phrase_time_limit=PHRASE_TIME_LIMIT,
                )
    
            print("Jarvis: Memproses suara...")
    
            text = recognizer.recognize_google(
                audio,
                language=LANGUAGE,
            )
    
            text = text.strip().lower()
    
            if text:
                print(f"Anda: {text}")
    
            return text
    
        except sr.WaitTimeoutError:
            print("Jarvis: Tidak mendengar suara.")
            return ""
    
        except sr.UnknownValueError:
            print("Jarvis: Suara terdengar, tapi belum bisa dipahami.")
            return ""
    
        except sr.RequestError as error:
            print(f"Jarvis: Layanan speech recognition bermasalah: {error}")
            return ""
    
        except OSError as error:
            print(f"Jarvis: Microphone tidak tersedia: {error}")
            return ""
    
        except Exception as error:
            print(f"Jarvis: Voice error: {error}")
            return ""
    
    
    if __name__ == "__main__":
        command = listen_command()
    
        if command:
            print("Hasil:", command)

    Tes voice.py sebelum disambungkan ke app.py

    Jalankan:

    python voice.py

    Diam sebentar ketika muncul:

    Jarvis: Menyesuaikan noise ruangan...

    Lalu saat tampil:

    Jarvis: Mendengarkan...

    ucapkan:

    buka notepad

    Kalau berhasil, output akan terlihat seperti:

    Jarvis: Memproses suara...
    Anda: buka notepad
    Hasil: buka notepad
    Kalau sampai tahap ini berhasilMicrophone, PyAudio dan speech recognizer sudah bekerja. Berikutnya kita tinggal mengirim teks tadi ke handle_command() di app.py.

    Arti TIMEOUT dan PHRASE_TIME_LIMIT

    TIMEOUT = 5Jarvis menunggu maksimal 5 detik sampai pengguna mulai bicara.
    PHRASE_TIME_LIMIT = 8Satu perintah suara dibatasi sekitar 8 detik.
    Ambient noiseSistem mendengar noise ruangan sebentar sebelum mulai merekam.

    Untuk command pendek, angka itu cukup nyaman. Kalau pengguna sering memberikan perintah panjang, naikkan PHRASE_TIME_LIMIT menjadi 12 atau 15.

    Kalau default microphone salah

    Misalnya dari daftar perangkat tadi microphone USB berada di nomor 1, ubah:

    MICROPHONE_INDEX = None

    menjadi:

    MICROPHONE_INDEX = 1

    Jalankan ulang python voice.py.

    Sekarang hubungkan voice.py ke app.py

    Pada app.py, tambahkan import ini di bagian atas:

    from voice import listen_command

    Kemudian ganti fungsi main() lama dengan versi berikut:

    def main():
        print(f"{APP_NAME} siap.")
        print("Tekan Enter untuk bicara.")
        print("Ketik command jika ingin memakai keyboard.")
        print("Ketik 'keluar' untuk berhenti.\n")
    
        while True:
            try:
                typed = input(
                    "Command atau Enter untuk voice: "
                ).strip()
    
                if typed:
                    command = typed
                else:
                    command = listen_command()
    
                    if not command:
                        print("Jarvis: Coba lagi atau ketik command.\n")
                        continue
    
                result = handle_command(command)
    
                if result == "__EXIT__":
                    say("Sampai jumpa.")
                    break
    
                say(result)
                print()
    
            except KeyboardInterrupt:
                print()
                say("Program dihentikan.")
                break
    
            except Exception as error:
                say(f"Terjadi error: {error}")

    Bagian lain di app.py tidak perlu diubah.

    Kenapa pakai tombol Enter dulu?

    Karena pada tahap ini tujuan kita hanya membuktikan speech-to-text bekerja. Program belum dibuat selalu mendengarkan microphone. Tekan Enter untuk mengaktifkan listening satu kali, bicara, lalu command dikirim ke router.

    Alurnya sekarang:

    EnterAktifkan mic
    voice.pySuara → teks
    app.pyhandle_command()
    ActionNotepad terbuka

    Tes integrasi penuh

    Jalankan:

    python app.py

    Ketika muncul:

    Command atau Enter untuk voice:

    tekan Enter, lalu ucapkan salah satu:

    buka notepad
    buka calculator
    buka downloads
    buka google
    storage
    waktu
    cari invoice

    Kalau mengucapkan “buka notepad”, flow-nya menjadi:

    Suara
    ↓
    voice.py
    ↓
    "buka notepad"
    ↓
    handle_command()
    ↓
    open_app("notepad")
    ↓
    Notepad terbuka

    Fallback keyboard penting untuk debugging

    Kalau microphone gagal atau internet sedang bermasalah, kamu masih bisa mengetik command. Ini penting karena kita bisa langsung tahu apakah error berasal dari voice layer atau dari app.py.

    Keyboard berhasil, voice gagalMasalah ada di mic, PyAudio atau speech recognizer.
    Keyboard juga gagalPeriksa router atau fungsi di app.py.

    Error: Could not find PyAudio

    Kalau muncul error terkait PyAudio, jalankan:

    python -m pip install --upgrade pip
    python -m pip install "SpeechRecognition[audio]"

    Pada Windows, PyAudio versi PyPI sekarang menyediakan build yang menyertakan PortAudio sehingga instalasi biasanya bisa dilakukan langsung dengan pip. SpeechRecognition sendiri juga merekomendasikan extra [audio] untuk pengguna microphone.

    Error: microphone tidak ditemukan

    Periksa daftar device dengan:

    python -c "import speech_recognition as sr; print(sr.Microphone.list_microphone_names())"

    Kalau list kosong, cek permission microphone Windows. Buka Settings → Privacy & security → Microphone dan pastikan akses microphone untuk desktop apps diaktifkan.

    Error: suara selalu “tidak bisa dipahami”

    Beberapa penyebab paling umum:

    Volume microphone terlalu kecil.
    Noise kipas atau AC terlalu kuat.
    Microphone yang dipakai ternyata device lain.
    Bahasa recognizer tidak sesuai.

    Untuk bahasa Indonesia gunakan:

    LANGUAGE = "id-ID"

    Kalau ingin mencoba bahasa Inggris:

    LANGUAGE = "en-US"

    Kenapa contoh ini masih butuh internet?

    recognize_google() mengirim audio ke layanan recognition sehingga koneksi internet diperlukan. Keuntungannya adalah setup sangat sederhana dan cocok untuk membuktikan konsep terlebih dahulu.

    Untuk versi offline, SpeechRecognition juga punya integrasi Vosk dan Whisper. Dokumentasi library mencantumkan Vosk sebagai salah satu recognizer yang bisa dipasang terpisah. Vosk sendiri menyediakan speech recognition offline dan model bahasa yang bisa dijalankan di perangkat lokal.

    Jangan pindah ke offline dulu kalau versi ini belum berhasil.Pastikan alur microphone → teks → app.py benar-benar bekerja. Setelah itu baru ganti engine recognition tanpa mengubah router.

    Struktur project setelah voice.py

    jarvis-mini/
    ├─ app.py
    └─ voice.py

    Dua file ini sudah punya tugas yang jelas:

    app.pyRouter dan action Windows.
    voice.pyMicrophone dan speech-to-text.

    Itu jauh lebih mudah dirawat dibanding menaruh semuanya di satu file.

    Variasi kode dari komunitas yang layak dipelajari

    Kalau ingin membandingkan implementasi, cari project voice assistant Python yang memisahkan modul listening dari logic utama. Jangan langsung copy seluruh repository; lihat bagaimana developer menangani timeout, microphone selection, background listening dan pemisahan modul.

    Belum perlu wake word

    Jangan buru-buru menambahkan “Hey Jarvis”. Wake word membuat microphone harus selalu standby dan menambah satu layer debugging lagi. Pastikan dulu proses tekan Enter → bicara → command dijalankan stabil.

    Kalau ingin melihat bagaimana voice, LLM, tool router dan automation bisa digabung menjadi satu asisten PC, lihat cara membangun Jarvis di PC. Di halaman ini fokusnya tetap pada speech-to-text dan microphone.

    Target tahap voice sudah selesai kalau ini bekerja

    Kalau kamu bisa menjalankan python app.py, menekan Enter, mengucapkan “buka notepad”, lalu Notepad benar-benar terbuka, tahap voice.py sudah berhasil.

    Setelah itu langkah paling logis adalah membuat Jarvis menjawab dengan suara. Kita bisa menambahkan speak.py untuk text-to-speech tanpa menyentuh ulang router dan voice input yang sekarang sudah stabil.

    Tidak ada komentar

    Post Top Ad

    Post Bottom Ad