summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibDSP
AgeCommit message (Collapse)Author
2023-05-05Piano: Allow per-track controls (again)kleines Filmröllchen
This makes Piano exactly as usable as when I started the large refactor some years ago, which *sounds* like I'm a terrible person but now it (1) looks nicer and (2) has a flexible backend that can already deal with aribtrary kinds of processors on any track.
2023-03-06Everywhere: Remove NonnullRefPtr.h includesAndreas Kling
2023-03-06Everywhere: Stop using NonnullRefPtrVectorAndreas Kling
This class had slightly confusing semantics and the added weirdness doesn't seem worth it just so we can say "." instead of "->" when iterating over a vector of NNRPs. This patch replaces NonnullRefPtrVector<T> with Vector<NNRP<T>>.
2023-02-25LibDSP: Don't crash on out-of-bounds parameter valuekleines Filmröllchen
We can just clamp instead.
2023-02-25Everywhere: Use _{short_,}string to create Strings from literalsLinus Groh
2023-02-25LibDSP: Get rid of DeprecatedStringkleines Filmröllchen
This was a rather easy change, since only parameter names make use of strings in the first place. This also improves OOM resistance: If we can't create a parameter name, we will just set it to the empty string.
2023-02-15Piano: Fix insertion and deletion of notesFlorian Kaiser
On mouse move the pressed button is not present in the event argument which causes the corresponding code to never fire. Instead it now stores the original mouse down event and acts according to that on mouse move.
2023-02-08Everywhere: Use ReadonlySpan<T> instead of Span<T const>MacDue
2023-01-28AK: Remove `try_` prefix from FixedArray creation functionsLinus Groh
2023-01-27LibDSP: Remove declarations for non-existent methodsSam Atkins
2022-12-09Everywhere: Use C++ concepts instead of requires clausesMoustafa Raafat
2022-12-06AK+Everywhere: Rename String to DeprecatedStringLinus Groh
We have a new, improved string type coming up in AK (OOM aware, no null state), and while it's going to use UTF-8, the name UTF8String is a mouthful - so let's free up the String name by renaming the existing class. Making the old one have an annoying name will hopefully also help with quick adoption :^)
2022-12-03Everywhere: Run clang-formatLinus Groh
2022-11-01Everywhere: Mark dependencies of most targets as PRIVATETim Schumacher
Otherwise, we end up propagating those dependencies into targets that link against that library, which creates unnecessary link-time dependencies. Also included are changes to readd now missing dependencies to tools that actually need them.
2022-07-25LibDSP: Add a fixed mastering processor to Trackkleines Filmröllchen
This processor will not appear in the normal processor chain later on, but is used for final mixing of the track.
2022-07-25LibDSP: Remove Track volume getters and setterskleines Filmröllchen
2022-07-25LibDSP: Actually implement the Mastering processorkleines Filmröllchen
This can now handle mute, volume control and panning.
2022-07-22Piano+LibDSP: Move Track to LibDSPkleines Filmröllchen
This is a tangly commit and it fixes all the bugs that a plain move would have caused (i.e. we need to touch other logic which had wrong assumptions).
2022-07-19LibDSP: Rename library namespace to DSPkleines Filmröllchen
That's the standard naming convention, but I didn't follow it when originally creating LibDSP and nobody corrected me, so here I am one year later :^)
2022-05-26LibDSP: Fix keyboard glitch in Classickleines Filmröllchen
This is quite elusive.
2022-05-26LibDSP: Introduce the Keyboardkleines Filmröllchen
This is a class for handling user MIDI input, which is combined by the Track with roll note data if applicable.
2022-05-13LibDSP+Piano: Convert DSP APIs to accept entire sample rangeskleines Filmröllchen
This has mainly performance benefits, so that we only need to call into all processors once for every audio buffer segment. It requires adjusting quite some logic in most processors and in Track, as we have to consider a larger collection of notes and samples at each step. There's some cautionary TODOs in the currently unused LibDSP tracks because they don't do things properly yet.
2022-05-13LibDSP: Remove Transport's time counter reference APIkleines Filmröllchen
This is what the old Transport in Piano had, but as everyone just references Transport directly, there's no need for it anymore.
2022-05-13LibDSP: Make the note frequencies an AK::Array instead of a C arraykleines Filmröllchen
This was a leftover from the early days of Piano, and there's no reason to leave it that way especially if we want to use more complex collection APIs in the future.
2022-05-13LibDSP: Improve const correctnesskleines Filmröllchen
2022-05-13LibDSP: Refactor OOP non-functionallykleines Filmröllchen
* Don't inherit from Core::Object everywhere, that's overkill. Use RefCounted instead. * Change some constructor visibilites to facilitate the above. * default-implement all virtual destructors if possible. * Drive-by include hygiene.
2022-05-07LibAudio+LibDSP: Switch samples to 32-bit float instead of 64-bit floatkleines Filmröllchen
This has been overkill from the start, and it has been bugging me for a long time. With this change, we're probably a bit slower on most platforms but save huge amounts of space with all in-memory sample datastructures.
2022-05-03LibAudio+Userland: Remove Audio::LegacyBufferkleines Filmröllchen
The file is now renamed to Queue.h, and the Resampler APIs with LegacyBuffer are also removed. These changes look large because nobody actually needs Buffer.h (or Queue.h). It was mostly transitive dependencies on the massive list of includes in that header, which are now almost all gone. Instead, we include common things like Sample.h directly, which should give faster compile times as very few files actually need Queue.h.
2022-03-15AK+Everywhere: Add sincos and use it in some placesHendiadyoin1
Calculating sin and cos at once is quite a bit cheaper than calculating them individually. x87 has even a dedicated instruction for it: `fsincos`.
2022-03-14LibDSP: Add windowing functionsArne Elster
Windows are used in many DSP related applications. A prominent use case is spectral analysis, where windowing the signal before doing spectral analysis mitigates spectral leakage.
2022-03-14LibDSP: Generalize & improve FFTkleines Filmröllchen
Several related improvements to our Fast Fourier Transform implementation: - FFT now operates on spans, allowing it to use many more container types other than Vector. It's intended anyways that FFT transmutes the input data. - FFT is now constexpr, moving the implementation to the header and removing the cpp file. This means that if we have static collections of samples, we can transform them at compile time. - sample_data.data() weirdness is now gone.
2022-02-28LibDSP: Allow ProcessorRangeParameter to specify if it's a log valuekleines Filmröllchen
This doesn't affect the parameter's own behavior but is part of the parameter meta-data, just as the name. If a parameter is logarithmic, UI elements should represent it with an interface that scales logarithmically.
2022-02-26LibDSP: Add IMDCTArne Elster
This implements a generic IMDCT to be used by the MP3 decoder.
2022-01-14Everywhere: Use my new serenityos.org e-mail :^)kleines Filmröllchen
2021-12-05LibDSP: Cast unused smart-pointer return value to voidSam Atkins
2021-11-29LibDSP: Fix potential slicing issue in volume_from_envelopeBrian Gianforcaro
Use pointer or reference to avoid slicing from "PitchedEnvelope" to "Envelope". This was found by SonarCloud.
2021-11-24SoundPlayer+LibDSP: Move the FFT implementation to LibDSPkleines Filmröllchen
LibDSP can greatly benefit from this nice FFT implementation, so let's move it into the fitting library :^) Note that this now requires linking SoundPlayer against LibDSP. That's not an issue (LibDSP is rather small currently anyways), as we can probably make great use of it in the future anyways.
2021-11-22Piano: Move to LibDSP's Classic synthesizerkleines Filmröllchen
Almost all synthesizer code in Piano is removed in favor of the LibDSP reimplementation. This causes some issues that mainly have to do with the way Piano currently handles talking to LibDSP. Additionally, the sampler is gone for now and will be reintroduced with future work.
2021-11-22LibDSP: Create Classic synthkleines Filmröllchen
The Classic synthesizer is a replication of Piano's old synthesizer engine that is removed in the next commit.
2021-11-22LibDSP: Introduce ProcessorEnumParameterkleines Filmröllchen
2021-11-22LibDSP: Add Envelope abstractionkleines Filmröllchen
For the upcoming synthesizer, having an abstracted ADSR envelope concept is highly desirable. Additionally, Envelope is mostly constexpr and therefore super fast :^)
2021-11-17AK: Convert AK::Format formatting helpers to returning ErrorOr<void>Andreas Kling
This isn't a complete conversion to ErrorOr<void>, but a good chunk. The end goal here is to propagate buffer allocation failures to the caller, and allow the use of TRY() with formatting functions.
2021-11-15Audio: Fix code smells and issues found by static analysiskleines Filmröllchen
This fixes all current code smells, bugs and issues reported by SonarCloud static analysis. Other issues are almost exclusively false positives. This makes much code clearer, and some minor benefits in performance or bug evasion may be gained.
2021-11-11LibDSP: Optimize note processingkleines Filmröllchen
Previously, a collection of notes (Vector or Array) would be created and promptly deleted for every sample (at least 44 thousand times per second!). This was measured to be one of the most significant performance drawbacks as well as the most obvious performance improvement I could currently find here. Although it will not cause Piano to lag currently (at least on virtualized systems), I see an incoming issue once we get the capability to use more processors. Now, we use a HashMap correlating pitches to notes, and Track reuses the data structure in order to avoid reallocations. That is the reason for introducing the fast clear_with_capacity to HashMap.
2021-11-11LibDSP: Move to constexpr wherever possiblekleines Filmröllchen
2021-11-11LibDSP: Clean up ProcessorParameter headerkleines Filmröllchen
2021-11-08LibAudio: Rename Audio::Frame -> Audio::SampleDavid Isaksson
"Frame" is an MPEG term, which is not only unintuitive but also overloaded with different meaning by other codecs (e.g. FLAC). Therefore, use the standard term Sample for the central audio structure. The class is also extracted to its own file, because it's becoming quite large. Bundling these two changes means not distributing similar modifications (changing names and paths) across commits. Co-authored-by: kleines Filmröllchen <malu.bertsch@gmail.com>
2021-11-02LibDSP+Piano: Fix visibility of Object-derivative constructorsBen Wiederhake
Derivatives of Core::Object should be constructed through ClassName::construct(), to avoid handling ref-counted objects with refcount zero. Fixing the visibility means that misuses like this are more difficult. This commit is separate from the other Applications/Libraries changes because it required additional adaption of the code. Note that the old code did precisely what these changes try to prevent: Create and handle a ref-counted object with a refcount of zero.
2021-09-28LibDSP: Remove unused Effects::Delay::m_old_delay_size memberBrian Gianforcaro
SonarCloud flagged this as m_delay_buffer is technically uninitialized at the point at which the POD types are initialized in a constructor. I don't check to see if this was actually a real issue, as the member is ultimately unused. So lets just get rid of it.
2021-09-12LibDSP+LibAudio: Use logarithmic scaling in delay effectkleines Filmröllchen
With logarithmic volume scaling, the delay effect can sound more natural.