mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 17:40:27 +00:00
f23aea0c4b
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.
56 lines
1.2 KiB
C++
56 lines
1.2 KiB
C++
/*
|
|
* Copyright (c) 2021-2022, kleines Filmröllchen <filmroellchen@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/RefCounted.h>
|
|
#include <AK/SinglyLinkedList.h>
|
|
#include <AK/Types.h>
|
|
#include <LibDSP/Music.h>
|
|
|
|
namespace LibDSP {
|
|
|
|
// A clip is a self-contained snippet of notes or audio that can freely move inside and in between tracks.
|
|
class Clip : public RefCounted<Clip> {
|
|
public:
|
|
virtual ~Clip() = default;
|
|
|
|
u32 start() const { return m_start; }
|
|
u32 length() const { return m_length; }
|
|
u32 end() const { return m_start + m_length; }
|
|
|
|
protected:
|
|
Clip(u32 start, u32 length)
|
|
: m_start(start)
|
|
, m_length(length)
|
|
{
|
|
}
|
|
|
|
u32 m_start;
|
|
u32 m_length;
|
|
};
|
|
|
|
class AudioClip final : public Clip {
|
|
public:
|
|
Sample sample_at(u32 time);
|
|
|
|
Vector<Sample> const& samples() const { return m_samples; }
|
|
|
|
private:
|
|
Vector<Sample> m_samples;
|
|
};
|
|
|
|
class NoteClip final : public Clip {
|
|
public:
|
|
void set_note(RollNote note);
|
|
|
|
Array<SinglyLinkedList<RollNote>, note_frequencies.size()> const& notes() const { return m_notes; }
|
|
|
|
private:
|
|
Array<SinglyLinkedList<RollNote>, note_frequencies.size()> m_notes;
|
|
};
|
|
|
|
}
|