Mercurial > hg > svcore
view plugin/plugins/SamplePlayer.h @ 29:8460b3bf8f04
* Implement play mute, level and pan controls and a layer visibility control
* Handle swapping the buffers in AudioCallbackPlaySource more gracefully, so
that in many cases it can be done inaudibly. Still gets it wrong when
playing in a noncontiguous selection.
* Fix to SV file save for non-2d sparse models
* Fixes to LED button drawing and AudioDial mouse functionality
* Add progress bar for Ogg file import
* Reshuffle PropertyContainer and its subclasses so it can be a QObject
* Add layer dormancy (invisible layer permitted to free its cache space)
* Optimisations to SpectrogramLayer, removing locks when reading/writing
individual pixels in the cache (should be unnecessary there) -- there's
still an issue here as we need a lock when reading from the model in
case the model is replaced, and we don't currently have one
* Several munlock() calls to make it harder to exhaust real memory if
running in an RT mode with mlockall() active
author | Chris Cannam |
---|---|
date | Fri, 17 Feb 2006 18:04:26 +0000 |
parents | d86891498eef |
children | 39ae3dee27b9 |
line wrap: on
line source
/* -*- c-basic-offset: 4 -*- vi:set ts=8 sts=4 sw=4: */ /* A waveform viewer and audio annotation editor. Chris Cannam, Queen Mary University of London, 2005-2006 This is experimental software. Not for distribution. */ #ifndef _SAMPLE_PLAYER_H_ #define _SAMPLE_PLAYER_H_ #define DSSI_API_LEVEL 2 #include <ladspa.h> #include <dssi.h> #include <seq_event.h> #include <QMutex> #include <QString> #include <vector> class SamplePlayer { public: static const DSSI_Descriptor *getDescriptor(unsigned long index); private: SamplePlayer(int sampleRate); ~SamplePlayer(); enum { OutputPort = 0, RetunePort = 1, BasePitchPort = 2, SustainPort = 3, ReleasePort = 4, PortCount = 5 }; enum { Polyphony = 128 }; static const char *const portNames[PortCount]; static const LADSPA_PortDescriptor ports[PortCount]; static const LADSPA_PortRangeHint hints[PortCount]; static const LADSPA_Properties properties; static const LADSPA_Descriptor ladspaDescriptor; static const DSSI_Descriptor dssiDescriptor; static const DSSI_Host_Descriptor *hostDescriptor; static LADSPA_Handle instantiate(const LADSPA_Descriptor *, unsigned long); static void connectPort(LADSPA_Handle, unsigned long, LADSPA_Data *); static void activate(LADSPA_Handle); static void run(LADSPA_Handle, unsigned long); static void deactivate(LADSPA_Handle); static void cleanup(LADSPA_Handle); static const DSSI_Program_Descriptor *getProgram(LADSPA_Handle, unsigned long); static void selectProgram(LADSPA_Handle, unsigned long, unsigned long); static int getMidiController(LADSPA_Handle, unsigned long); static void runSynth(LADSPA_Handle, unsigned long, snd_seq_event_t *, unsigned long); static void receiveHostDescriptor(const DSSI_Host_Descriptor *descriptor); static void workThreadCallback(LADSPA_Handle); void searchSamples(); void loadSampleData(QString path); void runImpl(unsigned long, snd_seq_event_t *, unsigned long); void addSample(int, unsigned long, unsigned long); float *m_output; float *m_retune; float *m_basePitch; float *m_sustain; float *m_release; float *m_sampleData; size_t m_sampleCount; int m_sampleRate; long m_ons[Polyphony]; long m_offs[Polyphony]; int m_velocities[Polyphony]; long m_sampleNo; QString m_program; std::vector<std::pair<QString, QString> > m_samples; // program name, path bool m_sampleSearchComplete; int m_pendingProgramChange; QMutex m_mutex; }; #endif