This commit is contained in:
2025-11-24 14:19:51 +05:30
commit f5c1412b28
6734 changed files with 1527575 additions and 0 deletions

View File

@ -0,0 +1,40 @@
#
# This file was taken from RakNet 4.082.
# Please see licenses/RakNet license.txt for the underlying license and related copyright.
#
#
# Modified work: Copyright (c) 2017-2019, SLikeSoft UG (haftungsbeschränkt)
#
# This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
# license found in the license.txt file in the root directory of this source tree.
#
cmake_minimum_required(VERSION 2.6)
IF(WIN32 AND NOT UNIX)
GETCURRENTFOLDER()
FINDPORTAUDIO()
FINDDSOUND()
project(${current_folder})
FILE(GLOB ALL_CPP_SRCS *.cpp ${SLikeNet_SOURCE_DIR}/DependentExtensions/RakVoice.cpp)
FILE(GLOB ALL_HEADER_SRCS *.h ${SLikeNet_SOURCE_DIR}/DependentExtensions/RakVoice.h)
FILE(GLOB SPEEXFILES ${speex_SOURCE_DIR}/win32/*.h ${speex_SOURCE_DIR}/include/*.h ${speex_SOURCE_DIR}/libspeex/*.h ${speex_SOURCE_DIR}/include/speex/*.h ${speex_SOURCE_DIR}/libspeex/*.c)
LIST(REMOVE_ITEM SPEEXFILES
${speex_SOURCE_DIR}/libspeex/pcm_wrapper.h)
LIST(REMOVE_ITEM SPEEXFILES
${speex_SOURCE_DIR}/libspeex/pcm_wrapper.c)
SOURCE_GROUP(Speex FILES ${SPEEXFILES})
ADDCPPDEF(HAVE_CONFIG_H)
ADDCPPDEF(_UNICODE)
ADDCPPDEF(UNICODE)
include_directories(${SLIKENET_HEADER_FILES} ./ ${PORTAUDIO_INCLUDE_DIR} ${SLikeNet_SOURCE_DIR}/DependentExtensions ${speex_SOURCE_DIR}/include ${portaudio_SOURCE_DIR} ${speex_SOURCE_DIR}/win32 ${DSOUND_INCLUDE_DIR})
add_executable(${current_folder} ${ALL_CPP_SRCS} ${ALL_HEADER_SRCS} ${SPEEXFILES})
target_link_libraries(${current_folder} ${SLIKENET_COMMON_LIBS} winmm.lib ${DSOUND_LIBRARIES})
VSUBFOLDER(${current_folder} Samples/Voice)
ENDIF(WIN32 AND NOT UNIX)

View File

@ -0,0 +1,402 @@
/*
* Original work: Copyright (c) 2014, Oculus VR, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
*
*
* Modified work: Copyright (c) 2016-2020, SLikeSoft UG (haftungsbeschränkt)
*
* This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
* license found in the license.txt file in the root directory of this source tree.
*/
#include "DSoundVoiceAdapter.h"
#include "slikenet/assert.h"
#include "slikenet/peerinterface.h"
#include <tchar.h>
/// To test sending to myself
//#define _TEST_LOOPBACK
using namespace SLNet;
DSoundVoiceAdapter DSoundVoiceAdapter::instance;
DSoundVoiceAdapter::DSoundVoiceAdapter()
{
m_rakVoice = 0;
ds = 0;
dsC = 0;
dsbIncoming = 0;
dsbOutgoing = 0;
m_mute = false;
memset(incomingBufferNotifications,0,sizeof(incomingBufferNotifications));
memset(outgoingBufferNotifications,0,sizeof(outgoingBufferNotifications));
}
DSoundVoiceAdapter* DSoundVoiceAdapter::Instance()
{
return &instance;
}
bool DSoundVoiceAdapter::SetupAdapter(RakVoice *rakVoice, HWND hwnd, DWORD dwCoopLevel)
{
// Check if it was already initialized
RakAssert(ds == 0);
if (ds != 0)
return false;
HRESULT hr;
if (FAILED(hr = DirectSoundCreate8(nullptr, &ds, nullptr)))
{
DXTRACE_ERR_MSGBOX(_T("DirectSoundCreate8, when initiliazing DirectSound"), hr);
return false;
}
if (FAILED(hr = ds->SetCooperativeLevel(hwnd, dwCoopLevel)))
{
DXTRACE_ERR_MSGBOX(_T("IDirectSound8::SetCooperativeLevel"), hr);
Release();
return false;
}
// Check if the rest of the initialization fails, and if so, release any allocated resources
if (SetupAdapter(rakVoice))
{
return true;
}
else
{
Release();
return false;
}
}
bool DSoundVoiceAdapter::SetupAdapter(RakVoice *rakVoice, IDirectSound8 *pDS)
{
// Check if it was already initialized
RakAssert(ds == 0);
if (ds != 0)
return false;
// User provided his own device object, so use it and add another reference
pDS->AddRef();
ds = pDS;
// Check if the rest of the initialization fails, and if so, release any allocated resources
if (SetupAdapter(rakVoice))
{
return true;
}
else
{
Release();
return false;
}
}
bool DSoundVoiceAdapter::SetupAdapter(RakVoice *rakVoice)
{
RakAssert(rakVoice);
// Make sure rakVoice was initialized
RakAssert((rakVoice->IsInitialized())&&(rakVoice->GetRakPeerInterface()!= nullptr));
m_rakVoice = rakVoice;
if (!SetupIncomingBuffer())
return false;
return SetupOutgoingBuffer();
}
bool DSoundVoiceAdapter::SetupIncomingBuffer()
{
//
//
// Create the buffer for incoming sound
//
//
WAVEFORMATEX wfx;
DSBUFFERDESC dsbdesc;
LPDIRECTSOUNDBUFFER pDsb = nullptr;
HRESULT hr;
// Set up WAV format structure.
memset(&wfx, 0, sizeof(WAVEFORMATEX));
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = 1;
wfx.nSamplesPerSec = m_rakVoice->GetSampleRate();
wfx.nBlockAlign = 2;
wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;
wfx.wBitsPerSample = 16;
// Set up DSBUFFERDESC structure.
memset(&dsbdesc, 0, sizeof(DSBUFFERDESC));
dsbdesc.dwSize = sizeof(DSBUFFERDESC);
dsbdesc.dwFlags = DSBCAPS_CTRLVOLUME | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPOSITIONNOTIFY
| DSBCAPS_LOCSOFTWARE; // Create in software, because DX documentation says its the best option when using notifications
dsbdesc.dwBufferBytes = m_rakVoice->GetBufferSizeBytes()*FRAMES_IN_SOUND;
dsbdesc.lpwfxFormat = &wfx;
// Create buffer.
if (FAILED(hr = ds->CreateSoundBuffer(&dsbdesc, &pDsb, nullptr)))
{
DXTRACE_ERR_MSGBOX(_T("IDirectSound8::CreateSoundBuffer, when creating buffer for incoming sound )"), hr);
return false;
}
hr = pDsb->QueryInterface(IID_IDirectSoundBuffer8, (LPVOID*) &dsbIncoming);
pDsb->Release();
if (FAILED(hr))
{
DXTRACE_ERR_MSGBOX(_T("IDirectSoundBuffer::QueryInterface, when getting IDirectSoundBuffer8 interface for incoming sound"), hr);
return false;
}
//
// Setup the notification events
//
for (int i=0; i<FRAMES_IN_SOUND; i++)
{
incomingBufferNotifications[i].dwOffset = i*m_rakVoice->GetBufferSizeBytes();
#if defined(WINDOWS_PHONE_8)
if ((incomingBufferNotifications[i].hEventNotify = CreateEventEx(0, 0, CREATE_EVENT_MANUAL_RESET, 0))== nullptr)
#else
if ((incomingBufferNotifications[i].hEventNotify = CreateEvent(nullptr, TRUE, FALSE, nullptr))== nullptr)
#endif
{
DXTRACE_ERR_MSGBOX(_T("CreateEvent"), GetLastError());
return false;
}
}
IDirectSoundNotify8 *dsbNotify=0;
if (FAILED(hr=dsbIncoming->QueryInterface(IID_IDirectSoundNotify8, (LPVOID*) &dsbNotify)))
{
DXTRACE_ERR_MSGBOX(_T("IDirectSoundBuffer8::QueryInterface, when getting IDirectSoundNotify8 interface for incoming sound"), hr);
return false;
}
hr = dsbNotify->SetNotificationPositions(FRAMES_IN_SOUND, incomingBufferNotifications);
dsbNotify->Release();
if (FAILED(hr))
{
DXTRACE_ERR_MSGBOX(_T("IDirectSoundNotify8::SetNotificationPositions, when setting notifications for incoming sound"), hr);
return false;
}
if (FAILED(hr = dsbIncoming->Play(0,0,DSBPLAY_LOOPING)))
{
DXTRACE_ERR_MSGBOX(_T("IDirectSoundBuffer8::Play, when starting incoming sound buffer"), hr);
return false;
}
return true;
}
bool DSoundVoiceAdapter::SetupOutgoingBuffer()
{
HRESULT hr;
//
//
// Create the buffer for outgoing sound
//
//
if (FAILED(hr=DirectSoundCaptureCreate8(nullptr, &dsC, nullptr)))
{
DXTRACE_ERR_MSGBOX(_T("DirectSoundCaptureCreate8"), hr);
return false;
}
// Set up WAV format structure.
WAVEFORMATEX wfx;
memset(&wfx, 0, sizeof(WAVEFORMATEX));
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = 1;
wfx.nSamplesPerSec = m_rakVoice->GetSampleRate();
wfx.nBlockAlign = 2;
wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;
wfx.wBitsPerSample = 16;
// Set up DSCBUFFERDESC structure.
DSCBUFFERDESC dscbd;
memset(&dscbd, 0, sizeof(DSCBUFFERDESC));
dscbd.dwSize = sizeof(DSCBUFFERDESC);
dscbd.dwFlags = 0;
dscbd.dwBufferBytes = m_rakVoice->GetBufferSizeBytes()*FRAMES_IN_SOUND;
dscbd.dwReserved = 0;
dscbd.lpwfxFormat = &wfx;
dscbd.dwFXCount = 0;
dscbd.lpDSCFXDesc = nullptr;
// Create capture buffer.
LPDIRECTSOUNDCAPTUREBUFFER pDscb = nullptr;
if (FAILED(hr = dsC->CreateCaptureBuffer(&dscbd, &pDscb, nullptr)))
{
DXTRACE_ERR_MSGBOX(_T("IDirectSoundCapture8::CreateCaptureBuffer, when creating buffer for outgoing sound )"), hr);
return false;
}
hr = pDscb->QueryInterface(IID_IDirectSoundCaptureBuffer8, (LPVOID*) &dsbOutgoing);
pDscb->Release();
if (FAILED(hr))
{
DXTRACE_ERR_MSGBOX(_T("IDirectSoundBuffer::QueryInterface, when getting IDirectSoundCaptureBuffer8 interface for outgoing sound"), hr);
return false;
}
//
// Setup the notification events
//
for (int i=0; i<FRAMES_IN_SOUND; i++)
{
outgoingBufferNotifications[i].dwOffset = i*m_rakVoice->GetBufferSizeBytes();
if ((outgoingBufferNotifications[i].hEventNotify = CreateEventEx(0, 0, CREATE_EVENT_MANUAL_RESET, 0))== nullptr)
{
DXTRACE_ERR_MSGBOX(_T("CreateEvent"), GetLastError());
return false;
}
}
IDirectSoundNotify8 *dsbNotify=0;
if (FAILED(hr=dsbOutgoing->QueryInterface(IID_IDirectSoundNotify8, (LPVOID*) &dsbNotify)))
{
DXTRACE_ERR_MSGBOX(_T("IDirectSoundCaptureBuffer8::QueryInterface, when getting IDirectSoundNotify8 interface for outgoing sound"), hr);
return false;
}
hr = dsbNotify->SetNotificationPositions(FRAMES_IN_SOUND, outgoingBufferNotifications);
dsbNotify->Release();
if (FAILED(hr))
{
DXTRACE_ERR_MSGBOX(_T("IDirectSoundNotify8::SetNotificationPositions, when setting notifications for outgoing sound"), hr);
return false;
}
if (FAILED(hr = dsbOutgoing->Start(DSCBSTART_LOOPING)))
{
DXTRACE_ERR_MSGBOX(_T("IDirectSoundCaptureBuffer8::Start, when starting outgoing sound buffer"), hr);
return false;
}
return true;
}
void DSoundVoiceAdapter::Release()
{
// Release DirectSound buffer used for incoming voice
if (dsbIncoming)
{
dsbIncoming->Stop();
dsbIncoming->Release();
dsbIncoming = 0;
}
// Release DirectSound buffer used for outgoing voice
if (dsbOutgoing)
{
dsbOutgoing->Stop();
dsbOutgoing->Release();
dsbOutgoing = 0;
}
// Release DirectSound device object
if (ds)
{
ds->Release();
ds = 0;
}
if (dsC)
{
dsC->Release();
dsC = 0;
}
// Release the notification events
for (int i=0; i<FRAMES_IN_SOUND;i++)
{
if (incomingBufferNotifications[i].hEventNotify!=0 && CloseHandle(incomingBufferNotifications[i].hEventNotify)==0)
{
DXTRACE_ERR_MSGBOX(_T("CloseHandle"), GetLastError());
}
if (outgoingBufferNotifications[i].hEventNotify!=0 && CloseHandle(outgoingBufferNotifications[i].hEventNotify)==0)
{
DXTRACE_ERR_MSGBOX(_T("CloseHandle"), GetLastError());
}
}
memset(incomingBufferNotifications,0, sizeof(incomingBufferNotifications));
memset(outgoingBufferNotifications,0, sizeof(outgoingBufferNotifications));
}
IDirectSound8* DSoundVoiceAdapter::GetDSDeviceObject()
{
return ds;
}
void DSoundVoiceAdapter::Update()
{
HRESULT hr;
void *audioPtr;
DWORD audioPtrbytes;
for (int i=0; i<FRAMES_IN_SOUND; i++)
{
//
// Update incoming sound
//
if (WaitForSingleObject(incomingBufferNotifications[i].hEventNotify, 0)==WAIT_OBJECT_0)
{
// The lock offset is the buffer right before the one the event refers to
DWORD dwOffset = (i==0) ? incomingBufferNotifications[FRAMES_IN_SOUND-1].dwOffset : incomingBufferNotifications[i-1].dwOffset;
hr = dsbIncoming->Lock(dwOffset, m_rakVoice->GetBufferSizeBytes(), &audioPtr, &audioPtrbytes, nullptr, nullptr, 0);
// #med - should change GetBufferSizeBytes()-interface to unsigned int return
RakAssert(audioPtrbytes==static_cast<unsigned int>(m_rakVoice->GetBufferSizeBytes()));
if (SUCCEEDED(hr))
{
m_rakVoice->ReceiveFrame(audioPtr);
dsbIncoming->Unlock(audioPtr, audioPtrbytes, nullptr, 0);
}
ResetEvent(incomingBufferNotifications[i].hEventNotify);
}
//
// Update outgoing sound
//
if (WaitForSingleObject(outgoingBufferNotifications[i].hEventNotify, 0)==WAIT_OBJECT_0)
{
/* If we're set to mute, we don't send anything, and just reset the event */
if (!m_mute)
{
// The lock offset is the buffer right before the one the event refers to
DWORD dwOffset = (i==0) ? outgoingBufferNotifications[FRAMES_IN_SOUND-1].dwOffset : outgoingBufferNotifications[i-1].dwOffset;
hr = dsbOutgoing->Lock(dwOffset, m_rakVoice->GetBufferSizeBytes(), &audioPtr, &audioPtrbytes, nullptr, nullptr, 0);
// #med - should change GetBufferSizeBytes()-interface to unsigned int return
RakAssert(audioPtrbytes == static_cast<unsigned int>(m_rakVoice->GetBufferSizeBytes()));
if (SUCCEEDED(hr))
{
BroadcastFrame(audioPtr);
dsbOutgoing->Unlock(audioPtr, audioPtrbytes, nullptr, 0);
}
}
ResetEvent(outgoingBufferNotifications[i].hEventNotify);
}
}
}
void DSoundVoiceAdapter::BroadcastFrame(void *ptr)
{
#ifndef _TEST_LOOPBACK
unsigned i;
unsigned int numPeers = m_rakVoice->GetRakPeerInterface()->GetMaximumNumberOfPeers();
for (i=0; i < numPeers; i++)
{
m_rakVoice->SendFrame(m_rakVoice->GetRakPeerInterface()->GetGUIDFromIndex(i), ptr);
}
#else
m_rakVoice->SendFrame(SLNet::UNASSIGNED_SYSTEM_ADDRESS, ptr);
#endif
}
void DSoundVoiceAdapter::SetMute(bool mute)
{
m_mute = mute;
}

View File

@ -0,0 +1,129 @@
/*
* Original work: Copyright (c) 2014, Oculus VR, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
*
*
* Modified work: Copyright (c) 2016-2017, SLikeSoft UG (haftungsbeschränkt)
*
* This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
* license found in the license.txt file in the root directory of this source tree.
*/
/// \file
/// \brief Connection between DirectSound and RakVoice
///
/*
This sample uses RakVoice along with DirectSound 8.
Instead of using IDirectSoundBuffer::GetCurrentPosition / IDirectSoundCaptureBuffer::GetCurrentPosition
to keep track of the play/write cursors, notifications are used instead.
Speex encodes/decodes sound in blocks (frames), so the size of the used DirectSound buffers is
multiple of the Speex's frame size. This makes it easier to implement DirectSound notifications at the end
of each frame.
*/
#ifndef __DSOUNDVOICEADAPTER_H
#define __DSOUNDVOICEADAPTER_H
#include "RakVoice.h"
// If you get:
// Error 1 fatal error C1083: Cannot open include file: 'dsound.h': No such file or directory
// It is because this project depends on Directx SDK. You must have the DirectX SDK installed.
// Also, check if you have the DXSDK_DIR environment variable point to the right DX SDK path,
// or change the project settings to point to the right include and lib directories
#include "dsound.h"
#include "dxerr.h"
// for Unicode support, we have to include legacy_stdio_definitions.lib with VS 2015+ so to define
// _vsnwprintf which is referenced in dxerr.lib(dxerrw.obj) but no longer exported in the standard libs
// as of VS 2015
// reference: https://connect.microsoft.com/VisualStudio/feedback/details/1134693/vs-2015-ctp-5-c-vsnwprintf-s-and-other-functions-are-not-exported-in-appcrt140-dll-breaking-linkage-of-static-libraries
#if _MSC_VER >= 1900 && defined(_DEBUG) && defined(UNICODE)
#pragma comment(lib, "legacy_stdio_definitions.lib")
#endif
namespace SLNet {
class DSoundVoiceAdapter
{
public:
// --------------------------------------------------------------------------------------------
// User functions
// --------------------------------------------------------------------------------------------
/// Returns the singleton
static DSoundVoiceAdapter* Instance();
/// \brief Setups the connection between RakVoice and DirectSound
/// This function initializes all the required DirectSound objects for you. If you already have
/// initialized DirectSound on your own, use the other supplied SetupAdater function, where you can
/// pass your own DirectSound device object
/// \param[in] rakVoice RakVoice object to use, fully Initialized AND attached to a RakPeerInterface.
/// \param[in] hwnd Your Window Handle. Required for DirectSound initialization
/// \param[in] dwCoopLevel DirectSound cooperative level. Required for DirectSound initialization
bool SetupAdapter(RakVoice *rakVoice, HWND hwnd, DWORD dwCoopLevel=DSSCL_EXCLUSIVE);
/// \brief Setups the connection between RakVoice and DirectSound
/// \param[in] rakVoice RakVoice object to use, fully Initialized AND attached to a RakPeerInterface.
/// \param[in] pDS DirectSound Device Object to use.
/// \pre IMPORTANT : Don't forget to initialized and attach rakVoice, before calling this method.
/// \return true on success, false if an error occurred.
bool SetupAdapter(RakVoice *rakVoice, IDirectSound8 *pDS);
/// \brief Releases any resources used
void Release();
/// \brief This needs to be called once per game frame
void Update();
/// \brief Turns on/off outgoing traffic
/// \param[in] true to mute, false to allow outgoing traffic.
void SetMute(bool mute);
/// \brief Returns the used DirectSound Device object
IDirectSound8* GetDSDeviceObject();
private:
enum
{
FRAMES_IN_SOUND = 2 // Number of voice frames the DirectSound buffers will contain
};
/// Internal setup function called after proper directsound initialization
bool SetupAdapter(RakVoice *rakVoice);
bool SetupIncomingBuffer();
bool SetupOutgoingBuffer();
void BroadcastFrame(void *ptr);
DSoundVoiceAdapter();
DSoundVoiceAdapter(DSoundVoiceAdapter &) {}
static DSoundVoiceAdapter instance;
RakVoice *m_rakVoice;
IDirectSound8 *ds; // Pointer to the DirectSound Device Object
IDirectSoundCapture8 *dsC; // Pointer to the DirectSound Capture Device Object
IDirectSoundBuffer8 *dsbIncoming; // DirectSound buffer for incoming sound (what you'll hear)
IDirectSoundCaptureBuffer8 *dsbOutgoing; // DirectSound buffer used for outgoing sound (capture from your microphone and send to the other players)
bool m_mute;
// DirectSound notification positions with the required Win32 Event objects
DSBPOSITIONNOTIFY incomingBufferNotifications[FRAMES_IN_SOUND];
DSBPOSITIONNOTIFY outgoingBufferNotifications[FRAMES_IN_SOUND];
};
} // namespace SLNet
#endif

View File

@ -0,0 +1,506 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug - Unicode|Win32">
<Configuration>Debug - Unicode</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release - Unicode|Win32">
<Configuration>Release - Unicode</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Retail - Unicode|Win32">
<Configuration>Retail - Unicode</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Retail|Win32">
<Configuration>Retail</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>RakVoiceDSound</ProjectName>
<ProjectGuid>{CC15F4DA-8B51-4A97-9E30-B44DDC966565}</ProjectGuid>
<RootNamespace>RakVoiceDSound</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">$(Configuration)\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">$(Configuration)\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">$(Configuration)\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">$(Configuration)\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<AdditionalOptions>/wd4996 %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./../../Source/include;./../../DependentExtensions;./../../DependentExtensions/speex-1.1.12/include;./../../DependentExtensions/speex-1.1.12/win32;$(DXSDK_DIR)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_CONSOLE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<AdditionalDependencies>./../../Lib/SLikeNet_LibStatic_Debug_Win32.lib;Winmm.lib;ws2_32.lib;Dsound.lib;Dxguid.lib;Dxerr.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(DXSDK_DIR)lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
<TargetMachine>MachineX86</TargetMachine>
<TreatLinkerWarningAsErrors>true</TreatLinkerWarningAsErrors>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">
<ClCompile>
<AdditionalOptions>/wd4996 %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./../../Source/include;./../../DependentExtensions;./../../DependentExtensions/speex-1.1.12/include;./../../DependentExtensions/speex-1.1.12/win32;$(DXSDK_DIR)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_CONSOLE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<AdditionalDependencies>./../../Lib/SLikeNet_LibStatic_Debug - Unicode_Win32.lib;Winmm.lib;ws2_32.lib;Dsound.lib;Dxguid.lib;Dxerr.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(DXSDK_DIR)lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
<TargetMachine>MachineX86</TargetMachine>
<TreatLinkerWarningAsErrors>true</TreatLinkerWarningAsErrors>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalOptions>/wd4996 %(AdditionalOptions)</AdditionalOptions>
<AdditionalIncludeDirectories>./../../Source/include;./../../DependentExtensions;./../../DependentExtensions/speex-1.1.12/include;./../../DependentExtensions/speex-1.1.12/win32;$(DXSDK_DIR)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_CONSOLE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<MinimalRebuild>true</MinimalRebuild>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<AdditionalDependencies>./../../Lib/SLikeNet_LibStatic_Release_Win32.lib;Winmm.lib;ws2_32.lib;Dsound.lib;Dxguid.lib;Dxerr.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(DXSDK_DIR)lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
<TreatLinkerWarningAsErrors>true</TreatLinkerWarningAsErrors>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">
<ClCompile>
<AdditionalOptions>/wd4996 %(AdditionalOptions)</AdditionalOptions>
<AdditionalIncludeDirectories>./../../Source/include;./../../DependentExtensions;./../../DependentExtensions/speex-1.1.12/include;./../../DependentExtensions/speex-1.1.12/win32;$(DXSDK_DIR)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_RETAIL;NDEBUG;_CONSOLE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<MinimalRebuild>true</MinimalRebuild>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<AdditionalDependencies>./../../Lib/SLikeNet_LibStatic_Retail_Win32.lib;Winmm.lib;ws2_32.lib;Dsound.lib;Dxguid.lib;Dxerr.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(DXSDK_DIR)lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
<TreatLinkerWarningAsErrors>true</TreatLinkerWarningAsErrors>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">
<ClCompile>
<AdditionalOptions>/wd4996 %(AdditionalOptions)</AdditionalOptions>
<AdditionalIncludeDirectories>./../../Source/include;./../../DependentExtensions;./../../DependentExtensions/speex-1.1.12/include;./../../DependentExtensions/speex-1.1.12/win32;$(DXSDK_DIR)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_CONSOLE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<MinimalRebuild>true</MinimalRebuild>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<AdditionalDependencies>./../../Lib/SLikeNet_LibStatic_Release - Unicode_Win32.lib;Winmm.lib;ws2_32.lib;Dsound.lib;Dxguid.lib;Dxerr.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(DXSDK_DIR)lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
<TreatLinkerWarningAsErrors>true</TreatLinkerWarningAsErrors>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">
<ClCompile>
<AdditionalOptions>/wd4996 %(AdditionalOptions)</AdditionalOptions>
<AdditionalIncludeDirectories>./../../Source/include;./../../DependentExtensions;./../../DependentExtensions/speex-1.1.12/include;./../../DependentExtensions/speex-1.1.12/win32;$(DXSDK_DIR)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_RETAIL;NDEBUG;_CONSOLE;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<MinimalRebuild>true</MinimalRebuild>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<AdditionalDependencies>./../../Lib/SLikeNet_LibStatic_Retail - Unicode_Win32.lib;Winmm.lib;ws2_32.lib;Dsound.lib;Dxguid.lib;Dxerr.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(DXSDK_DIR)lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
<TreatLinkerWarningAsErrors>true</TreatLinkerWarningAsErrors>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="DSoundVoiceAdapter.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="..\..\DependentExtensions\RakVoice.cpp" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\bits.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\cb_search.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4100;4244</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\exc_10_16_table.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\exc_10_32_table.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\exc_20_32_table.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\exc_5_256_table.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\exc_5_64_table.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\exc_8_128_table.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fftwrap.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4244</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\filters.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4100;4244</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\gain_table.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\gain_table_lbr.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\hexc_10_32_table.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\hexc_table.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\high_lsp_tables.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\jitter.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4100;4127;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4100;4127;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4100;4127;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4100;4127;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4100;4127;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4100;4127;4244;4305</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\kiss_fft.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4018;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4018;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4018;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4018;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4018;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4018;4244</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\kiss_fftr.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4244</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lbr_48k_tables.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lpc.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4244</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lsp.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4244</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lsp_tables_nb.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\ltp.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4100;4101;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4100;4101;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4100;4101;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4100;4101;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4100;4101;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4100;4101;4244;4305</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\math_approx.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4244</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\mdf.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4244;4305</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\misc.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4244</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\modes.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4305</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\nb_celp.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4701;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4701;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4701;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4701;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4701;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4701;4244;4305</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\preprocess.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4100;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4100;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4100;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4100;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4100;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4100;4244;4305</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\quant_lsp.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4244</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\sb_celp.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4244;4305</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\smallft.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4244</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\speex.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\speex_callbacks.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4100;4244</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\speex_header.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\stereo.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4100;4244</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4100;4244</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vbr.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4100;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4100;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4100;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4100;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4100;4244;4305</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4100;4244;4305</DisableSpecificWarnings>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vorbis_psy.c" />
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vq.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4100</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug - Unicode|Win32'">4100</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release - Unicode|Win32'">4100</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail|Win32'">4100</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4100</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Retail - Unicode|Win32'">4100</DisableSpecificWarnings>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="DSoundVoiceAdapter.h" />
<ClInclude Include="..\..\DependentExtensions\RakVoice.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\_kiss_fft_guts.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\arch.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\cb_search.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\cb_search_arm4.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\cb_search_bfin.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\cb_search_sse.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fftwrap.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\filters.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\filters_arm4.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\filters_bfin.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\filters_sse.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fixed_arm4.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fixed_arm5e.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fixed_bfin.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fixed_debug.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fixed_generic.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\kiss_fft.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\kiss_fftr.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lpc.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lpc_bfin.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lsp.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\ltp.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\ltp_arm4.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\ltp_bfin.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\ltp_sse.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\math_approx.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\misc.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\misc_bfin.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\modes.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\nb_celp.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\pseudofloat.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\quant_lsp.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\sb_celp.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\smallft.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\stack_alloc.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vbr.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vorbis_psy.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vq.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vq_arm4.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vq_bfin.h" />
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vq_sse.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Lib\LibStatic\LibStatic.vcxproj">
<Project>{6533bdae-0f0c-45e4-8fe7-add0f37fe063}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,279 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
</Filter>
<Filter Include="Speex">
<UniqueIdentifier>{818e0f65-e3e4-4604-926d-97ccae1f8bf4}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="DSoundVoiceAdapter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\RakVoice.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\bits.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\cb_search.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\exc_10_16_table.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\exc_10_32_table.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\exc_20_32_table.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\exc_5_256_table.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\exc_5_64_table.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\exc_8_128_table.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fftwrap.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\filters.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\gain_table.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\gain_table_lbr.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\hexc_10_32_table.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\hexc_table.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\high_lsp_tables.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\jitter.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\kiss_fft.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\kiss_fftr.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lbr_48k_tables.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lpc.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lsp.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lsp_tables_nb.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\ltp.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\math_approx.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\mdf.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\misc.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\modes.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\nb_celp.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\preprocess.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\quant_lsp.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\sb_celp.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\smallft.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\speex.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\speex_callbacks.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\speex_header.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\stereo.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vbr.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vorbis_psy.c">
<Filter>Speex</Filter>
</ClCompile>
<ClCompile Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vq.c">
<Filter>Speex</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="DSoundVoiceAdapter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\RakVoice.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\_kiss_fft_guts.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\arch.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\cb_search.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\cb_search_arm4.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\cb_search_bfin.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\cb_search_sse.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fftwrap.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\filters.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\filters_arm4.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\filters_bfin.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\filters_sse.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fixed_arm4.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fixed_arm5e.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fixed_bfin.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fixed_debug.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\fixed_generic.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\kiss_fft.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\kiss_fftr.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lpc.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lpc_bfin.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\lsp.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\ltp.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\ltp_arm4.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\ltp_bfin.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\ltp_sse.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\math_approx.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\misc.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\misc_bfin.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\modes.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\nb_celp.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\pseudofloat.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\quant_lsp.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\sb_celp.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\smallft.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\stack_alloc.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vbr.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vorbis_psy.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vq.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vq_arm4.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vq_bfin.h">
<Filter>Speex</Filter>
</ClInclude>
<ClInclude Include="..\..\DependentExtensions\speex-1.1.12\libspeex\vq_sse.h">
<Filter>Speex</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -0,0 +1,304 @@
/*
* Original work: Copyright (c) 2014, Oculus VR, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
*
*
* Modified work: Copyright (c) 2016-2020, SLikeSoft UG (haftungsbeschränkt)
*
* This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
* license found in the license.txt file in the root directory of this source tree.
*/
#define INTERACTIVE
#if defined(INTERACTIVE)
#include "slikenet/Kbhit.h"
#endif
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <limits> // used for std::numeric_limits
#include "slikenet/peerinterface.h"
#include "slikenet/MessageIdentifiers.h"
#include "slikenet/sleep.h"
#include "RakVoice.h"
#include "slikenet/statistics.h"
#include "slikenet/GetTime.h"
#include "slikenet/assert.h"
#include "slikenet/Gets.h"
#include "DSoundVoiceAdapter.h"
#include "slikenet/linux_adapter.h"
#include "slikenet/osx_adapter.h"
// Reads and writes per second of the sound data
// Speex only supports these 3 values
#define SAMPLE_RATE (8000)
//#define SAMPLE_RATE (16000)
//#define SAMPLE_RATE (32000)
#define FRAMES_PER_BUFFER (2048 / (32000 / SAMPLE_RATE))
// define sample type. Only short(16 bits sound) is supported at the moment.
typedef short SAMPLE;
SLNet::RakPeerInterface *rakPeer= nullptr;
SLNet::RakVoice rakVoice;
struct myStat{
uint64_t time;
uint64_t bitsRec;
uint64_t bitsSent;
};
// Keeps a record of the last 20 calls, to give a faster response to traffic change
void LogStats(){
const int numStats = 20;
static myStat data[numStats];
for(int i=0; i<=numStats-2; i++){
data[i] = data[i+1];
}
SLNet::RakNetStatistics *rss=rakPeer->GetStatistics(rakPeer->GetSystemAddressFromIndex(0));
unsigned int currTime = SLNet::GetTimeMS();
data[numStats-1].time = currTime;
data[numStats-1].bitsSent = BYTES_TO_BITS(rss->runningTotal[SLNet::USER_MESSAGE_BYTES_SENT]);
data[numStats-1].bitsRec = BYTES_TO_BITS(rss->runningTotal[SLNet::USER_MESSAGE_BYTES_RECEIVED_PROCESSED]);
float totalTime = (data[numStats-1].time - data[0].time) / 1000.f ;
uint64_t totalBitsSent = data[numStats-1].bitsSent - data[0].bitsSent;
uint64_t totalBitsRec = data[numStats-1].bitsRec - data[0].bitsRec;
float bpsSent = totalBitsSent/totalTime;
float bpsRec = totalBitsRec/totalTime;
float avgBpsSent = static_cast<float>(rss->valueOverLastSecond[SLNet::USER_MESSAGE_BYTES_SENT]);
float avgBpsRec = static_cast<float>(rss->valueOverLastSecond[SLNet::USER_MESSAGE_BYTES_RECEIVED_PROCESSED]);
printf("avgKbpsSent=%02.1f avgKbpsRec=%02.1f kbpsSent=%02.1f kbpsRec=%02.1f \r", avgBpsSent/1000, avgBpsRec/1000, bpsSent/1000 , bpsRec/1000);
//printf("MsgBuf=%6i SndBuf=%10i RcvBuf=%10i \r", rakVoice.GetRakPeerInterface()->GetStatistics(SLNet::UNASSIGNED_SYSTEM_ADDRESS)->messageSendBuffer[HIGH_PRIORITY], rakVoice.GetBufferedBytesToSend(SLNet::UNASSIGNED_SYSTEM_ADDRESS), rakVoice.GetBufferedBytesToReturn(SLNet::UNASSIGNED_SYSTEM_ADDRESS));
}
// Prints the current encoder parameters
void PrintParameters(void)
{
printf("\nComplexity=%3d Noise filter=%3s VAD=%3s VBR=%3s\n"
,rakVoice.GetEncoderComplexity()
,(rakVoice.IsNoiseFilterActive()) ? "ON" : "OFF"
,(rakVoice.IsVADActive()) ? "ON" : "OFF"
,(rakVoice.IsVBRActive()) ? "ON" : "OFF");
}
//
// Utility function to obtain a Console Window Handle (HWND), as explained in:
// http://support.microsoft.com/kb/124103
//
HWND GetConsoleHwnd(void)
{
#define MY_BUFSIZE 1024 // Buffer size for console window titles.
HWND hwndFound; // This is what is returned to the caller.
TCHAR pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
// WindowTitle.
TCHAR pszOldWindowTitle[MY_BUFSIZE]; // Contains original
// WindowTitle.
// Fetch current window title.
GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
// Format a "unique" NewWindowTitle.
wsprintf(pszNewWindowTitle,TEXT("%d/%d"),
GetTickCount(),
GetCurrentProcessId());
// Change current window title.
SetConsoleTitle(pszNewWindowTitle);
// Ensure window title has been updated.
Sleep(40);
// Look for NewWindowTitle.
hwndFound=FindWindow(nullptr, pszNewWindowTitle);
// Restore original window title.
SetConsoleTitle(pszOldWindowTitle);
return(hwndFound);
}
int main(void)
{
printf("A sample on how to use RakVoice together with DirectSound.\n");
printf("You need a microphone for this sample.\n");
printf("RakVoice relies on Speex for voice encoding and decoding.\n");
printf("See DependentExtensions/RakVoice/speex-1.2beta3 for speex projects.\n");
printf("For windows, I had to define HAVE_CONFIG_H, include win32/config.h,\n");
printf("and include the files under libspeex, except those that start with test.\n");
printf("Difficulty: Advanced\n\n");
bool mute=false;
bool quit;
int ch;
char port[256];
rakPeer = SLNet::RakPeerInterface::GetInstance();
#if defined(INTERACTIVE)
printf("Enter local port: ");
Gets(port, sizeof(port));
if (port[0]==0)
#endif
strcpy_s(port, "60000");
const int intLocalPort = atoi(port);
if ((intLocalPort < 0) || (intLocalPort > std::numeric_limits<unsigned short>::max())) {
printf("Failed. Specified local port %d is outside valid bounds [0, %u]", intLocalPort, std::numeric_limits<unsigned short>::max());
return -1;
}
SLNet::SocketDescriptor socketDescriptor(static_cast<unsigned short>(intLocalPort),0);
rakPeer->Startup(4, &socketDescriptor, 1);
rakPeer->SetMaximumIncomingConnections(4);
rakPeer->AttachPlugin(&rakVoice);
rakVoice.Init(SAMPLE_RATE, FRAMES_PER_BUFFER*sizeof(SAMPLE));
// Initialize our connection with DirectSound
if (!SLNet::DSoundVoiceAdapter::Instance()->SetupAdapter(&rakVoice, GetConsoleHwnd(), DSSCL_EXCLUSIVE))
{
printf("An error occurred while initializing DirectSound.\n");
exit(-1);
}
SLNet::Packet *p;
quit=false;
#if defined(INTERACTIVE)
printf("(Q)uit. (C)onnect. (D)isconnect. (M)ute. ' ' for stats.\n");
printf("(+/-)encoder complexity. (N)oise filter on/off. (V)AD on/off. (B)vbr on/off.\n");
#else
rakPeer->Connect("1.1.1.1", 60000, 0,0);
#endif
PrintParameters();
while (!quit)
{
#if defined(INTERACTIVE)
if (_kbhit())
{
ch=_getch();
if (ch=='+'){
// Increase encoder complexity
int v = rakVoice.GetEncoderComplexity();
if (v<10) rakVoice.SetEncoderComplexity(v+1);
PrintParameters();
}
else if (ch=='-'){
// Decrease encoder complexity
int v = rakVoice.GetEncoderComplexity();
if (v>0) rakVoice.SetEncoderComplexity(v-1);
PrintParameters();
}
else if (ch=='n'){
// Turn on/off noise filter
rakVoice.SetNoiseFilter(!rakVoice.IsNoiseFilterActive());
PrintParameters();
}
else if (ch=='v') {
// Turn on/off Voice detection
rakVoice.SetVAD(!rakVoice.IsVADActive());
PrintParameters();
}
else if (ch=='b') {
// Turn on/off VBR
rakVoice.SetVBR(!rakVoice.IsVBRActive());
PrintParameters();
}
else if (ch=='y')
{
quit=true;
}
else if (ch=='c')
{
char ip[256];
printf("\nEnter IP of remote system: ");
Gets(ip, sizeof(ip));
if (ip[0]==0)
strcpy_s(ip, "127.0.0.1");
printf("\nEnter port of remote system: ");
Gets(port, sizeof(port));
if (port[0]==0)
strcpy_s(port, "60000");
const int intRemotePort = atoi(port);
if ((intRemotePort < 0) || (intRemotePort > std::numeric_limits<unsigned short>::max())) {
printf("Specified remote port %d is outside valid bounds [0, %u]", intRemotePort, std::numeric_limits<unsigned short>::max());
return -1;
}
rakPeer->Connect(ip, static_cast<unsigned short>(intRemotePort), 0,0);
}
else if (ch=='m')
{
mute=!mute;
SLNet::DSoundVoiceAdapter::Instance()->SetMute(mute);
if (mute)
printf("\nNow muted.\n");
else
printf("\nNo longer muted.\n");
}
else if (ch=='d')
{
rakPeer->Shutdown(100,0);
}
else if (ch==' ')
{
char message[2048];
SLNet::RakNetStatistics *rss=rakPeer->GetStatistics(rakPeer->GetSystemAddressFromIndex(0));
StatisticsToString(rss, message, 2048, 2);
printf("%s", message);
}
else if (ch=='q')
quit=true;
ch=0;
}
#endif
p=rakPeer->Receive();
while (p)
{
if (p->data[0]==ID_CONNECTION_REQUEST_ACCEPTED)
{
printf("\nID_CONNECTION_REQUEST_ACCEPTED from %s\n", p->systemAddress.ToString());
rakVoice.RequestVoiceChannel(p->guid);
}
else if (p->data[0]==ID_RAKVOICE_OPEN_CHANNEL_REQUEST)
{
printf("\nOpen Channel request from %s\n", p->systemAddress.ToString());
}
else if (p->data[0]==ID_RAKVOICE_OPEN_CHANNEL_REPLY)
{
printf("\nGot new channel from %s\n", p->systemAddress.ToString());
}
rakPeer->DeallocatePacket(p);
p=rakPeer->Receive();
}
// Update our connection with DirectSound
SLNet::DSoundVoiceAdapter::Instance()->Update();
LogStats();
RakSleep(20);
}
// Release any FMOD resources we used, and shutdown FMOD itself
SLNet::DSoundVoiceAdapter::Instance()->Release();
rakPeer->Shutdown(300);
SLNet::RakPeerInterface::DestroyInstance(rakPeer);
return 0;
}