EchoClick here then choose "View Page Source" in the browser see the source code
The first step is to create an the EffectData object with all the details the PION API requires (properties, parameters, presets, and icon):
properties: {
api: 1000, // PION API version
id: 'com.goldwave.pion.echodemo', // Unique ID for this effect (could be a UUID)
type: 'effect', // Type of plug-in: effect, converter, analyzer...
media: 'audio', // What type of media is processed: audio, video, image
label: 'Echo', // Effect name to show to the user
version: 1000, // Effect version (required for preset compatibility)
apply: false, // Effect changes settings on-the-fly and does not require an Apply button
streamable: true, // Can the effect be streamed/chained with other effects (no seeking)
scan: false, // Requires preprocess scan
clipboard: 'no', // Requires clipboard: 'no', 'yes' or 'optional'
ui: 'yes', // Effect has a UI, 'no' = no UI required, 'yes' = in browser, 'host' = host must create one
size: { width: 375, height: 330 }, // (optional) UI window size recommended for host
channels: 0, // Number of channels supported (0 = any)
cache: [ // (optional) Effect can be cached on local device by storing these additional files
'pion.js'
],
help: 'https://goldwave.com/pion/examples.html#echo' // Where to get more help (if not included)
},
// Parameters are all the effect settings
parameters: {
list: [
{ name: 'volume', label: 'Volume', unit: 'dB', minimun: -200, maximum: 10, step: 0.1, value: -6 },
{ name: 'delay', label: 'Delay', unit: 'ms', minimun: 1, maximum: MaxDelay, step: 1, value: 250 }
],
},
// Presets list predefined settings the user can select. The host may create it's own list.
presets: {
list: [
{ label: 'Half second, half volume', values: { volume: -6, delay: 500 } },
{ label: 'One second, loud', values: { volume: -1, delay: 1000 } }
],
}
// Icon is an image that is shown to the user in the host, usually on a toolbar or menu
icon: { url: 'effecticon.png' } // or 'data:....'
Next we need to set up the connection with the host. To do that we can set a window.onload event handler or add an onload handler to the <BODY> element. This function must call PionConnect with the EffectData object. An effect object is returned.
{
effectData: effectData, // EffectData as set above
socket: 0, // Communication socket
state: PionState.unknown, // Current effect state
language: 'en',
stream: '', // The stream to configure or data received (main, clipboard)
config: {
rate: 0, // Sampling rate in Hz (integer)
channels: 0, // Number of channels in the audio data (interleaved)
channelMask: 0, // A bitmask indicating which channels to process
start: 0, // The start time of the selection (sample offset, optional)
finish: 0, // The finish time of the selection (sample offset, optional)
},
callback: {
OnConnect: null,
OnCommand: null,
OnData: null,
OnError: null,
OnClose: null,
},
data: {} // Any data needed for the effect callbacks
}
Now we need to set the OnConnect, OnClose, OnError, OnCommand, and OnData handlers. We also need to set data to anything we might need when processing the callbacks. OnCommand sets, gets, and resets parameters. It also configures the effect to match the config values. OnData processes the effect. It receives the effect object and a Float32Array of interleaved audio samples. See the example source code for details.
MixClick here, then choose "View Page Source" in the browser see the source code
ScanThe host streams all the audio to the scan stream first.
Click here then choose "View Page Source" in the browser see the source code
Plug-in Over Network, PION, PIONAPI and PION logo are trademarks of GoldWave Inc.