Native iPhone app. Type a reminder, tap Call, and this iPhone rings. When you answer, it reads the message out loud — in a stock voice, or in a saved voice profile you recorded.
Built with Xcode and UIKit only — no SwiftUI, no web view.
- On a Mac, clone this repo and open
CallMe.xcodeproj. - Select the CallMe target → Signing & Capabilities.
- Choose your Team. The bundle id is
com.ashishsin19.CallMe(change it if Xcode complains). - Plug in an iPhone, or pick an iPhone simulator.
- Press Run (⌘R).
Requires Xcode 16+ and iOS 17.
- On Keypad, type what should be read, or pick a suggestion.
- Optionally set the caller name, voice, and delay (Now / 15s / 30s / 1 min / 2 min).
- Tap Hear this line to preview, or the green Call button.
- Put the phone down. It rings with an Australian dual-tone and vibrates.
- Accept — it speaks the script in the chosen voice.
- Hang up, or let it finish. The call lands in Recents.
If the phone is locked during a delay, a time-sensitive notification appears. Tap it to pick up.
This is not a replay of one take. You record a short sample, the app builds a named profile, and later it speaks any new sentence in that voice.
- Open Voice and tap Record New Voice.
- Name it (for example “Dad” or “Akki”).
- Allow the microphone, tap Record, and read the on-screen passage for 4–12 seconds.
- Save. The profile is selected automatically.
- Type a new reminder on Keypad. Tap Hear this line or Call.
How it works on-device:
- The sample is analysed for pitch (F0) and a 14-band spectral envelope.
- New text is spoken with Apple’s closest on-device voice.
- That speech is pitch-shifted and EQ-coloured to match the saved print.
It will sound closer to the recorded person (pitch and timbre), not a studio neural clone. You can keep up to six saved voices. Swipe to delete one.
This app does not place a cellular or FaceTime call. It rings the iPhone it is running on and speaks locally. No carrier required.
| Piece | UIKit / system API |
|---|---|
| Screens | UITableView inset grouped, UITabBarController, full-screen call UI |
| Incoming ring | AVAudioEngine 400+450 Hz dual-tone, AudioServices vibrate |
| Spoken read-aloud | AVSpeechSynthesizer |
| Voice profiles | AVAudioRecorder + F0 / envelope print + biquad colouring |
| Delay while locked | UserNotifications |
| Recents | UserDefaults |
CallMe/
AppDelegate.swift
SceneDelegate.swift
Models/ Phase, voices, recents store
Services/ Speech, ringtone, voice print, notifications, call session
ViewControllers/ Keypad, Recents, record voice, waiting / incoming / in-call / ended
Views/ Phone.app-style circle buttons