Commit 897b211
committed
feat: Implement FFmpeg codecs, MIDI, Metadata, and Synthesis engine (#97)
This major update introduces pluggable codecs, full MIDI support, a
synthesis engine, and robust metadata handling.
Codecs:
- Create `SoundFlow.Codecs.FFMpeg` wrapping native FFmpeg libraries.
- Implement `ICodecFactory` architecture in `AudioEngine` to support
dynamic codec registration.
- Add support for decoding/encoding MP3, AAC, OGG, FLAC, and ALAC,
as well as codecs like AC3, Opus, and PCM, and more using FFmpeg.
MIDI & Synthesis:
- Create `SoundFlow.Midi.PortMidi` for cross-platform MIDI I/O.
- Implement `MidiManager`, `MidiTrack`, `MidiSegment`, and a routing
graph for MIDI signals.
- Add `Synthesizer` component with polyphonic `Voice` architecture.
- Implement SoundFont 2 (.sf2) parsing and playback via `SoundFontBank`.
- Add MPE (MIDI Polyphonic Expression) support.
- Add `ArpeggiatorModifier`, `Sequencer`, and `MidiRecorder`.
Metadata:
- Implement `SoundMetadataReader` and `SoundMetadataWriter`.
- Add support for reading/writing ID3v2, Vorbis Comments, RIFF chunks,
and MP4/M4A atoms.
- Refactor `AssetDataProvider` and `StreamDataProvider` to auto-detect
formats via metadata headers.
Core & Utils:
- Add `ChannelMixer` with SIMD (AVX/SSE) acceleration.
- Add centralized `Log` utility.
- Add `[ControllableParameter]` attribute for real-time MIDI mapping
system (`MidiMappingManager`).
- Update `CompositionProjectManager` to persist MIDI tracks, mappings,
and tempo maps.
- Add error handling to miniaudio audio-thread callbacks and logging,
to prevent crashes.
Native:
- Restructure `Native` directory into isolated backend projects.
- Add CMake build scripts for `ffmpeg-codec` and `portmidi`.
- Add .targets files for correct native binary distribution in NuGet.1 parent f6fff53 commit 897b211
File tree
290 files changed
+24190
-2217
lines changed- .github
- workflows
- Codecs/SoundFlow.Codecs.FFMpeg
- Enums
- Exceptions
- Native
- runtimes
- android-arm64/native
- android-arm/native
- android-x64/native
- freebsd-arm64/native
- freebsd-x64/native
- ios-arm64/native/soundflow-ffmpeg.framework
- linux-arm64/native
- linux-arm/native
- linux-x64/native
- osx-arm64/native
- osx-x64/native
- win-arm64/native
- win-x64/native
- win-x86/native
- Extensions/SoundFlow.Extensions.WebRtc.Apm
- Components
- Modifiers
- runtimes
- ios-arm64/native
- osx-arm64/native
- osx-x64/native
- win-x64/native
- win-x86/native
- Midi/SoundFlow.Midi.PortMidi
- Devices
- Enums
- Exceptions
- runtimes
- freebsd-arm64/native
- freebsd-x64/native
- linux-arm64/native
- linux-arm/native
- linux-x64/native
- osx-arm64/native
- osx-x64/native
- win-arm64/native
- win-x64/native
- win-x86/native
- Native
- Submodules
- ffmpeg-codec
- miniaudio-backend
- Samples
- SoundFlow.Samples.EditingMixer
- SoundFlow.Samples.Midi.BasicSequencing
- SoundFlow.Samples.Midi.PropertyMapping
- SoundFlow.Samples.Midi.SynthesisModifiers
- SoundFlow.Samples.NoiseSuppression
- SoundFlow.Samples.SimplePlayer
- Src
- Abstracts
- Devices
- Backends/MiniAudio
- Devices
- Enums
- Structs
- runtimes
- android-arm64/native
- android-arm/native
- android-x64/native
- freebsd-arm64/native
- freebsd-x64/native
- iOS-arm64/native/miniaudio.framework
- linux-arm64/native
- linux-arm/native
- linux-x64/native
- osx-arm64/native
- osx-x64/native
- win-arm64/native
- win-x64/native
- win-x86/native
- Components
- Editing
- Mapping
- Persistence
- Enums
- Exceptions
- Experimental
- Interfaces
- Metadata
- Abstracts
- Midi
- Enums
- Models
- Readers
- Format
- Tags
- SoundFont
- Utilities
- Writers
- Format
- Tags
- Midi
- Abstracts
- Devices
- Enums
- Interfaces
- Modifier
- Routing
- Nodes
- Structs
- Modifiers
- Providers
- Structs
- Events
- Synthesis
- Banks
- Generators
- Instruments
- Interfaces
- Voices
- Utils
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
290 files changed
+24190
-2217
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
| 5 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
5 | | - | |
6 | | - | |
| 4 | + | |
7 | 5 | | |
8 | 6 | | |
9 | 7 | | |
| |||
141 | 139 | | |
142 | 140 | | |
143 | 141 | | |
144 | | - | |
145 | 142 | | |
146 | 143 | | |
147 | 144 | | |
| |||
157 | 154 | | |
158 | 155 | | |
159 | 156 | | |
160 | | - | |
161 | 157 | | |
162 | 158 | | |
163 | 159 | | |
| |||
168 | 164 | | |
169 | 165 | | |
170 | 166 | | |
171 | | - | |
172 | | - | |
173 | 167 | | |
174 | 168 | | |
175 | 169 | | |
176 | 170 | | |
177 | 171 | | |
178 | | - | |
179 | 172 | | |
180 | 173 | | |
181 | 174 | | |
| |||
185 | 178 | | |
186 | 179 | | |
187 | 180 | | |
188 | | - | |
189 | 181 | | |
190 | 182 | | |
191 | 183 | | |
192 | 184 | | |
193 | | - | |
| 185 | + | |
194 | 186 | | |
195 | 187 | | |
196 | 188 | | |
| |||
199 | 191 | | |
200 | 192 | | |
201 | 193 | | |
202 | | - | |
203 | 194 | | |
204 | 195 | | |
205 | 196 | | |
206 | | - | |
| 197 | + | |
207 | 198 | | |
208 | 199 | | |
209 | | - | |
210 | 200 | | |
211 | 201 | | |
212 | 202 | | |
213 | 203 | | |
214 | | - | |
| 204 | + | |
215 | 205 | | |
216 | 206 | | |
217 | 207 | | |
| |||
230 | 220 | | |
231 | 221 | | |
232 | 222 | | |
233 | | - | |
234 | 223 | | |
235 | 224 | | |
236 | 225 | | |
237 | 226 | | |
238 | 227 | | |
239 | | - | |
| 228 | + | |
240 | 229 | | |
241 | 230 | | |
242 | 231 | | |
243 | 232 | | |
244 | | - | |
245 | 233 | | |
246 | 234 | | |
247 | 235 | | |
248 | 236 | | |
249 | | - | |
| 237 | + | |
250 | 238 | | |
251 | 239 | | |
252 | 240 | | |
253 | | - | |
254 | 241 | | |
255 | 242 | | |
256 | 243 | | |
257 | 244 | | |
258 | 245 | | |
259 | 246 | | |
260 | 247 | | |
261 | | - | |
262 | 248 | | |
263 | 249 | | |
264 | 250 | | |
265 | 251 | | |
266 | 252 | | |
267 | 253 | | |
268 | 254 | | |
269 | | - | |
270 | 255 | | |
271 | 256 | | |
272 | | - | |
273 | 257 | | |
274 | 258 | | |
275 | 259 | | |
276 | 260 | | |
277 | | - | |
| 261 | + | |
278 | 262 | | |
279 | 263 | | |
280 | 264 | | |
281 | 265 | | |
282 | 266 | | |
283 | | - | |
284 | 267 | | |
285 | 268 | | |
286 | 269 | | |
287 | 270 | | |
288 | | - | |
| 271 | + | |
289 | 272 | | |
290 | 273 | | |
291 | 274 | | |
292 | 275 | | |
293 | 276 | | |
294 | | - | |
295 | 277 | | |
296 | 278 | | |
297 | 279 | | |
298 | 280 | | |
299 | | - | |
| 281 | + | |
300 | 282 | | |
301 | 283 | | |
302 | 284 | | |
303 | 285 | | |
304 | 286 | | |
305 | | - | |
306 | 287 | | |
307 | 288 | | |
308 | 289 | | |
309 | 290 | | |
310 | | - | |
| 291 | + | |
311 | 292 | | |
312 | 293 | | |
313 | 294 | | |
| |||
323 | 304 | | |
324 | 305 | | |
325 | 306 | | |
326 | | - | |
327 | 307 | | |
328 | 308 | | |
329 | 309 | | |
| |||
0 commit comments