Bikin Jarvis Bisa Mendengar Suara: Cara Membuat voice.py untuk Speech-to-Text 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.
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
handle_command() di app.py.Arti TIMEOUT dan PHRASE_TIME_LIMIT
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:
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.
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:
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.
Struktur project setelah voice.py
jarvis-mini/ ├─ app.py └─ voice.py
Dua file ini sudah punya tugas yang jelas:
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