• UK
  • US
  • Français
  • Deutsch
  • Español (precios €)
  • Portugal
  • Polski
  • 日本人
  • 中國傳統
  • 简化中国

Technical history of Spike2 version 10

Freely downloadable for version 10 users.

Date Version Summary
05/2024 10.21 New
  1. When sampling, Talker start up is more robust and problems have better explanations.
  2. If more than one Talker is used for sampling, they are started in parallel, not one after another, as previously, saving start-up time.
  3. There are new script commands TalkerInfo() and TalkerChanInfo() to allow scripts to discover the available talkers and channels and the ability to load talkers prior to sampling.
  4. The Bionic and Ripple file importers have been updated to work with version 3.0 files with 64-bit timestamps.
  5. We had a report that drop down list boxes could get very slow to fill when a computer was on for several weeks(!). We have recoded such boxes in an attempt to mitigate the effect.
  6. If you start to sample with Extra Time set wider than the screen width (so the screen scrolls, but no sampled data appears), we log a problem report to warn the user.
  7. The algorithm we use to select the x axis major tick spacing is now much faster.
  8. The Heka data importer can use use regular expressions to select items for import.
  9. The ToolbarText() command is extended to change the allowed user actions when the toolbar is active, to hide the bar when not active and to read back the visible state and the message text.
  1. The Intan data importer would fail if importing a RHD file containing temperature sensor information.
  2. If a Virtual channel depended on the value of a Horizontal cursor, the channel did not update if the Horizontal cursor was updated from a script or using the cursor context menu.
  3. If a cursor change invalidated a Virtual channel, this change did not cause other items (dialogs, Virtual channels, etc.) that depended on the invalid channel to update.
  4. Scripts that relied on the MMPosition({pos, 0, &gPlay%) command adding 4 to gPlay% to flag that a seek operation was complete could hang up waiting.
  5. No longer takes two attempts to close the D360R conditioner dialog when sampling.
  6. Closing the D360R conditioner dialog when sampling could crash Spike2 if an ADC port offset was applied.
  7. If you used the Digitimer-provided D360 control panel, changes were not reflected in the Spike2 signal conditioner dialog if an ADC port offset was applied.
  8. If a signal conditioner dialog failed to open, this caused all conditioner dialogs to be unavailable.
  9. The 1902 conditioner dialog did not initialize correctly if there was no configuration file.
  10. The Calibration dialog limited channel units to 5 characters in a 64-bit .smrx data file (which allows up to 10 characters).
  11. With a Micro1401-4 interface, the output sequencer generated outputs 1 sequencer clock tick earlier that previous 1401s; all time intervals and relative timings between sequencer outputs were accurate and it would be most unusual if this had any effect on experimental data.
  12. The slider control in a user-defined dialog could omit one of the tick marks and an initial, non-zero position could be incorrectly displayed.
  13. A Result (.srf) file saved with the FileSaveAs() script command could still be marked as modified, even though all changes had been saved.
  14. If you resized the Sampling Notes dialog, the Close button did not move.
  15. The Heka importer did not work when run from the FileConvert$() script command.
  16. Switching the signal conditioner to an excluded Power1401 in the Edit menu Preferences displayed information from the wrong conditioner type.
  17. If filled cursor labels were disabled in the Edit menu Preferences dialog Display tab, a dragged cursor could fail to draw correctly.
01/2024 10.20a New
  1. The AlphaOmega file importer is updated to handle gain settings in recent files.
  1. In a user dialog when defining a Real number field, the number of significant figures displayed was often many more than the number specified in the DlgReal() script command.
  2. A backwards active cursor search of a waveform channel stored in a 32-bit .smr file could report a position one point before the start of the search range, which would fail the search.
  3. During sampling to a 64-bit .smr file, a backwards active cursor search of a waveform channel could report the wrong position.
  4. Signal Conditioner changes made during sampling now always take effect when you click Apply. Previously they could be deferred.
12/2023 10.20 New
  1. Spike2 will reject system shut down requests when sampling data.
  2. If you have multiple signal conditioner types, you can now open the control dialogs for them on-line.
  3. Talkers with RealMark channels can now generate separate Titles and Units for multiple items as we have made an extra 64 characters of space available for this purpose.
  4. The Sampling configuration command to add Talker channels is enhanced to make the process much easier.
  5. There is a new Sampling configuration option to force Talkers to Always load. The SampleTalker() script command is extended to support this.
  6. Tracking of Talker time drift is now more responsive.
  7. Recording the Sampling configuration now supports Real-Time processes applied to Talker channels.
  8. Play waveform areas can now have a comment associated with them. This is used as a tool tip for the Play wave toolbar; if no comment is set the tool tip is the area Key and waveform source. The script equivalent is the new PlayWaveComment$() command.
  9. The context menu command that duplicates RealMark channels as waveforms for each data item now optimises the display for the duplicated channels.
  10. In the Sampling Configuration->Channels tab, you can use Ctrl+Duplicate and the Duplicate N dialog to allow you to add all channels of a Talker (regardless of type) to the configuration.
  11. When you generate a Result view from a RealMark channel with multiple items each with their own titles and units, the new Result view now picks up the current title and units of the channel, not all titles and units.
  12. SampleChanInfo(chan%, 4) can now be used with Talker channels to return waveform rates. Previously it returned 0.
  13. The Measurement to XY and Measurement to a channel dialogs now allow Gap start and Gap end search modes.
  14. The MeasureToChan() script command has an extra field to set the marker code when measuring to a Marker or RealMark channel.
  15. The Edit menu Preferences option Maximum numeric accuracy is now applied to Time views in addition to Result and XY views.
  16. The number of decimal places used for RealWave data when copying or exporting data is now set by the channel Scale factor. Previously it was always 6.
  17. The ADI file importer can now apply marker codes to comments based on matching the comments with regular expressions held in a text file.
  18. The Heka file importer can now import data files that hold floating point values. In addition, if a required subsidiary data file is missing, the file name is listed in the progress dialog.
  19. COM ports that exist, but do not have registry entries, are now detected and displayed in COM port drop down lists.
  20. You can now drag Spike2 document files and configuration files from Microsoft Outlook onto Spike2.
  21. There is a new Edit menu Preferences option in the Sampling tab to set the minimum data file duration that will be moved to the Recycle bin if closed without saving.
  22. The FileClose() script command has a new flags% argument that allows you to prevent unsaved Time views being moved to the Recycle bin.
  1. It was possible to crash Spike2 if you attached more than one Info window to the same view.
  2. Recording the Info Settings dialog could generate non-functional code.
  3. Recording the ChanIndex() command was using channel numbers and not channel variables, which made the generated script less useful.
  4. If you sampled the Drift information for a Talker, the first calculated Slope item held a negative infinity value.
  5. Changing the 1902 Signal Conditioner input selection during sampling did not update the available gain list and offset range.
  6. If the ChanValue() script command was used with the mode% argument set to 6, 7, 11 or 12 (Mean and Instantaneous frequency modes), the measurement was made with the Beats Per Minute value set for the channel, not the value implied by the requested mode.
  7. Very long .mp4 video files could not be replayed past a few hours into the video. We have fixed the third party component that caused the problem and have demonstrated playback of a 30+ hour long video.
  8. The Code field of the Measurements to a data channel dialog did not have any effect.
  9. A badly formatted video file could crash Spike2 when opened for multimedia review.
  10. The VirtualChan(chan%, 0{, expr$}) script command always returned 0, even when the expression was invalid.
  1. In a Result view, the Edit menu Clear command is now always enabled, not just when the view sweep count is non-zero.
06/2023 10.19 New
  1. Active cursor searches and the ChanSearch() script command have two new search modes that find the start and end of Gaps in waveform channels and gaps in event channels defined by a minimum gap duration.
  2. If an active cursor search fails and the Position if search fails field is used to set and validate the cursor position, the cursor label has * appended to indicate that the position is not the result of a successful search.
  3. Active cursor searches now record. Previously these actions did not record as a script when the recording option was enabled.
  4. Virtual channels can now refer to the level of data in a waveform or level event channel as part of the virtual channel expression.
  5. In Time of Day axis mode, the date at which file recording started is now displayed at the bottom left of the x axis (as long as the axis Title is enabled).
  6. The c3d importer can now handle files holding more than 65535 frames, files generated by old SGI/MIPS systems in addition to DEC systems and is more tolerant of files with non-standard headers. It also imports any of the up to 18 Markers in the file header.
  7. Selected text in a text-based view now stays the same colour when the view is not active; previously the selection colour changed to a dark gray.
  8. You can now extend the x axis beyond the current sample time with the new View menu X Axis Extra Time command and the new ViewExtraTime() script command.
  9. During sampling, waveform data written from a script at times greater than the current sampling time will now display. This makes it easy to display a training waveform on the same axis as a sampled waveform so that a user can attempt replicate a force profile (for example).
  10. The SampleText() script command can now write TextMark data at times greater than the current sampling time as an option. It will also accept a marker code as an integer in place of an array of values.
  11. Talkers that can connect to a different hardware device for each sampling session can store drift settings separately for each hardware device.
  1. If a Talker stopped suddenly, Spike2 did not respond to it disconnecting, making it difficult to restore the connection.
  2. If you changed the x axis draw mode from Time of Day to Seconds, cursor labels displayed the time as time of day in seconds, not as seconds from the start of the file. The display was correct on the next update.
  3. Recording the actions of the Save Channel dialog did not record the source channel correctly.
  4. The Save Channel dialog did not remove the Select channel option from the Write channel(s) field when multiple source channels were selected.
  5. The c3d importer (used with motion capture systems) was broken in recent Spike2 releases.
  6. The CED 1902 and Axon CyberAmp signal conditioners did not work with COM ports 10 or higher.
  7. When sampling stopped, the x axis was set to display the time that sampling ran for. If an online script had written data beyond that time range it was not visible until the data file was closed and reopened.
  8. The XY Draw mode dialog recorded All Channels as 0, not -1.
  9. In the binary file importer, increasing the number of channels resulted in the program becoming stuck in a loop displaying an error.
  10. The ADI file importer could position comments incorrectly.
  11. In an imported file, the fourth file comment started with a spurious end of line character.
  12. The File menu Load Configuration... option did not disable the options to load previous files when sampling was in progress.
  13. In the Talker->Info... dialog, the Clock drift rate values are labelled in ms/s but were in s/s (so 1000 times too small).
  14. Opening the Sample menu during sampling caused any open Signal Conditioner dialog to close.
  15. If you used the Digitimer D360R Conditioner control panel to change settings while sampling, the changes were often lost.
  16. Using the X Axis Dialog to change the X Axis units from seconds to milliseconds caused the displayed axis values to be 1000 times too large.
  17. The ViewTrigger(0,...) script command did not set Paged display mode.
  18. A change made to SerialRead() in Spike2 10.18 caused it to fail to match a terminator when it was specified as a string.
  1. When a file is opened for sampling, MaxTime() returns the time into sampling and returns 0.0 before sampling starts. Previously, if a script wrote data before sampling started, MaxTime() returned the time of the last written item until sampling started, then returned the sample time.
02/2023 10.18 New
  1. There is a new File menu Utility programs command to launch programs associated with Spike2 (S2Video, data file repair, test programs...).
  2. A RealMark channel with multiple attached values can be duplicated into multiple channels, one per value, with a new channel context menu command (right click on a non-duplicate RealMark channel).
  3. If you import a file with RealMark data with multiple attached values and separate titles set for each item, the title string is no longer truncated as if there were only one title string.
  4. You can now enable line wrapping for text-based views.
  5. The Analysis menu Save Channel... command is extended to allow you to save a time range of multiple channels to a different Time view.
  6. The ChanSave() script command can now copy data from a channel to itself, for example to generate a repeating data pattern or to repair damaged data.
  7. Sampled TextMark channels read through a serial port can now use terminators of more than 1 character and the terminator can include a Null character (ASCII code 0).
  8. The SerialRead() and SerialCount() script commands have been extended to allow a Null character (ASCII code 0) to be used as a terminator.
  9. The SerialWrite() script command documentation has been extended to explain that it is possible to write to a serial port that is being used to read TextMark data during sampling.
  10. There is a new data file importer for MedtronicTM Percept PC data files exported in JSON format.
  11. The documentation for the FontGet() and FontSet() script commands now has links that detail the style% argument values that you can use.
  12. The LabChart (ADI) importer now sets the time and date in the imported file.
  1. If a CED 1902 or an Axon CyberAmp signal conditioner had the Conditioner Preferences Exclude from use box checked, the associated COM port could have characters sent to it. Now excluded signal conditioners are never loaded and no data is sent to the COM port.
  2. If a COM port was used by the CED 1902 or Axon CyberAmp, the script SerialOpen() command reported the COM port as 'in use', even when not sampling.
  3. If you right-clicked on a channel and selected Hide Channel, this did not record when Script recording was enabled.
  4. In the Text importer, you can set the Labels or Units line number to any number less than the first data line. Previously you were limited to the lines deemed to be header information by the initial scan.
  5. In the Text importer, the No Config option left the importer in a non-functioning state until an existing configuration was loaded.
  6. In a Script view, using the F1 key (to request Help) with the mouse over View() did not open the correct help page.
  7. There were unexpected & characters on buttons in the Text settings dialog.
  1. Using the command HCursorExists(0) (or any impossible cursor number) no longer generates a fatal script error and returns 0.
  2. When processing a Channel specification string, if the first character was an illegal single channel, for example, "0,2..4", the error was not reported. Now the error is noted, but parsing continues and reports channels 2, 3 and 4, as previously.
12/2022 10.17a New
  1. You can change the order of the Arbitrary Waveform output waveforms by clicking and dragging in the Sampling configuration Play waveform tab.
  1. If you set more than 39 Arbitrary waveforms in the Sampling configuration, the Play waveform toolbar did not enable/disable the higher-numbered buttons and it was possible for the buttons to have unexpected effects (such as hiding the sampling window).
12/2022 10.17 New
  1. You can now run different types of signal conditioner at the same time.
  2. We now support the use of more than one D360R signal conditioner.
  3. You can trigger a measurement to an XY view interactively with the new Measure Now command. The script equivalent is Process().
  4. The Script and Output Sequencer Change history markers now draw underneath other markers.
  5. In an XY view you can control the order in which channels are drawn from the XY view Channel information... dialog or from the new XYZOrder() script command.
  6. The ArrSort() script command can now shuffle arrays (randomize element order) in addition to sorting them.
  7. There is a new script command, Clamp(), that limits a value or numeric array to a low to high range.
  8. The forward and inverse FFTs (used for power spectra and by the script language) now run in about half the time.
  9. There are experimental extensions to the ArrFFT() script command to speed up processing of the ACSR algorithm.
  10. The Talker Info... dialog has commands to Log and Copy information and you can lock and clear the saved Talker drift rate.
  11. The Max() and Min() script commands have new variants that find the maximum and minimum of a pair of arrays, element by element.
  12. The ChanDuplicate() script command has an additional argument to delete existing duplicates and copy the visible state of the duplicated channel.
  13. The waveform output Add to online dialog handles Add and Replace in a more intuitive way and Replace preserves the waveform order.
  1. In State drawing mode the marker code and any text were not always drawn correctly when markers were scrolled into view from the right.
  2. When user-specified text was drawn on screen, for example in Cursor labels, Info windows and Vertical Markers, ampersand (&) characters were translated to an underline of the next character.
  3. When importing events from a waveform in Peaks and Troughs mode, a spurious first peak could be added to the output.
  4. In a grid with c columns (data columns indexed 0 to c-1), if the GrdSet() and GrdGet() script commands attempted to access non-existant column c, they would access column 0.
  5. System() and System$() script commands now report Windows 11 (it was previously reported as Windows 10).
  6. Since version 10.16, errors in Output sequencer files were reported on the line after the error.
  7. User-defined dialogs with only buttons (no input fields) could set the input focus to a button that was not the default button.
  8. PolyEval() and PolyRoot() script functions were missing tool tip help when the mouse was over them in the script editor.
  9. In version 10.16, the Rerun dialog set the default To time to 0.0 instead of MaxTime().
  10. Undo of the View menu Standard Display command did not work correctly for XY views.
  11. The x axis Show All command in an XY view with a single data point or with all data points at the same x position had no effect. It now scrolls the x axis to centre it on the data position.
  12. In the Sampling configuration, deleting a channel that a Derived channel depended on did not delete the Derived channel.
  13. The PlayWaveCopy() script command generated a fatal script error if you read back data from the 1401.
09/2022 10.16b Fixes
  1. In the Output Sequencer text editor, the Make Current command set a bad file name in the sampling configuration, and consequently, the sequence did not load.
09/2022 10.16a Fixes
  1. In the Graphical Sequence editor, the user-settable digital and DAC output port labels did not always appear.
  2. In a user-defined dialog, spinners set for integer fields did not allow negative values.
  3. The Help buttons in the Binary and Text importer dialogs did not work.
  4. The Neuralynx importer imported only the first channel in each folder.
09/2022 10.16 New
  1. Talkers can now inform Spike2 where they were run from and Spike2 now saves this information.
  2. There is a new Talker menu Run command to launch a Talker if Spike2 knows the location.
  3. Spike2 can now launch Talkers required by a sampling configuration when it creates a new data file for sampling.
  4. Talkers remember the time drift rate from the last sample session to improve timing accuracy at the start of sampling.
  5. The new MenuCommand() script command allows a script to activate a Spike2 menu command as if the user had selected it.
  6. You can show change marks in the script and output sequencer file text editor.
  7. Using a sampling configuration with DACs 2 and 3 set for arbitrary waveform output with a Micro4 without DACs 2 and 3 now generates a diagnostic error message; previously, sampling would fail to start with a non-specific error.
  8. Attempting to use the Sample menu Output Waveform... command to DACs 2 and 3 with a Micro4 without these DACs now gives a useful warning message, not "Unknown (1401) error code".
  9. If a sampling configuration holds a graphical sequence with an error, the faulty sequence section is identified when the configuration loads rather than reporting a non-specific error.
  10. The Evaluate bar Eval() button can now cope with a wider range of expressions without generating an error.
  11. The File Importer tries harder to cope with files with time-stamped data that is out of order and can now import some files that it previously rejected (albeit by ignoring/patching events).
  12. The GrdColWidth() script command can now return the grid view width in pixels so scripts can adjust column widths to fill the available space.
  13. You can copy the contents of the Sample menu Talker Info dialog to the Clipboard or to the Log window.
  14. Talkers that generate RealMark data with multiple items (for example, Talker drift information), can set Titles and Units for each item.
  15. Closing down Spike2 with an unsaved sampled time view or with memory channels that would be lost is now treated the same as attempting to close the time view; you are warned that you will lose unsaved data.
  16. In the Curve fitting dialog, in Result and XY views the initial Reference position now defaults to 0.0. It was previously set to a cursor position or to XLow(), which could be confusing, especially with Gaussian fits. Time views continue to set the Reference to a cursor position or XLow().
  1. With a Micro4, when sampling both WaveMark (spike shape) data and Waveform channels, it was possible for Waveform channels to sample from the wrong channel.
  2. When using the output sequencer, in version 10.15c, the sequencer compiler skipped the first line of the sequence and the interactive Format command would delete the first line. If the first line held a SET command, this would cause the sequence to run at 1 millisecond per step with default DAC scaling.
  3. During sampling, a Derived channel that was based on a channel with a down-sample real-time process, did not work correctly.
  4. If a sampling configuration was loaded before a required Talker was started, the Talker picked up the last used configuration settings rather than those saved in the sampling configuration.
  5. In the Sampling configuration Channel parameters dialog, editing the Comment would limit it to 70 characters. It is now limited to 2000 characters in a 64-bit .smrx file and to 71 characters in a 32-bit .smr file.
  6. The Binary file importer could crash if the imported file was an unexpected length for the contained data. It did not save individual channel units, did not process FileConvert$() options in the cmd$ argument and did not open the associated Help file.
  7. The MC_Rack data file importer could crash when opening a data file.
  8. Data file importers that have options to save and load configurations (such as the Text and Binary importers) could crash when reading a previously saved configuration.
  9. The Time view Trigger/Overdraw feature was not restored when a Time view opened.
  10. In a Time view, the Next and Previous display trigger buttons were not disabled when a script disabled X axis changes (for example by allow% in the Toolbar() command).
  11. During sampling some event drawing modes updated 1 pixel less than was needed, resulting in imperfect drawing.
  12. The Spline2D(const p[][]); script command to set positions generated a fatal script error if the positions were not distinct. It now returns -1, as documented.
  13. The integer literal value for the most negative integer (-9223372036854775808) was not accepted by the script compiler, though 0x8000000000000000 (the same value in hexadecimal) was accepted.
  14. In a script, dividing an integer variable set to the largest possible negative value (-9223372036854775808) by -1, which overflows the integer range, was either silently ignored or could crash Spike2. This now stops the script with an integer overflow error.
  15. In the Grid Column Header edit dialog, setting a blank title made no change. It now sets the default title, as documented.
  16. It was possible to drag an XY view Key off the visible area, making it difficult to restore.
  17. In a Script view, if the mouse hovered over a comment marker at the start of a line, a tool-tip appeared for a previous, possibly unrelated, line.
06/2022 10.15b Fixes
  1. In version 10.15, you were never prompted to save a Result or XY View when it was closed interactively.
06/2022 10.15a Fixes
  1. In version 10.15, the script command SampleSequencer(7, src$) was not accepted.
06/2022 10.15 New
  1. You can now store an output sequence as text in the sampling configuration as well as in separate files. The SampleSequencer() and SampleSequencer$() script commands are extended to support this.
  2. Info windows can now close automatically when time reaches the stop value.
  3. The Info Settings dialog can now control all features of the Info window.
  4. The Selection() script command can now report the start and end positions of a selection in a text-based window.
  5. In a user-defined dialog, integer number fields with a spinner now step to multiples of the increment, matching real number fields with a spinner.
  6. MatLab export dialogs have context-specific Help links rather than generic help.
  7. The ScriptBar() and SampleBar() script commands have a new option to remove buttons that match a text expression.
  8. You can now record changes made in the Script bar list and the Sample bar list dialogs.
  9. If the curve fitting dialog is open, changes made by a script now cause the dialog to update if it displays a matching channel.
  10. The range of dot sizes in the clustering dialog has been increased from 0..4 to 0..6.
  11. The Eval(...) button in the Evaluate window now works when the code includes a comment and does not add an Eval() command when one already exists in the code.
  12. The FileClose(2) script command now has the same effect as the File menu Close and Link command for a time view.
  13. The Sampling Configuration dialog Channels tab places an asterisk (*) after the channel Type for channels with an attached real-time process.
  14. Spike2 now refuses to sample with an unstable IIR filter set as a real-time channel process. Previously it would sample, but the result was nonsense.
  15. Saved sampling configurations (in *.s2cx files) now use symbolic names (where possible) to save paths to output sequencer, data and script files. This is an experimental feature and should make sampling configurations more portable.
  16. There is a new Compatibility option to disable the use of symbolic names.
  1. Setting a very narrow colour band in a colour scale (used for sonograms and cluster density plots) could cause a crash when the scale was used.
  2. The Elmiko importer did not work in Spike2 version [10.14]. We have also improved the channel scaling for this importer.
  3. Virtual channel expressions could not use Cursor(9), C9, HCursor(9) or HC9.
  4. In a user-defined dialog, integer and real number fields with a spinner could end up with unexpected values if the spinner was used when the field was in an illegal state.
  5. Drawing of cursor labels and fields in the graphical sequence editor and the XY view key could lose a pixel or so from the end as space calculation used kerning but drawing did not.
  6. In an Info window, the Close button did not work.
  7. Recording literal strings (such as a channel comment) that included a double quote mark (") omitted the " character.
  8. In the Script bar list and the Sample bar list dialogs, using Clear All and OK deleted the bar buttons but did not resize the bar.
  9. During data sampling, cursor labels did not update correctly when dragged if the cursor background was Filled.
  10. The script compiler accepted: Test() halt; Proc Test() end; as a valid script but gave an error (correctly) for: Proc Test() end; Test() halt; It now gives an error for both. We have added a Compatibility option to allow the old, lax behaviour.
  11. The Fitting dialog could display x axis positions in a Time view to a ridiculous number of decimal places after a fit was generated by a script.
  12. The documentation for the FileDelete() script command did not describe the optional log% argument, which has been present since at least Spike2 version 8.00.
  13. The minimum output sequencer step interval for a Micro1401-4 was set to 0.01 milliseconds and should have been 0.004 milliseconds.
  14. In the Measurement to XY or Measurement to a data Channel dialogs, the Ignore Cursor 0 step if field gave a spurious error if it evaluated to a value greater than zero.
  15. During sampling with a Measurement to XY or Measurement to data channel process, the Ignore Cursor 0 step if field was ignored.
  16. The Edit menu Preferences option Do not prompt me to save unsaved result and XY views was ignored from the FileClose(-1) script command.
  1. The script compiler is now stricter when compiling a forward reference and requires a semicolon to terminate the statement (see Fixes 10, above). As this change can break old programs we have added a Compatibility option to allow the old behaviour (but please add the missing semicolon).
  2. We have removed the Compatibility option: Use old-style colour mechanisms to match version 5.04.
04/2022 10.14 New
  1. Added support for the Digitimer D360R Programmable Signal Conditioner.
  2. MemSetItem() script command allows an integer data array for WaveMark channels.
  3. The FocusHandle(-1) script command prevents the keyboard focus being restored after using a Toolbar button.
  4. Now attempts to open pre-revision 9 32-bit .smr files that exceed the 2 GB size limit (this allows access to some incorrectly-written files that previously would not open).
  5. The File menu Export As Data file command no longer aborts if any error is found. It now does the best it can and lists problems in the Log view.
  6. The Waveform Average and Waveform Correlation Process setup dialog now display the number of channels in the list and the sample rate of the first channel.
  7. In a user-defined dialog it is now possible to include a vertical bar "|" in a prompt by inserting "||". A single vertical bar introduces a tooltip.
  8. The ArrFilt() script command runs faster for the most common case of contiguous data.
  9. The Help menu About Spike2 dialog Copy command now includes information about installed export filters and Talkers. It also has a new Log button to copy the same information to the Log view.
  10. The Script Bar List and Sample Bar List dialogs give more control over the displayed columns; you can sort the buttons by clicking on the column headers and open the script or sample configuration by double-clicking them. The associated Script and Sample Bars no longer flicker when you close the dialogs.
  11. The data import system has been re-engineered to make the importers much smaller (typically reducing them from 2 MB to 1-200 kB). This make the first use of the File menu Import command much faster.
  12. The Text importer is much better at guessing what the column separator is when it is not comma, Tab or spaces. There is a new option to set the column separator in the configuration dialog.
  13. The Text importer has been reworked to make it cope with a wider range of files and is much less likely to detect a waveform channel as a TextMark due to a small number of non-numeric entries.
  14. In the Sampling configuration dialog, you can now set the Triggered sampling mode From and To fields to microsecond resolution. It was previously limited to millisecond resolution.
  15. The File menu Import dialog now remembers the last used importer between Spike2 sessions (previously it was remembered only within a session).
  16. The Plexon importer has several improvements so it reads a wider range of input files and copes better with files with multiple sections.
  17. The TDT importer only appends _1, _2, and so on to the channel titles when there are duplicates.
  18. The TMS importer now supports the Poly5 file extension in addition to S00.
  19. The XDF (LabStreamingLayer) importer now imports RealMark and TextMark signals and handles waveforms with gaps correctly.
  20. There is a new Importer for Allego (NeuroNexus) data files.
  21. You can now use Vertical and Horizontal cursor positions as part of a Virtual channel expression with live tracking of the cursor positions. For example, WSin(1, C1) generates a 1 Hz sinusoid that is aligned to the vertical cursor 1 position and updates as cursor 1 moves.
  1. The Memory buffer Import channel dialog no longer remembers bad Minimum Interval field values.
  2. Saving a memory buffer to a .smr file that had reached its size limit was not flagged as an error. When next opened the channel was present, but empty or truncated.
  3. Video frame stepping with the Cursor 0 link could step to the same place twice, which wasted time.
  4. Spike2 could crash if a Toolbar button was linked to a function that closed the window with the keyboard input focus.
  5. On-line Gated processing with overlapping gate periods processed the overlapped periods once per gate, so overlapped periods were over-represented in the result and more processing was done than necessary.
  6. It was possible to cause the Power3 and 3A to crash when replaying arbitrary waveform data with particular combinations of sample rate and channels.
  7. Spike2 would not open .smrx data files in which all strings (channel title, units, comment, file comments) were less than 3 characters long and where a string had been edited.
  8. In a script view, a user-defined Func or Proc with a space between the function name and the opening brace, for example func fred (), was omitted from the function list and did not get a pop-up call tip.
  9. Resizing the Script Bar List and Sample Bar List dialogs did not move the Help button.
  10. The ADI importer could crash when reading files with a large number of sections.
  11. Corrected the Talker documentation that stated you have to be in Administrator mode to add a Talker licence; this is not the case.
  12. The documentation now describes how to associate specific Talkers with multiple copies of Spike2 using the command line.
  13. Recording of the commands to lock a vertical cursor to another or a horizontal cursor to the crossing of a vertical cursor with a channel recorded the wrong cursor number.
  14. When importing data in Sweeps mode, the file offset of each sweep from the last could increase through the imported file.
  15. The error messages generated in the output sequencer message bar were badly formatted when an online sequence update failed due to size issues.
  16. The TMS importer rejected valid input files.
  17. The Igor importer could crash if it was used to import a PXP file holding complex numbers.
12/2021 10.13 New
  1. The File menu, Load configuration command can now select one of up to 10 recently-used configuration files.
  2. Triggered sampling mode can now turn data saving off on a specific marker code. The SampleTrigger() script command is extended to match.
  3. There is a new online Derived channel process to detect waveform activity, peaks and troughs as Marker data. The SampleProcess() script command is extended to match. This allows you to trigger analysis and data saving during sampling and can simplify on-line scripts.
  4. The Rectify real-time process now supports half-wave rectification.
  5. There is a new Median measurement that can be used with Measurements to XY views and to a data channel, the Cursor regions dialog and the ChanMeasure() script command.
  6. There is a new ArrMedian() script command to find the median of a numeric array.
  7. The Sampling configuration, Channels tab now lists the estimated data rate written to the data file.
  8. Commands that format values as text for output (Message(), Print(), Print$() and PrintLog()) will now accept zero length arrays.
  9. You can now use the System$(-2) script command to get the Spike2 version, build date and time as text.
  10. The File menu Import Options dialog has been extended so you can set configuration options. Previously, configurations could only be set from a script.
  11. The WindowTitle$() command has an additional flag to remove [32-bit] from the title of .smr files.
  12. The ViewFind() command is extended with flags to allow more control over the matched name.
  13. Importers that read data as RealWave (e.g. Ponemah) used to scan the data before import to find the data range. This could take a lot of time with large files. We now find the range of the data while transferring it to the output file, which can greatly reduce the time to import huge files. We have also increased the size of the data buffers in an attempt to speed up data import. As an example, the time to import an 80 GB Ponemah 6 file has reduced from 5 hours to under 2.
  14. The Ponemah file importer has been extended to allow data to be filtered by Subject, Channel and time range. For example, you can set it to import all channels that contain ECG in the channel title from 10 hours to 11 hours. With huge files with many channels this can reduce import times from hours to seconds when only sub-sets of the data are required. It may still take a while to locate the wanted data.
  15. There is a new example Talker program, SoundCard.exe, included if you select Talker support. This allows you to source waveform data from a Windows sound source, for example a microphone for comments.
  1. The SampleProcess(chan%, -2, index%, args[]) script command did not return the down-sample process ratio% value.
  2. Import of Ponemah files with multiple sections or with the first section of a channel not at time 0 placed the data at the wrong time.
  3. The online Down-sample process worked for a Derived channel but not for a sampled channel.
  4. The text output sequencer DIGPBR command in the Micro3 did not work.
  5. The text output sequencer DIGPS command in the Micro3 and Micro2 had a potential failure (never observed) when both outputs were generating pulse trains.
  6. Editing a RealWave data channel, for example with the Linear Predict command or the ChanWriteWave() script command, could crash Spike2.
  7. ArrHist() did not allow integer data array.
  8. Using Evaluate when there was an unsaved script caused break points in the unsaved script to be ignored.
  9. The PlayWaveCopy() script command did not work in single channel case with a one dimensional array argument.
  10. When inspecting script values in the script debugger, you could change the value of items marked const.
  11. When inspecting arrays of strings in the script debugger, multi-line strings are now displayed correctly in a resizeable dialog.
  12. The Sampling Configuration, Automation tab does not let you exit with a Name template set and an invalid Directory path. Unfortunately, editing the path did not cause the path to be rechecked, making it difficult to clear any error.
  13. The Active Cursor settings dialog displayed an incorrect field description in Repolarisation and Data points modes.
  14. In Triggered sampling mode, sampling using the keyboard as a trigger with no code set did not work.
10/2021 10.12a Fixes
  1. When editing a script, the Edit menu Replace command could place the replacement text in the wrong place.
10/2021 10.12 New
  1. The Copy Cluster Values command writes extra measures of clustering quality (Lratio and Isolation distance).
  2. You can double-click any channel in a time view to zoom it (maximize). Previously only channels with a Y axis could zoom.
  3. If an output sequence fails to load, the error message box now includes the source line that caused the failure.
  4. The Cursor menu Display all command now displays a little data before the first and after the last cursor to make them easier to see and to make space for any cursor label. If you hold down the Ctrl key, the command considers only active cursors when calculating the new x range.
  5. There are new options in the Measurements to XY views and to Data channels dialogs to allow cursor adjustment if a cursor seek operation fails or if the Ignore Cursor 0 step option is triggered.
  6. The Cursor adjustment dialog that can appear during Measurements to XY views and to Data channels has new options to fetch vertical cursors that failed to step and to display all the active vertical cursors.
  7. Improvements to Copy as Text and Export as Text for time view channels: Level event channels output the level at each transition, WaveMark channels include the number of traces and list multiple traces in columns, the SUMMARY output section now lists more information for the channels and uses the same format for every channel.
  8. The Copy for Spreadsheet and Export As Spreadsheet command for Level event channels has been changed to show high levels as 1 and low levels as 0. Previously it displayed the number of edges in each time range, which was not very useful.
  9. There is a new Edit menu Preferences option in the Compatibility tab to revert the Copy/Export as Text and Copy/Export As Spreadsheet changes to the old format.
  10. The LastTime(), NextTime(), MarkEdit(), MemSetItem() and MemGetItem() script commands allow the codes%[] array argument to have size 1-4 for codes and 5 to access the codes and the extra 32-bit integer value associated with each marker in a 64-bit smrx file.
  11. The MemSetItem() script command can now report the index of the first item at or after a time.
  12. The ArrSort() script command now accepts zero length arrays (which does nothing) to save the user testing for zero length to avoid a script error before calling.
  13. The ChanList() script command now allows a zero length array.
  14. The ArrFilt() script command runs significantly faster (takes around half the time with large arrays).
  15. Unmodified array arguments of the ArrStats(), ArrSum(), EditCopy(), PlayWaveCopy(), SampleWaveMark() script commands are now const.
  16. The Yield() script command can return the current allow% state and preserves it if allow% is negative.
  17. The ArrStats() and ArrSum() script commands can set alternative (slower) algorithms for more accurate summation.
  18. The Len() script command can report the number of elements in a multi-dimensional array.
  19. The MarkEdit() script command can modify the codes of Level event channels stored in 64-bit smrx files (as they are stored as Marker data).
  1. Level event channels sampled by a Micro1401-4 inverted the input data. You can use the InvertLev.s2s script in the Documents/Spike10/Scripts folder to invert them. Backup your files before running the script as it modifies the data.
  2. When using the Measurements to XY views and to Data channels commands with a curve fit and the User check positions option set, the displayed fit line was for the previous step.
  3. The Cursor Regions and Cursor Values dialog boxes did not record changes to check boxes, radio buttons or mode.
  4. The Sampling Configuration dialog Automation tab warned you if you browsed to a non-writeable folder, but still set it.
  5. In the Output sequencer text editor, the DIGPS, DIGPC and DIGPBR sequencer instructions did not highlight.
  6. In the Output sequencer, a label without white space after the colon was treated as an error, for example "Label:DAC 0,1".
  7. The script compiler did not flag an error if you used resize on a const array.
  8. The script compiler gave an error if a resize statement was not terminated by a semicolon, so var y[2]; if 1 then resize y[3] endif was not allowed.
  9. The ArrConv(), ArrCWT(), ArrDot(), ArrFilt(), ArrHist(), ArrSpline() and SerialWrite() script commands did not accept const arrays.
  10. The documentation of the following script commands did not list unmodified array arguments as const: ArrRange(), ChanWriteWave(), FileTimeDateSet(), FIRResponse(), GrdSet(), MarkSet(), MatLabPut(), PolyEval(), PolyRoot(), SSTempSet(), ToolbarEnable().
  11. The View menu Multimedia files command failed to open .mp4 files if they held audio only (no video).
  12. In the Spike shape dialogs the zoom effect when you clicked in the data area to start dragging the current spike to a template was too fast to be visible.
  13. Using the HCursor() script command to set a Spike shape dialog cursor value beyond the y axis range could set a negated version of the position.
  14. The text importer did not save individual channel configurations in a valid format.
  15. Stepping backwards by a data point in a virtual channel (for example with the LastTime() script command or an active cursor search in Data points mode) stepped by two data points.
  16. The Grid view default column titles skipped over the AA-AZ series when more than 26 columns were set. The sequence was A-Z, BA-BZ, CA-CZ and so on and should have been A-Z, AA-AZ, BA-BZ...
  17. Copy as Text of WaveMark channels included an extra separator between the Units and the Rate.
  18. If you wrote data to a non-waveform channel (for example with the ChanSave() script command), then overwrote it (allowed with wave-based channels but not event-based channels), Spike2 attempted to write the data, resulting in a corrupted data channel.
  1. In a Time view, the Copy as Text output format did not match the documentation. We have revised it to make the output more regular (and useful) and rewritten the documentation. If you exported data as text you may need to revise your import method or use the new Edit menu Preferences->Compatibility option to output the old format.
08/2021 10.11a Fixes
    A WaveMark data event created by the New WaveMark dialog could have up to half the waveform replaced by zeros.
07/2021 10.11 New
  1. The SerialOpen() script command can now get a list of available COM ports.
  2. There are new script functions PolyEval() to evaluate polynomials and PolyRoot() to factor (find the roots) of polynomials.
  3. The FIR and IIR filter dialogs now use m1, v1 as the channel number for memory and virtual channels rather than 2001, 4001.
  4. The Process() and ProcessAll() script commands now accept a negative start time, which allows measurement commands to find the first item regardless of the minimum step size.
  5. The new EditImageLoad() script command loads an image file to the clipboard.
  6. You can append tod to a time in a dialog expression to set a time in Time of Day axis mode, (see Fixes 8, below).
  7. The RasterSet() script command now accepts a zero sized data array to set a raster line with no data.
  8. The default (what happens when you press the Enter key) when querying if OK to delete a newly-sampled file or lose memory channels on file close, has been changed from Yes to No to prevent accidental loss of data.
  1. The context (right click) menu item to set a vertical cursor position did not trigger an active cursor search.
  2. It was possible for graphical sequencer local labels to cause code generation errors when operations fell on consecutive instructions.
  3. The BinomialC(n%, k%) script command did not allow n% or k% to be 0.
  4. The ChanKey(chan%, get%) script command generated an error if get% was not zero.
  5. In the non-PCA Clustering dialogs (for example, Cluster on Measurements), the command to set the Z axis to time could clear all filter codes (so coloured dots became black).
  6. The ChanSave() script command changed the mouse pointer to the Wait (hourglass) cursor. This caused unpleasant cursor flashing if the command was used in a loop. Spike2 no longer does this. You can use the flags% argument to display a progress dialog for slow operations.
  7. If the EditImageSave() script function failed, it stopped the script; it should have returned an error code.
  8. In Time of Day axis mode, the Cursor Position dialog always treated the entered value as time of day, so expressions such as MaxTime() generated nonsensical results. You can now use the tod suffix to force a time to be interpreted as a time of day.
  9. In a script, passing a zero length sub-array to a function as array[1:0] was allowed, but using array[0:0] was not.
  1. The Cursor fixed flag (F after the cursor number) displays only if the cursor is fixed. The other flags set by CursorFlags() to disable context menu options do not show the F.
05/2021 10.10a Fixes
  1. There was an unnecessary 'Are you sure?' query when closing a newly-sampled file longer than 5 seconds that had already been saved.
05/2021 10.10 New
  1. The text editor can now highlight the line containing the text caret and ‘words’ that match the current selection.
  2. The ChanKey() script command has a new flags% option to position the key so it overhangs the visible view area.
  3. Sampling supports Talker specification version 5, which has potentially more efficient data transfers.
  4. The context (right-click) menu for an overdrawn channel can be obtained by right-clicking on the channel number.
  5. S2Video has a new Configuration option to include the ffdshow Raw Video filter that allows some cameras to connect.
  6. You can prevent interactive positioning of vertical cursors from the right-click cursor context menu with the Fix position command.
  7. The new CursorFlags() script command gives you more control over interactive use of vertical cursors.
  8. There is a new file importer for xdf files (LabRecorder, LabStreamingLayer).
  9. The IIR and FIR filter dialogs cope better with NaN values in RealWave channels.
  10. The online Measure to channel command can send output to the Keyboard marker channel that can trigger writing to disk, the output sequencer and arbitrary waveform output. The MeasureToChan() and MeasureX() script commands are modified to allow this.
  11. Command recording now attempts to record online processes when you open a file for sampling.
  12. Spike2 no longer queries attempts to abort sampling or close a newly-sampled data file without saving it if the file is less than 5 seconds long.
  13. Changing between text Find and Replace dialogs preserves the search text. The Find what field of these dialogs updates in a less surprising way when the dialog activates.
  14. We no longer allow path separator characters (for example ‘/’ and ‘\’) in the File name template field of the Automation dialog as they cause unexpected file names and extra file folders.
  15. The Graphical sequence editor has been updated for smoother dragging of pulses and reduced flicker.
  1. It was possible for user-defined cursor labels that displayed differences of cursor positions to display the wrong value when cursors moved.
  2. In a Time view with a WaveMark channel drawn in Overdraw WM mode and a lot of data, such that the display took more than 2 seconds to update, a screen redraw could repeat many times before it finished.
  3. Recording file import generated a FileConvert$(...) script command with a missing comma.
  4. Several built-in script commands did not have tooltip text set.
  5. Recording the IIRApply() script command always set the eTime argument to 0 or 1.
  6. In the Graphical sequence editor, Arbitrary waveform items could vanish from the display when double-clicking or when selecting them in the control track.
  7. Export of XY data to MATLAB exported multiple copies of the first XY data point.
  1. NaN and Infinity values in a RealWave channel (from a Talker or an Imported file) caused problems throughout Spike2 that manifested as drawing glitches, strange axis ranges in filtering dialogs and peculiar results from digital filters. To avoid this, Spike2 now scans all data read from RealWave channels and replaces NaN values with 0.0 and infinities with half the maximum allowed value (to allow headroom for arithmetic). You can remove these values (leaving gaps in the data) by adding the Skip NaN channel process. You can fill the resulting gaps with the Fill Gaps channel process.
  2. Previously, recording opening a data file for sampling wrote a script that relied on the current sampling configuration to provide any processes associated with sampling. We now disable the use of the current configuration and instead attempt to generate the same processes with script commands. If you prefer the previous state, change the second argument to the recorded FileNew(0,1) command from 1 to 3 and delete the commands that set up processing that follow.
04/2021 10.09c Fixes
  1. If an installation of Spike2 had no LAST.s2cx or DEFAULT.s2cx configuration file, and the Tip of the Day was turned off, Spike2 started up with the main window hidden.
03/2021 10.09b New
  1. The Channel Image dialog for a time view warns you if you set Fill background mode when sampling or Rerunning that the bitmap will not display.
  2. Script debug windows (Local, Global, Watch and Call stack) are moved to visible positions when activated; previously if you moved them off the screen they were difficult to find.
  3. You can change the background and foreground colours of the Graphical sequencer editor.
  1. If you selected All Channels when exporting to a MatLab file, the export failed.
  2. Event channel searches (as in Active cursors, Measurements to XY or to Measurements to a data channel) in other than Data points or Expression mode could hang up.
  3. A Measurements to a data channel process with more than one measurement per iteration generated a spurious error when read from a .s2cx configuration file.
  4. When restoring the Rate and Mean frequency drawing mode from a resource file, the Time width could be increased by 1 clock tick and very small (nonsensical) values were not rejected.
  5. The Edit menu Preferences option, Fill cursor labels, was not remembered between Spike2 sessions.
  6. Some Font selection dialogs did not set the Font Style field to match the initial font style (Bold, Italic, Regular...).
02/2021 10.09a New
  1. There is a new virtual channel function TEvt() to generate the time since the last event on a channel.
  2. The Virtual channel Copy waveform or Level event dialog has an extra field to allow trace selection with multi-trace WaveMark channels.
  3. The FileName$() command has a new option to use a text string as the file name source.
  4. When drawing Result view rasters, the symbols are drawn scaled by the dot size setting (they were very small on high resolution displays).
  1. The SampleCalibrate() script command returned double the scale factor that it set when the 1401 was set for 10 Volt input range.
  2. Active cursor Peak search with Amplitude set to 0 could detect two consecutive points with the same data value as a peak.
  3. Drawing a zoomed in Waveform channel could result in data off the bottom of the screen appearing on screen.
  4. Adding and deleting Memory channel Level event items did not cause the display to redraw to the end.
  5. If the Windows menu Close All command generated a dialog to warn that closing would lose data, the Cancel option caused the dialog to reappear. It now cancels the operation.
  6. In version 10.09 with Active cursors, the Expression cursor mode did not iterate in the Measure to XY and Measure to Channel commands.
  7. In a Result view, the Raster Draw mode settings Sweeps, Sort and Symbols were not saved and restored when the view was saved to a file.
02/2021 10.09 New
  1. In the Sampling Configuration, you can apply a real-time channel Process (for example filter or rectify) to a Talker-based Waveform or RealWave channel.
  2. In the Sampling Configuration, you can Derive a channel from a Talker-based Waveform or RealWave channel.
  3. The Sampling Configuration Channel dialog for 1401-based channels now checks changes to numeric fields as you type.
  4. You can use place holders (for example %c for the channel number) in the channel Title and channel Comment fields in the sampling configuration dialog and script commands.
  5. Sampled TextMark channels that use a COM port can use any port on the computer, not just those in the range COM1 to COM19.
  6. The Sampling Configuration has a new Script tab to set a script that runs at preset times during sampling. There is a new SampleScript() script command.
  7. The Sampling Configuration Mode tab can now set scripts that are run when a trigger event occurs or at the start and end of each cycle of Timed sampling.
  8. The SampleTrigger() and SampleMode() script commands are extended to support scripts that run in response to sampling events.
  9. The SampleHandle() script command can now report the last sampled (and not yet closed) file.
  10. The SampleRepeats() script command can now report the repeats completed and the current file number.
  11. The File Export dialog for data files has been modified so the As Set check box also applies to the list of ranges.
  12. WindowTitle$() script command now has a flags% argument.
  1. The Create New Buffer dialog allowed you to create a WaveMark channel with fewer than the minimum (6) data points.
  2. The MinMax() script command used to search a WaveMark channel with n traces could start the search (n-1) times the spike duration too soon.
  3. The SampleWaveMark() script command did not allow you to set multi-trace channels with an odd number of data points.
  4. If there was a disk problem when updating Talker licence information, Spike2 could crash.
  5. The Sampling Configuration Mode tab in Triggered mode allowed you to select Talker waveforms as the trigger channel.
  6. The File Export dialog progress indicator failed when multiple output ranges were set.
  7. The script FileOpen(name$, 6) command to load a configuration file could return 0 instead of an error code if there was a problem with the file or the file contents.
  8. When editing text in a grid view cell, the Del key did not delete characters to the right of the text caret.
  9. The Analysis menu Linear Predict... command in a Time view had no effect.
  10. Arbitrary waveform output to a Micro1401-4 with the 4 DACs option could not use more than 2 DACs at the same time.
  11. Active cursor Peak search with Amplitude set to 0 could detect two consecutive points with the same data value as a peak.
  12. Drawing a highly magnified Waveform channel could result in data off the bottom of the screen appearing on screen.
  13. Adding and deleting Memory channel Level event items did not cause the display to redraw to the end.
11/2020 10.08 New
  1. The new Analysis menu Linear Predict... command will replace short artifacts in Time view waveform data and Result view channels with estimations based on the previous and following data. The script language equivalent is ChanLinPred().
  2. The vertical and horizontal cursors in Time, Result and XY views have a new option to display the position as the difference with another cursor.
  3. The About Spike2 dialog displays Sync after the 1401 monitor revision if the connected 1401 is time synchronized to a different 1401.
  4. In the script editor, the Functions list box displays the name of the user-defined Func or Proc that contains the text caret.
  5. There is a new ChanZoom() script command to control and report the zoomed state of a Time or Result view.
  6. The SampleSeqStep() script command now has access to the keys, comments and display strings associated with text and graphical output sequencer steps.
  7. In the Sampling Configuration, you can apply a channel Process to a RealWave source channel in addition to a Waveform channel.
  1. The Edit toolbar was not added to the list of script-controllable windows in Spike2 version 10; App(4) always returned 0.
  2. If you ran a script using the script editor Run button and the script created views but never set a front view, it was possible that the Run button needed to be clicked twice to run the script again.
  3. Using the BReadSize(8,...) or BWriteSize(8,...) script commands with an integer array argument could cause Spike2 to crash.
  4. Using the SampleTrigger() script command variant (added at version 10.06) to set a trigger code as a string stopped the script with an error.
  5. When used with a Micro3, Micro4, Power2 or Power3, the PlayWaveStatus$() script command pos% argument reported the position in bytes, not points. This error was introduced in Spike2 version 7. The Micro2 and Power1 were not affected.
  6. Recording ProcessGate() in fixed duration mode from the Gate Settings dialog reversed the pre and len arguments.
  7. In a script, -1 >> 64 evaluated to 0; it should evaluate to -1.
  8. When sampling or rerunning with a visible Level event channel in Line drawing mode could cause the mouse pointer to flicker.
  9. When sampling or rerunning, it was possible to cause Spike2 to hang up in Measure to Chan processing in Automatic mode with Update window every set to 0.0 when searching a Waveform channel with a slow sample rate.
  10. In version 10.07, when Interact() was used in a script loop that did not change the active view, every second button click on the Interact bar was ignored.
  11. If you have both a CED1902 and a Micro1401-4, the Conditioner setup reported a spurious "illegal arguments" error after setting up the 1902.
  12. The EDF importer now supports asymmetrically-scaled integer data; previously such channels had incorrect offsets.
09/2020 10.07 New
  1. The S2Video program has a new option to set frame time stamps.
  2. Reviewing MP4 video files now supports frame accurate stepping.
  3. You can now include channels without a y axis in a group (but they cannot be the group head). This allows the use of a channel drawn in State mode to colour the background of other channels.
  4. There is a new script command ArrRev() that reverses the elements of an array.
  5. The XY Draw mode dialog now allows changes to the channel sort mode.
  6. You can display axes in the data area of Time, Result and XY views. This is expected to be used in XY views mainly for publication purposes.
  7. You can change the track labels in the Graphical Sequence Editor.
  8. The Sampling Configuration dialog, Channels Tab supports Ctrl+Copy As Text to copy Tab-separated columns of data.
  9. The Sampling Configuration dialog title is no longer cleared by sampling (to preserve the name of the configuration file).
  10. The Memory buffer Import channel dialog has improved error reporting.
  11. The clickable area that clears selected channels in Time and Result views now has a tooltip.
  12. The Cluster on Measurements setup dialog can copy and log the measurement configuration as text.
  13. The Sampling Configuration now tracks the last .s2cx file that is not LAST.s2cx or DEFAULT.s2cx. The SampleConfig$() script command has a new option to access it.
  14. In a script, you can use DlgValue$() to set X Value fields as text, for example "Cursor(1)". Previously this displayed the position of cursor 1 as a number.
  15. The Export As dialog for data files now updates the dialog fields when you click on a defined range and detects errors in the channel list and time range.
  16. The Help includes information on configuring the Xvid video codec.
  1. The XY view y axis title was not restored when an XY file opened.
  2. The SampleConfig$(3) script command put the TextMark channel comment in the wrong column.
  3. The Special channels field of the Sampling Configuration Set maximum channels dialog was always set to 0 when the dialog opened.
  4. A sampling configuration with a missing output sequencer file generated 3 message boxes, now it generates one.
  5. The Mean in X and SD in X measurements in a Result view gave results in pixels, not x axis units.
  6. The documentation incorrectly listed the dialog expressions CXn as CnX (n = 0-9).
  7. Recording dialogs with X axis positions did not translate CXn to CursorX(n).
  8. Recording Ctrl+A (or a click below the channel numbers) in Time and Result views generated code that did not work.
  9. In an XY view, the Y Axis Range dialog now treats All channels as all visible channels to match Time and Result views.
  10. The FileList() script command did not work for type% set to 12 (XY files) and 17 (Grid files).
  11. In a script, a user-defined function with a non-array argument could accept an array in some circumstances.
  12. If the Line thickness of axes was set to 1 pixel in the Edit menu Preferences Display tab, it was possible for axis scrolling to leave pixel dust behind.
  13. Overdrawn channels drew the background too often resulting in a corrupted display during sideways scroll when a grid was turned on or the top overdrawn channel had the background colour set to override the view colour.
  14. Using FiltApply(-1,...) before creating the temporary filter would crash Spike2.
  15. Changing options in the S2Video Configuration could cause the video display to vanish.
07/2020 10.06 New
  1. Print screen supports Cursor Regions and Cursor Values dialogs and uses a proportional font for window titles.
  2. The Sampling configuration dialog Mode tab has a new option to control the s2video application Slow frame rate when not writing data to disk. The script language equivalent is the new SampleFPS() script command.
  3. The output sequencer can now play trains of digital pulses at the same time as other sequencer operations.
  4. In the Sampling configuration dialog Mode tab, Triggered mode allows you to specify a complete marker filter. Previously you could choose to match a single code. The SampleTrigger() script command is extended to match.
  5. The Sampling configuration dialog Mode tab now checks the fields as you type and lists problems at the bottom of the page.
  6. The Marker Filter dialog now supports specifying the marker filter as text, which can be a lot quicker than selecting check boxes when a range of values is required. You can also Copy and Paste filter specifications using the clipboard.
  7. The MarkMask() script command is extended to set and get marker filters as text.
  8. The Draw Mode dialog now reports errors in editable fields and disables the OK and Draw buttons on bad values.
  9. The Grid view has extra context menu options: Grid size, Fit to Grid, Cut, Copy and Paste.
  10. The Cursor Regions and Cursor Values dialogs record settings, selections and edit copy operations.
  11. The Cursor Regions and Cursor Values dialogs have improved interactive cell selection and support the script commands: Selection(), Selection$(), MoveTo(), MoveBy().
  12. Modeless dialogs opened from right-click context menus, for example the Draw Mode dialog, now open next to the mouse pointer.
  13. The GrdColourGet() script command now reports the displayed cell colour, even if not overridden.
  14. In a script, the Toolbar() and Interact() bars no longer grab the input focus when you click on one of the bar buttons. This is useful during sampling when you want keyboard input to go to the keyboard Marker channel.
  15. We have increased the maximum length of a script language string variable from 1,000,000 to 100,000,000 characters.
  16. In the Clustering dialogs, the INTH dialog now remembers its position.
  17. If Spike2 loads a sampling configuration file during startup (...\DEFAULT.s2cx or ...\LAST.s2cx), it writes the name to the Log view.
  18. There are new High DPI settings in the Edit menu Display Preferences.
  19. The EDF importer now recognises more types of BDF file. Previously, some specifications were unrecognised and the importer would revert to importing the data as though it were 16 bits long not 24, leading to garbage data.
  20. The MMFrame() script command is now supported for MP4 files with additional Key frame options.
  1. In the Output sequencer with a Micro4, the DELAY 0 instruction caused a very long delay (more than 4 billion steps); it should have caused no delay.
  2. Recording of actions that involve changes of the current view did not always select the new view (for example when opening the Cursor dialogs).
  3. An open and modified Grid view could grab the input focus once every 5 minutes.
  4. Named Grid views were always saved on close, even when the user asked for them not to be saved.
  5. When a Grid was loaded from a .s2gx file, the current View and Application colours were not applied and the font used to edit grid cells was not updated.
  6. When the current view was a Grid or an Info window, the Global Debug window displayed the window type as "Unknown".
  7. Using the Grid view Fit to Grid command on a maximized Grid view changed the view size, but left it maximized.
  8. In the Graphical output sequencer, simultaneous digital outputs and digital Marker inputs were not sequenced correctly.
  9. In the Graphical output sequencer, in the Section settings, changing the section comment did not enable the OK button to apply the change.
  10. In the Cursor Values and Cursor Regions dialogs, the first radio button (for C0 and C0-C1) had no effect.
  11. The documentation of the ToolbarMouse() script command was incorrect for the Move%() call-back vh% and ch% arguments.
  12. The Sample Bar dialog Add... button did not read the label and comment stored in the added file and would accept old-format .s2c files that cannot be used in modern versions of Spike2.
  13. In Spike2 version 10.05, in a user-defined dialog, the default button (activated by the Enter key) was Cancel, not OK.
  14. In a Grid view, the F1 key did not open the on-line Help.
  15. In Spike2 version 10.05, the DrawMode dialog Data Index field for RealMark data had no effect.
  16. Time views ended one pixel before the time of the very last item.
  17. Arbitrary waveform output to the Power3A did not work except at very slow rates.
05/2020 10.05 New
  1. There is a new Time view drawing mode, Interval, that displays the intervals between events.
  2. You can set cursor labels to draw with a non-transparent background, which makes them easier to read against a 'busy' waveform background.
  3. Grid views now have colours that can be be set by view or by cell. There are new script commands: GrdColourSet() and GrdColourGet() and extensions to ViewColourSet() and ViewColourGet().
  4. Recording of colour changes now includes the name of the changed item.
  5. Grid views can be resized interactively and you can set the grid column headings interactively.
  6. Running the Principal Component Analysis dialog out of memory with a huge number of spikes now gives a specific reason rather than a generic error.
  7. In the Help menu About Spike2 dialog, the Copy command now includes the Spike2 installation folder in the information copied to the clipboard.
  8. In the script language, anywhere a channel specifier can be used, you can now use -6 to mean unselected channels.
  9. The horizontal cursor and vertical cursor active cursor mode dialogs now have buttons to swap to the other active cursor mode dialog.
  10. The first time you use the Set Marker Codes dialog it reminds you about the Ctrl+Alt+Drag operation to select spikes.
  11. You can now save data to Matlab files with names that include non-ASCII characters.
  12. The PlayWavePoints() script command can now report the maximum points in an area.
  13. The new FileStatus() script command can report file system object properties, such as read-only, directory, hidden.
  14. The new DrawModeCopy() script command applies the drawing mode of one channel in a time or result view to a list of other channels.
  15. The new Replace$() script command generates a string replacing all occurrences of a sub-string.
  16. The TDT importer now reports missing .sev files and does the best it can with the ones it finds; previously it gave up if files were missing.
  17. You can use the ToolbarEnable() script command to detect if an Idle function is set for the toolbar and to count the number of enabled buttons.
  18. User-defined dialog slider controls behave better when set to integer mode and arrow keys are used.
  19. The DlgValue() script command can now change the allowed range of real and integer fields in a user-defined dialog.
  20. The script Locals and Objects debug windows have a new View menu option to show only the name of variables, omitting the Proc/Func or Object name, to reduce screen clutter.
  1. You could crash Spike2 with a script that used an Object type name where an Object variable name was expected.
  2. The Channel Colours dialog could get confused when the new options to show only Visible or Selected channels were used.
  3. Recording actions that included user-defined text did not detect embedded " and \ characters in all cases.
  4. Setting time view channel units for a waveform drawn as a Sonogram or a RealMark channel drawn as frequency no longer changes the displayed units away from 'Hz'.
  5. Sampling and Rerun of an Event channel drawn in Mean Frequency mode filled the 'not yet reached' time area with a line at zero. This area is now left empty to match all other drawing modes.
  6. When cursors were more than 1 pixel wide, it was possible for them to leave 'pixel dust' when dragging items such as the sonogram key.
  7. Every time you started Spike2 it displayed the Help page for a program update.
  8. The channel number of grouped channels is drawn in the primary colour of the channel; changing the channel primary colour did not redraw the channel number.
  9. Using the New Horizontal cursor button added a cursor to lowest displayed channel with a y axis, even when it was a group member (when the cursor should have been hidden), resulting in an inconsistent visible state. Now, we add the cursor to the head channel of the group.
  10. You could not open the Active Horizontal cursor mode dialog if horizontal cursor 1 did not exist.
  11. The Calibration dialog and the Set Marker Codes dialogs did not display error messages.
  12. The Sampling configuration dialog did not display the Scale and Offset values for RealWave and Derived channels.
  13. It was possible for Derived channels to display the wrong sample rate in the Sampling configuration dialog. They now display the down-sample ratio.
  14. The Derived channels setup dialog did not save changes to the channel Units, Scale or Offset fields.
  15. The script command SampleProcess(chan%,-1) reported 'Bad argument count'.
  16. If you set a WaveMark with multiple traces and inputs that did not exist in the Sampling configuration, this caused an unhelpful generic '1401 command error'.
  17. Recording sampling using derived channels or waveform channels with online processes did not work.
  18. Recording sampling to a new 32-bit .smr file recorded as sampling to a 64-bit .smrx file unless more than 32 channels were set.
  19. Recording sampling to a new data file did not record negative de-bounce periods.
  20. Recording sampling a multi-trace WaveMark channel with non-sequential ports recorded as sequential ports.
  21. Recording sampling with Triggering set to Not triggered did not record; Use previous trigger mode was used.
  22. When recording the Marker filter dialog, the MarkTrace() script command set the wrong channel and appeared for non-WaveMark channels.
  23. The MousePointer() script command did not return 0 when used to load a .cur or .ani cursor image file that did not exist.
  24. InfoRun(2) reset the Info window timer, but set it running when it should have stopped.
  25. When the LastTime() and NextTime() script commands were used with multi-trace WaveMark data and the fourth argument was a vector, the returned data was always the first trace, not the trace set by MarkTrace().
  26. The return value of the ToolbarEnable(n%) script command when button n% did not exist was 0, not -1 as documented.
  27. In a grid view, the XHigh() script command returned 0 if there was unused space at the right-hand side of the grid view, it now returns the number of columns.
  28. Recording creation of a grid view did not set the grid size.
  29. The ViewColourSet() and ViewColourGet() script commands generated 'View is wrong type' errors when an Info window was the current view.
  30. The DrawMode(), MinMax() and ChanValue() script commands ignored the edge% argument in Time view drawing modes 11 and 12 (the BPM modes).
  31. Spike2 could crash when attempting to update a corrupt resource file.
  32. Spike2 took a long time to read resource files holding very large (many MB) PlayWave memory areas.
  33. When debugging a script that uses Objects, there were several problems displaying objects and their members.
  34. If you scrolled a Time view that contained a WaveMark channel drawn in OverdrawWM mode and a Sonogram with a Key, the Key was scrolled and then redrawn, resulting in a mess.
  1. In Gated processing mode, with User check positions set, the Yes to All and Cancel buttons now apply to the entire process request, not to each gate condition.
03/2020 10.04 New
  1. Binsize() added as a Dialog expression.
  2. The Process dialog tracks changes to start and end time fields and reports errors.
  3. New Reverse$() script command to reverse a string.
  1. Recording of Measurements to a data channel was incorrect if you returned to the Process Settings... dialog and processed the data again.
  2. Recording of the Process Gate dialog reversed two arguments in variable gate mode.
  3. The Process Gate dialog and ProcessGate() script command were missing Help links.
  4. A sampling configuration file or a Resource file with a Process that used variable length gating would not read. There is a script (Fixs2cs.s2s) to fix the file.
  5. The ChanFit() script command variant used with a single argument generated a "Wrong number of arguments" error.
  6. Saving the sampling configuration did not delete existing Processes before saving the current Processes. This could cause the number of sampling Processes to double on each save.
  7. Most file importers set the imported file time resolution to the closest value to 1 microsecond that is compatible with the imported data. The ADInstruments data importer set the file time resolution to the maximum value that matched the data, which was often inconveniently large.
03/2020 10.03 New
  1. Measurements to a RealMark channel can now be of more than one item per channel, both interactively and when using the script language.
  2. Play wave output links from the keyboard and playwave toolbar can be disabled from the Sampling configuration Play waveform Tab and by the new PlayWaveCtrl() script command.
  3. The SampleKey() script command has a new optional argument to prevent triggering of the output sequencer and play waveform system.
  4. User input errors in the X Axis Range dialog now have an explanatory message in addition to disabling the Draw button. Errors in all fields are detected.
  5. The Change Colours dialog for data channels allows you to work with All, Visible or Selected channels.
  6. The FiltApply() script command can now request a display of a progress bar for a filter process that takes more than a second or so. Filter operations now display the ‘wait’ cursor to indicate that the operation could take a while.
  7. The ChanSave() script command can now display a progress bar if the operation take more than a second or so.
  8. The new Listener() script command counts the number of listener devices (copies of s2video) that are running.
  1. You could not pass a func or a proc name as an argument to a member function of an object.
  2. ChanTitle$() did not use the index% argument when reading back titles from a RealMark channel.
  3. Setting the Data field of the memory buffer Add Items dialog to - (minus sign) generated an unhelpful message box and marker code input was not checked. The items in this dialog are now checked as you type; illegal input disables the Add button.
  4. The Window menu drop down list of file names removed '&' characters from the list of file names.
  5. Recording the cursor 0 link button in the multimedia review window placed the comment marker in the wrong position.
  6. Measurement to XY and Measurement to channel could not use the User entered value measurement mode as it always generated a "X/Y Time is invalid" error.
  7. Progress dialogs displayed for time-consuming operations sometimes required more than one click on the Cancel button to interrupt them.
01/2020 10.02 New
  1. The start of sampling is more robust, especially when using a script that did not release 'idle' time after SampleStart().
  2. Spike2 attempts to create any missing special folders on start up. This may help avoid privilege-related errors on systems used with multiple accounts. Warnings are sent to the log view on start up if missing folders could not be created.
  3. FilePath$(-6) added to report the Program Data file path.
  4. The Help menu About Spike2 dialog Copy button copies file path information for diagnostic purposes.
  5. You are now warned if the graphical sequencer output could not be saved as the S2PSEQ$.PLS file for sampling.
  6. Vertical and horizontal Cursor Label dialogs now have an Apply button to apply changes and leave the dialog open.
  7. ExportChanList() has a new flag% value (4) to display a progress bar during file export.
  8. Hovering the mouse pointer over a channel number displays the channel tool tip, which is useful with overdrawn channels.
  9. The BIOPAC importer was modified to cope with old format files with missing data at the end.
  10. The s2video program simplifies use of the xvid codec by presetting a required Registry setting.
  11. U1401Open() can now report which 1401 was opened when unit 0 (first available) was requested.
  12. FileList() supports a type% value of 17 for grid views.
  13. FileName$() can now report multi-media window file names.
  14. The PlayWaveCopy() and PlayWaveLink$() script commands can now be used when a 1401 is waiting for a trigger to start sampling.
  15. The ChanProcessAdd() documentation now includes Debounce (PType%=12) and also describes the default argument values for all processes.
  16. The ChanColourSet() script command can now set multiple channels with one call.
  17. MMPosition() is extended to report the cursor 0 link state and if a commanded seek or run to operation has completed.
  1. If sampling channels used for 1401 input were not consecutive from 1, the Edit WaveMark on-line spike shape dialogs did not adjust any values or display non-triggered data.
  2. The display of background data in on-line spike shape dialogs could vanish if you changed channel.
  3. In the output sequencer, the Format command converted the "-" character in "WAVEGO code,-,OptLab" to a space, which did not compile.
  4. In the Draw mode dialog, recording RealMark data drawn as a waveform in Dots mode recorded the dot size incorrectly.
  5. If you used the PlayWaveCopy(), PlayWaveKey2$() or PlayWavePoints() script commands when no 1401 was open for sampling, the script stopped with "Interpreter error (call CED): -581". These now generate the correct error message.
  6. When two or more Spike sorting windows were open and resized differently, changing channels could lead to a muddled display.
  7. When multiple waveform channels were grouped with locked axes and offsets, the channel spacing could become inaccurate.
  8. In an XY view, the ChanColourGet() script command did not get the background override (item% = 0) correctly.
  9. We have disabled the Alt+numeric keypad Up/Down keys that moved the current selection up and down one line; it moved the selected lines but when you released Alt it replaced the moved lines with whatever character the Alt+keypad presses had composed. Use Alt+Up/Down (non-keypad) keys to move the selected lines.
  10. The multi-media review dialog would close if it had the input focus and you pressed the Enter key.
  11. Deleting a channel in the sampling configuration that was the source of a derived channel did not delete the derived channel; this generated an invalid sampling configuration.
  1. The ChanDecorate() script command state read back has been changed in an incompatible way; previously you could not read back the mode without setting it.
  2. If you created a sampling configuration from a script that included WaveMark data (spike shapes), and did not use the spike shape setup dialogs to generate templates and set trigger levels, the spike shape detection trigger levels were set to 0. This could result in unexpected capture of very small spikes, triggered by noise. The trigger levels are now set to half full scale in this situation.
  3. The keyboard short cut to format an output sequence has changed from Ctrl+F4 to Shift+F4. This leaves Ctrl+F4 free for the standard Windows function of Close window.
  4. When multiple channels are grouped with locked axes and offsets, display Optimise no longer adds 5% extra space at the top and bottom of the display as this looks wrong when there are many grouped channels.
12/2019 10.01a New
  1. Offline waveform output driving cursor 0 now cancels other drivers of cursor 0.
  1. Sampling configurations with gaps in the channel numbers sampled by the 1401 did not work and could crash. For example, sampling waveforms on channels 1,2,3 was OK, but sampling waveforms on channels 2,3,4 (omitting channel 1) was not.
12/2019 10.01 New
  1. You can apply one or more processes to waveforms sampled by a 1401 as the data is acquired to both generate new channels or to replace the sampled data. The initial processes are: IIR filters, rectification, differences and down sample. You can apply these processes to the sampling configuration interactively or from a script.
  2. There are new script commands SampleDerived() and SampleProcess() to support derived channels and real-time channel processing.
  3. In the Spike shape sorting component, the Load and Save templates dialog scales templates (where possible) if the template scaling does not match the target channel scaling. You can disable this change in the Edit menu Preferences, Compatibility Tab.
  4. There is a new data file importer for ADInstrument Labchart files.
  5. The Spike shape sorting Template settings dialog has a new option to disable independent triggers when using the New WaveMark dialog with multiple traces. The SSParam() script command flg% argument is extended to support this.
  6. You can now rerun a Multimedia window when linked to cursor 0 of the associated time view, causing both cursor 0 to move to indicate the current replay position and the view to scroll to keep the cursor visible. The MMPosition() script command has new options to control replay and cursor 0 links.
  7. Cursor 0 can be driven by Spike shape dialogs, Measurement processing and Multimedia replay. Previously, all drivers could be active simultaneously, which was confusing. Now, each new driver cancels any active driver.
  8. In a time view, you are now allowed to delete sampled data channels once sampling has ended. Previously you had to close the file and reopen it to do this.
  1. Short reads of WaveMark data (Spike shapes) as a Waveform could fail to get data when the spike was the last item in an internal buffer; typically once every few hundred items.
  2. The setup for sampling spike shapes in version 10.00 was using the Spike2 version 9 command, so failed if this command was not accessible.
  3. The ColourSet(0,-1) and ColourSet(0,-2) script commands to reset the colour palette to light and dark modes did not invalidate the affected views.
  1. Spike shape templates read from resources are now scaled to match the target channel. This should be desirable, but let us know if it causes you any problems.
  2. The MMPosition() script command now uses a sPlay% value of 4 to move by frame (was 3 prior to versions 8.19a, 9.09a and 10.01).
  3. When you drag cursor 0 with a Spike shape dialog active, causing the dialog to search for a new spike, cursor 0 is not driven to the found spike position until you release the mouse button.
11/2019 10.00 New
  1. The new Info windows display user-defined data view information (timers, time of day, data values, measurements) with optional speech output. These are configured interactively or from a script.
  2. The Micro1401-4 is supported.
  3. The script language now supports user-defined objects.
  4. The script language const statement now accepts initialization from values calculated at run time in addition to constant expressions.
  5. Automatic data processing can now use variable length gates (e.g. process while a signal is high). We have modified the Process dialogs to support this and there is a new ProcessGate() script command.
  6. Resource and configuration files save and load faster than in previous versions of Spike2 and use less system memory.
  7. The Edit menu Clear command can now be used in an XY view to delete the data points. It now records as EditClear() in both result and XY views.
  8. Recording of the Rerun dialog now works when the target time view is not the current view.
  9. The WAVEGO sequencer command now supports a no flag option ('-') to allow the use of the optional label with no flags set.
  10. The Set colours dialog is extended to support information window text and background colours. It also has tool tip support and a Help button.
  11. DlgGetPos() script command can return the dialog width and height.
  12. The FileList() script command now allows users to select files interactively.
  13. The FileConvert$() script command allows users to set the list of file filters to use or the initial file name template.
  14. The Time$(), FileTime$(), TimeDate(), FileTimeDate() and FileTimeDateSet() script commands have been extended to support times in milliseconds.
  15. Arbitrary waveform output takes advantage of the Power3A and Micro4 200 MHz clock to achieve better frequency resolution.
  16. The Str$(x,-1) script command generates the minimum number of significant figures that would allow x to be read without loss of accuracy.
  1. When searching in the text editor, a found search target that is off the screen is now centred vertically rather than being at the top or the bottom of the screen.
Cambridge Electronic Design Limited

Registered in England: 00972132

Registered office:

  • Cambridge Electronic Design Limited,
  • Technical Centre,
  • 139 Cambridge Road,
  • Milton,
  • Cambridge CB24 6AZ

VAT: GB 214 2617 96

Producer registration number: WEE/BD0050TZ

Terms and Conditions of Sale

For our US customers, we can provide tax form W-8BEN, that identifies us as a UK company.

DUNS: 219151016
NAICS: 423490
Commodity codes
Hardware: 84716070
Software: 85235190

By email:


By post:
  • Cambridge Electronic Design Limited,
  • Technical Centre,
  • 139 Cambridge Road,
  • Milton,
  • Cambridge CB24 6AZ
By telephone:

(Int.+44) (0)1223 420186

From North America (Toll Free):

1 800 345 7794