V1.1.0 #51
LSXPrime
announced in
Announcements
V1.1.0
#51
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
SoundFlow v1.1.0 Release Notes
This is a landmark release for SoundFlow, introducing a powerful Non-Destructive Audio Editing and Persistence Engine. This update provides developers with a complete framework for building sophisticated audio editing applications, from simple clip arrangement to complex multi-track projects with effects, time-stretching, and project saving/loading capabilities.
✨ Major New Features
1. The
SoundFlow.Editing
Module: A Full-Featured Audio Editing EngineWe are thrilled to introduce a comprehensive, non-destructive editing module. This suite of tools allows you to build complex audio timelines programmatically.
Composition
class acts as your main project container, holding multipleTrack
objects.Track
s simultaneously. Each track has its own settings for volume, pan, mute, and solo.AudioSegment
is the core building block. Place segments on a track's timeline, specifying a start time and duration from any audio source.AudioSegmentSettings
object, allowing for:IsReversed = true
flag.LoopSettings
.FadeIn
andFadeOut
effects withLinear
,Logarithmic
, andS-Curve
shapes.2. Pitch-Preserved Time Stretching & Advanced Speed Control
Manipulating the timing of audio is now more powerful than ever.
TimeStretchFactor
property onAudioSegment
allows you to change the duration of an audio clip without altering its pitch. This is perfect for fitting dialogue or music to a specific time slot. Internally, this is powered by a new, high-qualityWsolaTimeStretcher
component.TargetStretchDuration
on a segment, and SoundFlow will automatically calculate the required stretch factor to make it fit perfectly.SpeedFactor
property remains, allowing for classic varispeed effects that adjust both tempo and pitch (like a tape machine).3. Project Persistence: Save and Load Your Compositions
A complete
SoundFlow.Editing.Persistence
system has been added, allowing you to save and load entire compositions to and from a file (.sfproj
).CompositionProjectManager.SaveProjectAsync
andLoadProjectAsync
to manage your projects.Assets
folder within your project directory, making your projects portable and self-contained.RelinkMissingMediaAsync
function to point the project to the file's new location.4. New Sample Project:
SoundFlow.Samples.EditingMixer
To showcase these powerful new features, a comprehensive new sample project has been added. Run it to see interactive examples of:
🚀 Enhancements & Improvements
Recorder
andISoundEncoder
interfaces now operate onStream
objects instead of file paths. This is a major flexibility improvement, allowing you to record or encode directly to aMemoryStream
,NetworkStream
, or any other stream type.SoundPlayerBase
has been significantly refactored to support the new time-stretching and advanced playback capabilities, resulting in more robust and flexible audio playback.RawDataProvider
: This provider is now significantly more versatile, with new constructors that can acceptfloat[]
,int[]
,short[]
, andbyte[]
arrays directly, in addition to streams.Mixer
component is nowIDisposable
and uses aConcurrentDictionary
for its components, improving thread safety and ensuring proper cleanup of audio resources.SoundModifier
andAudioAnalyzer
classes now have anEnabled
property, allowing you to non-destructively toggle effects on and off at any level (segment, track, or master).This release includes several API changes to improve flexibility and consistency.
Encoder API Uses
Stream
:AudioEngine.CreateEncoder
and theMiniAudioEncoder
constructor now require aStream
instead of astring filePath
.new MiniAudioEncoder("output.wav", ...)
new MiniAudioEncoder(new FileStream("output.wav", ...), ...)
Recorder API Uses
Stream
:Recorder
constructor now takes aStream
instead of astring filePath
.new Recorder("recording.wav", ...)
new Recorder(new FileStream("recording.wav", ...), ...)
ISoundDataProvider.SampleRate
Property:SampleRate
property onISoundDataProvider
is now a non-nullable, get-onlyint
(public int SampleRate { get; }
). It was previously a settableint?
.Provider Constructor Signatures:
ChunkedDataProvider
,NetworkDataProvider
, andAssetDataProvider
no longer accept asampleRate
parameter.🌐 New Platform Support
freebsd-x64
andfreebsd-arm64
).What's Changed
New Contributors
Full Changelog: V1.0.4...V1.1.0
This discussion was created from the release V1.1.0.
Beta Was this translation helpful? Give feedback.
All reactions