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.Source code as a plugin project is here:
OutputAudioFromEZ-BSource.zip
*Dependency: Additional to adding ARC.exe and EZ-B.DLL, this plugin requires NAudio.DLL library to be added as a project reference. Remember to UNSELECT "Copy Files"! The naudio, arc.exe, ezb.dll are located in the c:\program files (x86) Synthiam arc installation folder.
This plugin provides the following examples:
1) Load audio from MP3 or WAV file
Code:
// 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
Code:
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
Code:
using (MemoryStream ms = new MemoryStream()) {
using (GZipStream gz = new GZipStream(ms, CompressionMode.Compress))
pcm.CopyTo(gz);
_cf.STORAGE[ConfigTitles.COMPRESSED_AUDIO_DATA] = ms.ToArray();
}
4) Play audio data from compressed project STORAGE
Code:
using (MemoryStream ms = new MemoryStream(compressedAudioData))
using (GZipStream gz = new GZipStream(ms, CompressionMode.Decompress))
EZBManager.EZBs[0].SoundV4.PlayData(gz);
5) Supports ControlCommand() for Play and Stop of audio to be used in external scripts
Code:
public override object[] GetSupportedControlCommands() {
List items = new List();
items.Add(ControlCommands.StartPlayingAudio);
items.Add(ControlCommands.StopPlayingAudio);
return items.ToArray();
}
public override void SendCommand(string windowCommand, params string[] values) {
if (windowCommand.Equals(ControlCommands.StartPlayingAudio, StringComparison.InvariantCultureIgnoreCase))
playStoredAudio();
else if (windowCommand.Equals(ControlCommands.StopPlayingAudio, StringComparison.InvariantCultureIgnoreCase))
stopPlaying();
else
base.SendCommand(windowCommand, values);
}
6) Changes the status of the button when audio is playing globally from anywhere in ARC on EZ-B #0
Code:
public FormMain() {
InitializeComponent();
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...
Code:
using (MemoryStream s = EZBManager.EZBs[0].SpeechSynth.SayToStream("I am speaking out of the EZ-B"))
EZBManager.EZBs[0].SoundV4.PlayData(s);