[LAU] [ANN] Kanaha Audio 1.0.0 and Kanaha Camera Control 1.4.2
robertlazarski <[email protected]> Mon, 27 Apr 2026 11:58:27 -1000
| Newsgroups | gmane.linux.audio.users |
|---|---|
| Message-ID | <CABpPLBUs_GAAzwJ_L0uZPbaTw=B2FSzhQQfa3N0dNkr6RU=6+A@mail.gmail.com> |
Multi-Device Workflowontrol 1.4.2
<https://github.com/robertlazarski/kanaha-audio/tree/main#multi-device-workflow>
The phones are servers. Your laptop is the client. Bash scripts on a Linux
desktop orchestrate multiple phones over WiFi — the opposite of the usual
"phone app with a cloud backend" pattern. The app itself is minimal (one
button); all the real work happens from curl and bash.
# Laptop discovers phones via mDNS automatically:
./tools/test-audio-workflow.sh workflow
# Or specify IPs directly:
# Moto X4 records room audio via built-in mic
# Pixel records 4K video + LTC/SMPTE timecode on ch1 via iRig Pro I/O mono
# All traffic is mTLS (mutual TLS) — both client and server certificates
# required. The script passes certs to curl automatically.
./tools/test-audio-workflow.sh workflow \
--audio-device 192.168.8.126 --video-device 192.168.8.159
# What happens:
# 1. Both devices start recording simultaneously
# (GPS sidecar timestamps sync the two devices — no LTC needed
# on the Moto since it records room audio for edit cues, not timecode)
# 2. You play audio cues (music, speech, music)
# 3. Script analyzes the Moto room recording on-device:
# - whisper.cpp finds "next slide please" at 60.0s and 62.0s
# - YAMNet finds Music starting at 30.2s, ending at 99.4s
# 4. Script generates an ffmpeg EDL and assembles the final video
Kanaha Audio <https://github.com/robertlazarski/kanaha-audio> and Kanaha
Camera Control <https://github.com/robertlazarski/kanaha> are two
applications built on the same mod_axis2
<https://axis.apache.org/axis2/c/core/> foundation — same HTTP/2 JSON-RPC
dispatch, same mTLS security, same curl-based scripting. Kanaha Camera
Control adds 9 video operations. Kanaha Audio adds 14 audio operations.
Both expose MCP tools for Claude. The framework scales to new services
without changing the architecture.
See test-audio-workflow.sh
<https://github.com/robertlazarski/kanaha-audio/blob/main/tools/test-audio-workflow.sh>,
generate-edl.sh
<https://github.com/robertlazarski/kanaha-audio/blob/main/tools/generate-edl.sh>,
and EDL.md
<https://github.com/robertlazarski/kanaha-audio/blob/main/docs/EDL.md>.
Kanaha Audio Architecture
curl → HTTPS/HTTP2+mTLS → Apache httpd → Apache Axis2/C →
audio_search_service.c
→ "searchKeywords" → whisper.cpp → keyword timestamps
→ "detectAudioEvents" → TFLite/YAMNet → instrument/event detection
→ "startRecording" → AAudio input → WAV file + GPS sidecar
→ "stopRecording" → finalize WAV → duration + file size
→ "playTone" → AAudio output → speaker (clock_nanosleep sync)
→ "decodeLTC" → libltc → SMPTE timecode frames as JSON
→ "sftpTransfer" → libssh2 → file transfer to storage server
→ "getStatus" → recording state + GPS + model info
No Intent IPC needed (unlike Kanaha Camera
<https://github.com/robertlazarski/kanaha>). All dependencies are
permissive C/C++ libraries that link directly into the same native process
— two ML models, microphone recording, tone playback, and GPS metadata
through one Apache Axis2/C service. No JNI, no Java audio stack, no
serialization overhead.
Kanaha Audio API Operations
<https://github.com/robertlazarski/kanaha-audio/tree/main#kanaha-audio-api-operations>
Operation Description
searchKeywords Find keyword timestamps in audio file
transcribe Full transcription with word-level timestamps
detectAudioEvents YAMNet audio event detection (521 AudioSet classes)
startRecording Record from microphone to WAV (supports start_at scheduling)
stopRecording Stop recording, finalize WAV, return duration
playTone Sine wave through speaker (supports start_at for multi-device sync)
listRecordings List WAV recordings with sizes and durations
getStatus Model state, recording state, GPS location
listModels Available whisper models on device
loadModel Load/switch whisper model
listAudioFiles List processable audio files
playAudio Play a WAV file through the device speaker
decodeLTC Decode SMPTE/LTC timecode from WAV (libltc)
sftpTransfer Transfer audio files to storage server via SFTP (libssh2)
Kanaha Audio MCP Support
<https://github.com/robertlazarski/kanaha-audio/tree/main#kanaha-audio-mcp-support>
Kanaha Audio exposes all 14 operations as MCP tools, so Claude can record
audio, search for keywords, detect instruments, and decode timecode
directly. See MCP.md
<https://github.com/robertlazarski/kanaha-audio/blob/main/docs/MCP.md> for
Claude Desktop configuration.
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' |
/data/data/org.kanaha.audio/files/kanaha-audio-mcp
Also useful for finding misplaced phones. During development, a Pixel went
missing. "Claude, find my phone" → Claude called playTone in a loop until
the 1kHz beep was traced to a couch cushion. Not its intended purpose, but
playTone doesn't judge.