Version 0.4.3 - released January 17th 2014 - Release Notes available.
The syntax for the commands overlay finish and overlay pre have been changed to the following:
overlay finish [<command name>] overlay pre [<command name>]
When using these commands without the argument
Rewritten the video mixing part for video feeds in output_producer in the CVideoMixer class to use OverlayFrame in CCairoGraphic class. This have the following benefits:
1) Pixel Aspect Ratio for feeds is no longer limited to 1:1, 5:4 and 12:11. Nearly ny aspect ratio can now be set. Neither infinite nor zero however is a good choice. 2) Scale for feeds is no longer limited to 1:1, 1:2, 1:3, 1:4, 1:5, 2:3 and 2:5. Nearly any scale expressed as a fraction can now be set however neither infinite nor zero is a wise choice. 3) High CPU load associated with certain combination of PAR and scale for feeds has now been erradicated and most if not all combination use the same low level of CPU.
Hidden command overlay feed changed to use Cairo Graphics removing restictions on scale and PAR as well as leading to faster execution. With this change and the change of how video feeds are stacked using the stack command, the code for slower integer operations on video frames found in the CVideoScaler class (video_scaler.cpp) removed.
Adding alpha values to basic video feeds. The syntax of the command is
feed alpha [<feed id> <alpha>]
This only sets a variable in the feed. It does not alter the value of the alpha channel in the BGRA stream of the feed. The alpha channel of the stream must still contain 255 for each pixel for Snowmix to work as expected. Gstreamer 1.2.0 to 1.2.2 sets by mistake the alpha channel to 127 for each pixel which is comparable to an alpa value of 0.5. Fix is to use GStreamer < 1.2.1 or > 1.2.2.
Renamed class CVideoFeed to CVideoFeeds to make room for class CVideoFeed describing the individual feed as a class rather than a struct. This is done to limit direct access to internal structures of a feed from other classes. Work included in:
Converting the feed struct to a class is work in progress and not part of this release.
Count of samples amples passed through audio mixer has been upgraded to u_int64_t, which for 44100Hz should give millions of years running time without wrapping.
Wrapping of samples count in audio feed and sink fixed when reaching UINT_MAX. When number of samples passed through an audio feed exceeded UINT_MAX, wrong number of samples per second was calculated. This has now been fixed. If number of samples passed through an audio feed exceeds 2 times UINT_MAX between two successive calls to Update(), the fix would fail, but that is extremely unlikely to happen as Update() is supposed to be called at frame rate.
Changing output of command audio mixer rate to be in line with similar commands for feeds and sinks. Dropping printing name of mixer.
Adding command audio mixer source delete for deleting a mixer source. The syntax is:
audio mixer source [delete <mixer id> <source no>]
Deleting a mixer source, when deleting an audio mixer, did not remove and free any audio queues the mixer source or sources might have. This has now been fixed.
Correcting syntax for command audio mixer source add silence printed by the command audio mixer help.
Changing the output for the following commands to print 'STAT:' instead of 'MSG:' when given without arguments to be inline with other parts of Snowmix:
audio sink source audio sink queue maxdelay audio sink queue audio sink stop audio sink start
Changing output format of the commands audio sink start and audio sink stop so the state is printed in capital letters to be inline with the rest of Snowmix.
Closing a controller connection setup as an audio sink, could in some cases result in the following message:
Error. Controller is set to audio feed, but the feed is in state UNKNOWN. Closing controller for fd 3,3 Calling stop sink 1
While the connection is properly closed, the message made no sense. This has now been fixed.
Changing the source for an audio sink would in some cases fail or make Snowmix core dump. This has now been fixed.
The function RemoveQueue() for CAudioFeed, CAudioMixer and CAudioSink could in some cases lead to an infinite loop. This has now been fixed.
Parsing commands for audio feeds, mixers and sinks did not check the command string for NULL nor skipping extra spaces. Fixed.
Adding new command system output reset which will reset the control connection for the shmsrc connected to Snowmix by closing it. It is the responsibility of the shmsrc to detect this and reconnect if it want to. The syntax is:
system output reset
Optimizing command loop for system .... commands and fixing printing error of command string when a system command failed.
Moving system output command parsing to class CVideoOutput.
When using snowmix in loop mode 2 and output mode 2 and when Snowmix runs out of available shm buffers for video output, shm buffers will stay unavailable to the main video loop until at least half of the allocated shm buffers are available again. To use this feature, use the following cli option:
./snowmix -l2 ../ini/.....
and in the ini file:
system output mode 2
Adding command system name to name the system. The system name will show when listing the info with the command system info or the command system name without any parameter. The system name will be intialized with the node name of the system the mixer is running using equivalent of uname -n. When the command is used to set the system name, the node name is prepended. The syntax is:
system name [<system name>]
Class CVideoMixer was not freeing up m_command_pre and m_command_finish when destroyed.
The command system socket can now be used with and without the argument output socket name. In the latter case, the socket name will be printed. The syntax is now:
system socket [<output socket name>]
The command system host allow will now print the keyword STAT: instead of MSG: prepended each line. The last line will only contain the string 'STAT: ' followed by a newline.
Controllers fd was not set non-blocking. This is now fixed though it ought not be a problem, as select() was used.
tine_now in MainMixerLoop is now passed to output_producer and used herein. Also used for determine timed commands.
Moving main_poller from main.cpp to class CVideoMixer as MainMixerLoop.
Moving feed functions from main.cpp into class CVideoFeed. The new names of the functions with nearly similar names are:
SetFds (int maxfd, fd_set *rfds, fd_set *wfds); CheckRead (fd_set *rfds, u_int32_t block_size); Timertick (u_int32_t block_size, struct feed_type* feed_list); ReleaseBuffers (struct feed_type *feed); FindArea (struct feed_type *feed, int area_id); UseBuffer (struct feed_type *feed, int area_id, unsigned long offset, unsigned long bsize); AckBufferPtr (u_int32_t block_size, struct buffer_type *buffer); UseBufferPtr (struct buffer_type *buffer);
Deleting the class CVideoImage would core dump Snowmix. This has now been fixed. However previous, the class was not deleted specifically. On executing the command quit, the CVideoMixer class and all its allocations/creations are now deleted/deconstructed.
Shared memory pipe name format and name changed. For linux the pipe is visible as a file in /run/shm/
Command system info output formatting was changed and it will now also print the fd of output_client_socket and the output shm pipe name. Mode and delay for output is also shown. Scripts that finds the ctr sock name using system info must be updated. See extract of example from system info below.
.... STAT: Output ctr sock name : /tmp/mixer1 STAT: Output ctr fd : master 8 client 3 STAT: Output settings : mode 1 delay 1 STAT: Output frames inuse : 0 of 40 STAT: Output shm name : /shmpipe.16980. 0 ....
Script input2feed will now ignore audio if corresponding audio feed is not defined in running snowmix.
Script av_output2screen will now ignore audio if audio sink is not defined in running snowmix.
Most scripts in scripts/ are changed to check for gstreamer-1.0 and use that version if present. Otherwise it will default to gstreamer-0.10. GStreamer has to be version < 1.2.0 or > 1.2.2.
The script bootstrap has been changed and further developed in several ways. The script now checks individually for each package/library required and offers to install any missing package.
src/Makefile.am now uses settings from configure for tcl/tk and libpng.
configure.ac now sets correts include directory for SDL and inserts it in Makefile.am. It will complain if it does find SDL.h or SDL/SDL.h.
configure.ac now checks for libgstreamer-1.0. If not found it will default to libgstreamer-0.10. If not found either, it will complain.
configure.ac now checks for libpng12 and complain if not found.
configure.ac now checks for tcl/tk8.6. If not found it will default to 8.5. If not found either, it will complain.
bootstrap now checks for tcl8.6/tk8.6 first. If it is not found it will default to tcl8.5/tk8.5. If not found either, it will suggest installing 8.6
New command system output mode sets the way video output is handled. Current 3 modes are available. The modes are:
Mode 0 : Simple direct output in main thread. Default Mode 1 : Simple threaded. Buffers are placed in a queue and a second thread handles communicating for video out. Buffer are send when ready. Mode 2 : As Mode 1, but communication out has an extra layer of timing. This mode is experimental and not fully tested.
The command must be set before the command system socket is issued. The syntax is:
system output mode <mode>
New command system output delay sets a delay for video output in terms of frame delay. Minimum is 1. Setting it higher than buffers available will block video output. Default value is 1. This command has no effect for mode 0. The command is recommended to be set before the command system socket. The syntax is:
system output delay <frames>
New command system output buffers sets the number of buffers, one for each frame, to allocate for video out. The default value is 20. Minimum is 10. Maximum is 1000 though not recommended. The command must be set before the command system socket is issued. The syntax is:
system output buffers <buffer count>
Shared memory was allocating 50 frames for output. This has been changed to 20. This can be changed with the command system output buffers.
When a feed was used by a shape or by a virtual feed, the feed was not marked as used internally. This has no consequence for a live feed, as it will always consume frames at frame rate. However a recorded feed would not be marked as used and subsequently then the recorded feed would not advance/consumed at frame rate. This is a bug fix.
Version 0.4.2 - released July 30th 2013 - Release Notes available.
The FD for reading idle image file for feeds was not closed after reading. The FD is now closed. This was not a bug, but rather a waste of ressources. Small optimization.
All placed text that was overlayed, called the UpdateMove function for each frame to change any parameters that needed changed for animation purposes. This is now skipped, if the placed text has no animation set. Small optimization.
Optimizing parsing loop of text commands. Also parsing in the individual commands was overhauled. Optimization. The commands overhauled are:
text place align text place alpha text place backgr clip text place backgr linpat text place backgr move alpha text place backgr move clip text place backgr text place clipabs text place clip text place coor text place grow text place move alpha text place move clip text place move scale text place move coor text place move rotation text place repeat move text place rgb text place rotation text place scale text place string text place font text place info text place text string concat text string text font available text font text help
A list of text command will now report fail, if the place id does not reference a placed text. The commands are:
text place align text place alpha text place backgr clip text place backgr linpat text place backgr move alpha text place backgr move clip text place backgr text place clipabs text place clip text place coor text place grow text place move alpha text place move clip text place move scale text place move coor text place move rotation text place repeat move text place rgb text place rotation text place scale text place string text place font text place info
Please note that a text placed referencing to string or font id that does not is NOT placed. This is a change in behaviour compared to earlier versions.
Adding new command shape scaletell. The command is solely intended to be used for debugging purpose. The command place an entry in the specified shape macro that when overlayed will print the current scale of the graphic context to stderr. The syntax is:
shape tell scale <shape id>
Adding command text place backgr round to provide round corners for text background. The radius of each corner must be specified. A radius of 0 is equal to a 90 degree coirner. The syntax is:
text place backgr round [<place id> <left top> <right top> <left bottom> <right bottom>]
When using the command text grow, the width of the text was calculated as the width of the current shown string rather than the width of the full string. This would affect placement of text aligned for center or right. It would also affect the size of the background, if enabled. This has now been changed so the width is calculated as the full string and not the current shown string. If the old behaviour is desired, the keyword variable must be added to the grow command as shown for the syntax below here:
text place grow <id no> <start len> [<delta grow> [variable]]
When using the command text font to delete a font, a string was deleted instead This has now been fixed.
The command text help was not listing that the command text place backgr linpat could be used without arguments. Fixed.
The command text place now checks for existence of string and font before creating a placed text. The command will now return an error if string and/or font does not exist. The command will now also return an error, if it failed. Before it could fail silently, if memory was insufficient.
The command text string concat would in most cases core dump. This is a bug and has now been fixed. Further more the command will add a space between strings concatenated.
Adding the commands shape source alphamul and shape source alphaadd. The command is used to multiply a factor or add a constant to the current alpha level in a shape and the effect is inherited down, but not up. Unless the command is later followed by a command that uses the alpha level such as shape source rgb or shape source rgba and then later followed by a command such as shape paint, shape fill, shape stroke etc, the command will have no effect. The command can among other things be used in recursion to decrease or increase the alpha level. Alpha levels are always between 0 and 1 but the factor can be any valid value hold in a double. The syntax is:
shape source alphaadd <shape id> <alpha constant> shape source alphamul <shape id> <alpha factor>
Adding the command text place string and text place font. The command can be used to change the string id or font id for a placed text. The syntax is:
text place string [<place id> <string id>] text place font [<place id> <font id>]
The command shape list was not listing the command shape save. This has now been fixed.
The command shape list was not listing the command shape restore. This has now been fixed.
The command shape list was not listing the command shape recursion. This has now been fixed.
The command shape list listed command shape rotation as shape scale. This has now been fixed.
The command shape list was not listing the commands stroke preserve and fill preserve correctly. This has now been fixed.
The command shape source rgb was in verbose mode listing it created a shape entry named shape source rgba. Likewise was the command shape source rgba listing it created an entry named shape source rgb. This has now been fixed.
The command shape help did not list the syntax for the command shape rectangle. This has now been fixed. The syntax is:
shape rectangle <shape id> <x> <y> <width> <height>
The command shape recursion would with shape verbose larger than 0, print the word RECURSION as part of the information. This has now been changed to recursion.
The command shape line width would with shape verbose larger than 0, print the word width as part of the information. This has now been changed to line width.
The command shape inshape would with shape verbose larger than 0, print the word shape as part of the information. This has now been changed to inshape.
Adding the command shape arcrel_cw and shape arcrel_ccw for drawing arcs relative to the current position of the graphic context. The command will draw an arc at Cairo Graphic context's current position added the parameters x and y*. The syntax are:
shape arcrel_cw <shape id> <x> <y> <radius> <angle from> <angle to> shape arcrel_ccw <shape id> <x> <y> <radius> <angle from> <angle to>
The command *shape arc_ccw was not parsed correctly making the command unusable. This has now been fixed.
Optimizing the parsing of feed commands. Removing unnecessary strlen and reordering parsing order.
The output of the command feed list and feed list verbose* has been changed to be in line with the rest of Snowmix. Also for this command, the output the string "MSG:" was changed to "STAT:" and the last line printed for both commands is the string "STAT: " plus a newline.
The command feed info will now also list how many feeds can be created in total.
The command feed add without parameters will now list the created feeds inline with other add commands in Snowmix. The command feed help has been updated to reflect the added syntax.
The command shape list help was listing incorrect and incomplete syntax for the commands shape place coor, shape place offset, shape place rgb, shape place rotation, shape place scale and shape place shape. This has now been fixed.
The following commands deleted an entry instead of moving it. This is a bug that has now been fixed.
shape moveentry <shape id> first N shape moveentry <shape id> last N
where N is a positive integer greater than 0.
It will now be reported on stderr by the main_poller in main.cpp if frame processing is lagging. So far the code is disabled. Fills console on slower systems.
Command system info will now also report the number of open control connections.
Command system info will now also report the control connection port number.
Command system info will now also report the number of lagged frames, but the code to
count it is not yet enabled correctly.
Adding "animation" command to audio feed volume. When the command is given, the volume for all channels in the feed will be added \<delta volume> at frame rate a number of times set by \<delta steps>. The syntax is:
audio feed move volume [<feed id> <delta volume> <delta steps>]
Audio volumes are limited to values between 0 and MAX_VOLUME_FLOAT defined in audio_util.h to 4.0. A volume of 1.0 means unchanged level.
Adding "animation" command to audio mixer volume. When the command is given, the volume for all channels in the mixer will be added \<delta volume> at frame rate a number of times set by \<delta steps>. The syntax is:
audio mixer move volume [<mixer id> <delta volume> <delta steps>] audio mixer source move volume [<mixer id> <source_no> <delta volume> <delta steps>]
Adding "animation" command to audio sink volume. When the command is given, the volume for all channels in the sink will be added \<delta volume> at frame rate a number of times set by \<delta steps>. The syntax is:
audio sink move volume [<sink id> <delta volume> <delta steps>]
Changing max audio feeds in audio_feed.h from 10 to 20
Deleting a pattern by issuing the command shape pattern add \<pattern id> deleted a shape rather than a pattern. This is now fixed. This is a bug fix.
Version 0.4.1 - released July 4th 2013 - Release Notes available.
Adding support for complex graphics drawing, clipping, patterns, gradients and masking using graphic primitives through 46 new shapes command and 14 new shape place commands. The commands are listed in the Release Notes available.
Adding commands "text overlay" and "image overlay". These are identical to the commands "overlay text" and "overlay image" respectively except they are moved to the class CTextItem and CVideoImage. This enables text overlay and image overlay to be executed as a result of a tcl eval or tcl exec return result. The old commands will remain in the version 0.4.x, but are considered deprecated and will be removed in version 0.5.0. The new commands will return an error if not called inside the "overlay pre" and "overlay finish" or a command from inside these recursively. Ie. you can not execute an overlay command manually from a control connection as you always are in the wrong time window. Only the overlay pre and finish commands are executed in the right time window where a frame to overlay will present.
Execution of defined commands was done by calling the command parse with the controller connection set to NULL. This prohibited a command macro from writing to the control connection. This has now changed, so output will go to the control connection giving the command. The execution of commands defined inside the "overlay pre" and "overlay finish" are still parsed with the controller connection set to NULL preventing possibly flodding the main control connection (usually stderr) with messages. However some commands may still fail and possibly writing to stderr.
Changing output of command "message". Now it writes as show below.
Furthermore, instead of writing the message to stderr, it now writesto the controller connection issuing the command instead.
Adding command "messagef". It is similar to the message command except it adds the current frame number. The syntax is
messagef <the message>
The output will look like this where the current frame count is 1324:
MSG: <1324> ......
Adding command "text place clipabs" to provide a fixed clipping window for text and possibly its background. The clipping coordinates and size is absolute disregarding where the text is placed. The syntax is
text place clipabs [<place id> <clip x> <clip y> <clip width> <clip height>]
The command "text place clip" will now return an error if the text place id indicated does not exist. This is a bug fix.
Calling "overlay image" through "overlay finish" or "overlay pre" when no image was loaded caused seg fault in OverlayImage in video_mixer.cpp. This is a bug fix.
Adding command "image write" to write out in raw rgba format an image already loaded. This is useful to create dead-images for the feeds as these are required to be in the rgba format. The syntax is
image write <image id> <file name>
The command is not recommended used for live video mixing as writing to a file system may delay or block the main video loop of Snowmix.
Commands created with name ending with ".tcl" case insensitive are now not checked and should not be executed as ordinary snowmix command. They should only be executed using the command "tcl exec" command. The change is made to avoid a lot of false error messages from Snowmix when trying to identify break and jump points as if the command was a snowmix command and not a tcl script. Commands with name ending in ".tcl" are reserved for tcl scripts.
Adding version and number of free and inuse outbuffer information to command system info. Also fixing display of pixel format error.
Adding information to system info whether or not Video shapes has been loaded.
Adding inversion for audio mixer source. If enabled, the source will be inverted before used in mixer. The command has the follwoing syntax:
audio mixer source invert <mixer id> <source id>
The command will toggle the status of a boolean variable used to determine whether samples should be inverted or not. Issued once for a mixer source, the samples will be inverted. Used twice on the same mixer and same source, the samples will not be inverted, which is the default state. The command
audio mixer source
will list whether or not samples will be inverted using the word invert for when samples are to be inverted and the word normal for when the samples are not inverted.
Changing the syntax for audio mixer start by adding the optional keyword soft. The syntax is now:
audio mixer start [[soft ]<mixer id>]
The functionality was already in the code since 0.4.0. As this syntax change is an extension rather than a change of the reserved word commands, this does not prompt the need for a change of the major version number.
New "system host allow" to limit access to connect to Snowmix. If not present, only connections from 127.0.0.1 is allowed. If present then only connections from ip adresses specified is allowed. In the latter case, 127.0.0.1 will usually have to be added. The command has the following syntax:
system host allow [ <network> | <host> [ <network> | <host> [ ...]]]
Host must be specified as a.b.c.d like 192.168.1.2. A network must be specified as a.b.c.d/e like 192.168.1.0/24
Command image place now also prints anchor coordinates.
Fixing bug with alpha for virtual feed. The feed was not painted with alpha in OverlayFrame() in cairo_graphics when alpha < 1.0
Timed commands was not executed if there was no process connected to read produced video output frames. This has now been fixed.
Fixing missing and erronous entries for the command "help".
Togle verbosity for m_controller in controller.cpp now reports verbosity on when toggled on.
Version 0.4.0 - released January 20th 2013 - Release Notes available.
Adding audio mixing capabilities through the classes CAudioFeed, CAudioMixer and CAudioSink. The classes adds the following commands
audio feed add [<feed id> [<feed name>]] // empty <feed name> deletes entry audio feed add silence <feed id> <silence in ms> audio feed channels [<feed id> <channels>] audio feed ctr isaudio <feed id> audio feed delay [<delay in ms>] audio feed drop <feed id> <drop in ms>] audio feed format [<feed id> (8 | 16 | 24 | 32 | 64) (signed | unsigned | float)] audio feed info audio feed mute [(on | off) <feed id>] audio feed rate [<feed id> <rate>] audio feed status audio feed verbose [<verbose level>] audio feed volume [<feed id> (- | <volume>) [(- | <volume> ...)]] // volume = 0..MAX_VOLUME audio feed help audio mixer add [<mixer id> [<mixer name>]] audio mixer add silence <mixer id> <ms> audio mixer drop <mixer id> <ms> audio mixer channels [<mixer id> <channels>] audio mixer mute [(on | off) <mixer id>] audio mixer queue <mixer id> audio mixer rate [<mixer id> <rate>] audio mixer source [(feed|mixer) <mixer id> <source id>] audio mixer source add silence <mixer id> <source no> <ms> audio mixer source [map <mixer id> <source no>] audio mixer source [maxdelay <mixer id> <source no> <ms>] audio mixer source [mute (on|off) <mixer id> <source no>] audio mixer source [volume <mixer id> <source no> (-|<volume>) [(-|<volume>) ...]] audio mixer start [<mixer id>] audio mixer stop [<mixer id>] audio mixer verbose [<verbose level>] audio mixer volume [<mixer id> (-|<volume>) [(-|<volume>) ...]] // volume = 0..MAX_VOLUME audio mixer status audio mixer help audio sink add [<sink id> [<sink name>]] audio sink add silence <sink id> <ms> audio sink channels [<sink id> <channels>] audio sink ctr isaudio <sink id> // set control channel to write out audio audio sink drop <sink id> <ms>] audio sink file <sink id> <file name> audio sink format [<sink id> (8 | 16 | 24 | 32 | 64) (signed | unsigned | float) ] audio sink mute [(on | off) <sink id>] audio sink queue <sink id> audio sink queue maxdelay <sink id> <max delay in ms audio sink rate [<sink id> <rate>] audio sink source [(feed | mixer) <sink id> <source id>] audio sink start [<sink id>] audio sink status audio sink stop [<sink id>] audio sink verbose [<verbose level>] audio sink volume [<sink id> <volume>] // volume = 0..MAX_VOLUME audio sink help
More information on how to use Snowmix for audio mixing is available in the Wiki at Snowmix Wiki on Audio
Adding command 'overlay pre'. This command is similar to the command 'overlay finish' except the command set by this is called at frame rate before audio feeds, mixers and sinks are processed. This also means that the command set is executed whether or not a consumer of frames is connected to Snowmix. The latter is different from the command 'overlay finish' since overlay finish is not called if there is no consumer of frames. The syntax for 'overlay pre' is
overlay pre <command name>
Fixing command 'virtual feed add' to print created virtual feeds and their respective names
Adding command 'system info'. Command will provide some system info. The syntax is
Adding command 'image place matrix'. The command enable a transformation of the coordinate system. To find more information on coordinate transformation, please use Google to search for 'cairo matrix transformation'. While the matrix command support offset and scaling, these functions are best used by using the commands 'image place', 'image offset' and 'image scale'. However the matrix transformation also support skewing, which can not be done by other commands. The syntax is:
image place matrix <place id> <xx> <xy> <yx> <yy> <x0> <y0>
Adding command 'virtual feed matrix'. The command is similar to the command for image. The syntax is:
virtual feed place matrix <feed id> <xx> <xy> <yx> <yy> <x0> <y0>
Adding help text in video_image for command 'image help'.
Setting allowable 'system frame rate to be between 1 and 100. MIN and MAX is set in controller.h as MIN_SYSTEM_FRAME_RATE and MAX_SYSTEM_FRAME_RATE
The following reserved keywords (commands) has changed name
port -> system control port geometry -> system geometry frame rate -> system frame rate socket -> system socket
Fixing bug with 'image place' and 'image place coor' where the return value would be non zero reporting and error even though the command would be executed correct. Negative coordinates trigged the bug.
Clock example in tcl was using %I as format for hour which produces a 2 digit number for hours. This is okay for 01..07 and 10..12, but 08 and 09 are seen as illegal octal numbers for the tcl command expr. Subsequently the clock would fail if hour or minutes or seconds equals 08 or 09. Fix is to use %l. Minutes and seconds fixed by replacing leading '0' with ''.
See also Changelog for Snowmix 0.3.x
Discussion: Snowmix 0.4.0 Released - Adding support for Audio Mixing
Discussion: SNowmix version 0.4.2 Released
Discussion: New version 0.4.1 released
Discussion: New version 0.4.3 released
Wiki: Release Notes