mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 19:57:44 +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:
parent
8f4b577405
commit
a749b16674
14 changed files with 829 additions and 0 deletions
73
Userland/Libraries/LibDSP/Track.h
Normal file
73
Userland/Libraries/LibDSP/Track.h
Normal file
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* Copyright (c) 2021, kleines Filmröllchen <malu.bertsch@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Clip.h"
|
||||
#include "Music.h"
|
||||
#include "Processor.h"
|
||||
#include <LibCore/Object.h>
|
||||
|
||||
namespace LibDSP {
|
||||
|
||||
// A track is also known as a channel and serves as a container for the audio pipeline: clips -> processors -> mixing & output
|
||||
class Track : public Core::Object {
|
||||
C_OBJECT_ABSTRACT(Track)
|
||||
public:
|
||||
Track(NonnullRefPtr<Transport> transport)
|
||||
: m_transport(move(transport))
|
||||
{
|
||||
}
|
||||
virtual ~Track() override = default;
|
||||
|
||||
virtual bool check_processor_chain_valid() const = 0;
|
||||
bool add_processor(NonnullRefPtr<Processor> new_processor);
|
||||
|
||||
// Creates the current signal of the track by processing current note or audio data through the processing chain
|
||||
Sample current_signal();
|
||||
|
||||
NonnullRefPtrVector<Processor> const& processor_chain() const { return m_processor_chain; }
|
||||
NonnullRefPtr<Transport> const transport() const { return m_transport; }
|
||||
|
||||
protected:
|
||||
bool check_processor_chain_valid_with_initial_type(SignalType initial_type) const;
|
||||
|
||||
// Subclasses override to provide the base signal to the processing chain
|
||||
virtual Signal current_clips_signal() = 0;
|
||||
|
||||
NonnullRefPtrVector<Processor> m_processor_chain;
|
||||
NonnullRefPtr<Transport> const m_transport;
|
||||
};
|
||||
|
||||
class NoteTrack final : public Track {
|
||||
public:
|
||||
virtual ~NoteTrack() override = default;
|
||||
|
||||
bool check_processor_chain_valid() const override;
|
||||
NonnullRefPtrVector<NoteClip> const& clips() const { return m_clips; }
|
||||
|
||||
protected:
|
||||
virtual Signal current_clips_signal() override;
|
||||
|
||||
private:
|
||||
NonnullRefPtrVector<NoteClip> m_clips;
|
||||
};
|
||||
|
||||
class AudioTrack final : public Track {
|
||||
public:
|
||||
virtual ~AudioTrack() override = default;
|
||||
|
||||
bool check_processor_chain_valid() const override;
|
||||
NonnullRefPtrVector<AudioClip> const& clips() const { return m_clips; }
|
||||
|
||||
protected:
|
||||
virtual Signal current_clips_signal() override;
|
||||
|
||||
private:
|
||||
NonnullRefPtrVector<AudioClip> m_clips;
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue