Application notes

Skip to main content (skip navigation menu)

Application notes


Application notes are available for our products:

These notes extend the product documentation, usually with examples and techniques that we encountered during our projects.

Programmable audio players - application notes
Programming the MP3 controller/player: getting started
This article steps through the creation of a very simple program, from the installation and configuration of the tools to the evaluation of the result. It refers to model H0420, but most concepts also apply to the Starling players.
Playing tracks sequentially
A sequel to the above tutorial, in which we develop a script that plays MP3 tracks one after another (and in a random order).
    Most recent update: This update of the article makes switching from one track to the next track even faster, by creating "resource ids". The discussion on track separation has been moved, with many enhancements, to a separate application note.
Track and artist separation
When selecting the tracks to play at random, you will often want a form of track separation or, better yet, artist separation, so that the same track (or one of the same artist) does not play too quickly again. This article discusses how to implement track separation and artist separation.
Synchronizing activities with music
An ID3 tag in an MP3 track may optionally contain text or commands with time stamps. These time stamps allow the text or the commands to be synchronized with the music. The H0420 MP3 controller supports this extension, and the article gives a complete example implementation.
Gapless looping MP3 tracks
Due to the file format and the algorithm of MP3 tracks, creating a loop without a gap or click is a little involved, especially when using a hardware player. The H0420 MP3 controller and the Starling audio controller can play gapless MP3 audio loops, provided that special software has processed the MP3 track.
    Example tracks & processing software are available from this site, as well as a detailed presentation of how it works.
    Most recent update: The software was improved with better interpolation in the resampling phase, a GUI "wrapper" utility was added for ease of use.
A remote-controlled MP3 player
Adding functionality to manipulate the H0420 MP3 controller with a common remote control only takes the IR-receiver chip and a pull-up resistor, plus a script that interprets the codes sent by the remote control. This article goes into details and provides a general purpose script for RC5 codes (other infrared protocols are supported by modifying the script).
Connecting a bar-code wand to the MP3 controller/player
The H0420 MP3 controller supports a low-cost bar-code wand directly on its I/O pins (only a pull-up resistors sometimes needs to be added). This article descibes the connections and presents a script that decodes the "interleaved 2 of 5" bar-code symbology.
Synchronizing time with DCF77
This article describes how to synchronize the internal real-time clock of the H0420 MP3 controller on the time signal emitted by the atom clock on the DCF77 transmitter.
    Most recent update: The article also discusses the MSF60 transmitter (in Great Britain) and protocol.
Encrypted MP3 tracks
The H0420 MP3 controller and the H0440 audio player/controller are able to play encrypted MP3 tracks directly (without needing an intermediate decryption phase, and so without start-up delay). This article discusses the software and the operations necessary to create MP3 tracks with strong encryption (and how to play them back).
A MIDI to RS232 converter
The MIDI protocol is a serial data communications protocol using on a "current loop" physical layer, and using a Baud rate of 31250 bps. This article shows the electronics needed to convert between current loop and the RS232 signal levels. The circuit can be connected directly to the RS232 port of the H0420 MP3 player. In the second part, the article covers the "software protocol" of MIDI and develops a simple script to send and receive MIDI commands.
Power-outputs for the programmable audio controller/player
Both the programmable MP3 player model H0420 and the Starling audio player have digital I/O pins with TTL-level output. This note describes how you can get more power (and/or a higher output voltage) from the I/O pins.
LED current source
Both the programmable MP3 player and the Starling audio player have digital I/O pins with TTL-level output, which can directly drive a single LED. This note describes a constant current source that you can use to drive more than one LED, at an equal brightness, controlled from just one I/O pin.
A voltage inverter circuit
The programmable MP3 player model H0420 directly supports LCDs with a HD44780 controller and a positive LC-driving voltage. With the voltage inverter described here, you can also attach LCDs that need a negative LC-driving voltage.
H0420 Internals
The internals of the H0420 are briefly touched upon in this on-line article. The notes cover both the hardware and the software ("firmware").
Interfacing the VS1053 and VS1063 to DACs and SRCs
The VS1053 and VS1063 audio decoder chips from VLSI Solutions support I2S output (in addition to analogue audio output). However, the specific I2S format narrows your choice of DAC, SRC or DSP. The simple circuit presented in this application note converts the I2S format from the VS10x3 to 32Fs Right-Justified, which has much wider support by DAC, SRC and DSP chips.
The STA013 MP3 decoder
This paper is a collection of hardware notes on the use of the STA013 MP3 decoder from STMicroelectronics. The paper also contains some notes on the MP3 file format.
EGI - application notes
The Smallest FLIC animation player
Getting started with programming the EGI player (using the EGI API). This application note implements the smallest functional animation player that uses EGI in C, C++, Delphi and Visual Basic.
An EGI Player in C++
Building a simple animation player with EGI in C++ (no MFC). It is not the tiniest animation player (for that see "The Smallest FLIC animation player"), but the EGIplay utility developed here is not a toy example either.
Easy Transparent Animations with the EGI Player
Playing animations with transparent areas is one of the key features of EGI. This paper extends the simple animation player in C++ to play animations with transparent areas.
Embedding animations in Windows Help using EGI
One feature of the Microsoft Windows Help system (WinHelp) is that it can be extended with "plug-in" DLLs. This paper describes how to embed standard or extended FLIC animations in a WinHelp .HLP file and how to invoke these animations.
Using EGI with DirectDraw
EGI version 3+ can decode frames from a FLIC animation directly into a DirectDraw surface. This application note describes how to use this feature.
Transparent animations on the desktop
EGI can play animations transparently over the desktop, like an "agent" or an avatar. This application note describes how to prepare animations for this feature and how to set up the player. The usage and the internals are also explained, as well as the peculiarities of the "region" functions of Microsoft Windows, and their consequences.
    Most recent update: layered windows on recent versions of Microsoft Windows.
EGI compression schemes
Details on the (lossless) compression schemes that are used by the animation compiler/player EGI: run length encoding (RLE), zero order Huffman and Burrows-Wheeler transform.
    Most recent update: information on the new "frame-shift" compression type.
AniSprite - application notes
Using transparent boards with AniSprite
One of the new features of AniSprite 2.0 is the support for transparent boards. With a transparent board, you can draw your board with all sprites over a background that was created by other means. It allows you, for example, to move 256-colour sprites on top of an RGB background image.
    Most recent update: the note about a function sorely lacking from the Windows API was dropped, because Windows now provides that function.
Collision detection in AniSprite
AniSprite 3+ supports a flexible (and quick) model for collision detection. This paper takes it to task using a simple "billiard" animation as a vehicle.
If you are interested in the kinetics of colliding balls in a two dimensional space, you are invited to this paper as well. (And, by the way, extension to 3D is trivial. This paper does not cover that, because AniSprite is 2D only.)
AniSprite tips
This page contains several tips that exploit specific AniSprite features or tricks that show some creative use of the AniSprite toolkit. What you will find here is a hodgepodge of mostly unrelated snippets, explained in an informal style, for example: splitting a sprite and its shadow mask into two different sprites, using luma masks to simulate alpha blending, group operations, and storing pictures in resource data of a Windows program.
    Most recent update: Editorial change to clarify that AniSprite does support circular links as of version 3.0 (one of the tips was written for AniSprite 2.1).
EGO - application notes

During the development of the EGO system, many notes on the implementation or the interfacing get written, usually in roughly formatted ASCII files with a programmer's editor. Typically, these notes are either rewritten and become part of the EGO manual, or they get to retire in the recycle bin. Occasionally, we have an internal document that did not make it to the manual, but that is too useful to throw away and that is not confidential. These papers are in the "twilight" zone: they are not official, but they are not exactly secret either.

My intent is to publish such "hidden" documents here. The information is unofficial and unsupported. There are no guarantees for correctness and for backward or forward portability. The papers that I will publish here may be in English or in French, depending on who wrote it, and formatting and style will usually be informal.

Building solid code; using assertions in EGO
EGO has supported the .verify() command since version 3. This paper describes the intended use.
The DLL interface for plug-in developers
A description of the functions that developers of plug-ins and external DLLs can use to better integrate with EGO.
The EGO network protocol
A description of the protocol used by the network functions that allow EGO clients to exchange data in a peer-to-peer, group-wise fashion with other EGO clients or other applications.