diff options
author | Robin Gareus <robin@gareus.org> | 2014-09-24 01:11:38 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-09-24 01:26:51 +0200 |
commit | 3f9e916fe28084f3723baf93723a830e2b1b9353 (patch) | |
tree | 4770c7e8c41407d045fb829c2b57909b0110d442 /libs/backends/dummy | |
parent | b355f01aa56e29365b228bd3b151a62e89ed938f (diff) |
DummyBackend: two more audio-signal generators (useful for waveform check)
Diffstat (limited to 'libs/backends/dummy')
-rw-r--r-- | libs/backends/dummy/dummy_audiobackend.cc | 35 | ||||
-rw-r--r-- | libs/backends/dummy/dummy_audiobackend.h | 2 |
2 files changed, 36 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); { diff --git a/libs/backends/dummy/dummy_audiobackend.h b/libs/backends/dummy/dummy_audiobackend.h index 04a9cf4348..8a7e346bc9 100644 --- a/libs/backends/dummy/dummy_audiobackend.h +++ b/libs/backends/dummy/dummy_audiobackend.h @@ -151,6 +151,8 @@ class DummyAudioPort : public DummyPort { PinkNoise, PonyNoise, SineWave, + SquareWave, + KronekerDelta, }; void setup_generator (GeneratorType const, float const); |