Recent technical history of Spike2 version 8 for Windows

Freely down-loadable for version 8 users.

Date Version Summary
02/17 8.11b Fixes
  1. Version 8.11a generated a "Could not assign to object" error if you used the debugger to step over a DlgShow() command.
  2. Using the DlgEnable() script command on a DlgImage() item could cause the image to vanish.
  1. The size of a user-defined dialog was limited to the size of the Spike2 main window. This could cause unexpected results if the main window was small. The size is now limited to the size of the Desktop window.
02/17 8.11a Fixes
  1. Version 8.11 saved the resources for duplicate channels incorrectly. The most visible effect of this was to restore channels in the wrong order.
  2. It was possible to crash Spike2 if a script call-back function (for example, an Idle or Change function in a user-defined dialog) called a built-in script function with a bad argument.
01/17 8.11 New
  1. When copying data views as text to the clipboard, if the text (for example channel titles and comments) holds non-ASCII characters, the data is saved as Unicode (wide) characters.
  2. There is a new Chan() command to convert a string (for example "m1", "v1" or "2a") to a channel number.
  3. DupChan() can now report the first channel number that will be used for duplicates.
  1. It was possible for Spike2 to hang or crash when an extension DLL (for example a data importer or signal conditioner) used a third party DLL that had a problem, such as a missing DLL. Such problems should now cause the extension to be ignored.
  2. If you sample data with a duplicated time view, the view titles get :1 and :2 appended (indicating the duplicate number). Unfortunately, each time you sampled, the view title got the duplicate numbers appended to the previous title, which already had duplicate numbers.
  3. When a data file stopped sampling and had not yet been saved with a file name, a script read of a WaveMark channel at the end of the file could be truncated.
  4. When a foreground colour is similar in brightness to a background colour (so could be difficult to see), we adjust the foreground colour. In some cases, it was possible for the contrast to be reduced rather than increased.
  5. Active cursor searches in expression mode did not work if there was no channel 1 in the file.
  6. The Active horizontal cursor dialog could pick up values from the previous cursor when changing cursor.
  7. If you hold down Ctrl+Shift, then mouse click and drag in a time view, the channel resizing grid appears. The grid could leave pixel dust behind when resizing during sampling or when using the View menu ReRun command.
  8. The SerialRead(port%, &in$, term$, max%) script command allowed a non-variable as the in$ argument.
  9. The Channel Process Skip NaN (Not a Number) command could cause no data to be read if the first value read from a RealWave channel was a NaN.
  10. The graphical sequencer Random delay instruction could crash Spike2 with a divide by zero error when used with delays that were similar to the sequencer step time.
  11. The graphical sequencer Ramp DAC instruction could generate an out of range DAC increment when the ramp time period was similar or less than the sequencer step time.
  12. When you open a data file for sampling with an output sequence in the sampling configuration that does not compile, an error message describes the problem and identifies the output sequence file and line number. However, the line number was incorrect; it was 1 less than the correct line number.
  13. The EditCut() and EditCopy() script commands did not return the formats copied to the clipboard, as documented.
  14. If the script debugger opened a script file to display the current step, the script file was made the current view, which could cause the script to fail. This usually happened when stepping into an included file.
  1. For text-based views, using Save As... from the file menu now sets the initial file name based on the current document title. Previously the name was blank.
  2. We have made data view axes use the same contrast mechanism as the rest of the program (previously it set an axis to black or white if it was too similar to the background). We have also increased the minimum contrast when drawing a fitted curve to a data view channel.
  3. If no file path is set, the File menu Save As... dialog starts in the same folder that the file was read from rather than the last folder used for a file dialog operation.
  4. In an XY view, the '+' symbol is drawn to look more symmetrical.
  5. You are now warned if you adjust the graphical sequencer time resolution to a value less that the shortest interval implied by the sequence.
11/16 8.10a New
  1. The installer has been improved; there is no change to Spike2 itself.
  2. Update of try1401 for the Power-3A.
09/16 8.10 New
  1. The new StrToViewX() and StrToChanY() script functions evaluate dialog expressions
  2. The Print Screen command can now print Grid views.
  3. The Print Screen command now scales data view fonts to make the printed output a much closer match to the screen display.
  4. The XY view autoscale option has been enhanced and the interactive control of it moved to a new dialog. The XYDrawMode() command is extended to handle the new features.
  5. The XY view autoscale option now preserves inverted axes.
  6. The GrdAlign(n, -2) script command allows you to set the alignment of all columns in a Grid view.
  7. The new ChanUndelete() script command can recover deleted channels in .smrx files.
  1. Improvements to the Talker code associated with interpolation of waveform data to ensure that the last few points are saved when sampling stops and to improve the handling of time drift between a Talker device and the 1401.
  2. If the first channel of an overdrawn group overrode the channel background colour and there were more than 3 overdrawn channels, only the first two channels were visible.
  3. In the script language and the text sequencer, you could not have white space before a #include.
  4. In the Show/Hide channel dialog, if you typed 0 into the Label space field you could get into an error message loop that was difficult to exit.
  1. The default format for exporting a Metafile is now EMF, not WMF.
07/16 8.09b New
  1. In the Clustering dialog, all changes cause a status line update if 0.2 seconds passes without any further change.
  2. In the Text importer initial scan, when there is a choice of similar blocks it chooses the start block as the one with the most numeric items rather than the one with the most lines.
  1. FileClose(-1) did not close Grid views.
  2. If a Sonogram key was displayed and positioned relative to the view (not the channel), and the channel was hidden, Spike2 clipped cursors so they did not cross the (hidden) key area.
  3. When sampling was Reset, Spike2 did not check that all Talkers were ready to start sampling again.
  4. If the halt script command was used in a callback function linked to a Toolbar button or to a Dialog, the script did not stop.
  5. The changes to enable access to old cursor positions in 8.09 stopped HCursor(n), HCursorX(n) and HXn working in dialog expressions.
06/16 8.09a New
  1. The Conditioner tab in the Edit Preferences now includes the First and Last channel search range used to find conditioners.
  2. Some of the Clustering dialog changes introduced in 8.09 have been refined based on user feedback, for example zoom using the mouse wheel is now centred on the mouse pointer.
  1. The Clustering dialog did not always draw the 'short event' arrows correctly.
  2. If you dragged a line to select WaveMark items the dialog appeared to allow you to set the codes, but the Set button in the dialog had no effect.
  3. The Tucker-Davis (.TSQ) file importer had a problem importing WaveMark channels
  4. In a Grid view, changing the font did not cause the top heading height or side heading width to change.
06/16 8.09 New
  1. You can now find the previous position of vertical and horizontal cursors; this is useful with Active Cursors. There are new script commands CursorX() and HCursorX(); the same commands are available in Dialog Expressions and as CnX and HnX.
  2. Level event channels drawn as lines are now treated as waveforms when measuring values, mean and area (ChanValue(), ChanMeasure() and in the cursor values and regions dialogs).
  3. We now save physical font sizes in resource files in addition to pixel sizes and prefer the physical size. This fixes a problem where moving a resource file from a standard resolution screen to a 4K display resulted in tiny fonts.
  4. The Clustering dialog can display the number of short intervals as a count or a percentage.
  5. In the Clustering dialog, you can zoom in and out using the mouse wheel.
  6. The user-defined shape in the Clustering dialog now scales with the data.
  7. The Clustering dialog Copy as Text option allows just the summary to be copied (previously you always got all the event times).
  8. The EDF/BDF file importer is now faster and has new features including: detecting standard annotations, grouping user annotations and reading 24-bit BDF data as RealWave. The time resolution is set as close to 1 microsecond as possible rather than to the waveform sample rate.
  9. The AlphaOmega file importer is now faster and reports progress during file scanning. It also sets the time resolution as close to 1 microsecond as possible rather than to fastest waveform sample rate.
  10. The Xltek Neurowork file importer collects more user comments and annotations.
  11. The online TextMark dialog now remembers marker codes with the saved text items.
  12. The online and offline TextMark dialogs now have spinners on the marker codes.
  13. You can now save much larger file and channel comments in a 64-bit smrx data file (2000 characters rather than 100). The interactive dialogs that set and display these values are unchanged as we expect this feature to be used from scripts; we will review this if the larger limits are popular and useful.
  1. Printed output from Grid views was scaled differently from Print Preview if the screen resolution was different from 96 dpi.
  2. Import of old (*.s2c) sampling configurations did not handle sonogram drawing mode correctly.
  3. Using different combinations of / and \ and using . and .. in include file paths could confuse the #include system. This could prevent Spike2 detecting that an included file had changed.
  4. Virtual channels using the RMc() command could have gaps at the start of a file.
  5. The AlphaOmega file importer: fixed a channel alignment problem and a crash with a particular data file.
  6. It was possible to hang Spike2 if a running script created a dialog in an idle function while the user was interacting with a Spike2 menu.
  7. Importing a Motion Lab Systems C3D file written by a VICON/Nexus system could cause Spike2 to become unresponsive.
  8. The CondType() script command returned 0 for Digitimer D360 and D440 amplifiers.
  1. If you set sampling to start on an external trigger and have routed the trigger signal to the 1401 rear panel, the Sample Control bar message changes from 'Trigger' to 'E3 Trig' and the flashing message (to alert the user to supply a trigger) is now 'Trigger' or 'E3 Trig' in place of 'Waiting'.
  2. If you run more than one copy of Spike2, the second and subsequent copies do not check that the last sampling session ended correctly. This prevents spurious warnings when the first copy is sampling data and a second copy starts.
  3. The IIRBp(), IIRBs(), IIRHp(), IIRLp(), IIRNotch() and IIRReson() script commands no longer stop the script with an 'Operating system error' if they fail to generate a filter. Instead, they return ‑1, so you should check the return value if you use these functions.
04/16 8.08 New
  1. You can now select and change the Signal Conditioner within Spike2; it is no longer an installation option.
  2. Talker version 3 is implemented. This includes changes to make Spike2 work better when Talkers deliver erratic data.
  3. The U14Open() script command can now open a 1401 that is being used to sample data. This is an experimental feature for CED test and diagnostic use only.
  4. The TextMark dialog now copies selected items, not all items. There are new context menu options when the list of TextMark data is open.
  5. The Len() script command is extended to get the size of the nth dimension of an array.
  6. When setting up arbitrary waveform output, we no longer force you to convert waveforms that are derived from Virtual, Duplicated or Memory channels to memory images. However, these channels can only work if the source file is open in Spike2 when the data is transferred to the 1401 for sampling.
  7. When you load a sampling configuration, if a stored window position would place the title bar of the application or a dialog above the top of the screen area (which makes it very difficult to position), the stored position is ignored.
  8. The SampleOptimise() script command has new options to report the largest proportional difference between the requested and achieved sample rate for any channel.
  9. If the sample rate of any waveform channel is outside the range 10% less than to 30% more than the requested rate, a note is added to the Sampling Notes.
  10. There is a new importer to read waveform data from Ponemah 6 files.
  1. The commands to print Time, Result and XY views could scale the text size incorrectly on high-resolution displays.
  2. The ChanList() script command using text matching with field separators did not work. Using any combination of T, U and C, for example "TC=..." was OK, but "T_C=..." would fail.
  3. The script recorder can record changes made to the media file offset in a multi-media window.
  4. The Copy command for the Results page of the Fitting dialog did not work.
  5. The script compiler accepted a forward reference to a user-defined proc or func in some places where a number was required. For example: if test% then halt endif; func test%() return 1 end; would compile and run. This now generates a syntax error.
  6. Deleting a channel in the Sampling Configuration dialog could cause an unexpected channel to be selected if the list was not sorted by channel number.
  7. If a sampling configuration was set to use burst mode, it was possible to find combinations of channels and sampling rates that failed to optimise, leading to much slower sampling rates than requested.
  8. It was possible for the background of overdrawn channels to update incorrectly if the channels were partially covered by another view.
  9. On a high-resolution display, the clustering dialog buttons that select different class codes all drew as the User Ellipse button.
  10. When printing the screen, RealMark channels were truncated on the right.
  11. If you dragged a dockable bar (for example the sequencer control panel) while a script was running, and the script displayed a dialog, the dialog did not display properly and Spike2 would hang up and could crash.
  1. We have adjusted many dialogs for use on high-resolution displays so that text is not truncated. Please tell us if you find a dialog where text is missing.
  2. The point at which waveform drawing changes from drawing every point to drawing vertical lines has been changed from 3 points per x pixel to 2.1 points.
  3. Scripts no longer are allowed to run while the user drags a dockable bar. This might affect you if you rely on a script to track data sampling activities using idle functions.
12/15 8.07 New
  1. Spike2 works better on displays with high dots per inch. All toolbars and all buttons with images should now be usable on 4k displays and the script language Toolbar() and Interact()bars increase in size.
  2. There is a new Edit menu Preferences option to work around any problems you may have with high DPI displays.
  3. The Sample Bar and Script Bar list editor is now resizeable to make it easier to view long lists.
  4. There is a new file importer for the Xltek Neuroworks file format.
  5. Improvements to the Graphical Sequence editor including: OK/Apply is disabled unless you make a change. The Copy section dialog disables OK if nothing is selected; missing local branch labels and duplicated pulse labels are detected; hold down Shift while dragging for non-quantized times.
  6. The SSClassify() script command is extended to provide an Online Update feature.
  7. The Text importer now scans for multiple tabular sections; it no longer assumes that the first numeric table is the start of the data.
  8. The Microsoft .WAV file importer can handle PCM data in WAVE_FORMAT_EXTENSIBLE files.
  9. There is a new compatibility option in Edit Preferences to make the Count() script command include the end position.
  1. Threshold crossing searches with 0 hysteresis now set a small hysteresis value to prevent searches getting stuck.
  2. Repeated threshold crossing searches now always set the correct search direction (rising/falling).
  3. Repeated searches enforce a minimum step of 1 clock tick to avoid infinite loops.
  4. In the Graphical sequence editor, double-clicking an overlong arbitrary waveform limits it to the available time, not to half the section length.
  5. The Graphical sequence editor displays timing errors if items are too close to the end of a section.
  6. In the Graphical sequence editor, empty sections used as a branch target are always generated.
  7. The Unicode build of Spike2 did not read Font information from old-style resource files.
  8. If you used the Help menu About Spike2 command on a computer that had lost its internet connection, there could be a noticeable delay before you could close the About window while the system timed out when trying to read the latest program revision from our web site.
  1. We have adjusted many dialogs for use with high DPI displays, usually to fix text truncation. Buttons are spaced a little differently and some button images have changed.
09/15 8.06a New
  1. You can now modify graphical sequences during sampling. There is a new command in the Sampling menu and a new button in the main Toolbar to open the editor.
  2. The Plexon file importer can now read .PL2 files.
  1. When using the File menu Save command, the suggested file name no longer stops at the first space character in the window title. For example, a result view holding an interval histogram from the file "Bill and Ben.smrx" with the window title "INTH1(Bill and Ben)" had the suggested file name: "INTH1(Bill.srf". It is now "INTH1(Bill and Ben).srf".
  2. During sampling, temporary data files and the last used sampling configuration could be saved to your "My Documents" folder rather than the directory set in the Edit menu Preferences.
  3. Editing a Channel Process dialog value was difficult as every change reformatted the displayed value.
  4. Changing the file time base with the FileTimeBase() script command did not cause the x axis to repaint.
  5. In the Measure to XY view and Measure to a data channel dialogs, it was possible to set illegal Cursor 0 stepping values.
  6. The Cancel button in the Progress bar that appears when Measurements to XY views or to a data channel take a long time sometimes did not work.
  1. Graphical sequences for sampling are written as text to the current user Application data folder, not the all-users Application data folder. Some users on a corporate network were denied write access to the Application data folder.
  2. We have changed how we search for the sampling configuration files last.s2cx and default.s2cx. We now use the old .s2c format files only if no modern .s2cx files are found.
08/15 8.06 New
  1. The maximum number of buttons allowed in the Script bar has been increased from 20 to 40.
  2. The Channel Process dialog now has spinners on data values and updates immediately on a change unless recording is enabled. With recording enabled, in addition to recording changes incrementally, the new Rec button records the channel process state in the most compact form.
  3. Individual traces of multi-trace WaveMark data can now be treated as waveforms without any scripting. The Ch(n, trace) virtual channel command supports this and there are new controls in the Marker Filter dialog and in the Draw Mode dialog. The script language has a new MarkTrace() command and changes to DrawMode().
  4. There is a new Edit menu Preferences option to control the decimal places when exporting Result and XY view data as text.
  5. There is a new XY Title dialog to edit the titles and units of XY view channels and axes.
  6. There is a new Window Title dialog that allows you to set the title of time, result, XY, grid and text-based views. Titles set for time, result, XY and grid views are now saved in the file resources.
  7. The System() and System$() script commands now know about Windows 10.
  8. The mouse pointer changes when you move it over channel numbers and over the region below the channel numbers where a click clears selected channels.
  9. The Read() and ReadStr() script commands have been extended to read times formatted as {days:}{hours:}minutes:seconds.
  10. There is a new script command, GrdSize(), to change and report the rows and columns in a grid view.
  11. The Edit menu Undo command descriptions now use more user-friendly channel identifiers (m1, v2) rather than channel numbers (401, 802).
  12. Grid view .s2gx files are smaller as redundant information is not saved.
  13. As an experimental feature, the Graphical sequence editor shows sections that do not have a key defined or any pulses in brackets in the Current Section drop down list.
  14. You can now use DlgValue$(item%, new$) to select drop down list text in DlgList() and DlgString() items.
  15. There are now file icons for the Grid view and associated files.
  16. The Plexon NEX file importer can now cope with discontinuous waveform data.
  1. In a Grid view, using the Del key with an empty cell selected caused Spike2 to hang up.
  2. SampleAutoName$() did not get recorded if automatic file naming was enabled.
  3. In a text-based view, Draw(line%) did not set line% as the top line.
  4. We have eliminated the mouse pointer flicker that occurred on some systems when moving the pointer over the axis and channel number area.
  5. In Grid view printer output, the data could print over the header text and multi-page output generated huge headers and footers.
  6. In the graphical sequencer, the code to set a variable to the current sampling ticks generated a sequence file that did not compile.
  7. The graphical sequence editor did not save the variable numbers selected for all waits and branches on a comparison between variables.
  8. The EDF file importer had a problem importing TextMark data with long text strings.
  9. The MC_Rack file importer had a problem with the times of WaveMark data items.
  1. You can reset the title of a time, result, XY, grid or text-based view to the default with WindowTitle$(""). Previously this set the title to be blank.
  2. The Spike2 startup dialog is now suppressed if Spike2 is started with command line file names in a similar manner to the /Q (quiet startup) option.
06/15 8.05 New
  1. You can now create a Grid view. This makes it easier to display, print and save tables of data. This is mainly of use from scripts (there are several new GrdXxxx() script commands).
  2. The Rectify and RMS Amplitude channel process functions applied to Waveform channels no longer limit the output range unless the channel offset is very large compared to the range of values.
  3. If you use a Power3, you can run the output sequencer at 4 us per step. The minimum interval for other 1401 types remains at 10 us per step.
  4. App(-7) reports the number of User handles in use for diagnostic purposes.
  1. Triggered display mode in 32-bit .smr files could display false triggers if trigger events were further apart than the display width. 64-bit .smrx files were OK.
  2. The script code: Message(Error$); was incorrectly accepted by the compiler, resulting in a crash when you ran the script.
  3. There are several script compiler fixes associated with passing const arrays into functions.
  4. Channel process functions Rectify and RMS Amplitude did not cope with Waveform channels with negative scale factors.
  5. If you declared a script variable inside a loop and assigned it a constant value (known at compile time), the value was not assigned each time around the loop.
  6. Deleting multiple channels in XY views in one operation could cause unexpected channels to be deleted as the channels were deleted in ascending order of channel number, but each delete caused the channels to be renumbered. Channels are now deleted in descending order.
  7. If you opened the View Rerun dialog and duplicated the time view, Spike2 would crash.
  8. Changing the offset in the 1902 control panel could cause a crash.
  9. Time strings typed into dialog boxes with more than 2 colons (for example 1:00:00:00, meaning 1 day) did not get converted correctly.
  10. ASCII/text importer: in the configuration dialog, you could change the Label line number using the spin buttons. However, editing the line number did not work.
  11. Alpha Omega importer: the start time of data blocks in discontinuous waveform channels now have the correct times.
  1. The script language no longer allows you to pass a real variable to a function that expects a reference to an integer. There is a new Compatibility option to allow a script that breaks this rule to compile, but we urge you to change the script as we will remove the workaround in the future.
04/15 8.04a New
  1. If the output sequencer cannot keep up with the requested rate when sampling with a Power2, Power3 or Micro3, we now log this by adding a keyboard marker and give a warning when sampling ends. If you sample with a Power1 or Micro2, sampling will terminate, as previously.
  1. Script positioning of XY and Sonogram Keys was incorrect if the key was larger than the view it related to. If the key window width or height exactly matched the width or height of the view it was attached to, the key position was reported incorrectly.
  2. Import of version 6 or older: Time view resource files ignored any Pen width or RealMark channel Data index set for a data channel.
  3. If you dragged a rectangle with the mouse to rescale a data display and dragged past the right or left edge of the window, the start point of the drag operation was lost.
  4. The initial display of vertical scroll bars in script debugging windows was not always correct.
  5. In version 8.04, the S64Fix program would not run.
03/15 8.04 New
  1. Spike2 now saves text-based documents periodically and in the event of a program crash, will attempt to recover the last saved state.
  2. The Sampling configuration Channel parameters dialog has a new Quick calibration option to allow you to set the channel scaling when you know the amplifier gain and you want the channel units to be some scaled form of Volts (usually, mV or uV).
  3. The ChanData() script command has several new variants to read Marker and extended Marker data. This is faster and sometimes more convenient that calling NextTime() and LastTime().
  4. The ChanPixel() script command is extended to return the pixel co-ordinates of various screen rectangles.
  5. FileConvert$() can now request a progress dialog and can set the minimum number of channels in the output file.
  6. The new DlgImage() script command adds a bitmap image to a user-defined dialog.
  7. The Windows dialog now enables and disables items depending on the available actions. You can also choose to see a list of all script-controllable windows (with the associated window handles).
  8. The text importer can now import columns as Marker and RealMark channels using another column for the item time. RealMark and TextMark columns can now select another column to supply the marker codes.
  9. When debugging a script, we now remember which debug windows were active at the end of a debug session and restore them for the next session.
  10. When debugging a script, the built-in constants _pi, _e, _Version, _VerMinor are no longer displayed in the Globals window.
  11. Cancelling a script in debug now clears any chained script set by ScriptRun().
  12. The script compiler can now optimise the ternary operator when the expression that the decision is based on is known at compile time. This allows code like: const v := _Version >= 804 ? 100 : 33; to compile.
  13. The XY Key can now be drawn with the example channel data hidden, allowing you to use channel titles as XY view annotations. The XY Options dialog has been expanded to include this option and now supports Undo.
  14. Spreadsheet export and copy can now choose to display or omit titles and units. ExportRectFormat() has been extended to match.
  1. Resizing the Cursor values or Regions dialog no longer resets the first displayed column and row to the top left.
  2. Exporting a virtual channel or a memory buffer channel to a 64-bit smrx file failed.
  3. The Count(chan%, from, upto) script command in a result view included the upto bin, which was different from version 7 which ran up to but not including this bin. Also, if upto was set to the number of bins or more, the result was 0.
  4. Script changes to result view bins now cause screen updates in Yield() and when stepping in debug.
  5. The text importer could fail to import a single channel of events.
  6. The file import system did not assign Y axis units to imported RealMark channels.
  7. The script text editor broke word searches at the _ (underline) character, which is now allowed as part of an identifier.
  8. The ColourSet() script command with a size% argument of 0 or -1 now behaves as documented. Previously it set the minimum size of 3.
  9. MATLAB export could generate a spurious error 1.
  10. FilePath$(-3) returned a path ending \CED\Spike2 instead of \CED\Spike8.
  11. SerialRead() could crash Spike2 if you specified a read with a terminator and the connected device transmitted more than 1024 characters without a terminator.
  1. If you chained scripts together using ScriptRun(), then broke into the debugger using the Esc key at the point where a chained script was compiling, compiling was aborted and the script halted (which was probably not what was intended). An Esc during compile now only aborts if the compiler has been running for a few seconds.
  2. The Count() command upto time is not included in the time range in a time view (to match the result view behaviour). This makes a difference if there is a data item at exactly the upto time.
01/15 8.03b Fixes
  1. Sequential reads of large .smrx data files could fail due to an error in the internal index tree. A symptom of the fault is missing areas of data that reappear when you zoom in to the blank region. This version can read files with the problem. If the file is not opened read-only we will fix the index tree when the file is opened for the first time.
  2. The MinMax() script command did not return the correct positions of the minimum and maximum for WaveMark data drawn as a waveform when the channel had multiple traces. The minimum and maximum values were correct.
  3. MarkEdit() script command did not edit multi-trace WaveMark waveforms correctly when a vector was passed as the array data.
  4. The Set Marker Codes dialog could display a message for the wrong channel when opened from a marker channel context (right-click) menu.
  5. The Channel Information dialog reported an error if the length of titles, units or comment was the allowed maximum length.
  6. Talker channel information was not saved correctly in the sampling configuration if a talker generated more than 1 channel.
  7. If you exported a 64-bit .smrx file to a 32-bit .smr file with a time range that exceeded the 32-bit limit of the .smr file, the export process could hang up.
  8. The PlayWavePoints() script command did not change the number of points to be played.
01/15 8.03a Fixes
  1. If you saved a graphical sequence as text, it was saved as UTF-16LE and not as UTF-8. This prevented the graphical sequences being used in version 8.03.
  2. If you opened a text, sequencer, or script file that was in UTF-16LE format, but that only held characters with codes less than 128, it was not converted into the correct format.
  3. With a Micro1401-3, arbitrary waveform output at slow rates (less than 10 kHz) did not generate any output.
  4. If a script #included multiple files, the debugger could get confused and show the step marker in the wrong file.
  5. If you deleted a hidden channel that was also used as the source of vertical markers, the display did not update to remove the markers.
  6. The fitting code for non-linear fits when all points were assumed to have the same variance (least squares error) could calculate the r² value as "Not a number".
  7. The first time you set an event channel to display in Rate histogram mode, the y axis range could be set to 0 to 0.
12/14 8.03 New
  1. Spike2 is now built in Unicode mode where all text uses the Unicode character set. If you take advantage of this to use extended characters in scripts and resource files, older version of Spike2 will be able to read the scripts and resources, but will not interpret the extended characters correctly.
  2. There are new dialog expressions you can use to get the value of data in a channel. These include value at a position, mean and standard deviation.
  3. You can now have horizontal active cursors that automatically move to new positions when vertical cursors move; the new HCursorActive() and HCursorValid() script command provides script control of this feature.
  4. There are new cursor context menu commands to lock vertical cursors together and to set a horizontal cursor to track the intersection of a vertical cursor with a channel.
  5. The ChanMeasure() script command and the Cursor Regions dialogs have a new measurement, Standard Error of the Mean (SEM).
  6. There is a new Decoration mode dialog for drawing RealMark data with error and range bars and new ChanDecorate() script command.
  7. The script language is extended to allow arrays to be initialised and even declared as const: for example: const colour$[]:={"Red","Green","Blue"};
  8. You can declare an array passed into a user-defined func or proc as const. Built-in script functions that accept array arguments, but do not change them also declare these array arguments as const.
  9. The new ArrConv() script command performs discrete convolutions.
  10. The new Spline2D() script command performs 2D interpolation and can generate "heat maps" efficiently.
  11. You can now fit curves to WaveMark channels drawn as waveforms.
  12. The Show/Hide Channel dialog has been revised to let you filter the channel list based on the channel Title and type. This makes it easier to work with very large number of channels.
  13. The new InStrRE() script command searches text string for regular expressions.
  14. In places where you could type a range of channels, such as "1,3,4-7", you can now select channels by matching the channel Title, Units or Comment with a regular expression. This also applies to script commands that accept a channel specification string.
  15. The Sampling Configuration dialog Channels tab now has a tooltip that displays extra information for channels in the channel list (for example ideal sample rates).
  16. The Sampling Configuration dialog has a new option to duplicate a channel N times, saving you multiple clicks of the Duplicate button.
  1. In the Cursor Y Values and Cursor Regions dialogs, when the vertical scroll bar was visible, clicking the down arrow could display the last line multiple times.
  2. In a result view, when converting a channel identifier as text (for example "2A") to a channel number, upper case duplicate letters were treated the same as lower case. Thus "2A" was treated as the first duplicate, not as the 27th duplicate.
  3. The PlayWaveCopy() script command gave an error if you did not supply the optional read% argument.
  4. The FileConvert$() script command inverted the sense of the "ignore file extension" bit in the flags% argument. This could lead to strange file conversions.
  5. If you used the MemSave() script command to save a memory wave channel with gaps to a new channel and changed the channel type from Adc to RealWave or RealWave to Adc, the second and subsequent blocks were saved with the wrong data.
  6. Read-only .smrx files would not open.
  7. The Ascii (text) importer could fail if hh:mm:ss format was used for times.
  8. The script debugger did not step to the correct line after the else of a docase statement. This was a cosmetic effect; the script ran correctly.
  9. In a user-defined dialog, selecting an item in a DlgReal() or DlgInteger() drop-down list did not work. Typing a value worked correctly.
  10. In a time view, raster displays of channels with marker codes did not use the marker colours.
  11. It was possible to crash Spike2 during sampling from a script that used ChanWriteWave() to overwrite recently written waveform data.
  1. MeasureToXY() and MeasureToChan() no longer support using the hw argument as the slope width. Ancient scripts (written for Spike2 version 3 may need adjustment.
  2. The MMImage() command has swapped the meaning of horizontal and vertical.
09/14 8.02e This is the last version of Spike2 before the change to Unicode mode. You can download this version if you don't want the Unicode character set, but you will not benefit from the Fixes in 8.03. Fixes
  1. Gated processing using a gate marker code did not work correctly as almost all markers were accepted, not just the specified code.
  2. It was possible to crash Spike2 with a script in which the main program ended with a conditional statement with the last instruction being halt if the condition was not true (for example: if x then DoSomething();halt endif; with x set to 0).
08/14 8.02d Fixes
  1. With a 64-bit .smrx file, using ChanSave() to add data to the end of an existing channel that contained more than 16 MB of data could fail.
  2. The cursor regions and cursor values dialogs could duplicate the bottom line if you clicked the down button in the vertical scroll bar.
  3. You could not open read-only 64-bit .smrx files.
  4. Time view window titles did not work correctly if a file name contained square brackets.
  5. If your computer was set to a locale that used commas to indicate the decimal point (1,5 for 3/2), exporting data to MATLAB caused resource data to be misread.
  6. While sampling to a 32-bit .smr data file, reads of event data that crossed the last commit time were truncated at the commit time.
07/14 8.02c Fixes
  1. Active cursor information was not restored correctly from a resource file if the cursors were not consecutive. For example, if you were using cursors 0, 1, 2, 3, 5 and 7 (with cursor 4 off), cursors 5 and 7 were not restored.
  2. In the Active cursor dialog, some of the fields (for example Amplitude) were not restored when the dialog opened.
  3. Changing from forward to backward active cursor searches of waveform channels in 64-bit smrx files did not always find the correct position on the first backward search.
  4. In a Result view, Copy As Text of a view where the x axis started at a negative position did not copy all the visible data.
07/14 8.02b Fixes
  1. With a 64-bit smrx data file, changes to the scale and offset of a channel did not force the channel header to be rewritten, resulting in the changes not being saved when the file closed. Reuse of a deleted channel could result in a channel that did not read correctly.
  2. The ASCII importer is more tolerant of a time column which starts with sufficient significant digits to allow the file sample rate to be deduced, but has insufficient digits later, such that consecutive times appear to be the same. It now always allows a configuration file to set channel names, rather than allowing names read from the source text to remain.
07/14 8.02a Fixes
  1. With a 64-bit .smrx data file, using the Sample control toolbar Reset command to restart sampling (which throws away the data captured up to that point) could cause the file to get into a confused state. This would occur if you sampled for sufficient time before using Reset to fill the circular buffering system (around 8 MB of data) or to reach a Flush to disk time set in the Automation tab of the Sampling configuration.
06/14 8.02 New
  1. You can now choose to be warned if closing a data file would lose data from a memory buffer channel. We have set the initial warning level to warn you when you close a file interactively, but not when closed from a script; you can change this in the Preferences.
  2. When debugging a script, the text caret moves to the start of each statement rather than the start of the line containing the statement; this is helpful when a script has multiple statements on one line.
  3. Right-click on the title bar of a view to get the option to copy the full path to the associated file to the clipboard.
  4. In the clustering window, the INTH display window now holds a vertical cursor set to the minimum interval. You can modify the minimum interval by dragging the cursor.
  5. The Plexon importer now recognises off-line modified PLX data files.
  6. The Alpha Omega importer now identifies all types of Event and marker data in the MPX file format.
  7. The Version 5 DSI importer is now very much faster for large datasets (we have reports of 100 times faster). You must install the 32-bit version of Spike2 to use this importer as the interface library supplied by DSI is 32-bit only.
  8. The Axon Instruments importer is no longer limited to files with less than 65536 data blocks. You must install the 32-bit version of Spike2 to use this importer as the interface library supplied by Axon is 32-bit only.
  9. The ASCII importer now stores configuration information in XML files only. It has been recoded for this release to make it more robust. See the interactive help supplied with the importer for more details.
  1. Script errors in a function linked to a toolbar, dialog or a dialog button did not indicate the script line that caused them.
  2. Script errors from built-in commands that were not related to a specific argument, for example calling DlgShow() with too few arguments, reported an error number rather than a more helpful message.
  3. During File Export from a script, a progress bar appeared, but the script was not notified if the user cancelled the export. When run interactively, no progress bar appeared. You now get a progress bar for interactive export and none for script export. In the future we may allow script-driven export to request a progress bar.
  4. When recording your actions, clicking on a text-based view did not always record a FrontView() command or add ViewFind("view title..."); to the start of the script.
  5. Marker filter OR mode was testing marker code n against mask n instead of testing them all against the first marker mask.
  6. The documentation incorrectly indicated the direction of the NDR and NDRL digital output pulses on modern 1401s.
  7. In a 64-bit smrx file, if you deleted a channel and reused it, subsequent reads from the channel could fail, usually resulting in gaps in the display. The data was written correctly, but the index table could have incorrect lookup information. Files in this state are repairable in S64Fix.
  8. File names for 32-bit data files generated through the Sampling Configuration dialog Automation page always had .smrx file extensions, which prevented Spike2 from opening them. You can open such files by changing the extension to .smr.
  9. Renumbering cursors or using CursorRenumber() with multiple cursors on the same pixel could leave a ghost cursor behind.
  10. The Graphical sequence editor can now set random and Poisson delays that are very long compared to the sequencer step period. Previously, the longest delay that could be set with a 0.01 ms step period was a second or so; it is now many minutes.
  11. If you saved a result view with a Raster display to a data file, it was possible to get an incorrectly scaled Y axis the next time you opened it.
  12. Slow arbitrary waveform output with a Power1401 mk II with monitor version 9 did not generate any output.
  13. Changing the number of channels in a result view channel process when Raster data was displayed could cause Spike2 to crash.
  14. Overdraw 3D mode did not work during sampling.
03/14 8.01c Fixes
  1. Backwards searches through WaveMark channels treated as waveforms did not work in 64-bit files. In 32-bit files it was possible to get a result that was after the start time.
  2. Trough amplitude measurements for events drawn in instantaneous and mean frequency and rate mode and for RealMark data were incorrect.
  3. In the FIR filter dialog, if you selected the All Pass or All Stop filters, the displayed waveform did not always update.
  4. It was possible for multiple sets of filters to appear in the FIR filter dialog.
  1. Peak and trough measurements now take into account the sloping baseline when detecting the maximum and minimum values. Previously, the absolute maximum or minimum was used and then adjusted for the baseline.
02/14 8.01b Fixes
  1. Changing the output sequence interactively or from a script during sampling did not work.
  2. In a user-defined dialog with a change call-back function, if you changed the active field by clicking, the change function was called for DlgReal() and DlgInteger() fields even if they had not changed.
  1. When Y axis labels are set horizontal, the y axis units display, unless the axis is less than 2 characters high (was 4 characters).
02/14 8.01a Fixes
  1. If you created an XY data view, then used XYKey(1,0) to hide any key, the key would appear and adding data to the view could cause Spike2 to crash.
  2. The time range of the MarkSet() script command ran from the start time up to, but not including the end time. This did not match version 7, which included the end time.
  3. If the Sample control toolbar was hidden when Spike2 started, the toolbar buttons could be displayed too high in the bar.
02/14 8.01 New
  1. Multi-trace WaveMark data (Stereotrode and Tetrode) can now have non-sequential ports in the 1401. The SampleWaveMark() and SampleChanInfo() script commands are extended to support this.
  2. The Sample bar and the Script bar now have a context menu (right-click) command to remove a button.
  3. The Talker interface specification is now version 2 and script language users can now communicate with talkers that support this with the new TalkerSendStr() and TalkerReadStr() commands.
  4. Version 2 Talkers can request sampling to start and stop and can request that a named script runs. This can allow remote control of Spike2 data capture.
  5. In the script editor, you can navigate to a user-defined Func or Proc (even if the code for it is in an included file) by right-clicking on the name.
  6. In the script editor, if you right-click on a built-in function or script keyword, the context menu includes the command Help for... and selecting it will open the best match in the help file to that item. This is equivalent to using the F1 key with the text caret on an item.
  7. In the script editor, the auto-completion list now contains user-defined Func and Proc items from included files. For this to work you must check the Included files box in the auto-completion dialog.
  8. In the script editor, you can hover the mouse over a user-defined or built-in Proc or Func name to show a tool tip for that item. You can set your own tool tips for user-defined functions.
  9. In the script editor, call tips (tips that appear when you type the ’(’ after a function name) now track your typing and offer additional tips if you type names known to the tip system as function arguments.
  10. The MarkMask() script command is extended to report if a marker filter is active.
  11. The PlayWaveCopy() script command can now read data back from a 1401 in addition to writing it.
  12. The Modified() script command is extended in a Time view to force data through to the disk, equivalent to the Automation tab timed Flush to disk in the Sampling Configuration dialog.
  13. MATLAB data export in a time view is faster in most cases. Waveform export has new options to ignore gaps and to force the same point count per channel when exporting multiple channels sampled at the same rate.
  14. The Active Cursor dialog now tracks user edits and disables OK if a field is incorrect rather than opening a message box. Error messages now appear as part of the dialog.
  15. Importers: The Axon, MC_Rack and Biopac importers use the latest libraries (but are still available only in 32-bit builds of Spike2). You can select the recording session in the NewBehavior (Neurologger) importer.
  1. It was possible to drag the Y axis of a Spike shape dialog (except in online setup) to values beyond the range of the data. The data was correctly limited, but the axis was not.
  2. When sampling tetrode data (4 traces), the on-line display of non-triggered data in the Spike shape dialog displayed traces 0,2,2,3. This did not affect recorded data.
  3. Recording of MeasureToChan() and MeasureToXY() omitted the width argument in threshold iteration modes.
  4. Level events channels written to a 32-bit smr file were inverted.
  5. If level event data recorded to a 64-bit smrx file contained events at duplicated times, the mechanism to remove these events could fail, and it was possible for two events at the same time to be scheduled for writing to disk; this was detected as an error and sampling would stop.
  6. Using Modified(0,0) during sampling with a Level event channel could cause sampling to stop with Error -23.
  7. Exporting more than 20000 event times to a MATLAB file could crash Spike2.
  8. It was possible to get the Active Cursor dialog confused by setting illegal values, then changing the cursor number. You are now not allowed to change the cursor number if the dialog is in an illegal state.
  9. The script compiler did not flag a comparison between a number and a string as an error. For example: if 3 = "three" then halt endif;
  10. Importers: The y scaling has been corrected in both the Alpha Omega and Neuralynx importers. The ASCII (text) importer could get the times of TextMark data confused. The CFS importer now gets the times from Marker channels correctly.
  1. In the Graphical sequence editor we now refer to sections as Section A to Section Z, not Key A to Key Z.
12/13 8.00a New
  1. The ArrHist() script command to bin array values into a histogram is added.
  1. Backward searches of waveform channels with a slope channel process could cause Spike2 to hang.
  2. Reusing a deleted channel with a different channel type in a .smrx (64-bit) file could cause a data lookup failure.
  3. Calling the ChanList() script command when the current view was not a time, result or XY view reported an error rather than returning 0.
12/13 8.00 New
  1. Data is now stored in a new 64-bit filing system that allows files of pretty much unlimited size and duration; the old 32-bit system is still supported so old files will read and can be modified.
  2. You can choose which format to sample to (32-bit or 64-bit) in the Sampling Configuration dialog.
  3. With the new filing system, sampling times are no longer limited to 2 billion clock ticks; at a clock tick of 1 microsecond you can sample continuously for many years.
  4. With 64-bit files, triggered and timed waveforms save exactly the required data; 32-bit files always save complete disk blocks, which usually saves more data than required.
  5. New S64Fix utility program to recover data from damaged 64-bit data files (similar to the SonFix program for 32-bit files).
  6. If you run on a 64-bit operating system we now install a 64-bit version of the program. This runs faster than the 32-bit version and allows the program access to more memory.
  7. There are improvements to the data import system to allow longer time ranges and larger files and to give more information and control during interactive file importation.
  8. The sonogram display copes better with gaps in the data and now has an optional key to indicate intensity.
  9. In the script bar and sample bar, right-clicking a button opens a context menu from which you can open the script or sampling configuration.
  10. In the sample bar, the context menu allows you to sample immediately and to control the write enable state.
  11. You can now set horizontal spike amplitude limit cursors when sampling with a Micro1401 mk II (to match the other supported 1401 types). These set the upper and lower limits for acceptable spikes.
  12. If you import waveform data into a RealMark memory buffer, the peak/trough/level value associated with the import is saved in the first value associated with each marker. You can also choose to import both Peak and Trough times or both Rising and Falling times in one operation. The MemImport() script command has been extended to match.
  13. The script language allows you to define default values for proc and func arguments.
  14. Script integer values are now 64 bits (they were 32 bits in previous versions) to allow ChanData() on an event-based channel to return 64-bit times as integers.
  15. The output sequencer has a new instruction TICK0 and TICKS has been extended to cope better with sample times that are too large to fit in the sequencer 32-bit variables. There is a new script command, SampleSeqTick0().
  16. The FileSaveAs() script command now adds a file extension if none is supplied. When used with a multimedia window to save the current frame as a bitmap you can now set a blank name or a name with wildcards to prompt the user for a file name (as for other window types).
  17. The output sequencer has new sequencer expression functions sTk64h() and sTk64l() to convert times in seconds to 64-bit tick counts.
  18. The BReadSize() script command now accepts -n when reading a string. This stops reading at a null (ASCII code zero) character or after n characters.
  19. The output sequencer text editor has Keys and Labels controls that allow you to navigate to any key press or label in the sequence.
  20. The maximum size of a user-defined dialog is now limited to the size of the primary monitor screen. Previously it was set to a smaller, arbitrary limit. The previous arbitrary limit is used if the primary screen size is less than that limit, for backwards compatibility.
  21. DlgCreate() lets you set negative wide and high values to limit the dialog size if it exceeds the set size.
  22. The Y Axis Range dialog has a spinner on the channel selector.
  23. The BWriteSize() and BReadSize() script commands now accept 8 as a size for integers (for 64-bit data). The size used by BRead() and BWrite() for integers is 4 (32-bit) for backwards compatibility.
  24. The BSeek() script command can now seek to positions with a 64-bit offset into the file. Spike2 version 7 was limited to 32-bit offsets.
  25. There are improvements to the data import system to allow longer time ranges and larger files and to give more information and control during interactive file importation.
  26. You can define Alt key combinations to activate buttons in the Script bar and Sample bar.
  27. The new DlgFont() script command gives you more control over the font used in user-defined dialogs.
  28. The SampleWrite() script command is extended to mark time ranges for saving.
  29. The MATLAB file export system can write files larger than 4 GB if you select the version 7.3 format. Beware that 32-bit versions of MATLAB cannot cope with huge data files.
  30. You can now generate stereotrode or tetrode data from waveform channels with different channel units. All channels use the units and scaling of the first selected channel.
  31. The ArrStats() script command calculates the mean, variance, skewness and kurtosis of an array.
  32. The MATTrace() script command calculates the trace of a matrix.
  1. The 1401plus and the original micro1401 are no longer supported for sampling. If you need to sample with these, use Spike2 version 7 (also included on the distribution CD).
  2. To sample data, your 1401 must have up to date firmware. If the firmware is out of date you will be prompted to update it when you try to sample data. You can check if you are up to date in the Help menu About Spike2 command. Starting version 8 with modern firmware allows us to streamline data capture, avoiding supporting old and inefficient data transfer protocols.
  3. The Script menu Convert DOS script command to convert scripts from the MS-DOS version of Spike2 has been removed. This is still present in Spike2 version 7, if needed.
  4. The yes% argument of the FileSaveAs() script command is now a set of flags. If a version 7 script uses an argument value that is not 1 or 0 you may not get identical results in version 8. Replace the argument with (argument) != 0 and it should work exactly as the old version did.
  5. The ScriptBar() and SampleBar() commands remove trailing "|" characters when returning the string associated with a button. This is unlikely to cause problems in existing scripts.
  6. The default Working Set size has been increased.
  7. We no longer provide printed, hand-crafted manuals (most users did not make use of them and the on-line help had live links and held more information, further, it took us considerable effort to maintain the manual in addition to the help file). Instead, we include a PDF of a printable manual that is generated from the on-line help.
  8. We no longer install the SonCols or SonInfo shell extensions; this is because of changes Microsoft have made to shell extensions.
  9. The file importers now create 64-bit .smrx files, not 32-bit .smr files. Scripts that import files, then further process them may need modification to open a .smrx file rather than a .smr file.
  10. The FileSaveAs() script command old flags% argument is renamed to expt% and the yes% argument is renamed to flags%.
  11. Both FileSaveAs() and FileNew() have modified the meaning of the big% argument to cope with 64-bit data files. If you used this argument in a script and want to create a 64-bit file you should change the argument to 2.
  12. The SampleBigFile() script command has modified the meaning of its optional argument. If you used this argument in a script and want to sample to 64-bit files you will need to change it to 2.

Cambridge Electronic Design Limited

Registered in England: 972132

Registered office:

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: 85234945

By email:

By post:
By telephone:

(Int.+44) (0)1223 420186

From North America (Toll Free):

1 800 345 7794

By Fax:

(Int.+44) (0)1223 420488 ×

Privacy policy

CED, through this site, does two things that relate to privacy. We would like to explain them.

Emails from down-loads

We offer free down-loads of many files on our site, from test programs to complete install files for updated versions of major packages like Spike2 and Signal.

When customers wish to take a down-load of a major package, we ask a few questions, including their name, email address, the serial number of the software for which they seek an upgrade and whether they would like an automatic email whenever we update the product. This information is emailed back to CED when they access the final down-load screen. Within this email, your browser transmits the type and version of browser you are using, and the screen resolution you are running.

The reasons why we take and keep this information are that it is useful for our software development team to know who has taken the latest versions, and it is useful for our web site development team to know which browsers people are using to view our site, and what resolution they have their screens set to.


When people down-load a major package, we try to write a cookie, a small file in your computer, that records your name, serial number of the software package, and the version you are down-loading. These files have a lifetime of one year.

The reasons for storing this information are firstly that if you ask for another down-load some other time, your details are read from the cookie and are pre-written into the form, to save you looking them up again. The other reason is that next time you access our site, your browser looks through your CED cookies and compares the versions down-loaded with the latest version numbers read from our site. If there is a later version of a product you have already down-loaded, we tell you on the home page screen, so you know that it is worth going to the down-load page again.

None of this information is ever given to anyone outside CED. ×