1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 05:07:35 +00:00

Libraries: Add LibDSP

LibDSP is a library for digital signal processing, and is primarily
intended to support the future DAW version of Piano.
This commit is contained in:
kleines Filmröllchen 2021-08-27 16:18:11 +02:00 committed by Ali Mohammad Pur
parent 8f4b577405
commit a749b16674
14 changed files with 829 additions and 0 deletions

View file

@ -0,0 +1,45 @@
/*
* Copyright (c) 2021, kleines Filmröllchen <malu.bertsch@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include "Clip.h"
namespace LibDSP {
Sample AudioClip::sample_at(u32 time)
{
VERIFY(time < m_length);
return m_samples[time];
}
void NoteClip::set_note(RollNote note)
{
VERIFY(note.pitch >= 0 && note.pitch < note_count);
VERIFY(note.off_sample < m_length);
VERIFY(note.length() >= 2);
auto& notes = m_notes[note.pitch];
for (auto it = notes.begin(); !it.is_end();) {
auto iterated_note = *it;
if (iterated_note.on_sample > note.off_sample) {
notes.insert_before(it, note);
return;
}
if (iterated_note.on_sample <= note.on_sample && iterated_note.off_sample >= note.on_sample) {
notes.remove(it);
return;
}
if ((note.on_sample == 0 || iterated_note.on_sample >= note.on_sample - 1) && iterated_note.on_sample <= note.off_sample) {
notes.remove(it);
it = notes.begin();
continue;
}
++it;
}
notes.append(note);
}
}