Trong phiên bản beta 13.0.3 (bản dựng 7179) của Telegram dành cho Android, tin nhắn thoại đã ghi có thể được gửi dưới dạng văn bản. Nút "Aa" bên cạnh nút tạm dừng sẽ phiên âm bản ghi trước khi gửi, và người dùng có thể chọn gửi văn bản hay chính âm thanh đó cho người nhận. Tính năng này được ghi nhận là chỉ khả dụng với Premium. Sau đó, tính năng phiên âm đã bị loại bỏ khỏi bản beta, được coi là một thử nghiệm tạm thời của một nhà phát triển. Tuy nhiên, một cải tiến khác trong cùng bản dựng vẫn còn: tính năng ghi âm tin nhắn thoại thử nghiệm với công nghệ khử tiếng ồn dựa trên mạng thần kinh RNNoise. Điều này áp dụng cho những người cài đặt bản beta; phiên bản ổn định 13.0.2 không có cả hai tính năng này.
Tính năng này trông như thế nào trong bản beta
Nút "Aa" xuất hiện trong chế độ ghi âm khóa (locked recording mode) — khi bạn vuốt ngón tay lên từ biểu tượng micro trong lúc ghi âm và quá trình ghi tiếp tục mà không cần giữ. Nhấn vào "Aa" sẽ hiển thị bản phiên âm, sau đó bạn chỉ cần chọn nội dung muốn gửi. Nếu tin nhắn thoại được ghi thêm hoặc cắt bớt, bản beta sẽ đề xuất phiên âm lại.
Tính năng ghi âm với khử tiếng ồn được bật trong cài đặt thử nghiệm của bản beta. Tiếng ồn được loại bỏ khỏi âm thanh trước khi nó được nén thành Opus — định dạng mà Telegram sử dụng để lưu trữ và gửi tin nhắn thoại. Một cảnh báo từ cùng bản dựng cho biết: tính năng khử tiếng ồn có thể làm hỏng bản ghi nhạc và giọng nói rất nhỏ. Hát một giai điệu vào tin nhắn thoại với chế độ này là một ý tồi: đối với mạng lưới, âm nhạc trông giống như tiếng ồn, lý do sẽ được giải thích bên dưới.
Tại sao phiên âm trước khi gửi là một cơ chế mới
Tính năng phiên âm tin nhắn thoại đã có trong Telegram từ lâu, nhưng chỉ dành cho các tin nhắn đã có trong cuộc trò chuyện. Việc này được thực hiện bởi máy chủ: client gọi phương thức messages.transcribeAudio, và phương thức này có hai tham số — cuộc trò chuyện và số thứ tự tin nhắn trong đó. Phản hồi trả về một định danh phiên âm và văn bản; một bản ghi dài có thể trả về với ghi chú "đang xử lý", và sau đó văn bản sẽ được cập nhật riêng lẻ bằng các bản cập nhật updateTranscribedAudio.
Một bản ghi chưa gửi không có số thứ tự tin nhắn, vì vậy phương thức này không thể áp dụng cho nó. Không có phương thức nào chấp nhận trực tiếp tệp tin, cả trong lược đồ API công khai (TDLib tính đến ngày 8 tháng 10) lẫn trong mã nguồn Android 13.0.2 với layer 231. Bộ nhận dạng giọng nói hệ thống của Android (android.speech) cũng không được sử dụng trong mã nguồn 13.0.2.
Cách bản beta vượt qua hạn chế này không thể thấy rõ từ các tài liệu công khai: mã nguồn của bản dựng 13.0.3 chưa được công bố, kho lưu trữ kết thúc ở 13.0.2 (7175), được phát hành vào ngày 13 tháng 10. Không có dòng nào của nút mới trên nền tảng dịch thuật — điều này phù hợp với giả thuyết về một thử nghiệm cá nhân chưa được bản địa hóa. Một giả thuyết, không phải sự thật từ mã nguồn: việc nhận dạng được thực hiện thông qua một phương thức máy chủ chưa có trong lược đồ công khai, hoặc trên chính thiết bị.
Ai có thể sử dụng tính năng phiên âm hiện tại
Đối với các tin nhắn thoại đã nhận, các quy tắc được thể hiện rõ trong mã nguồn client. Tính năng phiên âm không giới hạn được bao gồm trong Premium — trong mô tả gói đăng ký, đây là dòng về việc phiên âm bất kỳ tin nhắn thoại đến nào. Không có Premium, máy chủ cung cấp các bản phiên âm dùng thử: số lượng hàng tuần và độ dài tối đa của bản ghi được client đọc từ cấu hình máy chủ, với các khóa transcribe_audio_trial_weekly_number và transcribe_audio_trial_duration_max. Giới hạn độ dài trong các ảnh chụp cấu hình tháng 10 là 300 giây, số lượng bản dùng thử hàng tuần thay đổi giữa 0 và 2. Khi hết bản dùng thử, client sẽ hiển thị ngày phải chờ hoặc đề xuất Premium.
RNNoise hoạt động như thế nào
RNNoise là một thư viện khử tiếng ồn mã nguồn mở từ Xiph.Org theo giấy phép BSD. Tác giả là Jean-Marc Valin, một trong những người tạo ra codec Opus; cấu trúc của nó được mô tả trong bài báo năm 2017 của ông.
Cách tiếp cận là lai ghép. Xử lý tín hiệu cổ điển cắt âm thanh thành các khung 10 ms (480 mẫu ở 48 kHz) và phân tích phổ của mỗi khung thành 22 dải tần, có độ rộng gần với cách tai người phân biệt tần số. Một mạng thần kinh đệ quy nhỏ — có khả năng ghi nhớ các khung trước đó — xem xét các đặc điểm của các dải tần và đưa ra một hệ số từ 0 đến 1 cho mỗi dải: bao nhiêu năng lượng trong dải đó nên được giữ lại. Một bộ lọc cao độ riêng biệt sẽ làm sạch tiếng ồn giữa các hài âm của giọng nói. Đồng thời, mạng cũng đưa ra xác suất rằng có giọng nói trong khung đó.
Mạng điều khiển 22 hệ số, chứ không phải hàng trăm mẫu tần số, vì vậy nó nhỏ và hoạt động trong thời gian thực trên bộ xử lý của điện thoại. Mặt khác — nó được huấn luyện để tách giọng nói khỏi tiếng ồn, và mọi thứ không giống giọng nói đều được coi là tiếng ồn. Từ đó có cảnh báo về âm nhạc; giọng nói nhỏ bị mất đi vì lý do tương tự — các đặc điểm của nó trong các dải tần gần giống với nền.
RNNoise đã có trong ứng dụng
Thư viện này không cần phải thêm vào. Mã nguồn nằm trong kho lưu trữ client Android tại jni/voip/rnnoise, được biên dịch thành một thư viện tĩnh và nhúng vào thư viện gốc chính của ứng dụng. Cho đến nay, nó đã hoạt động trong các cuộc gọi video: mô-đun cuộc gọi truyền mỗi khung từ micro qua RNNoise, lấy ước tính giọng nói cho chỉ báo người nói và thay thế âm thanh bằng âm thanh đã được làm sạch khi bật "Khử tiếng ồn" trong cài đặt cuộc gọi video.
Client ghi âm tin nhắn thoại từ micro ở chế độ mono 48 kHz và nén bằng codec Opus ở chế độ dành cho giọng nói. Tần số ghi âm trùng khớp với tần số mà RNNoise hoạt động, vì vậy thử nghiệm của bản beta chỉ thêm một liên kết giữa micro và codec — chính là liên kết đã có trong các cuộc gọi video từ lâu.




