add dummy-backend speed-selection
This commit is contained in:
parent
7f00c70f9f
commit
4ef62a0d6d
@ -41,6 +41,8 @@ size_t DummyAudioBackend::_max_buffer_size = 8192;
|
|||||||
std::vector<std::string> DummyAudioBackend::_midi_options;
|
std::vector<std::string> DummyAudioBackend::_midi_options;
|
||||||
std::vector<AudioBackend::DeviceStatus> DummyAudioBackend::_device_status;
|
std::vector<AudioBackend::DeviceStatus> DummyAudioBackend::_device_status;
|
||||||
|
|
||||||
|
std::vector<DummyAudioBackend::DriverSpeed> DummyAudioBackend::_driver_speed;
|
||||||
|
|
||||||
#ifdef PLATFORM_WINDOWS
|
#ifdef PLATFORM_WINDOWS
|
||||||
static double _win_pc_rate = 0; // usec per tick
|
static double _win_pc_rate = 0; // usec per tick
|
||||||
#endif
|
#endif
|
||||||
@ -64,6 +66,7 @@ DummyAudioBackend::DummyAudioBackend (AudioEngine& e, AudioBackendInfo& info)
|
|||||||
, _running (false)
|
, _running (false)
|
||||||
, _freewheel (false)
|
, _freewheel (false)
|
||||||
, _freewheeling (false)
|
, _freewheeling (false)
|
||||||
|
, _speedup (1.0)
|
||||||
, _device ("")
|
, _device ("")
|
||||||
, _samplerate (48000)
|
, _samplerate (48000)
|
||||||
, _samples_per_period (1024)
|
, _samples_per_period (1024)
|
||||||
@ -182,6 +185,49 @@ DummyAudioBackend::can_change_buffer_size_when_running () const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<std::string>
|
||||||
|
DummyAudioBackend::enumerate_drivers () const
|
||||||
|
{
|
||||||
|
if (_driver_speed.empty()) {
|
||||||
|
_driver_speed.push_back (DriverSpeed (_("Half Speed"), 2.0f));
|
||||||
|
_driver_speed.push_back (DriverSpeed (_("Normal Speed"), 1.0f));
|
||||||
|
_driver_speed.push_back (DriverSpeed (_("Double Speed"), 0.5f));
|
||||||
|
_driver_speed.push_back (DriverSpeed (_("5x Speed"), 0.2f));
|
||||||
|
_driver_speed.push_back (DriverSpeed (_("10x Speed"), 0.1f));
|
||||||
|
_driver_speed.push_back (DriverSpeed (_("20x Speed"), 0.05f));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> speed_drivers;
|
||||||
|
for (std::vector<DriverSpeed>::const_iterator it = _driver_speed.begin () ; it != _driver_speed.end (); ++it) {
|
||||||
|
speed_drivers.push_back (it->name);
|
||||||
|
}
|
||||||
|
return speed_drivers;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string
|
||||||
|
DummyAudioBackend::driver_name () const
|
||||||
|
{
|
||||||
|
for (std::vector<DriverSpeed>::const_iterator it = _driver_speed.begin () ; it != _driver_speed.end (); ++it) {
|
||||||
|
if (_speedup == it->speedup) {
|
||||||
|
return it->name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert (0);
|
||||||
|
return _("Normal Speed");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
DummyAudioBackend::set_driver (const std::string& d)
|
||||||
|
{
|
||||||
|
for (std::vector<DriverSpeed>::const_iterator it = _driver_speed.begin () ; it != _driver_speed.end (); ++it) {
|
||||||
|
if (d == it->name) {
|
||||||
|
_speedup = it->speedup;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
DummyAudioBackend::set_device_name (const std::string& d)
|
DummyAudioBackend::set_device_name (const std::string& d)
|
||||||
{
|
{
|
||||||
@ -1254,7 +1300,8 @@ DummyAudioBackend::main_process_thread ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (elapsed_time < nominal_time) {
|
if (elapsed_time < nominal_time) {
|
||||||
Glib::usleep (nominal_time - elapsed_time);
|
const int64_t sleepy = _speedup * (nominal_time - elapsed_time);
|
||||||
|
Glib::usleep (std::max ((int64_t) 100, sleepy));
|
||||||
} else {
|
} else {
|
||||||
Glib::usleep (100); // don't hog cpu
|
Glib::usleep (100); // don't hog cpu
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,7 @@ namespace DummyMidiData {
|
|||||||
} MIDISequence;
|
} MIDISequence;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class DummyMidiEvent {
|
class DummyMidiEvent {
|
||||||
public:
|
public:
|
||||||
DummyMidiEvent (const pframes_t timestamp, const uint8_t* data, size_t size);
|
DummyMidiEvent (const pframes_t timestamp, const uint8_t* data, size_t size);
|
||||||
@ -226,6 +227,11 @@ class DummyAudioBackend : public AudioBackend {
|
|||||||
std::string name () const;
|
std::string name () const;
|
||||||
bool is_realtime () const;
|
bool is_realtime () const;
|
||||||
|
|
||||||
|
bool requires_driver_selection() const { return true; }
|
||||||
|
std::string driver_name () const;
|
||||||
|
std::vector<std::string> enumerate_drivers () const;
|
||||||
|
int set_driver (const std::string&);
|
||||||
|
|
||||||
std::vector<DeviceStatus> enumerate_devices () const;
|
std::vector<DeviceStatus> enumerate_devices () const;
|
||||||
std::vector<float> available_sample_rates (const std::string& device) const;
|
std::vector<float> available_sample_rates (const std::string& device) const;
|
||||||
std::vector<uint32_t> available_buffer_sizes (const std::string& device) const;
|
std::vector<uint32_t> available_buffer_sizes (const std::string& device) const;
|
||||||
@ -374,13 +380,21 @@ class DummyAudioBackend : public AudioBackend {
|
|||||||
MidiToAudio,
|
MidiToAudio,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct DriverSpeed {
|
||||||
|
std::string name;
|
||||||
|
float speedup;
|
||||||
|
DriverSpeed (const std::string& n, float s) : name (n), speedup (s) {}
|
||||||
|
};
|
||||||
|
|
||||||
std::string _instance_name;
|
std::string _instance_name;
|
||||||
static std::vector<std::string> _midi_options;
|
static std::vector<std::string> _midi_options;
|
||||||
static std::vector<AudioBackend::DeviceStatus> _device_status;
|
static std::vector<AudioBackend::DeviceStatus> _device_status;
|
||||||
|
static std::vector<DummyAudioBackend::DriverSpeed> _driver_speed;
|
||||||
|
|
||||||
bool _running;
|
bool _running;
|
||||||
bool _freewheel;
|
bool _freewheel;
|
||||||
bool _freewheeling;
|
bool _freewheeling;
|
||||||
|
float _speedup;
|
||||||
|
|
||||||
std::string _device;
|
std::string _device;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user