FlowStone Version History and Release Notes
Below you will find the release notes for each version of the software.
Version 3.0.8 SKYLARK
The focus of this release is coding! First off we've given the Assembler component a bit of a spring clean and fixed some of the anomalies that were ruining the syntax highlighting when using certain opcodes. We've also thrown in a bunch of new opcodes which we hope will open up many new possibilities for all you DSP coders out there. The User Guide now contains a section on the Assembler component as well as a list of supported opcodes.
On the Ruby programming side we have a new feature called Code Snippets. This allows you to organise all those handy bits of code you use often into one place so you can access them easily whenever you need them. We've included some commonly used code snippets as standard which will hopefully mean that this feature is useful for learning Ruby too. Check out the section on Code Snippets in the updated User Guide for more on this. We hope you'll find it really useful.
We've been working on trying to improve the Ruby timeout. This is the failsafe that kicks in if any Ruby code starts to take too long to complete or enters an infinite loop. Unfortunately the existing system often ended up creating a waterfall effect, whereby one component times out while waiting for another, the end result being that all Ruby components end up being shut down.
In Skylark we've found a way to implement the timeout so that this waterfall effect never happens. Also, as well as the global timeout (in the Settings) you now have control of the timeout for each individual Ruby component should you want to change this. Use the timeout method to see what this is currently set to (in millisecs) and setTimeout to change it. Timeouts are not saved so make sure that put your setTimeout call inside your init method.
- New opcodes for the Assembler component
- New Code Snippets for Ruby Component
- New per Ruby component timeout and enhanced timeout handling
- New LED Strip Claw component allows you to connect to 5V addressable 60 LED strips from your FlowPaw
- Improved the Mem Create component so that it now sends out a trigger after loading
- Fixed an issue where the software could crash when switching Direct Sound on and off
- Fixed a problem with clicking when stopping all notes for a VST plugin in a host
- Fixed a the connector description labels which were drawing at too large a size
- Fixed a problem with the Mem Address component so it now gives a zero value for address and size if there is no valid Mem connected
- Fixed a number of issues with syntax highlighting failing on various Assembler opcodes
- Fixed an issue with the Mem Create component so it now zeroes all values initially
LIST OF NEW OPCODES
- psrld xmm, xmm / xmm, var
- pmuludq xmm, xmm / xmm, var
- paddd xmm, xmm
- sub reg, reg / reg, var
- psubd xmm, xmm / xmm, var
- jmp label / int
- mulpd xmm, xmm / xmm, var
- xorps xmm, xmm / xmm, var
- andnps xmm, xmm
- movd xmm, reg / xmm, var / var, xmm
- movss xmm, var / var, xmm / xmm, xmm
- cvttps2dq xmm, xmm / xmm, var
You can also now use ebx, ecx and edx in the following opcodes:
- add reg, reg
- add reg, var
- sub reg, reg
Version 3.0.7 CHERRY
This update fixes a few bugs and also introduces more click board support for FlowPaw.
We have added support for two new click boards: RFID, which reads RFID tags and Gyro which is a 3-axis gyroscope. There's also a new BalanceBot component which makes it easier to create self balancing robots.
There were a few bugs we wanted to clear up which came as a result of the last release so these have now been rectified.
- New FlowPaw support for RFID and Gyro click boards
- New BalanceBot component for making self balancing robots using FlowPaw
- New getViewPos method in Ruby allows you to find the position of the view in the parent panel
- Fixed a bug in the Indexer component that caused it to fail when you connected multiple links from the same output
- Fixed a problem with the new bitmap saving in Ruby components being too slow and using too much disk space
- Fixed an issue with File|Open not working in FlowStone STEM on Windows XP
- Fixed a bug that was causing Ruby errors to appear on loading when the Ruby code has no 'event' method
Version 3.0.6 PEBBLE
This release fully supports our new FlowPaw board. There are 11 new components to alow you to connect to both the board and our initial set of click boards. We already have support for several more click boards in the works and we'll be adding them in the near future.
We're also introducing a feature that's been on our hit list for some time and that's Find and Replace for Code, Ruby and Text components. Click in any of these components then use CTRL+F to find text. Press F3 to find again. To replace text use CTRL+H. You can Find and Replace within the whole text or a defined selection. Once you've tried it, you'll wonder how you ever managed without it.
To make timers and callbacks much easier with Ruby, we've added a new 'scheduleMethod' method. You pass this the name of the method you want to call (as a string) and then any arguments that the method needs, followed by the time at which you want the method to be executed. It's dead easy to use and makes code much more readable compared to using the 'input' method. Have a look inside the updated 'Ticker - Custom' module for an example of how to use this. See the Scheduling Events section of the updated user guide for more information.
As well as all this we have a many more smaller enhancements and some important fixes for audio and midi stability that were making a nusiance of themselves. See the summary below for full details.
- New FlowPaw component plus associated claw components to support the click boards
- New Find and Replace in all edit components
- New Indexer component for translating a set of triggers into an integer result
- New Ruby method 'scheduleMethod' allows you to call a method at some fixed time in the future
- New clicking stop for a second time in your host will now stop all playing audio
- New Ruby 'schematicLocation' method gives you the folder that the schematic currently resides in
- New Bitmaps are now stored at Ruby component inputs and bitmaps stored at outputs are now saved with the schematic
- New the Ruby playSound method so it looks in the folder containing the schematic file and use relative paths to this as well
- New support for 'runas' in Shell Execute component allows you to run exes that need elevated User Access Control
- New option to change the Ruby timeout limit on Settings|Advanced page
- Updated the 'Ticker - Custom' module to use the new scheduleMethod method
- Fixed a problem with local toolboxes reappearing after being removed
- Fixed a problem which was causing intermittent crashing when using MIDI in Ruby components
- Fixed a problem with crashing when changing preset while playing a note and other general audio instability
- Fixed a problem with voice tags being reversed when reinstating stolen notes
- Fixed copy and paste of non-curved links which were changing to curved after pasting
- Fixed a problem with the Ruby component so that the init method is now called after loading the input values
- Fixed a bug in the HID component which could sometimes lead to crashing
Version 3.0.5 AMBER
This release adds a new feature for education which allows teachers to create schematics that have a built in set of goals for a student to achieve. The progress can be shown as the student works with the schematic and progress is saved with the schematic as well. Teachers can then use FlowStone to scan a set of schematics and summarise the progress for each student, class or year group.
For audio users we now have mem inputs for the Code and Assembler components which allows you to use data from Mem components just like arrays in your code. Also on the audio side there's a new channel id output on the Voices to Poly which gives each channel on each sound process a unique id and can be used to achieve a number of different effects.
To make building your GUI even easier, we've added sub level editing for front panels. Simply double-click on a module on the front panel and you can then edit that module's front panel right there in-place without having to switch up and down through the module hierarchy. Double-click on an area outside of the sub module to go back up a level. Clicking on the schematic will reset back to the top level. If you press X while editing a panel you can hide all the selection adornments and sub-level masking. This can make it easier to see how your GUI will look after editing. You can still make adjustments to elements with the adornments hidden.
Individual links can now be made curved or straight. Right-click on a link to togle between the two or to make a link have straight line segments hold SHIFT + CTRL when adding the first control point. We've also made it much easier to pick out control points on links that overlap. Previously, if you had links whose control points were near each other it could sometimes be impossible to select the point you wanted to move. Now all you do is hover on the link you want and as long as that link stays highlighted you get to edit the points on that link alone.
Another improvement on the GUI building side is the ability to position, move and hide a module's panel from within Ruby. This makes it easy to create expanding pop-up windows and such like. You can also animate parts of your interface more easily. See p170 of the update user guide to learn how this works.
There are several other new features and a whole bunch of fixes as well, see below for details.
PLEASE NOTE we have changed the install so it puts system modules in the FlowStone install folder and not in AppData. This is so that the system modules can be shared on multi user systems. If you have installed any of the module packs then you will need to install the new versions of the packs as well (or move the existing modules). Your own modules remain in AppData and will not be affected.
- New TeachingGoal and GoalProgress components allow educators to set students tasks and monitor progress
- New Ruby extractGoalData method allows you to parse the schematics in a folder and extract all Teching Goal data
- New sub level editing in front panels
- New option to set whether an individual link is curved or has straight line segments
- New Code and Assembler components can have Mem inputs via the memin declaration type
- New Mem Address component gives you the address of the raw data in a Mem
- New channel id output on VoicesToPoly component gives you a unique id for each channel across all active sound processes
- New polyintin and polyintout declaration types in Code and Assembler components
- New Ruby setViewSize method allows you to change a modules GUI size and position
- New Ruby setShowInParent method allows you to hide a modules GUI in its parent front panel
- New Ruby playSoundFile method allows you to play a sound from a file asynchronously
- New Measurement Computing USB-TEMP component
- New send queue size (in bytes) output for the COM Port component
- Improved resolving of link control points so that it's easier to grab the point you want to move when many links overlap in a small area
- Improved the COM Port component sending mechanism
- Improved the software install so that system modules and initial tags are put in the FlowStone folder in Program Files allowing the software to work on multi user systems
- Fixed a bug in the Phidgets component which was causing them to lock on and prevent proper redraws
- Fixed a bug where properties weren't showing when pasting property components or modules with properties inside a module with the properties panel open
- Fixed a problem where the Swap Links option was missing from Schematic menu
- Fixed the HID component which was only allowing 64 characters of hex when it should be 64 bytes (128 characters of hex)
- Fixed an issue where double-clicking on some files would cause a crash but the same files would load normally from the File menu
- Fixed a crash with in the Ruby component which would sometimes occur when adding or removing connectors
- Fixed a major memory leak in all the I/O components including the COM Port component
- Fixed a problem with rendering captions on some modules
- Fixed a problem with crashing and hanging when switching between schematics that use DirectSound or ASIO
- Fixed a bug in the ArrayBuilder components where removing more than one link at a time from an input and then undoing caused an error
- Fixed Multiply and Divide weren't initially shown with the Maths tag
- Fixed the embed dlls option when exporting was not being remembered between sessions
- Fixed a problem with the Navigator and Toolbox resizing not working when running a schematic with lots of events being processed
- Fixed a memory leak in exported VST plugins
- Fixed an issue where the Stream version of the IsPlaying component won't work unless a Bool/Value version of the IsPlaying component is present
- Fixed a problem with the software hanging sometimes when using AboutToClose components
- Fixed a crash when, in the middle of following a wireless link you change the name or type of the currently followed item and then continue to the next one
- Fixed a crash that can occasionally occur with the HID component
- Fixed the ClearSends input on the COM Port component as it wasn't working before
- Fixed a memory leak in the events system
- Fixed a problem with some exported VST plugins hanging the host when closed if there were many instances open
Version 3.0.4 BLUEBIRD
In this update we are very pleased to present a feature that has been requested for a long time - the ability to make your own components using external dlls. This is a huge feature and it really opens up a whole new world of possibilities.
We've worked hard to try and make this as simple to use as possible. There is a whole section in the user guide on it (see DLL Component) and we will have examples on the support area. One cool aspect of this is the ability to embed dlls which allows you to make stand alone primitives. Whether you're a programmer or not, we think you're really going to like the benefits that this brings.
For educators we have introduced a feature called Local Toolboxes. This allows you to easily create a reduced toolbox so that students are only presented with the components they need to perform a particular task. The toolbox is local to a schematic and can be saved with it too. The feature may also be useful for power users who want to keep their own toolbox of favourite components to use with particular schematics.
We have a host of other improvements and fixes as well to make your experience even better, including enhancements to the COM Port component and improved VST preset file handling.
- New DLL component
- New local toolboxes
- New About To Close component
- New launch file into focus mode option
- Improved the preset system so you can load existing fxp/fxb files after you add or remove presets
- Exported exes now embed the Ruby dll so it doesn't have to be extracted on launch
- The Text Save, Bitmap Save, Preset Text File components all now create the folder path if it doesn't exist
- Changed the MidiToVoices component so that we steal releasing notes in preference to held ones
- Removed the splash screen from the software as it was sonetimes slowing startup and causing the odd crash too
- Made some big improvements to the COM Port component to increase performance including running the connect in a separate thread
- The Exe Zoom and Exe Full Screen components now work in Focus Mode
- Fixed the Schematic File Path component which wasn't initialising on loading
- Fixed it so that timers do not fire during loading for exe and VST
- Fixed a problem that was causing exported exes to show as using 100% cpu because the idle wasn't working correctly
- Fixed a crashing problem with playing MIDI notes when changing preset or doing anything that might cause a redraw to occur
- Fixed a crash when moving from focus mode back to editor and Ruby components are present
- Fixed a problem that could occasionally cause a crash on launch
- Fixed several issues that could cause thread locking in the events processing
Version 3.0.3 RAINDROP
In this release we have two new primitives for connecting to external hardware. The DMX primitive allows you to connect to a massive range of compatible lighting products. The HID primitive will interface with any Hardware Interface Device compatible hardware. Most input devices adhere to this standard but it's not just about games controllers, there is a wide range of hardware that uses HID. With this new primitive you can now create your own device using a PIC and use FlowStone to talk to it.
To enhance the UI building capabilities of Ruby in FlowStone even further we've now added the ability to create in place edit controls, drop lists and message boxes. Previously you would have had to use external primitives to handle these features. It was awkward and messy but now it is incredibly easy.
Toolbox scrolling using a mouse wheel has been vastly improved with the addition of a new Adaptive Scrolling feature. This makes the scroll speed change depending on how quickly you move the mouse wheel. You can now scroll slowly when you need precision or whizz through the toolbox in seconds when you want to get somewhere fast. There's a new Toolbox tab on the Options dialog where you can adjust the scrolling to your taste. There's also a new option here to determine how toolbox filters are combined.
For audio users we have finally found a solution to Ruby sharing for VST plugins. The ruby dll no longer needs to be distributed with exported plugins because we now link it directly with our code. As a result of this each plugin now has its own Ruby interpreter, no more worrying about potential conflicts with other people's plugins. This also solves a problem we were having with compatibility between plugins generated with different versions of FlowStone. As a result of this change VST plugins can't use Ruby extensions. We may be able to get this to work later down the line but it's not guaranteed. For now we think it's a small price to pay as the benefits of this solution massively outweigh this small downside.
As well as this there are a host of other fixes and improvements.
- New DMX primitive for controlling lighting devices
- New HID primitive for connecting to a huge range of external controllers and boards
- New In Place Edits from Ruby code
- New Ruby Drop Lists from Ruby code
- New Message Box handling in Ruby code
- New Adaptive Scrolling feature in Toolbox (see new Toolbox page in Options to control this)
- New way of handling exported VST plugins so there is no dependency on the ruby dll and no inter plugin Ruby sharing
- New Ruby getInterpolationMode and setInterpolationMode methods for controlling bitmap rendering
- New Follow Sync Modules feature
- New Schematic File Path primitive
- New Paste input on the Bitmap primitive allows you to paste a bitmap from the clipboard
- Fixed a crash which can occur when deleting Float Array components that are fed from a Ruby component
- Fixed the Changed component so it now saves state
- Fixed a bug where Ruby components were not saving state when switched off
- Fixed crash when closing an exported plugin if there is another one open
- Fixed the conversion from Float Array to string so that it now uses the correct float representation
- Fixed a problem which could cause crashes when calculating syntax colouring for Ruby code
- Added refresh input to COM port component so that you can request a refresh of the port numbers
- Added clear sends input to COM component so that you can clear the send buffer
- Added a mouse cursor request on mouse button up
- Fixed a problem where module tags were not being saved to .tag files
- Fixed a bug in the COM port component where data was being sent out in first in last out order instead of first in first out
- Fixed a the COM port component 'Out' output so that triggers are not sent when data is received only when data is sent
- Fixed an issue with cursor setting in Ruby not passing through to other elements if no mouseCursor method was present
- Fixed a bug when pasting modules which appear on a front panel so that these now all appear on top of existing elements
- Fixed a problem in the Phidgets Stepper Controller component where the position was not being reset correctly
- Fixed a bug in the Phidgets Stepper Controller where the Zero input trigger was not resetting the current position
- Changed the Swap Links feature so it now deselects the components when finished
- Changed the way that Mono to Frames and Frames to Mono work so that they can handle variable buffer sizes
- Fixed a problem where the software could crash or hang on startup if MIDI events are generated during loading
- Fixed the Ruby Draw method so it now uses EditConnector objects to refer to inputs
- Added option to say whether tag bar, search and filter pane selections are combined or not
- Fixed instabilities in the events system that could lead to crashes when the ruby interpreter is shared (mainly an issue for VST plugins)
- Fixed the problem of the UAC dialogs disappearing behind the application window when exporting to VST or EXE
- Fixed an issue with muting exported VST plugins in a host where Ruby events would stop being processed
Version 3.0.2 FIREFLY
The headline feature of this release is Follow Wireless. This has been on our target list for some time and now it's finally here. Just select a Wireless Component and press the TAB key.
We've also made some big improvements to the connector referencing in Ruby which allows you to use connector label strings as well as indexes to refer to connectors. By using labels it makes your code more readable and less prone to issues if you change the order of connectors.
On top of that there's a new feature for previewing applications called Focus Mode plus many other smaller improvements and fixes. The user guide has been updated to include details on all the new features and how to use them.
- New Follow Wireless feature allows you to easily trace the path of wireless links
- New connector referencing in the Ruby component allows you to use an index or a label name to refer to a connector
- New Focus Mode feature for previewing or using applications by hiding the FlowStone editing interface
- New clearEvents method that removes all pending events posted for the Ruby component from which it is called
- New exe export options (these were previously only available in SynthMaker)
- New optional inputs for the drawCurve and addCurve methods allow you to draw sections of the curve and control the curvature
- New setColor method for the Brush object
- Improved tag system has improved handling for modules
- Fixed a problem with @outs and any defined output variable not being set if value sent are sent out immediately (with no time delay)
- Fixed an issue with mouse cursor assignment not working for outputs with multiple links and Ruby components with a pass through
- Fixed a Preset Manager issue with Cubase where presets were not being indexed correctly during automation
- Fixed the sine oscillator bug introduced in the last version
- FIxed a problem with the COM port not reading the NoNull setting on loading
- Fixed an issue issue with the Ruby component redrawing when the mouse moves over a link during editing
- Fixed the cursor updating when mousing over a link that crosses a module front panel or a component that edits text
- Fixed a crash that could occur when using the dup method on a Pen object in Ruby
- Fixed a problem with mouse cursor messages not working through a Multiplexer or Selector
- Fixed the Navigator so that bookmark keypresses now register after you have clicked on it
- Fixed the automatic update checking which was not working in previous versions. This will now work for future releases
- The help text wasn't showing in the status bar for the create EXE button on the module action panel
Version 3.0.1 SNOWFLAKE
This release fixes many of the teething issues that were reported for version 3. We've also made some small enhancements in a number of areas and added a few more graphics methods.
- New getBounds method in GraphicsPath for getting the bounding rectangle of a path
- New isVisible method in GraphicsPath for testing if a point is inside a path
- New isOutlineVisible method in GraphicsPath for testing if a point lies on a path
- New widen method in GraphicsPath for expanding a path
- New getWidth method in Pen for finding out the thickness of a Pen object
- New option to provide an area in the call to the redraw method
- Clipping, text rendering hint and smoothing are now reset after the draw method is called so any changes are only applied within the draw method
- The measureString method now has a "bounds" entry which is an array [x,y,w,h] for the bounding area of the string
- Added pass through of View data to the Ruby component
- Edit components now exit when you hit return
- Edit Box modules were not redrawing correctly after clicking away
- The Http Post component now removes the http:// part from any url automatically
- Added optimisations to all the oscillators to reduce cpu consumption
- The getClip method wasn't returning a valid rectangle
- MIDI wasn't being sent tout in a VST plugin unless there were MIDI components in the path
- MIDI wasn't registering in String and Text components
- The Mono to Frame component was causing a crash when if you added it to a schematic with Direct Sound or ASIO on
- Visual muting was preventing modules from redrawing when they were shown in the schematic
- Fixed a bug with the statistics calculating incorrectly when property panels are being used
- Edit Box modules were not redrawing correctly after clicking away
- The vertical slider no longer has it's value reversed when changing presets
- Creating links to Value connectors was incorrectly sending nil each time
- Boolean properties were incorrectly sending a trigger when the properties were opened
- Font styles were not all working correctly
- Fixed a potential crash on close with the COM Port component
- Fixed an issue with the Ruby component not sending values out correctly to triggered data connectors during a loop
- Fixed an issue with the Phidgets Motor Controller not setting the encoder position
- Fixed a problem where modules with duplicate names were having their tags merged
Version 3.0 SYMPHONY
This new version merges all the features of SynthMaker with FlowStone. FlowStone users now have the benefit of exporting audio plugins. SynthMaker users now have the Ruby component. Both can make use of the new Frames feature which allows you to process Mono data inside the Ruby component - great for prototyping or non performance critical applications.
MIDI data can now be processed in the Ruby component and sent out with sample accurate timing. There are a host of new drawing commands for the Ruby component too.
We have a new toolbox feature called Tags which makes it easier to group components together and retrieve quicker. There are new Netvox and OWL compoonents for home automation, updated modules (now in downloadable packs) and many other fxes and enhancements
- MIDI in Ruby
- Mono to Frames
- Export VST 2.4 Plugins
- Netvox & OWL Components
- Expanded Ruby Drawing Commands
- Updated Modules
- Smart Components
- Many fixes and enhancements
- New smart components replace components for operations that are shared between different data types (eg Add, Switch and Select)
- The Edit Control allows multi line editing and control over font size
- Changed the terminator label and description ono the COM Port primitive to make it clearer that it's for received data
- New input on the COM Port primitive to specify whether to remove the null terminator when sending a data string
- In the Ruby Component Watches now show false values as ""false"" instead of blanks
- The Direct Sound In component allows you to choose the input device independently of the output device
- You can now change the type of the Boolean, Int, String and Float components by right-clicking on their connectors
- A module output label and description can now be set independently the same way as it can for module inputs
- The Ruby And DSP Code components now only require a single click to set the cursor position
- New Swap Links feature allows you to replace a module with another one by exchanging links between the two
- MIDI is all processed using the events system now
- We no longer enforce the 0-127 range for sysex bytes
- Improved redraw mechanism to prevent too many refreshes
- Improved searching in the toolbox now only searches on name and in help
- Fixed a memory leak when sending through a COM Port
- Fixed the random number generation for arrays in the DSP code component as it wasn't working properly
- Stopped the HTTPPost component from producing an unwanted message showing the current port
- Fixed a crash when using the SFZ component
- Resolved an issue with the Colour Detect component not detecting some extreme levels of HSV correctly
- Stopped the Ruby Edit from sometimes causing a crash when watching a variable while something was redrawing
- Fixed the PresetSave so it doesn't crash when loading and saving files
- Prevented Ruby components from remaining in a processing loop when deleted from a schematic as it was causing 'ghost' like behaviour
- Addressed an issue with redraw flicker when mousing over links which cross redrawn areas
- Fixed a potential crash when loading multiple schematics during the same session
- Fixed an issue where the output pane would remain scrolled sometimes and obscure values from the output
- Stopped the Web Url component from firing during copy and paste
- Fixed a problem where the connectors of modules could be drawn incorrectly during a GUI refresh
- Corrected an issue where a module could become locked
- Fixed a problem where redraws were being processed for GUI elements that were set not to show on the front panel
- Made the System Folders and Start Folder components update after loading when used un an export
- Fixed a problem with the software starting up but the main window not appearing