mirror of
https://github.com/overte-org/overte.git
synced 2025-04-25 17:35:45 +02:00
first cut at local audio spatialization working
This commit is contained in:
parent
523cc4bdfe
commit
a46d3fd254
4 changed files with 36 additions and 20 deletions
|
@ -404,17 +404,6 @@ void Audio::handleAudioInput() {
|
|||
|
||||
QByteArray inputByteArray = _inputDevice->readAll();
|
||||
|
||||
// send our local loopback to any interested parties
|
||||
if (_processSpatialAudio && !_muted && _audioOutput) {
|
||||
if (false) {
|
||||
// local audio is sent already resampled to match the output format, so processors
|
||||
// can easily handle the audio in a format ready to post back to the audio device
|
||||
//emit processLocalAudio(_spatialAudioStart, resampledInputByteArray, _outputFormat);
|
||||
} else {
|
||||
emit processLocalAudio(_spatialAudioStart, inputByteArray, _outputFormat);
|
||||
}
|
||||
}
|
||||
|
||||
if (Menu::getInstance()->isOptionChecked(MenuOption::EchoLocalAudio) && !_muted && _audioOutput) {
|
||||
// if this person wants local loopback add that to the locally injected audio
|
||||
|
||||
|
@ -575,6 +564,26 @@ void Audio::handleAudioInput() {
|
|||
_lastInputLoudness = 0;
|
||||
}
|
||||
|
||||
// at this point we have clean monoAudioSamples, which match our target output... this is what we should send
|
||||
// to our interested listeners
|
||||
// send our local loopback to any interested parties
|
||||
if (_processSpatialAudio && !_muted && _audioOutput &&
|
||||
(Menu::getInstance()->isOptionChecked(MenuOption::AudioSpatialProcessingProcessLocalAudio))) {
|
||||
// local audio is sent already resampled to match the network input format, so processors
|
||||
// can easily handle the audio in a format ready to post back to the audio device
|
||||
const int NUM_CHANNELS = 2;
|
||||
QByteArray stereoInputData;
|
||||
stereoInputData.resize(NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL * NUM_CHANNELS * sizeof(int16_t));
|
||||
int16_t* stereoSamples = (int16_t*)stereoInputData.data();
|
||||
const float LOCAL_SIGNAL_ATTENUATION = 0.125f;
|
||||
for (int i = 0; i < NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL; i++) {
|
||||
stereoSamples[i* NUM_CHANNELS] = monoAudioSamples[i] * LOCAL_SIGNAL_ATTENUATION;
|
||||
stereoSamples[(i * NUM_CHANNELS) + 1] = monoAudioSamples[i] * LOCAL_SIGNAL_ATTENUATION;
|
||||
}
|
||||
|
||||
emit processLocalAudio(_spatialAudioStart, stereoInputData, _desiredOutputFormat);
|
||||
}
|
||||
|
||||
if (_proceduralAudioOutput) {
|
||||
processProceduralAudio(monoAudioSamples, NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL);
|
||||
}
|
||||
|
|
|
@ -224,7 +224,7 @@ void AudioReflector::injectAudiblePoint(const AudiblePoint& audiblePoint,
|
|||
_audio->addSpatialAudioToBuffer(sampleTimeRight, attenuatedRightSamples, totalNumberOfSamples);
|
||||
}
|
||||
void AudioReflector::processLocalAudio(unsigned int sampleTime, const QByteArray& samples, const QAudioFormat& format) {
|
||||
// nothing yet, but will do local reflections too...
|
||||
echoAudio(sampleTime, samples, format);
|
||||
}
|
||||
|
||||
void AudioReflector::processInboundAudio(unsigned int sampleTime, const QByteArray& samples, const QAudioFormat& format) {
|
||||
|
|
|
@ -423,6 +423,10 @@ Menu::Menu() :
|
|||
Qt::CTRL | Qt::SHIFT | Qt::Key_X,
|
||||
true);
|
||||
|
||||
addCheckableActionToQMenuAndActionHash(spatialAudioMenu, MenuOption::AudioSpatialProcessingProcessLocalAudio,
|
||||
Qt::CTRL | Qt::SHIFT | Qt::Key_A,
|
||||
true);
|
||||
|
||||
addActionToQMenuAndActionHash(developerMenu, MenuOption::PasteToVoxel,
|
||||
Qt::CTRL | Qt::SHIFT | Qt::Key_V,
|
||||
this,
|
||||
|
|
|
@ -237,15 +237,18 @@ namespace MenuOption {
|
|||
const QString Atmosphere = "Atmosphere";
|
||||
const QString AudioNoiseReduction = "Audio Noise Reduction";
|
||||
const QString AudioToneInjection = "Inject Test Tone";
|
||||
|
||||
const QString AudioSpatialProcessing = "Audio Spatial Processing";
|
||||
const QString AudioSpatialProcessingIncudeOriginal = "Audio Spatial Processing includes Original";
|
||||
const QString AudioSpatialProcessingSeparateEars = "Audio Spatial Processing separates ears";
|
||||
const QString AudioSpatialProcessingPreDelay = "Audio Spatial Processing add Pre-Delay";
|
||||
const QString AudioSpatialProcessingStereoSource = "Audio Spatial Processing Stereo Source";
|
||||
const QString AudioSpatialProcessingHeadOriented = "Audio Spatial Processing Head Oriented";
|
||||
const QString AudioSpatialProcessingWithDiffusions = "Audio Spatial Processing With Diffusions";
|
||||
const QString AudioSpatialProcessingRenderPaths = "Audio Spatial Processing Render Paths";
|
||||
const QString AudioSpatialProcessingSlightlyRandomSurfaces = "Audio Spatial Processing Slightly Random Surfaces";
|
||||
const QString AudioSpatialProcessingHeadOriented = "Head Oriented";
|
||||
const QString AudioSpatialProcessingIncudeOriginal = "Includes Network Original";
|
||||
const QString AudioSpatialProcessingPreDelay = "Add Pre-Delay";
|
||||
const QString AudioSpatialProcessingProcessLocalAudio = "Process Local Audio";
|
||||
const QString AudioSpatialProcessingRenderPaths = "Render Paths";
|
||||
const QString AudioSpatialProcessingSeparateEars = "Separate Ears";
|
||||
const QString AudioSpatialProcessingSlightlyRandomSurfaces = "Slightly Random Surfaces";
|
||||
const QString AudioSpatialProcessingStereoSource = "Stereo Source";
|
||||
const QString AudioSpatialProcessingWithDiffusions = "With Diffusions";
|
||||
|
||||
const QString Avatars = "Avatars";
|
||||
const QString Bandwidth = "Bandwidth Display";
|
||||
const QString BandwidthDetails = "Bandwidth Details";
|
||||
|
|
Loading…
Reference in a new issue