I first thought of this project when I saw a product (which shall not be named) that generated LTC from a small battery-powered brick. While the product would be very useful, it was pricey for what it did and I thought, "Good project for me to tackle!"
The project has these goals:
- Required - Support standard LTC signal generation. Stretch - Support additional, non-standard, LTC types (e.g. higher frame rates). Stretch - Support LTC "overlaid" over an audio signal, preferably with LTC encoded so that it can be filtered out and the original audio signal restored. (Encode onto a high carrier frequency?) Stretch - Sense whether LuToC output is connected, only generate LTC when connected, sleep after a period of time of no connection. Indicate connection status via display. Stretch - Support IRIG timecode formats.
- Required - 3.5mm line out jack. Stretch - 3.5mm line in jack. Stretch - Built-in mic and speaker for for LTC sync "over the air" and audio alerts. Stretch - Cable safety mechanisms.
- Required - Battery-powered operation via USB power. Stretch - Battery-powered operation via LiPo. Stretch - Battery-powered via camera-style battery. Stretch - Battery-powered via AA batteries. Stretch - Multiple batteries, with automatic failover. Stretch - Battery charging on-board from USB power source.
- Required - Power-on time of less than 20 seconds. Stretch - Power-on time of less than 1 second.
- Required - Push-button power-off. Stretch - Seamlessly handle power loss. Stretch - Automatic sleep mode.
- Required - Long battery life (12 hours). Stretch - Automatic re-establishment of sync after power restored. Stretch - Accurate battery remaining computation. Stretch - Multiple power modes (high-power [wifi, display], medium-power [digital LTC injection], low-power [LTC signal generation, analog injection], sleep [for fast startup].)
- Required - LTC time generation with very low drift (over a day's project cannot drift more than 1/30s), Stretch - Less than one frame drift over one month.
- Required - (Re)configuration of device over USB via desktop application. Stretch - Configuration of the LTC time and signal format (frame rate) from a web UI via WiFi "hotspot" mode. Stretch - Configuration via on-device buttons/touchscreen. Stretch - Configuration over audio in. Stretch - Screen/button "hold" to prevent accidental presses.
- Required - LED indicators showing battery level, current run status (whether LTC is being generated.) Required - A way to indicate that multiple LuToC's are synchronized. Stretch - LCD/OLED screen with text display. Stretch - LCD/OLED screen with graphical UI. Stretch - Status reported via audio indicators using built-in speaker.
- Required - Establish time on LuToC devices via sync with a computer over USB. Stretch - Establish time with computer over WiFi, Bluetooth. Stretch - Sync between LuToC devices via Wifi or Bluetooth. Stretch - Establish/maintain sync via GPS receiver. Stretch - Sync with phones or other devices over WiFi/Bluetooth. Stretch - Sync via LTC input. Stretch - Wireless communication between LuToCs and other devices to ensure time remains synced.
I'm thinking eventually this would run on an ESP32 board with a LiPo battery, a stereo mic/line-in jack (useful for receiving LTC, or for passing audio through), a stereo headphone jack, and a micro-USB plug. But I'm a software guy so would need to have someone design a board.
Likely will use libltc https://x42.github.io/libltc/ and the I2S API provided by esp-idf.