Make an EZ-Builder Behavior Control

Output Audio from EZ-B

This is an example with source code about how to play audio out of the EZ-B. The EZ-B will output audio as a stream or byte array.

This example can be run as a plugin by installing it here:

Source code as a plugin project is here:

*Dependency: Additional to adding EZ-Builder.exe and EZ-B.DLL, this plugin requires NAudio.DLL library to be added as a project reference. Remember to UNSELECT "Copy Files"!

This plugin provides the following examples:

1) Load audio from MP3 or WAV file


// MP3
NAudio.Wave.Mp3FileReader mp3 = new NAudio.Wave.Mp3FileReader(openFileDialog1.FileName);

// WAV
NAudio.Wave.WaveStream wav = new NAudio.Wave.WaveFileReader(openFileDialog1.FileName);

2) Convert audio file to uncompressed PCM data to supported EZ-B sample rate and sample size


NAudio.Wave.WaveFormatConversionStream pcm = new NAudio.Wave.WaveFormatConversionStream(new NAudio.Wave.WaveFormat(EZ_B.EZBv4Sound.AUDIO_SAMPLE_BITRATE, 8, 1), mp3);

3) Compress PCM data with gzip to be stored in project STORAGE


using (MemoryStream ms = new MemoryStream()) {

using (GZipStream gz = new GZipStream(ms, CompressionMode.Compress))

_cf.STORAGE[ConfigTitles.COMPRESSED_AUDIO_DATA] = ms.ToArray();

4) Play audio data from compressed project STORAGE


using (MemoryStream ms = new MemoryStream(compressedAudioData))
using (GZipStream gz = new GZipStream(ms, CompressionMode.Decompress))

5) Supports ControlCommand() for Play and Stop of audio to be used in external scripts


public override object[] GetSupportedControlCommands() {

List items = new List();


return items.ToArray();

public override void SendCommand(string windowCommand, params string[] values) {

if (windowCommand.Equals(ControlCommands.StartPlayingAudio, StringComparison.InvariantCultureIgnoreCase))
else if (windowCommand.Equals(ControlCommands.StopPlayingAudio, StringComparison.InvariantCultureIgnoreCase))
base.SendCommand(windowCommand, values);

6) Changes the status of the button when audio is playing globally from anywhere in EZ-Builder on EZ-B #0


public FormMain() {


EZBManager.EZBs[0].SoundV4.OnStartPlaying += SoundV4_OnStartPlaying;
EZBManager.EZBs[0].SoundV4.OnStopPlaying += SoundV4_OnStopPlaying;

private void FormMain_FormClosing(object sender, FormClosingEventArgs e) {

EZBManager.EZBs[0].SoundV4.OnStartPlaying -= SoundV4_OnStartPlaying;
EZBManager.EZBs[0].SoundV4.OnStopPlaying -= SoundV4_OnStopPlaying;

private void SoundV4_OnStopPlaying() {

Invokers.SetText(btnPlayAudio, "Play");

private void SoundV4_OnStartPlaying() {

Invokers.SetText(btnPlayAudio, "Stop");

Output Text to Speech
You can output text to speech easily as well, using the following code example...


using (MemoryStream s = EZBManager.EZBs[0].SpeechSynth.SayToStream("I am speaking out of the EZ-B))

United Kingdom
Trying to follow the tutorials but can't find where the plugin page has gone. How do I add a new plugin to the ez-robot / Synthiam site to get the XML?
United Kingdom
Never mind. Just found the "Create Behaviour Control" link:)
I am trying to follow the instructions for adding my own plugin but I cannot seem to find the place to register the plugin based on the instructions.

Any help is appreciated.

#8   — Edited
The new button to create a plugin behavior control is less than an inch below the button you pressed to create this question. :)

User-inserted image
Thanks for the quick response.

This what happens when you are working on robotics when its way past your bed time.

You miss the obvious