mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 18:50:00 +02:00
Merge branch 'master' of https://github.com/highfidelity/hifi into metavoxels
This commit is contained in:
commit
99704aee94
3 changed files with 111 additions and 138 deletions
|
@ -176,55 +176,22 @@ function updateBehavior(deltaTime) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Script.update.connect(updateBehavior);
|
Script.update.connect(updateBehavior);
|
||||||
|
|
||||||
|
var SOUND_BASE_URL = "https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/"
|
||||||
|
|
||||||
function loadSounds() {
|
function loadSounds() {
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/AB1.raw"));
|
var sound_filenames = ["AB1.raw", "Anchorman2.raw", "B1.raw", "B1.raw", "Bale1.raw", "Bandcamp.raw",
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Anchorman2.raw"));
|
"Big1.raw", "Big2.raw", "Brian1.raw", "Buster1.raw", "CES1.raw", "CES2.raw", "CES3.raw", "CES4.raw",
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/B1.raw"));
|
"Carrie1.raw", "Carrie3.raw", "Charlotte1.raw", "EN1.raw", "EN2.raw", "EN3.raw", "Eugene1.raw", "Francesco1.raw",
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/B1.raw"));
|
"Italian1.raw", "Japanese1.raw", "Leigh1.raw", "Lucille1.raw", "Lucille2.raw", "MeanGirls.raw", "Murray2.raw",
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Bale1.raw"));
|
"Nigel1.raw", "PennyLane.raw", "Pitt1.raw", "Ricardo.raw", "SN.raw", "Sake1.raw", "Samantha1.raw", "Samantha2.raw",
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Bandcamp.raw"));
|
"Spicoli1.raw", "Supernatural.raw", "Swearengen1.raw", "TheDude.raw", "Tony.raw", "Triumph1.raw", "Uma1.raw",
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Big1.raw"));
|
"Walken1.raw", "Walken2.raw", "Z1.raw", "Z2.raw"
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Big2.raw"));
|
];
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Brian1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Buster1.raw"));
|
for (var i = 0; i < sound_filenames.length; i++) {
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/CES1.raw"));
|
sounds.push(new Sound(SOUND_BASE_URL + sound_filenames[i]));
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/CES2.raw"));
|
}
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/CES3.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/CES4.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Carrie1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Carrie3.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Charlotte1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/EN1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/EN2.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/EN3.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Eugene1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Francesco1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Italian1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Japanese1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Leigh1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Lucille1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Lucille2.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/MeanGirls.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Murray2.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Nigel1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/PennyLane.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Pitt1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Ricardo.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/SN.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Sake1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Samantha1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Samantha2.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Spicoli1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Supernatural.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Swearengen1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/TheDude.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Tony.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Triumph1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Uma1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Walken1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Walken2.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Z1.raw"));
|
|
||||||
sounds.push(new Sound("https://s3-us-west-1.amazonaws.com/highfidelity-public/sounds/Cocktail+Party+Snippets/Raws/Z2.raw"));
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -274,11 +274,11 @@ void Audio::start() {
|
||||||
|
|
||||||
QAudioDeviceInfo inputDeviceInfo = defaultAudioDeviceForMode(QAudio::AudioInput);
|
QAudioDeviceInfo inputDeviceInfo = defaultAudioDeviceForMode(QAudio::AudioInput);
|
||||||
qDebug() << "The default audio input device is" << inputDeviceInfo.deviceName();
|
qDebug() << "The default audio input device is" << inputDeviceInfo.deviceName();
|
||||||
bool inputFormatSupported = switchInputToAudioDevice(inputDeviceInfo.deviceName());
|
bool inputFormatSupported = switchInputToAudioDevice(inputDeviceInfo);
|
||||||
|
|
||||||
QAudioDeviceInfo outputDeviceInfo = defaultAudioDeviceForMode(QAudio::AudioOutput);
|
QAudioDeviceInfo outputDeviceInfo = defaultAudioDeviceForMode(QAudio::AudioOutput);
|
||||||
qDebug() << "The default audio output device is" << outputDeviceInfo.deviceName();
|
qDebug() << "The default audio output device is" << outputDeviceInfo.deviceName();
|
||||||
bool outputFormatSupported = switchOutputToAudioDevice(outputDeviceInfo.deviceName());
|
bool outputFormatSupported = switchOutputToAudioDevice(outputDeviceInfo);
|
||||||
|
|
||||||
if (!inputFormatSupported || !outputFormatSupported) {
|
if (!inputFormatSupported || !outputFormatSupported) {
|
||||||
qDebug() << "Unable to set up audio I/O because of a problem with input or output formats.";
|
qDebug() << "Unable to set up audio I/O because of a problem with input or output formats.";
|
||||||
|
@ -299,96 +299,11 @@ QVector<QString> Audio::getDeviceNames(QAudio::Mode mode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Audio::switchInputToAudioDevice(const QString& inputDeviceName) {
|
bool Audio::switchInputToAudioDevice(const QString& inputDeviceName) {
|
||||||
bool supportedFormat = false;
|
return switchInputToAudioDevice(getNamedAudioDeviceForMode(QAudio::AudioInput, inputDeviceName));
|
||||||
|
|
||||||
// cleanup any previously initialized device
|
|
||||||
if (_audioInput) {
|
|
||||||
_audioInput->stop();
|
|
||||||
disconnect(_inputDevice, 0, 0, 0);
|
|
||||||
_inputDevice = NULL;
|
|
||||||
|
|
||||||
delete _audioInput;
|
|
||||||
_audioInput = NULL;
|
|
||||||
_numInputCallbackBytes = 0;
|
|
||||||
|
|
||||||
_inputAudioDeviceName = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
QAudioDeviceInfo inputDeviceInfo = getNamedAudioDeviceForMode(QAudio::AudioInput, inputDeviceName);
|
|
||||||
|
|
||||||
if (!inputDeviceInfo.isNull()) {
|
|
||||||
qDebug() << "The audio input device " << inputDeviceInfo.deviceName() << "is available.";
|
|
||||||
_inputAudioDeviceName = inputDeviceInfo.deviceName().trimmed();
|
|
||||||
|
|
||||||
if (adjustedFormatForAudioDevice(inputDeviceInfo, _desiredInputFormat, _inputFormat)) {
|
|
||||||
qDebug() << "The format to be used for audio input is" << _inputFormat;
|
|
||||||
|
|
||||||
_audioInput = new QAudioInput(inputDeviceInfo, _inputFormat, this);
|
|
||||||
_numInputCallbackBytes = NETWORK_BUFFER_LENGTH_BYTES_PER_CHANNEL * _inputFormat.channelCount()
|
|
||||||
* (_inputFormat.sampleRate() / SAMPLE_RATE)
|
|
||||||
/ CALLBACK_ACCELERATOR_RATIO;
|
|
||||||
_audioInput->setBufferSize(_numInputCallbackBytes);
|
|
||||||
|
|
||||||
// how do we want to handle input working, but output not working?
|
|
||||||
_inputRingBuffer.resizeForFrameSize(_numInputCallbackBytes * CALLBACK_ACCELERATOR_RATIO / sizeof(int16_t));
|
|
||||||
_inputDevice = _audioInput->start();
|
|
||||||
connect(_inputDevice, SIGNAL(readyRead()), this, SLOT(handleAudioInput()));
|
|
||||||
|
|
||||||
supportedFormat = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return supportedFormat;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Audio::switchOutputToAudioDevice(const QString& outputDeviceName) {
|
bool Audio::switchOutputToAudioDevice(const QString& outputDeviceName) {
|
||||||
bool supportedFormat = false;
|
return switchOutputToAudioDevice(getNamedAudioDeviceForMode(QAudio::AudioOutput, outputDeviceName));
|
||||||
|
|
||||||
// cleanup any previously initialized device
|
|
||||||
if (_audioOutput) {
|
|
||||||
_audioOutput->stop();
|
|
||||||
disconnect(_outputDevice, 0, 0, 0);
|
|
||||||
_outputDevice = NULL;
|
|
||||||
|
|
||||||
delete _audioOutput;
|
|
||||||
_audioOutput = NULL;
|
|
||||||
_numInputCallbackBytes = 0;
|
|
||||||
|
|
||||||
_loopbackOutputDevice = NULL;
|
|
||||||
delete _loopbackAudioOutput;
|
|
||||||
_loopbackAudioOutput = NULL;
|
|
||||||
|
|
||||||
_proceduralOutputDevice = NULL;
|
|
||||||
delete _proceduralAudioOutput;
|
|
||||||
_proceduralAudioOutput = NULL;
|
|
||||||
_outputAudioDeviceName = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
QAudioDeviceInfo outputDeviceInfo = getNamedAudioDeviceForMode(QAudio::AudioOutput, outputDeviceName);
|
|
||||||
|
|
||||||
if (!outputDeviceInfo.isNull()) {
|
|
||||||
qDebug() << "The audio output device " << outputDeviceInfo.deviceName() << "is available.";
|
|
||||||
_outputAudioDeviceName = outputDeviceInfo.deviceName().trimmed();
|
|
||||||
|
|
||||||
if (adjustedFormatForAudioDevice(outputDeviceInfo, _desiredOutputFormat, _outputFormat)) {
|
|
||||||
qDebug() << "The format to be used for audio output is" << _outputFormat;
|
|
||||||
|
|
||||||
// setup our general output device for audio-mixer audio
|
|
||||||
_audioOutput = new QAudioOutput(outputDeviceInfo, _outputFormat, this);
|
|
||||||
_audioOutput->setBufferSize(_ringBuffer.getSampleCapacity() * sizeof(int16_t));
|
|
||||||
qDebug() << "Ring Buffer capacity in samples: " << _ringBuffer.getSampleCapacity();
|
|
||||||
_outputDevice = _audioOutput->start();
|
|
||||||
|
|
||||||
// setup a loopback audio output device
|
|
||||||
_loopbackAudioOutput = new QAudioOutput(outputDeviceInfo, _outputFormat, this);
|
|
||||||
|
|
||||||
// setup a procedural audio output device
|
|
||||||
_proceduralAudioOutput = new QAudioOutput(outputDeviceInfo, _outputFormat, this);
|
|
||||||
|
|
||||||
gettimeofday(&_lastReceiveTime, NULL);
|
|
||||||
supportedFormat = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return supportedFormat;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Audio::handleAudioInput() {
|
void Audio::handleAudioInput() {
|
||||||
|
@ -878,3 +793,92 @@ void Audio::renderMuteIcon(int x, int y) {
|
||||||
|
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Audio::switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceInfo) {
|
||||||
|
bool supportedFormat = false;
|
||||||
|
|
||||||
|
// cleanup any previously initialized device
|
||||||
|
if (_audioInput) {
|
||||||
|
_audioInput->stop();
|
||||||
|
disconnect(_inputDevice, 0, 0, 0);
|
||||||
|
_inputDevice = NULL;
|
||||||
|
|
||||||
|
delete _audioInput;
|
||||||
|
_audioInput = NULL;
|
||||||
|
_numInputCallbackBytes = 0;
|
||||||
|
|
||||||
|
_inputAudioDeviceName = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!inputDeviceInfo.isNull()) {
|
||||||
|
qDebug() << "The audio input device " << inputDeviceInfo.deviceName() << "is available.";
|
||||||
|
_inputAudioDeviceName = inputDeviceInfo.deviceName().trimmed();
|
||||||
|
|
||||||
|
if (adjustedFormatForAudioDevice(inputDeviceInfo, _desiredInputFormat, _inputFormat)) {
|
||||||
|
qDebug() << "The format to be used for audio input is" << _inputFormat;
|
||||||
|
|
||||||
|
_audioInput = new QAudioInput(inputDeviceInfo, _inputFormat, this);
|
||||||
|
_numInputCallbackBytes = NETWORK_BUFFER_LENGTH_BYTES_PER_CHANNEL * _inputFormat.channelCount()
|
||||||
|
* (_inputFormat.sampleRate() / SAMPLE_RATE)
|
||||||
|
/ CALLBACK_ACCELERATOR_RATIO;
|
||||||
|
_audioInput->setBufferSize(_numInputCallbackBytes);
|
||||||
|
|
||||||
|
// how do we want to handle input working, but output not working?
|
||||||
|
_inputRingBuffer.resizeForFrameSize(_numInputCallbackBytes * CALLBACK_ACCELERATOR_RATIO / sizeof(int16_t));
|
||||||
|
_inputDevice = _audioInput->start();
|
||||||
|
connect(_inputDevice, SIGNAL(readyRead()), this, SLOT(handleAudioInput()));
|
||||||
|
|
||||||
|
supportedFormat = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return supportedFormat;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Audio::switchOutputToAudioDevice(const QAudioDeviceInfo& outputDeviceInfo) {
|
||||||
|
bool supportedFormat = false;
|
||||||
|
|
||||||
|
// cleanup any previously initialized device
|
||||||
|
if (_audioOutput) {
|
||||||
|
_audioOutput->stop();
|
||||||
|
disconnect(_outputDevice, 0, 0, 0);
|
||||||
|
_outputDevice = NULL;
|
||||||
|
|
||||||
|
delete _audioOutput;
|
||||||
|
_audioOutput = NULL;
|
||||||
|
_numInputCallbackBytes = 0;
|
||||||
|
|
||||||
|
_loopbackOutputDevice = NULL;
|
||||||
|
delete _loopbackAudioOutput;
|
||||||
|
_loopbackAudioOutput = NULL;
|
||||||
|
|
||||||
|
_proceduralOutputDevice = NULL;
|
||||||
|
delete _proceduralAudioOutput;
|
||||||
|
_proceduralAudioOutput = NULL;
|
||||||
|
_outputAudioDeviceName = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!outputDeviceInfo.isNull()) {
|
||||||
|
qDebug() << "The audio output device " << outputDeviceInfo.deviceName() << "is available.";
|
||||||
|
_outputAudioDeviceName = outputDeviceInfo.deviceName().trimmed();
|
||||||
|
|
||||||
|
if (adjustedFormatForAudioDevice(outputDeviceInfo, _desiredOutputFormat, _outputFormat)) {
|
||||||
|
qDebug() << "The format to be used for audio output is" << _outputFormat;
|
||||||
|
|
||||||
|
// setup our general output device for audio-mixer audio
|
||||||
|
_audioOutput = new QAudioOutput(outputDeviceInfo, _outputFormat, this);
|
||||||
|
_audioOutput->setBufferSize(_ringBuffer.getSampleCapacity() * sizeof(int16_t));
|
||||||
|
qDebug() << "Ring Buffer capacity in samples: " << _ringBuffer.getSampleCapacity();
|
||||||
|
_outputDevice = _audioOutput->start();
|
||||||
|
|
||||||
|
// setup a loopback audio output device
|
||||||
|
_loopbackAudioOutput = new QAudioOutput(outputDeviceInfo, _outputFormat, this);
|
||||||
|
|
||||||
|
// setup a procedural audio output device
|
||||||
|
_proceduralAudioOutput = new QAudioOutput(outputDeviceInfo, _outputFormat, this);
|
||||||
|
|
||||||
|
gettimeofday(&_lastReceiveTime, NULL);
|
||||||
|
supportedFormat = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return supportedFormat;
|
||||||
|
}
|
||||||
|
|
|
@ -168,7 +168,9 @@ private:
|
||||||
// Add sounds that we want the user to not hear themselves, by adding on top of mic input signal
|
// Add sounds that we want the user to not hear themselves, by adding on top of mic input signal
|
||||||
void addProceduralSounds(int16_t* monoInput, int numSamples);
|
void addProceduralSounds(int16_t* monoInput, int numSamples);
|
||||||
|
|
||||||
|
bool switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceInfo);
|
||||||
|
bool switchOutputToAudioDevice(const QAudioDeviceInfo& outputDeviceInfo);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif /* defined(__interface__audio__) */
|
#endif /* defined(__interface__audio__) */
|
||||||
|
|
Loading…
Reference in a new issue