Send some dummy audio at the beginning of the connection.

This commit is contained in:
Jonathan Naylor 2024-07-09 16:09:45 +01:00
parent c729346908
commit ad8ba7d4f7
2 changed files with 44 additions and 20 deletions

View file

@ -247,25 +247,7 @@ bool CFMIAXNetwork::writeData(const float* data, unsigned int nSamples)
for (unsigned int i = 0U; i < nSamples; i++)
audio[i] = short(data[i] * 32767.0F + 0.5F); // Changing audio format from float to S16LE
#if defined(DEBUG_IAX)
LogDebug("IAX audio sent");
#endif
unsigned short ts = m_timestamp.elapsed();
unsigned char buffer[300U];
buffer[0U] = (m_sCallNo >> 8) & 0xFFU;
buffer[1U] = (m_sCallNo >> 0) & 0xFFU;
buffer[2U] = (ts >> 8) & 0xFFU;
buffer[3U] = (ts >> 0) & 0xFFU;
uLawEncode(audio, buffer + 4U, nSamples);
if (m_debug)
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 4U + nSamples);
return m_socket.write(buffer, 4U + nSamples, m_addr, m_addrLen);
return writeMiniFrame(audio, nSamples);
}
bool CFMIAXNetwork::writeEnd()
@ -372,6 +354,11 @@ void CFMIAXNetwork::clock(unsigned int ms)
m_status = IAXS_CONNECTED;
m_retryTimer.stop();
m_pingTimer.start();
short audio[160U];
::memset(audio, 0x00U, 160U * sizeof(short));
writeAudio(audio, 160U);
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_REJECT)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
@ -408,9 +395,15 @@ void CFMIAXNetwork::clock(unsigned int ms)
m_rxFrames++;
m_iSeqNo = iSeqNo + 1U;
LogMessage("IAX ANSWER received");
writeAck(ts);
LogMessage("IAX ANSWER received");
short audio[160U];
::memset(audio, 0x00U, 160U * sizeof(short));
writeMiniFrame(audio, 160U);
writeEnd();
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_VNAK)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
@ -1006,12 +999,42 @@ bool CFMIAXNetwork::writeAudio(const short* audio, unsigned int length)
uLawEncode(audio, buffer + 12U, length);
#if !defined(DEBUG_IAX)
if (m_debug)
#endif
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U + length);
return m_socket.write(buffer, 12U + length, m_addr, m_addrLen);
}
bool CFMIAXNetwork::writeMiniFrame(const short* audio, unsigned int length)
{
assert(audio != NULL);
assert(length > 0U);
#if defined(DEBUG_IAX)
LogDebug("IAX audio sent");
#endif
unsigned short ts = m_timestamp.elapsed();
unsigned char buffer[300U];
buffer[0U] = (m_sCallNo >> 8) & 0xFFU;
buffer[1U] = (m_sCallNo >> 0) & 0xFFU;
buffer[2U] = (ts >> 8) & 0xFFU;
buffer[3U] = (ts >> 0) & 0xFFU;
uLawEncode(audio, buffer + 4U, length);
#if !defined(DEBUG_IAX)
if (m_debug)
#endif
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 4U + length);
return m_socket.write(buffer, 4U + length, m_addr, m_addrLen);
}
bool CFMIAXNetwork::compareFrame(const unsigned char* buffer, unsigned char type1, unsigned char type2) const
{
assert(buffer != NULL);

View file

@ -97,6 +97,7 @@ private:
bool writeLagRp(unsigned int ts);
bool writeHangup();
bool writeAudio(const short* audio, unsigned int length);
bool writeMiniFrame(const short* audio, unsigned int length);
void uLawEncode(const short* audio, unsigned char* buffer, unsigned int length) const;
void uLawDecode(const unsigned char* buffer, short* audio, unsigned int length) const;