OSErr open_network_speaker() { // Allocate storage for noise data - assume if pointer not NULL, already have storage. if(sNoiseBufferStorage == NULL) { assert(kNoiseBufferSize % 2 == 0); uint16* theBuffer = new uint16[kNoiseBufferSize / 2]; // Fill in noise data (use whole width of local_random()) for(int i = 0; i < kNoiseBufferSize / 2; i++) theBuffer[i] = local_random() / 4; sNoiseBufferStorage = (byte*) theBuffer; } // Fill out the noise-buffer descriptor sNoiseBufferDesc.mData = sNoiseBufferStorage; sNoiseBufferDesc.mLength = kNoiseBufferSize; sNoiseBufferDesc.mFlags = 0; // Reset the buffer descriptor queue sSoundBuffers.reset(); // Reset the data buffer queue sSoundDataBuffers.reset(); // Allocate storage for audio data buffers for(int i = 0; i < kNumSoundDataBuffers; i++) { byte* theBuffer = new byte[kSoundDataBufferSize]; sSoundDataBuffers.enqueue(theBuffer); } // Reset a couple others to sane values sDryDequeues = 0; sSpeakerIsOn = false; #ifdef SPEEX init_speex_decoder(); #endif return 0; }