void AudioInput::flushCheck(const QByteArray &frame, bool terminator) { qlFrames << frame; if (! terminator && qlFrames.count() < iAudioFrames) return; int flags = g.iTarget; if (terminator) flags = g.iPrevTarget; if (g.s.lmLoopMode == Settings::Server) flags = 0x1f; // Server loopback flags |= (umtType << 5); char data[1024]; data[0] = static_cast<unsigned char>(flags); PacketDataStream pds(data + 1, 1023); pds << iFrameCounter - qlFrames.count(); if (terminator) qlFrames << QByteArray(); for (int i=0;i<qlFrames.count(); ++i) { const QByteArray &qba = qlFrames.at(i); unsigned char head = static_cast<unsigned char>(qba.size()); if (i < qlFrames.count() - 1) head |= 0x80; pds.append(head); pds.append(qba.constData(), qba.size()); } if (g.s.bTransmitPosition && g.p && ! g.bCenterPosition && g.p->fetch()) { pds << g.p->fPosition[0]; pds << g.p->fPosition[1]; pds << g.p->fPosition[2]; } ServerHandlerPtr sh = g.sh; if (sh) { VoiceRecorderPtr recorder(sh->recorder); if (recorder) recorder->getRecordUser().addFrame(QByteArray(data, pds.size() + 1)); } if (g.s.lmLoopMode == Settings::Local) LoopUser::lpLoopy.addFrame(QByteArray(data, pds.size() + 1)); else if (sh) sh->sendMessage(data, pds.size() + 1); qlFrames.clear(); }
static void sendAudioFrame(const char *data, PacketDataStream &pds) { ServerHandlerPtr sh = g.sh; if (sh) { VoiceRecorderPtr recorder(sh->recorder); if (recorder) recorder->getRecordUser().addFrame(QByteArray(data, pds.size() + 1)); } if (g.s.lmLoopMode == Settings::Local) LoopUser::lpLoopy.addFrame(QByteArray(data, pds.size() + 1)); else if (sh) sh->sendMessage(data, pds.size() + 1); }