Skip to content

feat: Implement advanced audio editing, WSOLA time stretching & project I/O#48

Merged
LSXPrime merged 1 commit intomasterfrom
feature/composition-editor
Jun 2, 2025
Merged

feat: Implement advanced audio editing, WSOLA time stretching & project I/O#48
LSXPrime merged 1 commit intomasterfrom
feature/composition-editor

Conversation

@LSXPrime
Copy link
Owner

@LSXPrime LSXPrime commented Jun 2, 2025

This commit introduces a new, powerful audio editing and mixing module, alongside significant enhancements to the core audio engine.

Features:

  • New Composition, Track, and AudioSegment classes for timeline-based audio arrangement.
  • Support for essential segment operations: insert, remove, replace, silence, trim, duplicate, and offset.
  • Per-segment playback controls: volume, pan, fade-in/out (linear, logarithmic, S-curve), reverse playback, looping (by repetitions or target duration), and playback speed.
  • Implement pitch-preserved time stretching using the WSOLA algorithm at the audio segment level.
  • Allow dynamic application of SoundModifiers and AudioAnalyzers at the segment, track, and composition master output levels.
  • Introduce CompositionProjectManager for saving and loading projects, including options for media consolidation into the project folder and embedding small audio assets directly.

Core Enhancements:

  • Integrate WsolaTimeStretcher into SoundPlayerBase for robust pitch-preserved time stretching, enabling granular control over segment duration without affecting pitch.
  • Refactor SoundPlayerBase for improved handling of playback speed changes, complex looping, and seeking logic.
  • Update ISoundDataProvider to standardize SampleRate as a non-nullable property and include IsDisposed for better resource management.
  • Enhance RawDataProvider to directly support float[], byte[], int[], and short[] array sources, simplifying raw audio handling.
  • Improve Mixer's component management by switching to ConcurrentDictionary for thread-safe operations and implement IDisposable for proper cleanup of child components.
  • Add an Enabled property to SoundModifier and AudioAnalyzer abstract classes, allowing runtime activation/deactivation of effects and analyses.

Build & Infrastructure:

  • Introduce SoundFlow.Samples.EditingMixer project, providing extensive examples that showcase the new editing module's functionality.
  • Update stale workflow configuration in .github/workflows/stale.yml to exempt 'in-progress' and 'backlog-feature' issues from automatic closing.
  • Adjust native library loading paths in MiniAudio backend for improved robustness in various deployment scenarios.

…ct I/O

This commit introduces a new, powerful audio editing and mixing
module, alongside significant enhancements to the core audio
engine.

Features:
* New `Composition`, `Track`, and `AudioSegment` classes for
  timeline-based audio arrangement.
* Support for essential segment operations: insert, remove,
  replace, silence, trim, duplicate, and offset.
* Per-segment playback controls: volume, pan, fade-in/out (linear,
  logarithmic, S-curve), reverse playback, looping (by
  repetitions or target duration), and playback speed.
* Implement pitch-preserved time stretching using the WSOLA
  algorithm at the audio segment level.
* Allow dynamic application of `SoundModifier`s and `AudioAnalyzer`s
  at the segment, track, and composition master output levels.
* Introduce `CompositionProjectManager` for saving and loading
  projects, including options for media consolidation into the
  project folder and embedding small audio assets directly.

Core Enhancements:
* Integrate `WsolaTimeStretcher` into `SoundPlayerBase` for robust
  pitch-preserved time stretching, enabling granular control over
  segment duration without affecting pitch.
* Refactor `SoundPlayerBase` for improved handling of playback speed
  changes, complex looping, and seeking logic.
* Update `ISoundDataProvider` to standardize `SampleRate` as a
  non-nullable property and include `IsDisposed` for better
  resource management.
* Enhance `RawDataProvider` to directly support `float[]`, `byte[]`,
  `int[]`, and `short[]` array sources, simplifying raw audio
  handling.
* Improve `Mixer`'s component management by switching to
  `ConcurrentDictionary` for thread-safe operations and implement
  `IDisposable` for proper cleanup of child components.
* Add an `Enabled` property to `SoundModifier` and `AudioAnalyzer`
  abstract classes, allowing runtime activation/deactivation of
  effects and analyses.

Build & Infrastructure:
* Introduce `SoundFlow.Samples.EditingMixer` project, providing
  extensive examples that showcase the new editing module's
  functionality.
* Update stale workflow configuration in `.github/workflows/stale.yml`
  to exempt 'in-progress' and 'backlog-feature' issues from
  automatic closing.
* Adjust native library loading paths in `MiniAudio` backend for
  improved robustness in various deployment scenarios.
Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Welcome to SoundFlow repository! We appreciate you taking the time to contribute.

We're excited to review your pull request and look forward to collaborating with you. Please let us know if you have any questions or need any assistance.

Thank you for your contribution!

@LSXPrime LSXPrime mentioned this pull request Jun 2, 2025
@LSXPrime LSXPrime merged commit ec042c6 into master Jun 2, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant