On-Stage Telephone Ringing with QLab

There is an excellent article in the QLab cookbook for how to simulate a ringing telephone in QLab - and it's far better than playing back a simple sound effect. However, sometimes you can't beat an actual phone.

Indeed, even in TV and film, fake ringing can be really obvious.

There's a really simple (and comparatively low cost compared to specialised devices) way of making a telephone ring on stage with QLab, by taking advantage of what I spend my day job working with - VoIP.

The principle is simple, use a small low-cost box to convert an old analog telephone to a VoIP device, and then use QLab to simulate an inbound call to that phone, enough to trick it into ringing.

I used a Cisco SPA112 in a recent show, but literally any old ATA should do and you can get them very cheaply (£25 or so)

Connect the phone

If you're in the UK, or somewhere else that uses something other than an RJ11 phone jack, you'll need a small adapter to connect the phone. Most ATAs sold in the UK market include one.

Configure the ATA

Ideally, Set a static IP on the ATA and ensure your QLab Mac can see it. Setting this up is beyond the scope of this quick article, but probably safe to assume since you're using QLab you can configure a basic network.

You'll need to know the IP of the ATA and the QLab Mac for the following.

Ensure that Receive Call Without Registration (or a similarly named option if you're not using the SPA112) is set on the ATA, and enter the QLab Mac IP address as the server and phone1 as the username.

Configure the Mac

We're going to use QLab to generate a SIP INVITE message to the phone. This normaly would be a message from a VoIP server signalling there's an inbound call, therefore telling the phone to ring.

Copy and paste the following (substituting IP adddresses where appropriate) into a file on your Mac e.g ~/ring.txt

INVITE sip:phone1@<ATA IP>:5060 SIP/2.0
Via: SIP/2.0/UDP <QLAB IP>:5060;branch=z9hG4bK-63145-519-0
From: qlab <sip:qlab@<QLAB IP>:5060>;tag=63145938276334519
To: phone <sip:phone@<ATA IP>:5060>
Call-ID: 519-63145@<QLAB IP>
CSeq: 1 INVITE
Contact: sip:sipp@<QLAB IP>:5060
Max-Forwards: 70
Subject: Ring
Content-Type: application/sdp

v=0
o=user1 53655765 2353687637 IN IP4 <QLAB IP>
s=-
c=IN IP4 <QLAB IP>
t=0 0
m=audio 6000 RTP/AVP 0
a=rtpmap:0 PCMU/8000

You'll see now why the Static IPs are important!

Set up QLab

Within QLab create a new "Script" cue as follows

do shell script "cat ~/ring.txt | nc -u -w 0 <ATA IP> 5060 &"
do shell script "cat ~/ring.txt | nc -u -w 0 <ATA IP> 5060 &"
do shell script "cat ~/ring.txt | nc -u -w 0 <ATA IP> 5060 &"

When triggered, this simply sends the content of ~/ring.txt (change the path if you saved the file somewhere else) to the phone ATA, simulating a call to the phone.

We send it several times to ensure that (even on a less than ideal network!) the UDP message gets there, the ATA will ignore any after the first message it proceesses.

Fire the cue, the phone should ring.

Ring Ring...

The end result is really quite convincing and, what's best about this method, it stops when the actor picks it up as opposed to one show I worked on many years ago (cue excellent improv of "ah, it must be the other line" as they run off stage and come back on with a hastily-found mobile whilst someone pokes the sound engineer!)