]> git.sesse.net Git - bmusb/commitdiff
Make FakeCapture output 8-channel sound, to match the real cards.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 11 Sep 2016 16:48:32 +0000 (18:48 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 11 Sep 2016 16:48:56 +0000 (18:48 +0200)
bmusb/fake_capture.h
fake_capture.cpp

index 17982ea50e6d0ff3071f6d01f9240ede4e9ed993..ad432f7d96d5e4a5bb77919dc01b903034fe9869 100644 (file)
@@ -79,7 +79,7 @@ public:
 
 private:
        void producer_thread_func();
-       void make_tone(int32_t *out, unsigned num_stereo_samples);
+       void make_tone(int32_t *out, unsigned num_stereo_samples, unsigned num_channels);
 
        unsigned width, height, fps, audio_sample_frequency;
        uint8_t y, cb, cr;
index 961700eb54158a2b9245059d89f384620dac1f32..5f53e95079db2553f39d6472afaf59c3e81980b0 100644 (file)
@@ -259,19 +259,19 @@ void FakeCapture::producer_thread_func()
 
                AudioFormat audio_format;
                audio_format.bits_per_sample = 32;
-               audio_format.num_channels = 2;
+               audio_format.num_channels = 8;
 
                FrameAllocator::Frame audio_frame = audio_frame_allocator->alloc_frame();
                if (audio_frame.data != nullptr) {
                        const unsigned num_stereo_samples = audio_sample_frequency / fps;
-                       assert(audio_frame.size >= 2 * sizeof(int32_t) * num_stereo_samples);
-                       audio_frame.len = 2 * sizeof(int32_t) * num_stereo_samples;
+                       assert(audio_frame.size >= audio_format.num_channels * sizeof(int32_t) * num_stereo_samples);
+                       audio_frame.len = audio_format.num_channels * sizeof(int32_t) * num_stereo_samples;
 
                        if (audio_sin == 0.0f) {
                                // Silence.
                                memset(audio_frame.data, 0, audio_frame.len);
                        } else {
-                               make_tone((int32_t *)audio_frame.data, num_stereo_samples);
+                               make_tone((int32_t *)audio_frame.data, num_stereo_samples, audio_format.num_channels);
                        }
                }
 
@@ -284,14 +284,15 @@ void FakeCapture::producer_thread_func()
        }
 }
 
-void FakeCapture::make_tone(int32_t *out, unsigned num_stereo_samples)
+void FakeCapture::make_tone(int32_t *out, unsigned num_stereo_samples, unsigned num_channels)
 {
        int32_t *ptr = out;
        float r = audio_real, i = audio_imag;
        for (unsigned sample_num = 0; sample_num < num_stereo_samples; ++sample_num) {
                int32_t s = lrintf(r);
-               *ptr++ = s;
-               *ptr++ = s;
+               for (unsigned i = 0; i < num_channels; ++i) {
+                       *ptr++ = s;
+               }
 
                // Rotate the phaser by one sample.
                float new_r = r * audio_cos - i * audio_sin;