mirror of
https://github.com/overte-org/overte.git
synced 2025-04-22 04:44:08 +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
|
||||
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;
|
||||
if (_toneInjectionEnabled) {
|
||||
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
|
||||
// pushes the read pointer of the ring buffer forwards
|
||||
ringBuffer.readSamples(ringBufferSamples, numNetworkOutputSamples);
|
||||
|
||||
|
||||
}
|
||||
|
||||
// add the next numNetworkOutputSamples from each QByteArray
|
||||
// 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
|
||||
linearResampling(ringBufferSamples,
|
||||
(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.
|
||||
void Audio::startCollisionSound(float magnitude, float frequency, float noise, float duration, bool flashScreen) {
|
||||
_collisionSoundMagnitude = magnitude;
|
||||
|
|
|
@ -55,7 +55,7 @@ public:
|
|||
void setJitterBufferSamples(int samples) { _jitterBufferSamples = samples; }
|
||||
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 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) {
|
||||
|
||||
|
||||
//qDebug() << "AudioReflector::processSpatialAudio()...sampleTime=" << sampleTime << " threadID=" << QThread::currentThreadId();
|
||||
qDebug() << "AudioReflector::processSpatialAudio()...sampleTime=" << sampleTime << " threadID=" << QThread::currentThreadId();
|
||||
|
||||
int totalNumberOfSamples = samples.size() / (sizeof(int16_t));
|
||||
int numFrameSamples = format.sampleRate() * format.channelCount();
|
||||
|
||||
qDebug() << " totalNumberOfSamples=" << totalNumberOfSamples;
|
||||
qDebug() << " numFrameSamples=" << numFrameSamples;
|
||||
qDebug() << " samples.size()=" << samples.size();
|
||||
qDebug() << " sizeof(int16_t)=" << sizeof(int16_t);
|
||||
|
||||
|
@ -198,15 +196,17 @@ void AudioReflector::processSpatialAudio(unsigned int sampleTime, const QByteArr
|
|||
/*
|
||||
AudioRingBuffer samplesRingBuffer(totalNumberOfSamples);
|
||||
qint64 bytesCopied = samplesRingBuffer.writeData(samples.constData(),samples.size());
|
||||
|
||||
/*
|
||||
for(int i = 0; i < totalNumberOfSamples; i++) {
|
||||
samplesRingBuffer[i] = samplesRingBuffer[i] * 0.25f;
|
||||
}
|
||||
*/
|
||||
|
||||
qDebug() << " bytesCopied=" << bytesCopied;
|
||||
_audio->addSpatialAudioToBuffer(sampleTime + 12000, samples, totalNumberOfSamples);
|
||||
|
||||
return;
|
||||
*/
|
||||
|
||||
quint64 start = usecTimestampNow();
|
||||
|
||||
|
|
|
@ -371,6 +371,9 @@ Menu::Menu() :
|
|||
false,
|
||||
appInstance->getAudio(),
|
||||
SLOT(toggleAudioSpatialProcessing()));
|
||||
addCheckableActionToQMenuAndActionHash(audioDebugMenu, MenuOption::LowPassFilter,
|
||||
Qt::CTRL | Qt::SHIFT | Qt::Key_F,
|
||||
false);
|
||||
|
||||
|
||||
addActionToQMenuAndActionHash(developerMenu, MenuOption::PasteToVoxel,
|
||||
|
|
|
@ -270,6 +270,7 @@ namespace MenuOption {
|
|||
const QString Login = "Login";
|
||||
const QString Logout = "Logout";
|
||||
const QString LookAtVectors = "Look-at Vectors";
|
||||
const QString LowPassFilter = "Low Pass Filter";
|
||||
const QString MetavoxelEditor = "Metavoxel Editor...";
|
||||
const QString Chat = "Chat...";
|
||||
const QString Metavoxels = "Metavoxels";
|
||||
|
|
Loading…
Reference in a new issue