|
hydrogen 1.2.3
|
Namespaces | |
| namespace | Interpolation |
Data Structures | |
| class | ADSR |
| Attack Decay Sustain Release envelope. More... | |
| class | AlsaAudioDriver |
| class | AlsaMidiDriver |
| Alsa Midi Driver Based on Matthias Nagorni alsa sequencer example. More... | |
| struct | atomic_obj_cpt_t |
| an objects class map item type More... | |
| class | AudioEngine |
| The audio engine deals with two distinct #TransportPosition. More... | |
| class | AudioEngineLocking |
| AudioEngineLocking. More... | |
| class | AudioEngineTests |
| Defined in here since it requires access to methods and variables private to the #AudioEngine class. More... | |
| class | AudioOutput |
| Base abstract class for audio output classes. More... | |
| class | AutomationPath |
| class | AutomationPathSerializer |
| class | Base |
| Base class. More... | |
| class | ColorTheme |
| Colors for hydrogen. More... | |
| class | CoreActionController |
| class | CoreAudioDriver |
| class | CoreMidiDriver |
| class | DiskWriterDriver |
| Driver for export audio to disk. More... | |
| class | Drumkit |
| Drumkit info. More... | |
| class | DrumkitComponent |
| class | Effects |
| class | EnvelopePoint |
| A container for a sample, being able to apply modifications on it. More... | |
| class | Event |
| Basic building block for the communication between the core of Hydrogen and its GUI. More... | |
| class | EventQueue |
| Object handling the communication between the core of Hydrogen and its GUI. More... | |
| class | FakeDriver |
| Fake audio driver. More... | |
| class | Files |
| Files is in charge of writing and reading Patterns, Drumkits, Songs to the filesystem. More... | |
| class | Filesystem |
| Filesystem is a thin layer over QDir, QFile and QFileInfo. More... | |
| class | FontTheme |
| class | Future |
| Ensures compatibility with the song format introduced in Hydrogen v1.3.0. More... | |
| class | H2Exception |
| class | Hydrogen |
| Hydrogen Audio Engine. More... | |
| class | Instrument |
| Instrument class. More... | |
| class | InstrumentComponent |
| class | InstrumentLayer |
| InstrumentLayer is part of an instrument each layer has it's own : gain which is the ration between the input sample and the output signal, pitch which allows you to play the sample at a faster or lower frequency, start velocity and end velocity which allows you to chose between a layer or another within an instrument by changing the velocity of the played note. More... | |
| class | InstrumentList |
| InstrumentList is a collection of instruments used within a song, a drumkit, ... More... | |
| class | InterfaceTheme |
| class | JackAudioDriver |
| JACK (Jack Audio Connection Kit) server driver. More... | |
| class | JackMidiDriver |
| class | LadspaControlPort |
| class | LadspaFX |
| class | LadspaFXGroup |
| class | LadspaFXInfo |
| class | Legacy |
| Legacy is a container for legacy code which should be once removed. More... | |
| class | License |
| Wrapper class to help Hydrogen deal with the license information specified in a drumkit. More... | |
| class | LilyPond |
| A class to convert a Hydrogen song to LilyPond format. More... | |
| class | Logger |
| Class for writing logs to the console. More... | |
| class | MidiInput |
| MIDI input base class. More... | |
| class | MidiMessage |
| class | MidiOutput |
| MIDI input base class. More... | |
| class | Note |
| A note plays an associated instrument with a velocity left and right pan. More... | |
| class | NullDriver |
| struct | obj_cpt_t |
| class | Object |
| class | OssDriver |
| OSS Audio Driver. More... | |
| class | Pattern |
| Pattern class is a Note container. More... | |
| class | PatternList |
| PatternList is a collection of patterns. More... | |
| class | Playlist |
| Drumkit info. More... | |
| class | PortAudioDriver |
| class | PortMidiDriver |
| class | Preferences |
| Manager for User Preferences File (singleton) More... | |
| class | PulseAudioDriver |
| PulseAudio driver. More... | |
| class | Random |
| Container for functions generating random number. More... | |
| class | Sample |
| class | Sampler |
| Waveform based sampler. More... | |
| struct | SelectedLayerInfo |
| Auxiliary variables storing the rendering state of a H2Core::Note within the H2Core::Sampler. More... | |
| class | SilentMessageHandler |
| class | SMF |
| class | SMF0Writer |
| class | SMF1Writer |
| class | SMF1WriterMulti |
| class | SMF1WriterSingle |
| class | SMFBase |
| class | SMFBuffer |
| class | SMFCopyRightNoticeMetaEvent |
| class | SMFEvent |
| class | SMFHeader |
| class | SMFNoteOffEvent |
| class | SMFNoteOnEvent |
| class | SMFSetTempoMetaEvent |
| class | SMFTimeSignatureMetaEvent |
| class | SMFTrack |
| class | SMFTrackNameMetaEvent |
| class | SMFWriter |
| class | Song |
| Song class. More... | |
| class | SongEditorPanelBpmWidget |
| class | SongEditorPanelTagWidget |
| class | SoundLibraryDatabase |
| This class holds information about all installed soundlibrary items. More... | |
| class | SoundLibraryInfo |
| This class holds information about a soundlibrary. More... | |
| class | SoundLibraryPropertiesDialog |
| class | Synth |
| A simple synthetizer... More... | |
| class | Theme |
| class | Timeline |
| Timeline class storing and handling all TempoMarkers and Tags. More... | |
| class | Translations |
| Translations manager. More... | |
| class | TransportPosition |
| Object holding most of the information about the transport state of the AudioEngine. More... | |
| class | WindowProperties |
| class | XMLDoc |
| XMLDoc is a subclass of QDomDocument with read and write methods. More... | |
| class | XMLNode |
| XMLNode is a subclass of QDomNode with read and write values methods. More... | |
Typedefs | |
| typedef struct H2Core::atomic_obj_cpt_t | atomic_obj_cpt_t |
| an objects class map item type | |
| typedef int(* | audioProcessCallback) (uint32_t, void *) |
| typedef std::vector< SMFEvent * > | EventList |
| typedef std::map< const char *, const atomic_obj_cpt_t * > | object_internal_map_t |
| typedef std::map< const char *, obj_cpt_t > | object_map_t |
| the objects class map types | |
Functions | |
| static int | alsa_xrun_recovery (snd_pcm_t *handle, int err) |
| void * | alsaAudioDriver_processCaller (void *param) |
| void * | alsaMidiDriver_thread (void *param) |
| double | applyExponential (const float fExponent, const float fXOffset, const float fYOffset, const float fScale, float *__restrict__ pA, float *__restrict__ pB, float fQ, int nFrames, int nFramesTotal, float fStep, float *__restrict__ pfADSRVal) |
| Apply an exponential envelope to a stereo pair of sample fragments. | |
| static float | check_boundary (float fValue, float fMin, float fMax) |
| static double | compute_pitch_scale (const Sample::Rubberband &r) |
| static RubberBand::RubberBandStretcher::Options | compute_rubberband_options (const Sample::Rubberband &r) |
| static std::shared_ptr< Instrument > | createInstrument (int id, const QString &filepath, float volume) |
| timeval | currentTime2 () |
| Gets the current time. | |
| void * | diskWriterDriver_thread (void *param) |
| std::string | get_version () |
| Returns the current Hydrogen version string. | |
| void | init_gui_object_map () |
| static int | JackMidiProcessCallback (jack_nframes_t nframes, void *arg) |
| static void | JackMidiShutdown (void *arg) |
| void * | loggerThread_func (void *param) |
| static void | midiProc (const MIDIPacketList *pktlist, void *readProcRefCon, void *srcConnRefCon) |
| bool | operator!= (const AutomationPath &lhs, const AutomationPath &rhs) |
| QDebug | operator<< (QDebug d, Base *o) |
| QDebug | operator<< (QDebug d, std::shared_ptr< Base > o) |
| std::ostream & | operator<< (std::ostream &os, const Base &object) |
| std::ostream & | operator<< (std::ostream &os, const Base *object) |
| bool | operator== (const AutomationPath &lhs, const AutomationPath &rhs) |
| Compare two paths. | |
| void * | ossDriver_processCaller (void *param) |
| int | portAudioCallback (const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData) |
| void * | PortMidiDriver_thread (void *param) |
| bool | version_older_than (int major, int minor, int patch) |
| return true of the current version is older than the given values | |
Variables | |
| pthread_t | alsaAudioDriverThread |
| int | clientId |
| pthread_t | diskWriterDriverThread |
| constexpr unsigned int | DRUM_CHANNEL = 9 |
| const float | fAttackExponent = 0.038515241777294117 |
| const float | fAttackInit = 1.039835771720117430 |
| const float | fDecayExponent = 0.044796211247505179 |
| const float | fDecayInit = 1.046934808452493870 |
| const float | fDecayYOffset = -0.046934663351557632 |
| bool | isMidiDriverRunning = false |
| pthread_t | loggerThread |
| OssDriver * | m_pOssDriverInstance = NULL |
| pthread_t | midiDriverThread |
| unsigned | nNextFrames = 0 |
| constexpr unsigned int | NOTE_LENGTH = 12 |
| int | npfd |
| int | oss_driver_bufferSize = -1 |
| audioProcessCallback | ossDriver_audioProcessCallback |
| bool | ossDriver_running |
| pthread_t | ossDriverThread |
| int | outPortId |
| struct pollfd * | pfd |
| int | portId |
| pthread_t | PortMidiDriverThread |
| snd_seq_t * | seq_handle = nullptr |
| constexpr unsigned int | TPQN = 192 |
| static const std::string | version = H2CORE_VERSION |
| typedef struct H2Core::atomic_obj_cpt_t atomic_obj_cpt_t |
an objects class map item type
| typedef int(* audioProcessCallback)(uint32_t, void *) |
Definition at line 32 of file AudioOutput.h.
| typedef std::map<const char*, const atomic_obj_cpt_t*> object_internal_map_t |
| typedef std::map<const char*, obj_cpt_t> object_map_t |
| enum EventType |
Basic types of communication between the core part of Hydrogen and its GUI.
| Enumerator | |
|---|---|
| EVENT_NONE | Fallback event. |
| EVENT_STATE | |
| EVENT_PLAYING_PATTERNS_CHANGED | The list of currently played patterns (AudioEngine::getPlayingPatterns()) did change. In Song::Mode::Song this is triggered every time transport reaches a new column of the SongEditor grid, either by rolling or relocation. In Song::PatternMode::Selected it's triggered by selecting a different pattern and in Song::PatternMode::Stacked as soon as transport is looped to the beginning after a pattern got activated or deactivated. It is handled by EventListener::playingPatternsChangedEvent(). |
| EVENT_NEXT_PATTERNS_CHANGED | Used in Song::PatternMode::Stacked to indicate that a either AudioEngine::getNextPatterns() did change. It is handled by EventListener::nextPatternsChangedEvent(). |
| EVENT_PATTERN_MODIFIED | A pattern was added, deleted, or modified. |
| EVENT_SELECTED_PATTERN_CHANGED | Another pattern was selected via MIDI or the GUI without affecting the audio transport. While the selection in the former case already happens in the GUI, this event will be used to tell it the selection was successful and had been done. Handled by EventListener::selectedPatternChangedEvent(). |
| EVENT_SELECTED_INSTRUMENT_CHANGED | |
| EVENT_INSTRUMENT_PARAMETERS_CHANGED | Some parameters of an instrument have been changed. Numbers `>=0` indicate the number of the instrument that has been changed. `-1` indicates that multiple instruments were altered. |
| EVENT_MIDI_ACTIVITY | |
| EVENT_XRUN | |
| EVENT_NOTEON | |
| EVENT_ERROR | |
| EVENT_METRONOME | Triggered when a metronome note is passed to the H2Core::Sampler.
Handled by EventListener::metronomeEvent(). |
| EVENT_PROGRESS | |
| EVENT_JACK_SESSION | |
| EVENT_PLAYLIST_LOADSONG | |
| EVENT_UNDO_REDO | |
| EVENT_SONG_MODIFIED | |
| EVENT_TEMPO_CHANGED | |
| EVENT_UPDATE_PREFERENCES | Event triggering the loading or saving of the H2Core::Preferences whenever they were changed outside of the GUI, e.g. by session management or an OSC command. If the value of the event is
|
| EVENT_UPDATE_SONG | Event triggering HydrogenApp::updateSongEvent() whenever the Song was changed outside of the GUI, e.g. by session management or and OSC command. If the value of the event is |
| EVENT_QUIT | Triggering HydrogenApp::quitEvent() and enables a shutdown of the entire application via the command line. |
| EVENT_TIMELINE_ACTIVATION | Enables/disables the usage of the Timeline. |
| EVENT_TIMELINE_UPDATE | Tells the GUI some parts of the Timeline (tempo markers or tags) were modified. |
| EVENT_JACK_TRANSPORT_ACTIVATION | Toggles the button indicating the usage Jack transport. |
| EVENT_JACK_TIMEBASE_STATE_CHANGED | Toggles the button indicating the usage Jack timebase master and informs the GUI about a state change. |
| EVENT_SONG_MODE_ACTIVATION | |
| EVENT_STACKED_MODE_ACTIVATION | Song::PatternMode::Stacked (0) or Song::PatternMode::Selected (1) was activated. |
| EVENT_LOOP_MODE_ACTIVATION | Toggles the button indicating the usage loop mode. |
| EVENT_ACTION_MODE_CHANGE | Switches between select mode (0) and draw mode (1) in the *SongEditor. |
| EVENT_GRID_CELL_TOGGLED | |
| EVENT_COLUMN_CHANGED | Triggered when transport is moved into a different column (either during playback or when relocated by the user) |
| EVENT_DRUMKIT_LOADED | A the current drumkit was replaced by a new one. |
| EVENT_PATTERN_EDITOR_LOCKED | Locks the PatternEditor on the pattern currently played back. |
| EVENT_RELOCATION | Triggered in case there is a relocation of the transport position while trasnsport is not rolling. This can be either due to an user interaction or an incoming MIDI/OSC/JACK command or at the very end of the song in song mode. |
| EVENT_BBT_CHANGED | The coarse grained transport position in beats and bars did change. (Tick - the "T" in BBT - resolution is not implemented yet as no part of the application requires it). |
| EVENT_SONG_SIZE_CHANGED | |
| EVENT_DRIVER_CHANGED | |
| EVENT_PLAYBACK_TRACK_CHANGED | |
| EVENT_SOUND_LIBRARY_CHANGED | |
| EVENT_NEXT_SHOT | |
| EVENT_MIDI_MAP_CHANGED | |
Definition at line 40 of file EventQueue.h.
| enum SMFEventType |
| Enumerator | |
|---|---|
| NOTE_OFF | |
| NOTE_ON | |
Definition at line 54 of file SMFEvent.h.
| enum SMFMetaEventType |
| Enumerator | |
|---|---|
| SEQUENCE_NUMBER | |
| TEXT_EVENT | |
| COPYRIGHT_NOTICE | |
| TRACK_NAME | |
| INSTRUMENT_NAME | |
| LYRIC | |
| MARKER | |
| CUE_POINT | |
| END_OF_TRACK | |
| SET_TEMPO | |
| TIME_SIGNATURE | |
| KEY_SIGNATURE | |
Definition at line 61 of file SMFEvent.h.
|
static |
Definition at line 37 of file AlsaAudioDriver.cpp.
| void * alsaAudioDriver_processCaller | ( | void * | param | ) |
Definition at line 56 of file AlsaAudioDriver.cpp.
| void * alsaMidiDriver_thread | ( | void * | param | ) |
Definition at line 58 of file AlsaMidiDriver.cpp.
|
inline |
Apply an exponential envelope to a stereo pair of sample fragments.
The exponential is generalised by parameters:
These parameters allow suitable curves for attack, decay and release to be formed.
Because some parameters will take on trivial values depending on use, it's desirable to inline this to allow constant propagation to remove redundant operations.
The exponential loop isn't naturally vectorisable since there is a loop carried dependency for the exponential variable. However, we can manually unroll the loop and replace the single Q with multiple copies, which allows the SLP vectoriser to piece together a nice loop. On AArch64 we get loops of ~11 instructions for 4 frames.
Even if the code is not SLP-vectorised, the unrolled loop should still have better performance characteristics due to more flexible scheduling and reduced loop overhead.
|
inlinestatic |
|
static |
|
static |
|
static |
Definition at line 58 of file Sampler.cpp.
|
inline |
Gets the current time.
Definition at line 75 of file AudioEngine.cpp.
| void * diskWriterDriver_thread | ( | void * | param | ) |
Definition at line 54 of file DiskWriterDriver.cpp.
| std::string get_version | ( | ) |
Returns the current Hydrogen version string.
Definition at line 30 of file Version.cpp.
| void init_gui_object_map | ( | ) |
|
static |
Definition at line 243 of file JackMidiDriver.cpp.
|
static |
Definition at line 258 of file JackMidiDriver.cpp.
| void * loggerThread_func | ( | void * | param | ) |
| param | is a pointer to the logger instance |
Definition at line 44 of file Logger.cpp.
|
static |
Definition at line 43 of file CoreMidiDriver.cpp.
| bool operator!= | ( | const AutomationPath & | lhs, |
| const AutomationPath & | rhs ) |
Definition at line 102 of file AutomationPath.cpp.
|
inline |
| std::ostream & operator<< | ( | std::ostream & | os, |
| const Base & | object ) |
Definition at line 219 of file Object.cpp.
| std::ostream & operator<< | ( | std::ostream & | os, |
| const Base * | object ) |
Definition at line 223 of file Object.cpp.
| bool operator== | ( | const AutomationPath & | lhs, |
| const AutomationPath & | rhs ) |
Compare two paths.
Two paths are considered equal, if they have the same settings (min, max, default) and points in the same places.
Definition at line 93 of file AutomationPath.cpp.
| void * ossDriver_processCaller | ( | void * | param | ) |
Definition at line 43 of file OssDriver.cpp.
| int portAudioCallback | ( | const void * | inputBuffer, |
| void * | outputBuffer, | ||
| unsigned long | framesPerBuffer, | ||
| const PaStreamCallbackTimeInfo * | timeInfo, | ||
| PaStreamCallbackFlags | statusFlags, | ||
| void * | userData ) |
Definition at line 32 of file PortAudioDriver.cpp.
| void * PortMidiDriver_thread | ( | void * | param | ) |
Definition at line 49 of file PortMidiDriver.cpp.
| bool version_older_than | ( | int | major, |
| int | minor, | ||
| int | patch ) |
return true of the current version is older than the given values
Definition at line 34 of file Version.cpp.
| pthread_t alsaAudioDriverThread |
Definition at line 35 of file AlsaAudioDriver.cpp.
| int clientId |
Definition at line 54 of file AlsaMidiDriver.cpp.
| pthread_t diskWriterDriverThread |
Definition at line 52 of file DiskWriterDriver.cpp.
| bool isMidiDriverRunning = false |
Definition at line 48 of file AlsaMidiDriver.cpp.
| pthread_t loggerThread |
Definition at line 42 of file Logger.cpp.
| OssDriver* m_pOssDriverInstance = NULL |
Definition at line 39 of file OssDriver.cpp.
| pthread_t midiDriverThread |
Definition at line 46 of file AlsaMidiDriver.cpp.
| unsigned nNextFrames = 0 |
Definition at line 41 of file OssDriver.cpp.
| int npfd |
Definition at line 51 of file AlsaMidiDriver.cpp.
| int oss_driver_bufferSize = -1 |
Definition at line 38 of file OssDriver.cpp.
| audioProcessCallback ossDriver_audioProcessCallback |
Definition at line 35 of file OssDriver.cpp.
| bool ossDriver_running |
Definition at line 36 of file OssDriver.cpp.
| pthread_t ossDriverThread |
Definition at line 37 of file OssDriver.cpp.
| int outPortId |
Definition at line 55 of file AlsaMidiDriver.cpp.
| struct pollfd* pfd |
Definition at line 52 of file AlsaMidiDriver.cpp.
| int portId |
Definition at line 53 of file AlsaMidiDriver.cpp.
| pthread_t PortMidiDriverThread |
Definition at line 47 of file PortMidiDriver.cpp.
| snd_seq_t* seq_handle = nullptr |
Definition at line 50 of file AlsaMidiDriver.cpp.
|
static |
Definition at line 28 of file Version.cpp.