mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 17:29:47 +02:00
Adding some debug stuff...
This commit is contained in:
parent
34befd4a52
commit
d9873d3633
2 changed files with 35 additions and 18 deletions
|
@ -1095,7 +1095,8 @@ void AudioClient::handleAudioInput(QByteArray& audioBuffer) {
|
||||||
|
|
||||||
void AudioClient::processAudioAndAddToRingBuffer(QByteArray& inputByteArray,
|
void AudioClient::processAudioAndAddToRingBuffer(QByteArray& inputByteArray,
|
||||||
const uchar& channelCount,
|
const uchar& channelCount,
|
||||||
const qint32& bytesForDuration) {
|
const qint32& bytesForDuration,
|
||||||
|
QByteArray& rollingBuffer) {
|
||||||
// input samples required to produce exactly NETWORK_FRAME_SAMPLES of output
|
// input samples required to produce exactly NETWORK_FRAME_SAMPLES of output
|
||||||
const int inputSamplesRequired =
|
const int inputSamplesRequired =
|
||||||
(_inputToNetworkResampler ? _inputToNetworkResampler->getMinInput(AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL)
|
(_inputToNetworkResampler ? _inputToNetworkResampler->getMinInput(AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL)
|
||||||
|
@ -1131,6 +1132,7 @@ void AudioClient::processAudioAndAddToRingBuffer(QByteArray& inputByteArray,
|
||||||
_stats.updateInputMsUnplayed(msecsInInputRingBuffer);
|
_stats.updateInputMsUnplayed(msecsInInputRingBuffer);
|
||||||
|
|
||||||
QByteArray audioBuffer(reinterpret_cast<char*>(networkAudioSamples), numNetworkBytes);
|
QByteArray audioBuffer(reinterpret_cast<char*>(networkAudioSamples), numNetworkBytes);
|
||||||
|
rollingBuffer.append(audioBuffer);
|
||||||
handleAudioInput(audioBuffer);
|
handleAudioInput(audioBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1144,8 +1146,10 @@ void AudioClient::handleMicAudioInput() {
|
||||||
_inputReadsSinceLastCheck++;
|
_inputReadsSinceLastCheck++;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
QByteArray temp;
|
||||||
|
|
||||||
processAudioAndAddToRingBuffer(_inputDevice->readAll(), _inputFormat.channelCount(),
|
processAudioAndAddToRingBuffer(_inputDevice->readAll(), _inputFormat.channelCount(),
|
||||||
_inputFormat.bytesForDuration(USECS_PER_MSEC));
|
_inputFormat.bytesForDuration(USECS_PER_MSEC), temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioClient::handleDummyAudioInput() {
|
void AudioClient::handleDummyAudioInput() {
|
||||||
|
@ -1161,9 +1165,7 @@ void AudioClient::handleRecordedAudioInput(const QByteArray& audio) {
|
||||||
handleAudioInput(audioBuffer);
|
handleAudioInput(audioBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
int rawToWav(const char* rawData, const int& rawLength, const char* wavfn, long frequency) {
|
int rawToWav(const char* rawData, const int& rawLength, const char* wavfn, long frequency, unsigned short channels) {
|
||||||
long chunksize = 0x10;
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
unsigned short wFormatTag;
|
unsigned short wFormatTag;
|
||||||
unsigned short wChannels;
|
unsigned short wChannels;
|
||||||
|
@ -1174,47 +1176,59 @@ void AudioClient::handleRecordedAudioInput(const QByteArray& audio) {
|
||||||
} fmt;
|
} fmt;
|
||||||
|
|
||||||
long samplecount = rawLength / 2;
|
long samplecount = rawLength / 2;
|
||||||
long riffsize = samplecount * 2 + 0x24;
|
|
||||||
long datasize = samplecount * 2;
|
|
||||||
|
|
||||||
FILE* wav = fopen(wavfn, "wb");
|
FILE* wav = fopen(wavfn, "wb");
|
||||||
if (!wav) {
|
if (!wav) {
|
||||||
return -3;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fwrite("RIFF", 1, 4, wav);
|
fwrite("RIFF", 1, 4, wav);
|
||||||
|
|
||||||
|
long riffsize = samplecount * 2 + 0x24;
|
||||||
fwrite(&riffsize, 4, 1, wav);
|
fwrite(&riffsize, 4, 1, wav);
|
||||||
|
|
||||||
fwrite("WAVEfmt ", 1, 8, wav);
|
fwrite("WAVEfmt ", 1, 8, wav);
|
||||||
|
|
||||||
|
long chunksize = 0x10;
|
||||||
fwrite(&chunksize, 4, 1, wav);
|
fwrite(&chunksize, 4, 1, wav);
|
||||||
|
|
||||||
fmt.wFormatTag = 1; // PCM
|
fmt.wFormatTag = 1; // WAVE_FORMAT_PCM
|
||||||
fmt.wChannels = 1; // MONO
|
fmt.wChannels = channels;
|
||||||
fmt.dwSamplesPerSec = frequency * 1;
|
fmt.dwSamplesPerSec = frequency * 1;
|
||||||
fmt.dwAvgBytesPerSec = frequency * 1 * 2; // 16 bit
|
|
||||||
fmt.wBlockAlign = 2;
|
|
||||||
fmt.wBitsPerSample = 16;
|
fmt.wBitsPerSample = 16;
|
||||||
|
fmt.wBlockAlign = fmt.wChannels * fmt.wBitsPerSample / 8;
|
||||||
|
fmt.dwAvgBytesPerSec = fmt.dwSamplesPerSec * fmt.wBlockAlign;
|
||||||
fwrite(&fmt, sizeof(fmt), 1, wav);
|
fwrite(&fmt, sizeof(fmt), 1, wav);
|
||||||
|
|
||||||
fwrite("data", 1, 4, wav);
|
fwrite("data", 1, 4, wav);
|
||||||
|
long datasize = samplecount * 2;
|
||||||
fwrite(&datasize, 4, 1, wav);
|
fwrite(&datasize, 4, 1, wav);
|
||||||
fwrite(rawData, 1, rawLength, wav);
|
fwrite(rawData, 1, rawLength, wav);
|
||||||
|
|
||||||
fclose(wav);
|
fclose(wav);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioClient::handleTTSAudioInput(const QByteArray& audio) {
|
void AudioClient::handleTTSAudioInput(const QByteArray& audio) {
|
||||||
QByteArray audioBuffer(audio);
|
QByteArray audioBuffer(audio);
|
||||||
QVector<int16_t> audioBufferReal;
|
|
||||||
|
|
||||||
QString filename = QString::number(usecTimestampNow());
|
QString filename = QString::number(usecTimestampNow());
|
||||||
QString path = PathUtils::getAppDataPath() + "Audio/" + filename + ".wav";
|
QString path = PathUtils::getAppDataPath() + "Audio/" + filename + "-before.wav";
|
||||||
rawToWav(audioBuffer.data(), audioBuffer.size(), path.toLocal8Bit(), 24000);
|
rawToWav(audioBuffer.data(), audioBuffer.size(), path.toLocal8Bit(), 24000, 1);
|
||||||
|
|
||||||
|
QByteArray temp;
|
||||||
|
|
||||||
while (audioBuffer.size() > 0) {
|
while (audioBuffer.size() > 0) {
|
||||||
QByteArray part;
|
QByteArray part;
|
||||||
part.append(audioBuffer.data(), AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL);
|
part.append(audioBuffer.data(), AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL);
|
||||||
audioBuffer.remove(0, AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL);
|
audioBuffer.remove(0, AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL);
|
||||||
processAudioAndAddToRingBuffer(part, 1, 48);
|
processAudioAndAddToRingBuffer(part, 1, 48, temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filename = QString::number(usecTimestampNow());
|
||||||
|
path = PathUtils::getAppDataPath() + "Audio/" + filename + "-after.wav";
|
||||||
|
rawToWav(temp.data(), temp.size(), path.toLocal8Bit(), 12000, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioClient::prepareLocalAudioInjectors(std::unique_ptr<Lock> localAudioLock) {
|
void AudioClient::prepareLocalAudioInjectors(std::unique_ptr<Lock> localAudioLock) {
|
||||||
|
|
|
@ -290,7 +290,10 @@ private:
|
||||||
float azimuthForSource(const glm::vec3& relativePosition);
|
float azimuthForSource(const glm::vec3& relativePosition);
|
||||||
float gainForSource(float distance, float volume);
|
float gainForSource(float distance, float volume);
|
||||||
|
|
||||||
void processAudioAndAddToRingBuffer(QByteArray& inputByteArray, const uchar& channelCount, const qint32& bytesForDuration);
|
void processAudioAndAddToRingBuffer(QByteArray& inputByteArray,
|
||||||
|
const uchar& channelCount,
|
||||||
|
const qint32& bytesForDuration,
|
||||||
|
QByteArray& rollingBuffer);
|
||||||
|
|
||||||
#ifdef Q_OS_ANDROID
|
#ifdef Q_OS_ANDROID
|
||||||
QTimer _checkInputTimer;
|
QTimer _checkInputTimer;
|
||||||
|
|
Loading…
Reference in a new issue