•••

Как я уже писал, голосовые сообщения — это зло. К несчастью, зла в мире довольно много, искоренить вполне его вряд ли возможно, поэтому приходится как-то с ним жить. К счастью, прогресс неостановим, и новые инструменты способны делать эту жизнь чуть комфортнее.

Мне вчера пришло в голову, что на современном телефоне whisper.cpp должен бегать достаточно уверенно, и наверняка можно организовать удобную локальную распознавалку голосовых сообщений. Да, я знаю, что в том же Телеграме это встроено, но ради одного этого покупать платную версию лень, да и сообщения голосовые валятся не только в Телеграм. А если есть локальное приложение, можно в него из любого мессенджера пересылать голосовые сообщения (все мессенджеры, которыми я пользуюсь, позволяют голосовым сообщением «поделиться» как звуковым файлом).

Беглый поиск по аппсторам и гитхабу показал, что идея запускать whisper.cpp на телефоне пришла в голову не только мне, но приложения, в которых это реализовано, не готовы принимать аудио-файлы через стандартный API Андроида (то самое «поделиться»). В общем, как всегда всё приходится делать самому.

Отправной точкой послужил прошлогодний пост Джейведа Алама с подробным рассказом о том, как, собственно, запускать whisper.cpp в Termux. Дальше пришлось немного поразбираться с дополнительными функциями самого Termux, и в итоге у меня в ~/bin/ появился исполняемый файлик вот такого содержания:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/data/data/com.termux/files/usr/bin/bash

set -e

infile="$1"

name="$(basename "$infile")"
dest="$HOME/incoming/$name.wav"

ffmpeg -i "$infile" -hide_banner -v quiet -ar 16000 -ac 1 $dest
$HOME/whisper.cpp/build/bin/whisper-cli -m $HOME/whisper.cpp/models/ggml-small.bin -nt -l auto -np -f $dest

rm $dest

echo
echo ==================

read -r

Само собой, в директорию ~/whisper.cpp склонирован репозиторий, там собран исполняемый файл и скачаны модельки (по инструкции от Джейведа). Я остановился на small, хотя она на моём телефоне и заметно медленнее, чем base (та отрабатывает почти мгновенно, эту приходится ждать несколько секунд), но с русским языком работает сильно лучше.

Собственно вот этот скрипт — самая магия и есть. Если он в ~/bin/ существует, Termux сообщает системе, что умеет принимать файлы — и появляется в том самом меню «поделиться». И туда можно послать эти самые голосовые сообщения, файликами, хоть из Телеграма, хоть из WhatsApp, хоть откуда. И ffmpeg их перекодирует в нужный формат, а whisper.cpp распознает и покажет по-человечески, текстом.

Проблему поиска потом в чате информации из таких сообщений это не решает, конечно. Ну и в целом — костыль костылём. Но, по крайней мере, можно понять, о чём речь, в условиях, когда послушать сообщение не можешь или не хочешь — уже хорошо.

Теперь думаю: так оставить, или сделать прям полноценным приложением? Приложением будет красивее и удобнее, но я ведь под Android не разрабатывал никогда — куча токенов уйдёт…