ladybird/Libraries/LibMedia
Zaggy1024 28f670f09f LibMedia: Implement audio time stretching with WSOLA
The algorithm is ported over from Chromium's, which produces very good
results for speech, while being not objectionable for music, especially
in the background.

Other algorithms were tested.

Phase vocoders:
- Bungee
- Signalsmith Stretch
- pvdoneright
All three of these exhibited the usual phase shifting artifacts,
causing speech to sound slightly shifted into the high end. Speech is
the main thing we want to optimize for, so these aren't ideal.

Sonic (TD-PSOLA) performs better than WSOLA for speech, especially at
rates higher than 2x, but makes background sounds/music garbled and
unpleasant. It is still worth considering for speech clarity, and could
be added as an optional feature.
2026-06-06 19:58:17 -05:00
..
Audio LibMedia: Implement audio time stretching with WSOLA 2026-06-06 19:58:17 -05:00
Codecs LibMedia: Implement buffered range scanning for Ogg 2026-05-28 10:30:20 -05:00
Color LibMedia: Remove reserved values from CICP enums 2026-04-18 01:25:00 -05:00
Containers LibMedia: Implement buffered range scanning for Ogg 2026-05-28 10:30:20 -05:00
FFmpeg LibMedia: Rename timing getters in AudioBlock 2026-06-06 19:58:17 -05:00
PlaybackStates LibMedia: Handle outputting silence after EOS in the audio sink 2026-06-06 19:58:17 -05:00
Processors LibMedia: Implement audio time stretching with WSOLA 2026-06-06 19:58:17 -05:00
Producers LibWeb+LibMedia: Wire up setting the pipeline's playback rate 2026-06-06 19:58:17 -05:00
Sinks LibMedia: Pause the audio sink when its rate is set to 0 2026-06-06 19:58:17 -05:00
AudioBlock.h LibMedia: Move AudioBlock's timing info into a separate class 2026-06-06 19:58:17 -05:00
AudioBlockTiming.h LibMedia: Remap audio time based on block durations in media time 2026-06-06 19:58:17 -05:00
AudioBlockTimingRing.h LibMedia: Handle outputting silence after EOS in the audio sink 2026-06-06 19:58:17 -05:00
AudioDecoder.h LibMedia: Allow signalling of EOF to decoders 2025-11-05 18:40:02 +01:00
CMakeLists.txt LibMedia: Implement audio time stretching with WSOLA 2026-06-06 19:58:17 -05:00
CodecID.h LibMedia: Add WAV PCM codecs to CodecID 2025-12-15 18:03:03 -06:00
CodedAudioFrameData.h LibMedia: Support coded audio frames in our demuxers 2025-10-27 17:28:49 -07:00
CodedFrame.h LibMedia: Store a duration in CodedFrame 2025-12-10 16:02:40 -06:00
CodedVideoFrameData.h LibMedia: Move CICP values from CodedFrame to Track 2025-11-05 18:40:02 +01:00
DecoderError.h LibMedia: Add a formatter for DecoderErrorCategory 2026-02-24 16:55:40 -06:00
Demuxer.h LibMedia+LibWeb: Speculatively find keyframes near fast seek targets 2026-05-13 02:05:35 -05:00
Forward.h LibMedia: Implement audio time stretching with WSOLA 2026-06-06 19:58:17 -05:00
FrameFlags.h LibMedia: Move the bitwise operators for FrameFlags to Media:: 2026-05-28 10:30:20 -05:00
GenericTimeProvider.cpp LibWeb+LibMedia: Wire up setting the pipeline's playback rate 2026-06-06 19:58:17 -05:00
GenericTimeProvider.h LibWeb+LibMedia: Wire up setting the pipeline's playback rate 2026-06-06 19:58:17 -05:00
IncrementallyPopulatedStream.cpp LibMedia: Actually adjust incremental stream's request positions 2026-05-28 10:30:20 -05:00
IncrementallyPopulatedStream.h LibMedia: Implement buffered ranges for MP3 2026-05-28 10:30:20 -05:00
MediaPipelineNode.h LibMedia: Remove WrapperTimeProvider in favor of diamond inheritance 2026-05-13 02:05:35 -05:00
MediaStream.h LibMedia: Implement buffered ranges for MP3 2026-05-28 10:30:20 -05:00
MediaTimeProvider.h LibWeb+LibMedia: Wire up setting the pipeline's playback rate 2026-06-06 19:58:17 -05:00
PipelineStatus.h LibMedia: Handle outputting silence after EOS in the audio sink 2026-06-06 19:58:17 -05:00
PlaybackManager.cpp LibMedia: Implement audio time stretching with WSOLA 2026-06-06 19:58:17 -05:00
PlaybackManager.h LibMedia: Implement audio time stretching with WSOLA 2026-06-06 19:58:17 -05:00
ReadonlyBytesCursor.h LibMedia: Allow MediaStreamCursor to never block on missing data 2026-05-28 10:30:20 -05:00
SeekMode.h LibMedia: Implement media seeking 2025-10-27 17:28:49 -07:00
Subsampling.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
TimeRanges.cpp LibMedia: Add a TimeRanges class to be used for buffered attributes 2026-04-01 02:54:22 -05:00
TimeRanges.h LibMedia: Add a TimeRanges class to be used for buffered attributes 2026-04-01 02:54:22 -05:00
Track.h LibMedia+LibWeb: Align Media::Track more to the web spec 2026-04-01 02:54:22 -05:00
TrackType.h LibMedia: Set Matroska "complex" tracks' types based on the codec 2025-11-21 16:51:58 -06:00
VideoDecoder.h LibMedia: Make video frames ref-counted 2026-05-05 14:39:17 -05:00
VideoFrame.cpp LibGfx+LibMedia: Add IPC serialization for VideoFrame 2026-05-21 11:45:06 +01:00
VideoFrame.h LibGfx+LibMedia: Add IPC serialization for VideoFrame 2026-05-21 11:45:06 +01:00