From: Robin Gareus Date: Fri, 29 Apr 2016 14:08:00 +0000 (+0200) Subject: I wanna be nasty, I wanna be cruel,.. X-Git-Tag: 5.0-pre0~767 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=69f99ee18494f443d6c4f28ad40f46a4753f07c7;p=ardour.git I wanna be nasty, I wanna be cruel,.. Somme disastrous signal generators for QA. --- diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc index 50cc88b0f5..b1e67982dc 100644 --- a/libs/backends/dummy/dummy_audiobackend.cc +++ b/libs/backends/dummy/dummy_audiobackend.cc @@ -112,6 +112,8 @@ DummyAudioBackend::enumerate_devices () const { if (_device_status.empty()) { _device_status.push_back (DeviceStatus (_("Silence"), true)); + _device_status.push_back (DeviceStatus (_("DC -6dBFS (+.5)"), true)); + _device_status.push_back (DeviceStatus (_("Demolition"), true)); _device_status.push_back (DeviceStatus (_("Sine Wave"), true)); _device_status.push_back (DeviceStatus (_("Square Wave"), true)); _device_status.push_back (DeviceStatus (_("Impulses"), true)); @@ -845,6 +847,10 @@ DummyAudioBackend::register_system_ports() gt = DummyAudioPort::SquareSweepSwell; } else if (_device == _("Loopback")) { gt = DummyAudioPort::Loopback; + } else if (_device == _("Demolition")) { + gt = DummyAudioPort::Demolition; + } else if (_device == _("DC -6dBFS (+.5)")) { + gt = DummyAudioPort::DC05; } else { gt = DummyAudioPort::Silence; } @@ -1659,8 +1665,12 @@ void DummyAudioPort::setup_generator (GeneratorType const g, float const sampler case PonyNoise: case UniformWhiteNoise: case GaussianWhiteNoise: + case DC05: case Silence: break; + case Demolition: + _gen_period = 3 * samplerate; + break; case KronekerDelta: _gen_period = (5 + randi() % (int)(samplerate / 20.f)); break; @@ -1781,6 +1791,23 @@ float DummyAudioPort::grandf () return r * x1; } +/* inspired by jack-demolition by Steve Harris */ +static const float _demolition[] = { + 0.0f, /* special case - 0dbFS white noise */ + 0.0f, /* zero, may cause denomrals following a signal */ + 0.73 / 1e45, /* very small - should be denormal when floated */ + 3.7f, /* arbitrary number > 0dBFS */ + -4.3f, /* arbitrary negative number > 0dBFS */ + 4294967395.0f, /* 2^16 + 100 */ + -4294967395.0f, + HUGE, /* Big, non-inf number */ + 1.f/0.f, /* +inf */ + -1.f/0.f, /* -inf */ + -0.f/0.f, /* -nan */ + 0.f/0.f, /* nan */ + 0.0f, /* some silence to check for recovery */ +}; + void DummyAudioPort::generate (const pframes_t n_samples) { Glib::Threads::Mutex::Lock lm (generator_lock); @@ -1792,6 +1819,30 @@ void DummyAudioPort::generate (const pframes_t n_samples) case Silence: memset (_buffer, 0, n_samples * sizeof (Sample)); break; + case DC05: + for (pframes_t i = 0 ; i < n_samples; ++i) { + _buffer[i] = 0.5f; + } + break; + case Demolition: + switch (_gen_count2) { + case 0: // noise + for (pframes_t i = 0 ; i < n_samples; ++i) { + _buffer[i] = randf(); + } + break; + default: + for (pframes_t i = 0 ; i < n_samples; ++i) { + _buffer[i] = _demolition [_gen_count2]; + } + break; + } + _gen_offset += n_samples; + if (_gen_offset > _gen_period) { + _gen_offset = 0; + _gen_count2 = (_gen_count2 + 1) % (sizeof (_demolition) / sizeof (float)); + } + break; case SquareWave: assert(_gen_period > 0); for (pframes_t i = 0 ; i < n_samples; ++i) { diff --git a/libs/backends/dummy/dummy_audiobackend.h b/libs/backends/dummy/dummy_audiobackend.h index 0985bdace9..3534f7facc 100644 --- a/libs/backends/dummy/dummy_audiobackend.h +++ b/libs/backends/dummy/dummy_audiobackend.h @@ -152,6 +152,8 @@ class DummyAudioPort : public DummyPort { enum GeneratorType { Silence, + DC05, + Demolition, UniformWhiteNoise, GaussianWhiteNoise, PinkNoise,