summaryrefslogtreecommitdiff
path: root/libs/backends/dummy/dummy_audiobackend.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-09-24 01:11:38 +0200
committerRobin Gareus <robin@gareus.org>2014-09-24 01:26:51 +0200
commit3f9e916fe28084f3723baf93723a830e2b1b9353 (patch)
tree4770c7e8c41407d045fb829c2b57909b0110d442 /libs/backends/dummy/dummy_audiobackend.cc
parentb355f01aa56e29365b228bd3b151a62e89ed938f (diff)
DummyBackend: two more audio-signal generators (useful for waveform check)
Diffstat (limited to 'libs/backends/dummy/dummy_audiobackend.cc')
-rw-r--r--libs/backends/dummy/dummy_audiobackend.cc35
1 files changed, 34 insertions, 1 deletions
diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc
index 9ec8f8e00e..d7b6ed8048 100644
--- a/libs/backends/dummy/dummy_audiobackend.cc
+++ b/libs/backends/dummy/dummy_audiobackend.cc
@@ -85,6 +85,8 @@ DummyAudioBackend::enumerate_devices () const
if (_device_status.empty()) {
_device_status.push_back (DeviceStatus (_("Silence"), true));
_device_status.push_back (DeviceStatus (_("Sine Wave"), true));
+ _device_status.push_back (DeviceStatus (_("Square Wave"), true));
+ _device_status.push_back (DeviceStatus (_("Kroneker Delta"), true));
_device_status.push_back (DeviceStatus (_("Uniform White Noise"), true));
_device_status.push_back (DeviceStatus (_("Gaussian White Noise"), true));
_device_status.push_back (DeviceStatus (_("Pink Noise"), true));
@@ -676,6 +678,10 @@ DummyAudioBackend::register_system_ports()
gt = DummyAudioPort::PonyNoise;
} else if (_device == _("Sine Wave")) {
gt = DummyAudioPort::SineWave;
+ } else if (_device == _("Square Wave")) {
+ gt = DummyAudioPort::SquareWave;
+ } else if (_device == _("Kroneker Delta")) {
+ gt = DummyAudioPort::KronekerDelta;
} else {
gt = DummyAudioPort::Silence;
}
@@ -1383,12 +1389,18 @@ void DummyAudioPort::setup_generator (GeneratorType const g, float const sampler
case GaussianWhiteNoise:
case Silence:
break;
+ case KronekerDelta:
+ _tbl_length = (5 + randi() % (int)(samplerate / 20.f));
+ break;
+ case SquareWave:
+ _tbl_length = (5 + randi() % (int)(samplerate / 20.f)) & ~1;
+ break;
case SineWave:
{
_tbl_length = 5 + randi() % (int)(samplerate / 20.f);
_wavetable = (Sample*) malloc( _tbl_length * sizeof(Sample));
for (uint32_t i = 0 ; i < _tbl_length; ++i) {
- _wavetable[i] = .12589f * sinf(2.0 * M_PI * (float)i / (float)_tbl_length);
+ _wavetable[i] = .12589f * sinf(2.0 * M_PI * (float)i / (float)_tbl_length); // -18dBFS
}
}
break;
@@ -1430,6 +1442,27 @@ void DummyAudioPort::generate (const pframes_t n_samples)
case Silence:
memset (_buffer, 0, n_samples * sizeof (Sample));
break;
+ case SquareWave:
+ assert(_tbl_length > 0);
+ for (pframes_t i = 0 ; i < n_samples; ++i) {
+ if (_tbl_offset < _tbl_length * .5) {
+ _buffer[i] = .40709f; // -6dBFS
+ } else {
+ _buffer[i] = -.40709f;
+ }
+ _tbl_offset = (_tbl_offset + 1) % _tbl_length;
+ }
+ break;
+ case KronekerDelta:
+ assert(_tbl_length > 0);
+ memset (_buffer, 0, n_samples * sizeof (Sample));
+ for (pframes_t i = 0; i < n_samples; ++i) {
+ if (_tbl_offset == 0) {
+ _buffer[i] = 1.0;
+ }
+ _tbl_offset = (_tbl_offset + 1) % _tbl_length;
+ }
+ break;
case SineWave:
assert(_wavetable && _tbl_length > 0);
{