int PositionalAudioRingBuffer::parseData(unsigned char* sourceBuffer, int numBytes) {
    unsigned char* currentBuffer = sourceBuffer + sizeof(PACKET_HEADER);
    currentBuffer += parsePositionalData(currentBuffer, numBytes - (currentBuffer - sourceBuffer));
    currentBuffer += parseAudioSamples(currentBuffer, numBytes - (currentBuffer - sourceBuffer));

    return currentBuffer - sourceBuffer;
}
int PositionalAudioRingBuffer::parseData(unsigned char* sourceBuffer, int numBytes) {
    unsigned char* currentBuffer = sourceBuffer + numBytesForPacketHeader(sourceBuffer);
    currentBuffer += sizeof(uint16_t); // the source ID
    currentBuffer += parseListenModeData(currentBuffer, numBytes - (currentBuffer - sourceBuffer));
    currentBuffer += parsePositionalData(currentBuffer, numBytes - (currentBuffer - sourceBuffer));
    currentBuffer += parseAudioSamples(currentBuffer, numBytes - (currentBuffer - sourceBuffer));
    
    return currentBuffer - sourceBuffer;
}
int InjectedAudioRingBuffer::parseData(unsigned char* sourceBuffer, int numBytes) {
    unsigned char* currentBuffer =  sourceBuffer + sizeof(PACKET_HEADER_INJECT_AUDIO);
    
    // pull stream identifier from the packet
    memcpy(&_streamIdentifier, currentBuffer, sizeof(_streamIdentifier));
    currentBuffer += sizeof(_streamIdentifier);
    
    // use parsePositionalData in parent PostionalAudioRingBuffer class to pull common positional data
    currentBuffer += parsePositionalData(currentBuffer, numBytes - (currentBuffer - sourceBuffer));
    
    // pull out the radius for this injected source - if it's zero this is a point source
    memcpy(&_radius, currentBuffer, sizeof(_radius));
    currentBuffer += sizeof(_radius);
    
    unsigned int attenuationByte = *(currentBuffer++);
    _attenuationRatio = attenuationByte / (float) MAX_INJECTOR_VOLUME;
    
    currentBuffer += parseAudioSamples(currentBuffer, numBytes - (currentBuffer - sourceBuffer));
    
    return currentBuffer - sourceBuffer;
}