Maybe this is not a common thing for folks to do with their phones these days, but I have a few numbers programmed into my contacts that include access codes, or similar, to be dialed after the main number. Some of them are conference service access sequences, one is a calling card from my home VoIP provider (CallCentric) that lets me make international calls at VoIP rates (a fraction of what AT&T would charge me if I just dialed direct from the phone) and one connects me to my mother’s SIP line in the UK via a service called SIP Broker, giving me free calls to her even when I am on my mobile phone here.
While I certainly could remember all the access codes, PINs and even my mother’s SIP number, it is much simpler to just program them into contacts so they are dialed automatically. This has worked beautifully on all my iPhones to date and even on my Android phones. Until iOS 10. When I first upgraded my iPhone 6s to iOS 10 GM, I noticed that the tone replay was much faster. I also noticed that SIP Broker was having trouble understanding it sometimes (I would estimate around 25% of the time). When the iPhone 7 arrived though, that failure rate jumped to 100%. I could not get these numbers to dial at all unless I did it manually.
I believe the tones are long enough on iOS 10, but I suspect the gaps between them are too short. That is somewhat confirmed by the fact that adding a pause between each digit allowed it to work (but it took nearly 30 seconds to dial the number!).
Analyzing the Tones
Since the tone replay is audible, I fired up Audacity on my Mac and simply recorded three phones replaying the tones to access the CallCentric test number via a local SIP Broker PSTN gateway:
(415) 594 0355,*462,17770000001
On the iPhone 7 (running iOS 10.0.2), the trace looked like this:
You can see from there that the gap between the tones is very, very short. In fact, just 5-10ms compared to a tone time of around 200ms. This reinforces the belief that it is the gap that is the problem.
For comparison, here is iOS 9 running on an iPhone 5c:
This one has slightly longer tone periods (about 250ms), but the gaps are much, much longer at around 100ms. That is 10x the length of the gaps on the iPhone 7.
Finally, I tried my Nexus 5X running Android 7 to see whether they’d had the same idea of reducing the gaps, but no, the Nexus has both longer tones (over 300ms of tone) and longer gaps (around 150ms):
What Does the Spec Say?
So, there was always a chance that this is something that an engineer at Apple, for whatever reason, decided they could adjust to make their tone replay feature more compliant with a standard specification. Indeed, there is a specification for DTMF (pdf) from the European Telecommunications Standards Institute (ETSI). In that specification there are defined minimum durations for both the tone and the pause between tones.
The tone duration is defined like this:
Where the DTMF signalling tone duration is controlled automatically by the transmitter, the duration of any individual DTMF tone combination sent shall not be less than 65 ms. The time shall be measured from the time when the tone reaches 90 % of its steady-state value, until it has dropped to 90 % of its steady-state value.
The pause duration is defined like this:
Where the DTMF signalling pause duration is controlled automatically by the transmitter the duration of the pause between any individual DTMF tone combination shall not be less than 65 ms. The time shall be measured from the time when the tone has dropped to 10 % of its steady-state value, until it has risen to 10 % of its steady-state value.
So, that iPhone 7 time, looks to me to be well below the minimum pause time!