The projects are listed in chronological order, most recent first.
Each project description includes the start and end dates, the effort (in man-months) and the technologies used.
Clients include AST Technologies Labs Inc., ATRA Vision Inc., Microtronix Systems Ltd., Listen Inc., and The National Centre for Audiology.
.Net VoIP Component Design & Development
Aug 2012 - Dec 2012 (0.70 m/m)
Windows 7, VS 9.0, C++, C#, OPAL, NSIS
This simplified SIP client was designed for general use by .Net programs. It is licensed by Nimajin
to a third party for peer-to-peer voice communications in an on-line game and is for sale at this
First, an abstract interface was designed to work as a plug-in for the host program and a stub
component was developed for use by the third party so they could code and test their UI while the
VoIP functionality was implemented. A test harness and client GUI was developed in C# separately
for use by Nimajin.
A new interop layer was designed and coded to adapt the open-source OPAL VoIP library's C-language
structures and functions to .Net. This defined the new API and event callbacks for the host program.
The OPAL library linkage was modified into one DLL with the minimum symbol table necessary, to
reduce download size. A new randomized STUN server selection was implemented for use behind NAT
routers. A NullSoft installer was scripted using NSIS. Installation and usage instructions were
contributed to the game publisher's wiki.
Program Updater Design & Development
Aug 2012 - Dec 2012 (0.10 m/m)
Windows 7, VS 9.0, C#, HTTP
This .Net component provides services of checking versions of specific programs against on-line
database and downloading new files from a Web server and replacing them. The implementation was
adapted from open-source code. The code was made more portable, an abstract interface was encoded
so the component could be used as a plug-in and a DLL was built. An update control database was
written and hosted on a Web server, along with the target program files. This system is in
operation serving the commercially-available VoIP Component.
Speech to Lipsync Script File Converter
Sept 2012 - Nov 2012 (0.20 m/m)
Windows 7, VS 9.0, C++, WTL, Microsoft Speech API 5.1, Python
Small GUI utility program analyses audio files and generates lipsync script files, suitable for
3D animation tools like Blender. SAPI usage was adapted from open-source code from Annosoft, which
provided rudimentary Anno4 output. New functionality was added to scale frame timing information
based on user selection and to output to Papagayo format. Experiments were performed to host Python
script files for the purpose of enabling other forms of output.
VoIP Call TalkOff Test
May 2012 - Aug 2012 (0.10 m/m)
Windows 7, VS 9.0, C++, WTL, OPAL, SIP, DirectSound
This addition to an existing program was required to test SIP gateway detection of DTMF digit
tones under noisy audio conditions. The implementation sent the DTMF tones to the audio card
output from user-selectable file sets so various distortions could be tested. The audio card
output was attached to the gateway input. Between the tones, user-selectable noise files were
played. The gateway was expected to send SIP INVITE messages over its Ethernet interface in
response to the DTMF tones. The OPAL SIP call handling in the program was used to detect the
gateway signaling. The new code compared the incoming SIP messages to the sent DTMF tone values
and tabulated the matches and unexpected digits. The audio sending, SIP signaling and digit
comparison were implemented in worker threads, and visual feedback was provided by posting
Windows messages to the UI thread.
May 2012 - Aug 2012 (0.70 m/m)
Windows 7, VS 9.0, C++, WTL, WASAPI
This was an addition to an existing program to set output bits and play an audio file in response
to input bit signal. It required low (sub-millisecond) latency and precise synchronization between
the I/O bit input and the output and audio file playing. DirectSound could not satisfy the timing
requirements, so a WASAPI audio output object was implemented to drop in to the OPAL audio channel
interface definition. Because the WASAPI audio was set for exclusive mode (to minimize latency), and
in this mode it only accepts input at device-specific rates, audio sampling rate conversion was
required to convert the source audio files to the device-natural rates. This was implemented by
modifying and integrating some open-source FIR filter code. The file loading and conversion was
implemented as a worker thread. The triggering, and bit and audio response were implemented as a
state machine to synchronize under user-configurable timings.
Audio File List Player
May 2012 - Aug 2012 (0.20 m/m)
Windows 7, VS 9.0, C++, WTL, DirectSound
This addition to an existing program provides standard audio file play list capability with the
addition of user-selectable period of silence before each file. Developed the UI for file selection
and ordering. A worker thread was implemented for file playing. The thread posts Windows messages
to the UI to update file progress and audio level indicators. Measured & analyzed DirectSound
latency and revised I/O bit output timing code for synchronicity.
Digital I/O Bit Controller & Monitor
May 2012 - Aug 2012 (0.60 m/m)
Windows 7, VS 9.0, C++, WTL
This addition to an existing program was required to display the input and output states of digital
I/O bits in real-time and to trigger software components when they change. Input bit monitoring was
implemented using a worker thread to poll the I/O bit hardware driver. Developed a notification
system to notify subscribers via event signal objects (for waiting worker thread targets) and
Windows messages (for UI thread).