new cspot/bell

This commit is contained in:
philippe44
2023-05-06 23:50:26 +02:00
parent e0e7e718ba
commit 8bad480112
163 changed files with 6611 additions and 6739 deletions

View File

@@ -1,39 +1,44 @@
#include "AudioMixer.h"
#include <mutex> // for scoped_lock
using namespace bell;
AudioMixer::AudioMixer() {
}
AudioMixer::AudioMixer() {}
std::unique_ptr<StreamInfo> AudioMixer::process(std::unique_ptr<StreamInfo> info) {
std::scoped_lock lock(this->accessMutex);
if (info->numChannels != from) {
throw std::runtime_error("AudioMixer: Input channel count does not match configuration");
}
info->numChannels = to;
std::unique_ptr<StreamInfo> AudioMixer::process(
std::unique_ptr<StreamInfo> info) {
std::scoped_lock lock(this->accessMutex);
if (info->numChannels != from) {
throw std::runtime_error(
"AudioMixer: Input channel count does not match configuration");
}
info->numChannels = to;
for (auto &singleConf : mixerConfig) {
if (singleConf.source.size() == 1) {
if (singleConf.source[0] == singleConf.destination) {
continue;
}
// Copy channel
for (int i = 0; i < info->numSamples; i++) {
info->data[singleConf.destination][i] = info->data[singleConf.source[0]][i];
}
} else {
// Mix channels
float sample = 0.0f;
for (int i = 0; i < info->numSamples; i++) {
sample = 0.0;
for (auto &source : singleConf.source) {
sample += info->data[source][i];
}
info->data[singleConf.destination][i] = sample / (float) singleConf.source.size();
}
for (auto& singleConf : mixerConfig) {
if (singleConf.source.size() == 1) {
if (singleConf.source[0] == singleConf.destination) {
continue;
}
// Copy channel
for (int i = 0; i < info->numSamples; i++) {
info->data[singleConf.destination][i] =
info->data[singleConf.source[0]][i];
}
} else {
// Mix channels
float sample = 0.0f;
for (int i = 0; i < info->numSamples; i++) {
sample = 0.0;
for (auto& source : singleConf.source) {
sample += info->data[source][i];
}
}
return info;
info->data[singleConf.destination][i] =
sample / (float)singleConf.source.size();
}
}
}
return info;
}