diff --git a/src/media/audio/alsa/alsalayer.cpp b/src/media/audio/alsa/alsalayer.cpp index e0069c659b7e6320164707e17bef6bc84b367bc9..f6ce71423f724157ef42479b3a2d84092d25b9f5 100644 --- a/src/media/audio/alsa/alsalayer.cpp +++ b/src/media/audio/alsa/alsalayer.cpp @@ -27,8 +27,8 @@ #include "client/ring_signal.h" #include "audio/ringbufferpool.h" #include "audio/ringbuffer.h" -#include "audio/resampler.h" #include "audio/audioloop.h" +#include "libav_utils.h" #include <thread> #include <atomic> @@ -697,7 +697,8 @@ void AlsaLayer::capture() const int framesPerBufferAlsa = 2048; toGetFrames = std::min(framesPerBufferAlsa, toGetFrames); if (auto r = read(toGetFrames)) { - //captureBuff_.applyGain(isCaptureMuted_ ? 0.0 : captureGain_); + if (isCaptureMuted_) + libav_utils::fillWithSilence(r->pointer()); //dcblocker_.process(captureBuff_); mainRingBuffer_->put(std::move(r)); } else diff --git a/src/media/audio/coreaudio/ios/corelayer.cpp b/src/media/audio/coreaudio/ios/corelayer.cpp index f0b1e0ace59c50bcbcc5249aa5a18a90fe787966..42a2e0ae936b325b8f07098864c99130af2517ba 100644 --- a/src/media/audio/coreaudio/ios/corelayer.cpp +++ b/src/media/audio/coreaudio/ios/corelayer.cpp @@ -22,9 +22,9 @@ #include "corelayer.h" #include "manager.h" #include "noncopyable.h" -#include "audio/resampler.h" #include "audio/ringbufferpool.h" #include "audio/ringbuffer.h" +#include "libav_utils.h" #include <cmath> #include <vector> @@ -426,9 +426,13 @@ CoreLayer::read(AudioUnitRenderActionFlags* ioActionFlags, auto format = audioInputFormat_; format.sampleFormat = AV_SAMPLE_FMT_FLTP; auto inBuff = std::make_unique<AudioFrame>(audioInputFormat_, inNumberFrames); - auto& in = *inBuff->pointer(); - for (unsigned i = 0; i < inChannelsPerFrame_; ++i) - std::copy_n((Float32*)captureBuff_->mBuffers[i].mData, inNumberFrames, (Float32*)in.extended_data[i]); + if (isCaptureMuted_) { + libav_utils::fillWithSilence(inBuff->pointer()); + } else { + auto& in = *inBuff->pointer(); + for (unsigned i = 0; i < inChannelsPerFrame_; ++i) + std::copy_n((Float32*)captureBuff_->mBuffers[i].mData, inNumberFrames, (Float32*)in.extended_data[i]); + } mainRingBuffer_->put(std::move(inBuff)); } diff --git a/src/media/audio/pulseaudio/pulselayer.cpp b/src/media/audio/pulseaudio/pulselayer.cpp index f248818a523a7250d44af07e72a6862d28da3882..cfeba36b8d83df9f443a58b8c239cb492cd5f799 100644 --- a/src/media/audio/pulseaudio/pulselayer.cpp +++ b/src/media/audio/pulseaudio/pulselayer.cpp @@ -24,10 +24,10 @@ #include "compiler_intrinsics.h" #include "audiostream.h" #include "pulselayer.h" -#include "audio/resampler.h" #include "audio/dcblocker.h" #include "audio/ringbufferpool.h" #include "audio/ringbuffer.h" +#include "libav_utils.h" #include "logger.h" #include "manager.h" @@ -80,10 +80,6 @@ PulseLayer::PulseLayer(AudioPreference &pref) , preference_(pref) , mainRingBuffer_(Manager::instance().getRingBufferPool().getRingBuffer(RingBufferPool::DEFAULT_ID)) { - setCaptureGain(pref.getVolumemic()); - setPlaybackGain(pref.getVolumespkr()); - muteCapture(pref.getCaptureMuted()); - if (!mainloop_) throw std::runtime_error("Couldn't create pulseaudio mainloop"); @@ -465,7 +461,10 @@ void PulseLayer::readFromMic() const size_t samples = bytes / sample_size; auto out = std::make_unique<AudioFrame>(record_->format(), samples); - std::memcpy(out->pointer()->data[0], data, bytes); + if (isCaptureMuted_) + libav_utils::fillWithSilence(out->pointer()); + else + std::memcpy(out->pointer()->data[0], data, bytes); if (pa_stream_drop(record_->stream()) < 0) RING_ERR("Capture stream drop failed: %s" , pa_strerror(pa_context_errno(context_)));