mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-06-20 09:09:26 +02:00
go back to a single stream for audio I/O
This commit is contained in:
parent
18f444298a
commit
cbf4b10820
2 changed files with 16 additions and 56 deletions
|
@ -30,8 +30,7 @@ const int AUDIO_UDP_LISTEN_PORT = 55444;
|
||||||
|
|
||||||
bool Audio::initialized;
|
bool Audio::initialized;
|
||||||
PaError Audio::err;
|
PaError Audio::err;
|
||||||
PaStream *Audio::inputStream;
|
PaStream *Audio::stream;
|
||||||
PaStream *Audio::outputStream;
|
|
||||||
AudioData *Audio::data;
|
AudioData *Audio::data;
|
||||||
std::ofstream logFile;
|
std::ofstream logFile;
|
||||||
|
|
||||||
|
@ -55,26 +54,7 @@ std::ofstream logFile;
|
||||||
Can be used to end the stream from within the callback.
|
Can be used to end the stream from within the callback.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int inputCallback(const void *inputBuffer,
|
int audioCallback (const void *inputBuffer,
|
||||||
void *outputBuffer,
|
|
||||||
unsigned long frames,
|
|
||||||
const PaStreamCallbackTimeInfo *timeInfo,
|
|
||||||
PaStreamCallbackFlags statusFlags,
|
|
||||||
void *userData)
|
|
||||||
{
|
|
||||||
UDPSocket *audioSocket = (UDPSocket *) userData;
|
|
||||||
|
|
||||||
int16_t *inputLeft = ((int16_t **) inputBuffer)[0];
|
|
||||||
// int16_t *inputRight = ((int16_t **) inputBuffer)[1];
|
|
||||||
|
|
||||||
if (inputLeft != NULL) {
|
|
||||||
audioSocket->send((char *) "192.168.1.19", 55443, (void *)inputLeft, BUFFER_LENGTH_BYTES);
|
|
||||||
}
|
|
||||||
|
|
||||||
return paContinue;
|
|
||||||
}
|
|
||||||
|
|
||||||
int outputCallback(const void *inputBuffer,
|
|
||||||
void *outputBuffer,
|
void *outputBuffer,
|
||||||
unsigned long frames,
|
unsigned long frames,
|
||||||
const PaStreamCallbackTimeInfo *timeInfo,
|
const PaStreamCallbackTimeInfo *timeInfo,
|
||||||
|
@ -83,9 +63,19 @@ int outputCallback(const void *inputBuffer,
|
||||||
{
|
{
|
||||||
AudioData *data = (AudioData *) userData;
|
AudioData *data = (AudioData *) userData;
|
||||||
|
|
||||||
|
int16_t *inputLeft = ((int16_t **) inputBuffer)[0];
|
||||||
|
// int16_t *inputRight = ((int16_t **) inputBuffer)[1];
|
||||||
|
|
||||||
|
if (inputLeft != NULL) {
|
||||||
|
data->audioSocket->send((char *) "192.168.1.19", 55443, (void *)inputLeft, BUFFER_LENGTH_BYTES);
|
||||||
|
}
|
||||||
|
|
||||||
int16_t *outputLeft = ((int16_t **) outputBuffer)[0];
|
int16_t *outputLeft = ((int16_t **) outputBuffer)[0];
|
||||||
int16_t *outputRight = ((int16_t **) outputBuffer)[1];
|
int16_t *outputRight = ((int16_t **) outputBuffer)[1];
|
||||||
|
|
||||||
|
memset(outputLeft, 0, BUFFER_LENGTH_BYTES);
|
||||||
|
memset(outputRight, 0, BUFFER_LENGTH_BYTES);
|
||||||
|
|
||||||
for (int s = 0; s < NUM_AUDIO_SOURCES; s++) {
|
for (int s = 0; s < NUM_AUDIO_SOURCES; s++) {
|
||||||
|
|
||||||
AudioSource *source = data->sources[s];
|
AudioSource *source = data->sources[s];
|
||||||
|
@ -95,9 +85,6 @@ int outputCallback(const void *inputBuffer,
|
||||||
memcpy(outputLeft, source->sourceData, BUFFER_LENGTH_BYTES);
|
memcpy(outputLeft, source->sourceData, BUFFER_LENGTH_BYTES);
|
||||||
memcpy(outputRight, source->sourceData, BUFFER_LENGTH_BYTES);
|
memcpy(outputRight, source->sourceData, BUFFER_LENGTH_BYTES);
|
||||||
} else {
|
} else {
|
||||||
memset(outputLeft, 0, BUFFER_LENGTH_BYTES);
|
|
||||||
memset(outputRight, 0, BUFFER_LENGTH_BYTES);
|
|
||||||
|
|
||||||
glm::vec3 headPos = data->linkedHead->getPos();
|
glm::vec3 headPos = data->linkedHead->getPos();
|
||||||
glm::vec3 sourcePos = source->position;
|
glm::vec3 sourcePos = source->position;
|
||||||
|
|
||||||
|
@ -239,35 +226,20 @@ bool Audio::init(Head *mainHead)
|
||||||
|
|
||||||
data->linkedHead = mainHead;
|
data->linkedHead = mainHead;
|
||||||
|
|
||||||
err = Pa_OpenDefaultStream(&inputStream,
|
err = Pa_OpenDefaultStream(&stream,
|
||||||
2, // input channels
|
2, // input channels
|
||||||
NULL, // output channels
|
|
||||||
(paInt16 | paNonInterleaved), // sample format
|
|
||||||
22050, // sample rate (hz)
|
|
||||||
512, // frames per buffer
|
|
||||||
inputCallback, // callback function
|
|
||||||
(void *) data->audioSocket); // user data to be passed to callback
|
|
||||||
|
|
||||||
if (err != paNoError) goto error;
|
|
||||||
|
|
||||||
err = Pa_OpenDefaultStream(&outputStream,
|
|
||||||
NULL, // input channels
|
|
||||||
2, // output channels
|
2, // output channels
|
||||||
(paInt16 | paNonInterleaved), // sample format
|
(paInt16 | paNonInterleaved), // sample format
|
||||||
22050, // sample rate (hz)
|
22050, // sample rate (hz)
|
||||||
512, // frames per buffer
|
512, // frames per buffer
|
||||||
outputCallback, // callback function
|
audioCallback, // callback function
|
||||||
(void *) data); // user data to be passed to callback
|
(void *) data); // user data to be passed to callback
|
||||||
|
|
||||||
if (err != paNoError) goto error;
|
if (err != paNoError) goto error;
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
|
|
||||||
// start the streams now that sources are good to go
|
// start the stream now that sources are good to go
|
||||||
Pa_StartStream(inputStream);
|
Pa_StartStream(stream);
|
||||||
if (err != paNoError) goto error;
|
|
||||||
|
|
||||||
Pa_StartStream(outputStream);
|
|
||||||
if (err != paNoError) goto error;
|
if (err != paNoError) goto error;
|
||||||
|
|
||||||
return paNoError;
|
return paNoError;
|
||||||
|
@ -309,10 +281,7 @@ bool Audio::terminate ()
|
||||||
} else {
|
} else {
|
||||||
initialized = false;
|
initialized = false;
|
||||||
|
|
||||||
err = Pa_CloseStream(inputStream);
|
err = Pa_CloseStream(stream);
|
||||||
if (err != paNoError) goto error;
|
|
||||||
|
|
||||||
err = Pa_CloseStream(outputStream);
|
|
||||||
if (err != paNoError) goto error;
|
if (err != paNoError) goto error;
|
||||||
|
|
||||||
delete data;
|
delete data;
|
||||||
|
|
|
@ -36,23 +36,14 @@ private:
|
||||||
static PaError err;
|
static PaError err;
|
||||||
|
|
||||||
// audio stream handle
|
// audio stream handle
|
||||||
static PaStream *inputStream;
|
static PaStream *stream;
|
||||||
static PaStream *outputStream;
|
|
||||||
|
|
||||||
// give access to AudioData class from audio callbacks
|
// give access to AudioData class from audioCallback
|
||||||
friend int inputCallback (const void*, void*, unsigned long, const PaStreamCallbackTimeInfo*, PaStreamCallbackFlags, void*);
|
friend int audioCallback (const void*, void*, unsigned long, const PaStreamCallbackTimeInfo*, PaStreamCallbackFlags, void*);
|
||||||
friend int outputCallback (const void*, void*, unsigned long, const PaStreamCallbackTimeInfo*, PaStreamCallbackFlags, void*);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Audio callback called by portaudio.
|
// Audio callback called by portaudio.
|
||||||
int inputCallback (const void *inputBuffer,
|
int audioCallback (const void *inputBuffer,
|
||||||
void *outputBuffer,
|
|
||||||
unsigned long framesPerBuffer,
|
|
||||||
const PaStreamCallbackTimeInfo *timeInfo,
|
|
||||||
PaStreamCallbackFlags statusFlags,
|
|
||||||
void *userData);
|
|
||||||
|
|
||||||
int outputCallback (const void *inputBuffer,
|
|
||||||
void *outputBuffer,
|
void *outputBuffer,
|
||||||
unsigned long framesPerBuffer,
|
unsigned long framesPerBuffer,
|
||||||
const PaStreamCallbackTimeInfo *timeInfo,
|
const PaStreamCallbackTimeInfo *timeInfo,
|
||||||
|
|
Loading…
Reference in a new issue