From 827a0cb72f3e0cee59e16a89e6c4c4e5861676c8 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Mon, 9 Nov 2020 12:17:06 +0000 Subject: [PATCH] Allow the FM Network code to build on Windows. --- FMNetwork.cpp | 28 +++++++++++++++++++++++----- FMNetwork.h | 4 ++++ Version.h | 2 +- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/FMNetwork.cpp b/FMNetwork.cpp index bc394c2..bf76ccb 100644 --- a/FMNetwork.cpp +++ b/FMNetwork.cpp @@ -44,18 +44,22 @@ m_pollTimer(1000U, 5U) if (CUDPSocket::lookup(gatewayAddress, gatewayPort, m_addr, m_addrLen) != 0) m_addrLen = 0U; +#if !defined(_WIN32) && !defined(_WIN64) int error; m_incoming = ::src_new(SRC_SINC_FASTEST, 1, &error); m_outgoing = ::src_new(SRC_SINC_FASTEST, 1, &error); assert(m_incoming != NULL); assert(m_outgoing != NULL); +#endif } CFMNetwork::~CFMNetwork() { +#if !defined(_WIN32) && !defined(_WIN64) ::src_delete(m_incoming); ::src_delete(m_outgoing); +#endif } bool CFMNetwork::open() @@ -74,10 +78,12 @@ bool CFMNetwork::open() bool CFMNetwork::writeData(float* data, unsigned int nSamples) { - assert(m_outgoing != NULL); assert(data != NULL); assert(nSamples > 0U); +#if !defined(_WIN32) && !defined(_WIN64) + assert(m_outgoing != NULL); + float out[1000U]; SRC_DATA src; @@ -98,6 +104,7 @@ bool CFMNetwork::writeData(float* data, unsigned int nSamples) src.data_out = data; src.output_frames_gen = nSamples; } +#endif unsigned int length = 3U; @@ -108,8 +115,13 @@ bool CFMNetwork::writeData(float* data, unsigned int nSamples) buffer[1U] = 'M'; buffer[2U] = 'D'; +#if defined(_WIN32) || defined(_WIN64) + for (long i = 0L; i < nSamples; i++) { + unsigned short val = (unsigned short)((data[i] + 1.0F) * 32767.0F + 0.5F); +#else for (long i = 0L; i < src.output_frames_gen; i++) { unsigned short val = (unsigned short)((src.data_out[i] + 1.0F) * 32767.0F + 0.5F); +#endif buffer[length++] = (val >> 8) & 0xFFU; buffer[length++] = (val >> 0) & 0xFFU; @@ -177,7 +189,6 @@ void CFMNetwork::clock(unsigned int ms) unsigned int CFMNetwork::read(float* data, unsigned int nSamples) { - assert(m_incoming != NULL); assert(data != NULL); assert(nSamples > 0U); @@ -191,6 +202,9 @@ unsigned int CFMNetwork::read(float* data, unsigned int nSamples) unsigned char buffer[1500U]; m_buffer.getData(buffer, nSamples * sizeof(unsigned short)); +#if !defined(_WIN32) && !defined(_WIN64) + assert(m_incoming != NULL); + SRC_DATA src; if (m_sampleRate != 8000U) { @@ -217,6 +231,7 @@ unsigned int CFMNetwork::read(float* data, unsigned int nSamples) return src.output_frames_gen; } else { +#endif for (unsigned int i = 0U; i < nSamples; i++) { unsigned short val = ((buffer[i * 2U + 0U] & 0xFFU) << 8) + ((buffer[i * 2U + 1U] & 0xFFU) << 0); @@ -224,18 +239,22 @@ unsigned int CFMNetwork::read(float* data, unsigned int nSamples) } return nSamples; +#if !defined(_WIN32) && !defined(_WIN64) } +#endif } void CFMNetwork::reset() { +#if !defined(_WIN32) && !defined(_WIN64) assert(m_incoming != NULL); assert(m_outgoing != NULL); - m_buffer.clear(); - ::src_reset(m_incoming); ::src_reset(m_outgoing); +#endif + + m_buffer.clear(); } void CFMNetwork::close() @@ -268,4 +287,3 @@ bool CFMNetwork::writePoll() return m_socket.write(buffer, 3U, m_addr, m_addrLen); } - diff --git a/FMNetwork.h b/FMNetwork.h index c4314fd..aa99751 100644 --- a/FMNetwork.h +++ b/FMNetwork.h @@ -23,7 +23,9 @@ #include "UDPSocket.h" #include "Timer.h" +#if !defined(_WIN32) && !defined(_WIN64) #include +#endif #include #include @@ -58,8 +60,10 @@ private: bool m_enabled; CRingBuffer m_buffer; CTimer m_pollTimer; +#if !defined(_WIN32) && !defined(_WIN64) SRC_STATE* m_incoming; SRC_STATE* m_outgoing; +#endif bool writePoll(); }; diff --git a/Version.h b/Version.h index d4a354b..1331f35 100644 --- a/Version.h +++ b/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20201106"; +const char* VERSION = "20201109"; #endif