Dalam versi beta Telegram untuk Android 13.0.3 (build 7179), pesan suara yang direkam dapat dikirim sebagai teks: tombol 'Aa' di sebelah jeda akan mentranskripsi rekaman bahkan sebelum dikirim, dan pengguna dapat memilih apa yang akan dikirim ke lawan bicara — teks atau suara itu sendiri. Fitur ini dicatat hanya tersedia untuk pengguna Premium. Kemudian, fitur transkripsi dari versi beta dihapus karena merupakan eksperimen sementara dari salah satu pengembang; namun inovasi kedua dari build yang sama tetap ada — perekaman pesan suara eksperimental dengan peredam bising menggunakan jaringan saraf RNNoise. Ini berlaku bagi mereka yang menginstal versi beta: versi stabil 13.0.2 tidak memiliki kedua fitur tersebut.
Bagaimana Tampilannya di Versi Beta
Tombol 'Aa' muncul dalam mode perekaman terkunci (hands-free) — yaitu ketika jari digeser ke atas dari ikon mikrofon saat merekam, dan perekaman berlanjut tanpa perlu menahan tombol. Menekan 'Aa' akan menampilkan transkripsi, dan Anda tinggal memilih apa yang akan dikirim. Jika pesan suara ditambahkan atau dipotong, versi beta akan menawarkan untuk mentranskripsinya kembali.
Perekaman dengan peredam bising dapat diaktifkan di pengaturan eksperimental versi beta. Bising dihilangkan dari suara sebelum dikompresi ke dalam format Opus — format yang digunakan Telegram untuk menyimpan dan mengirim pesan suara. Peringatan dari build yang sama: peredam bising dapat merusak rekaman musik dan ucapan yang sangat pelan. Menyanyikan melodi dalam pesan suara dengan mode ini adalah ide yang buruk: bagi jaringan, musik terlihat seperti bising, alasannya akan dijelaskan di bawah.
Mengapa Transkripsi Sebelum Dikirim adalah Mekanisme Baru
Transkripsi pesan suara di Telegram sudah ada sejak lama, tetapi hanya untuk pesan yang sudah ada di obrolan. Ini dilakukan oleh server: klien memanggil metode messages.transcribeAudio, dan metode ini memiliki dua parameter — obrolan dan nomor pesan di dalamnya. Respons yang diterima berisi ID transkripsi dan teks; rekaman yang panjang dapat kembali dengan tanda "sedang diproses", dan kemudian teks akan ditambahkan melalui pembaruan updateTranscribedAudio terpisah.
Pesan yang belum terkirim tidak memiliki nomor pesan, sehingga metode ini tidak dapat diterapkan padanya. Metode yang menerima file itu sendiri tidak ada baik dalam skema API publik (TDLib per 8 Oktober) maupun dalam kode sumber Android 13.0.2 dengan layer 231. Pengenal suara sistem Android (android.speech) juga tidak digunakan dalam kode 13.0.2.
Bagaimana versi beta mengatasi batasan ini tidak terlihat dari artefak terbuka: kode sumber build 13.0.3 belum dipublikasikan, repositori berakhir pada 13.0.2 (7175) yang dirilis pada 13 Oktober. Baris untuk tombol baru juga tidak ada di platform terjemahan — ini sesuai dengan versi tentang eksperimen pribadi yang belum mencapai lokalisasi. Hipotesis, bukan fakta dari kode: pengenalan suara dilakukan baik melalui metode server yang belum ada dalam skema publik, atau di perangkat itu sendiri.
Siapa yang Dapat Mengakses Transkripsi Sekarang
Untuk pesan suara yang diterima, aturan terlihat dalam kode klien. Transkripsi tanpa batasan termasuk dalam Premium — dalam deskripsi langganan, ada baris tentang transkripsi pesan suara masuk apa pun. Tanpa Premium, server menyediakan transkripsi percobaan: jumlah per minggu dan durasi rekaman maksimum dibaca oleh klien dari konfigurasi server, dengan kunci transcribe_audio_trial_weekly_number dan transcribe_audio_trial_duration_max. Batas durasi dalam snapshot konfigurasi Oktober adalah 300 detik, jumlah percobaan per minggu bervariasi antara 0 dan 2. Ketika percobaan habis, klien menunjukkan tanggal kapan harus menunggu, atau menawarkan Premium.
Cara Kerja RNNoise
RNNoise adalah pustaka peredam bising sumber terbuka dari Xiph.Org di bawah lisensi BSD. Penulisnya adalah Jean-Marc Valin, salah satu pencipta codec Opus; cara kerjanya dijelaskan dalam artikelnya tahun 2017.
Pendekatannya hibrida. Pemrosesan sinyal klasik memotong suara menjadi bingkai 10 ms (480 sampel pada 48 kHz) dan memecah spektrum setiap bingkai menjadi 22 pita, dengan lebar yang mendekati bagaimana telinga membedakan frekuensi. Jaringan rekuren kecil — yang mengingat bingkai sebelumnya — melihat fitur-fitur pita dan untuk setiap pita menghasilkan koefisien dari 0 hingga 1: berapa banyak energi yang harus dipertahankan di pita tersebut. Filter terpisah berdasarkan nada membersihkan bising di antara harmonisa suara. Secara bersamaan, jaringan menghasilkan probabilitas bahwa ada ucapan dalam bingkai tersebut.
Jaringan mengelola 22 koefisien, bukan ratusan sampel frekuensi, sehingga ukurannya kecil dan bekerja secara real-time pada prosesor ponsel. Sisi negatifnya — jaringan ini dilatih untuk memisahkan ucapan dari bising, dan segala sesuatu yang tidak menyerupai ucapan dianggap sebagai bising. Dari sinilah peringatan tentang musik berasal; suara pelan hilang karena alasan yang sama — fitur-fiturnya di pita frekuensi mirip dengan latar belakang.
RNNoise Sudah Ada di Aplikasi
Pustaka ini tidak perlu ditambahkan. Kode sumbernya terletak di repositori klien Android di jni/voip/rnnoise, dikompilasi menjadi pustaka statis dan disematkan ke dalam pustaka asli utama aplikasi. Hingga saat ini, ia bekerja di obrolan video: modul panggilan melewatkan setiap bingkai dari mikrofon melalui RNNoise, mengambil perkiraan ucapan untuk indikator pembicara, dan mengganti suara dengan yang sudah dibersihkan, ketika "Peredam Bising" diaktifkan di pengaturan obrolan video.
Klien merekam pesan suara dari mikrofon dalam mono pada 48 kHz dan mengompresnya dengan codec Opus dalam mode untuk suara. Frekuensi perekaman cocok dengan frekuensi kerja RNNoise, sehingga eksperimen versi beta hanya menambahkan satu tautan antara mikrofon dan codec — tautan yang sama yang sudah ada di obrolan video sejak lama.




