mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 13:58:51 +02:00
Merge branch 'moonshot' of https://github.com/ZappoMan/hifi into moonshot
This commit is contained in:
commit
33d4cb6497
5 changed files with 51 additions and 6 deletions
|
@ -468,7 +468,8 @@ void Audio::handleAudioInput() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add tone injection if enabled
|
// Add tone injection if enabled
|
||||||
const float TONE_FREQ = 220.f / SAMPLE_RATE * TWO_PI;
|
//const float TONE_FREQ = 220.f / SAMPLE_RATE * TWO_PI;
|
||||||
|
const float TONE_FREQ = 440.f / SAMPLE_RATE * TWO_PI;
|
||||||
const float QUARTER_VOLUME = 8192.f;
|
const float QUARTER_VOLUME = 8192.f;
|
||||||
if (_toneInjectionEnabled) {
|
if (_toneInjectionEnabled) {
|
||||||
loudness = 0.f;
|
loudness = 0.f;
|
||||||
|
@ -768,11 +769,20 @@ void Audio::processReceivedAudio(unsigned int sampleTime, AudioRingBuffer& ringB
|
||||||
// copy the samples we'll resample from the ring buffer - this also
|
// copy the samples we'll resample from the ring buffer - this also
|
||||||
// pushes the read pointer of the ring buffer forwards
|
// pushes the read pointer of the ring buffer forwards
|
||||||
ringBuffer.readSamples(ringBufferSamples, numNetworkOutputSamples);
|
ringBuffer.readSamples(ringBufferSamples, numNetworkOutputSamples);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// add the next numNetworkOutputSamples from each QByteArray
|
// add the next numNetworkOutputSamples from each QByteArray
|
||||||
// in our _localInjectionByteArrays QVector to the localInjectedSamples
|
// in our _localInjectionByteArrays QVector to the localInjectedSamples
|
||||||
|
|
||||||
|
|
||||||
|
if (Menu::getInstance()->isOptionChecked(MenuOption::LowPassFilter)) {
|
||||||
|
int channels = _desiredOutputFormat.channelCount();
|
||||||
|
int filterSamples = numNetworkOutputSamples / channels;
|
||||||
|
lowPassFilter(ringBufferSamples, filterSamples, channels);
|
||||||
|
}
|
||||||
|
|
||||||
// copy the packet from the RB to the output
|
// copy the packet from the RB to the output
|
||||||
linearResampling(ringBufferSamples,
|
linearResampling(ringBufferSamples,
|
||||||
(int16_t*) outputBuffer.data(),
|
(int16_t*) outputBuffer.data(),
|
||||||
|
@ -902,6 +912,37 @@ void Audio::addProceduralSounds(int16_t* monoInput, int numSamples) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// simple 3 pole low pass filter
|
||||||
|
void Audio::lowPassFilter(int16_t* inputBuffer, int samples, int channels) {
|
||||||
|
|
||||||
|
//qDebug() << "lowPassFilter() samples=" << samples << " channels=" << channels;
|
||||||
|
//const int POLE_COUNT = 3;
|
||||||
|
|
||||||
|
for (int c = 0; c < channels; c++) {
|
||||||
|
const float C1 = 0.0f; // 0.25f;
|
||||||
|
const float C2 = 1.0f; // 0.5f;
|
||||||
|
const float C3 = 0.0f; // 0.25f;
|
||||||
|
int16_t S1,S2,S3;
|
||||||
|
S1 = inputBuffer[c]; // start with the Nth sample, based on the current channel, this is the fist sample for the channel
|
||||||
|
for (int i = 0; i < samples; i++) {
|
||||||
|
int sampleAt = (i * channels) + c;
|
||||||
|
int nextSampleAt = sampleAt + channels;
|
||||||
|
S2 = inputBuffer[sampleAt];
|
||||||
|
if (i == samples - 1) {
|
||||||
|
S3 = inputBuffer[sampleAt];
|
||||||
|
} else {
|
||||||
|
S3 = inputBuffer[nextSampleAt];
|
||||||
|
}
|
||||||
|
// save our S1 for next time before we mod this
|
||||||
|
S1 = inputBuffer[sampleAt];
|
||||||
|
inputBuffer[sampleAt] = (C1 * S1) + (C2 * S2) + (C3 * S3);
|
||||||
|
//qDebug() << "channel=" << c << " sampleAt=" << sampleAt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Starts a collision sound. magnitude is 0-1, with 1 the loudest possible sound.
|
// Starts a collision sound. magnitude is 0-1, with 1 the loudest possible sound.
|
||||||
void Audio::startCollisionSound(float magnitude, float frequency, float noise, float duration, bool flashScreen) {
|
void Audio::startCollisionSound(float magnitude, float frequency, float noise, float duration, bool flashScreen) {
|
||||||
_collisionSoundMagnitude = magnitude;
|
_collisionSoundMagnitude = magnitude;
|
||||||
|
|
|
@ -55,7 +55,7 @@ public:
|
||||||
void setJitterBufferSamples(int samples) { _jitterBufferSamples = samples; }
|
void setJitterBufferSamples(int samples) { _jitterBufferSamples = samples; }
|
||||||
int getJitterBufferSamples() { return _jitterBufferSamples; }
|
int getJitterBufferSamples() { return _jitterBufferSamples; }
|
||||||
|
|
||||||
void lowPassFilter(int16_t* inputBuffer);
|
void lowPassFilter(int16_t* inputBuffer, int samples, int channels);
|
||||||
|
|
||||||
virtual void startCollisionSound(float magnitude, float frequency, float noise, float duration, bool flashScreen);
|
virtual void startCollisionSound(float magnitude, float frequency, float noise, float duration, bool flashScreen);
|
||||||
virtual void startDrumSound(float volume, float frequency, float duration, float decay);
|
virtual void startDrumSound(float volume, float frequency, float duration, float decay);
|
||||||
|
|
|
@ -184,13 +184,11 @@ void AudioReflector::calculateReflections(const glm::vec3& origin, const glm::ve
|
||||||
void AudioReflector::processSpatialAudio(unsigned int sampleTime, const QByteArray& samples, const QAudioFormat& format) {
|
void AudioReflector::processSpatialAudio(unsigned int sampleTime, const QByteArray& samples, const QAudioFormat& format) {
|
||||||
|
|
||||||
|
|
||||||
//qDebug() << "AudioReflector::processSpatialAudio()...sampleTime=" << sampleTime << " threadID=" << QThread::currentThreadId();
|
qDebug() << "AudioReflector::processSpatialAudio()...sampleTime=" << sampleTime << " threadID=" << QThread::currentThreadId();
|
||||||
|
|
||||||
int totalNumberOfSamples = samples.size() / (sizeof(int16_t));
|
int totalNumberOfSamples = samples.size() / (sizeof(int16_t));
|
||||||
int numFrameSamples = format.sampleRate() * format.channelCount();
|
|
||||||
|
|
||||||
qDebug() << " totalNumberOfSamples=" << totalNumberOfSamples;
|
qDebug() << " totalNumberOfSamples=" << totalNumberOfSamples;
|
||||||
qDebug() << " numFrameSamples=" << numFrameSamples;
|
|
||||||
qDebug() << " samples.size()=" << samples.size();
|
qDebug() << " samples.size()=" << samples.size();
|
||||||
qDebug() << " sizeof(int16_t)=" << sizeof(int16_t);
|
qDebug() << " sizeof(int16_t)=" << sizeof(int16_t);
|
||||||
|
|
||||||
|
@ -198,15 +196,17 @@ void AudioReflector::processSpatialAudio(unsigned int sampleTime, const QByteArr
|
||||||
/*
|
/*
|
||||||
AudioRingBuffer samplesRingBuffer(totalNumberOfSamples);
|
AudioRingBuffer samplesRingBuffer(totalNumberOfSamples);
|
||||||
qint64 bytesCopied = samplesRingBuffer.writeData(samples.constData(),samples.size());
|
qint64 bytesCopied = samplesRingBuffer.writeData(samples.constData(),samples.size());
|
||||||
|
|
||||||
|
/*
|
||||||
for(int i = 0; i < totalNumberOfSamples; i++) {
|
for(int i = 0; i < totalNumberOfSamples; i++) {
|
||||||
samplesRingBuffer[i] = samplesRingBuffer[i] * 0.25f;
|
samplesRingBuffer[i] = samplesRingBuffer[i] * 0.25f;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
qDebug() << " bytesCopied=" << bytesCopied;
|
qDebug() << " bytesCopied=" << bytesCopied;
|
||||||
_audio->addSpatialAudioToBuffer(sampleTime + 12000, samples, totalNumberOfSamples);
|
_audio->addSpatialAudioToBuffer(sampleTime + 12000, samples, totalNumberOfSamples);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
*/
|
|
||||||
|
|
||||||
quint64 start = usecTimestampNow();
|
quint64 start = usecTimestampNow();
|
||||||
|
|
||||||
|
|
|
@ -371,6 +371,9 @@ Menu::Menu() :
|
||||||
false,
|
false,
|
||||||
appInstance->getAudio(),
|
appInstance->getAudio(),
|
||||||
SLOT(toggleAudioSpatialProcessing()));
|
SLOT(toggleAudioSpatialProcessing()));
|
||||||
|
addCheckableActionToQMenuAndActionHash(audioDebugMenu, MenuOption::LowPassFilter,
|
||||||
|
Qt::CTRL | Qt::SHIFT | Qt::Key_F,
|
||||||
|
false);
|
||||||
|
|
||||||
|
|
||||||
addActionToQMenuAndActionHash(developerMenu, MenuOption::PasteToVoxel,
|
addActionToQMenuAndActionHash(developerMenu, MenuOption::PasteToVoxel,
|
||||||
|
|
|
@ -270,6 +270,7 @@ namespace MenuOption {
|
||||||
const QString Login = "Login";
|
const QString Login = "Login";
|
||||||
const QString Logout = "Logout";
|
const QString Logout = "Logout";
|
||||||
const QString LookAtVectors = "Look-at Vectors";
|
const QString LookAtVectors = "Look-at Vectors";
|
||||||
|
const QString LowPassFilter = "Low Pass Filter";
|
||||||
const QString MetavoxelEditor = "Metavoxel Editor...";
|
const QString MetavoxelEditor = "Metavoxel Editor...";
|
||||||
const QString Chat = "Chat...";
|
const QString Chat = "Chat...";
|
||||||
const QString Metavoxels = "Metavoxels";
|
const QString Metavoxels = "Metavoxels";
|
||||||
|
|
Loading…
Reference in a new issue