summaryrefslogtreecommitdiff
path: root/libs/backends
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-04-29 16:08:00 +0200
committerRobin Gareus <robin@gareus.org>2016-04-29 16:10:09 +0200
commit69f99ee18494f443d6c4f28ad40f46a4753f07c7 (patch)
tree3b1c5ade693df067f74628b91d9e200359ca82bb /libs/backends
parentd574039dd476ed8c5fb0c4960b970000747ea2ed (diff)
I wanna be nasty, I wanna be cruel,..
Somme disastrous signal generators for QA.
Diffstat (limited to 'libs/backends')
-rw-r--r--libs/backends/dummy/dummy_audiobackend.cc51
-rw-r--r--libs/backends/dummy/dummy_audiobackend.h2
2 files changed, 53 insertions, 0 deletions
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,