summaryrefslogtreecommitdiff
path: root/engine/audio/public/voice.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /engine/audio/public/voice.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'engine/audio/public/voice.h')
-rw-r--r--engine/audio/public/voice.h138
1 files changed, 138 insertions, 0 deletions
diff --git a/engine/audio/public/voice.h b/engine/audio/public/voice.h
new file mode 100644
index 0000000..2bfea81
--- /dev/null
+++ b/engine/audio/public/voice.h
@@ -0,0 +1,138 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef VOICE_H
+#define VOICE_H
+#pragma once
+
+
+#include "ivoicetweak.h"
+
+
+/*! @defgroup Voice Voice
+Defines the engine's interface to the voice code.
+@{
+*/
+
+// Voice_Init will pick a sample rate, it must be within RATE_MAX
+#define VOICE_OUTPUT_SAMPLE_RATE_LOW 11025 // Sample rate that we feed to the mixer.
+#define VOICE_OUTPUT_SAMPLE_RATE_HIGH 22050 // Sample rate that we feed to the mixer.
+#define VOICE_OUTPUT_SAMPLE_RATE_MAX 22050 // Sample rate that we feed to the mixer.
+
+
+//! Returned on error from certain voice functions.
+#define VOICE_CHANNEL_ERROR -1
+#define VOICE_CHANNEL_IN_TWEAK_MODE -2 // Returned by AssignChannel if currently in tweak mode (not an error).
+
+
+//! Initialize the voice code.
+bool Voice_Init( const char *pCodec, int nSampleRate );
+
+//! Inits voice with defaults if it is not initialized normally, e.g. for local mixer use.
+void Voice_ForceInit();
+
+//! Get the default sample rate to use for this codec
+inline int Voice_GetDefaultSampleRate( const char *pCodec ) // Inline for DEDICATED builds
+{
+ // Use legacy lower rate for speex
+ if ( Q_stricmp( pCodec, "vaudio_speex" ) == 0 )
+ {
+ return VOICE_OUTPUT_SAMPLE_RATE_LOW;
+ }
+ else if ( Q_stricmp( pCodec, "steam" ) == 0 )
+ {
+ return 0; // For the steam codec, 0 passed to voice_init means "use optimal steam voice rate"
+ }
+
+ // Use high sample rate by default for other codecs.
+ return VOICE_OUTPUT_SAMPLE_RATE_HIGH;
+}
+
+//! Shutdown the voice code.
+void Voice_Deinit();
+
+//! Returns true if the client has voice enabled
+bool Voice_Enabled( void );
+
+//! The codec voice was initialized with. Empty string if voice is not initialized.
+const char *Voice_ConfiguredCodec();
+
+//! The sample rate voice was initialized with. -1 if voice is not initialized.
+int Voice_ConfiguredSampleRate();
+
+//! Returns true if the user can hear themself speak.
+bool Voice_GetLoopback();
+
+
+//! This is called periodically by the engine when the server acks the local player talking.
+//! This tells the client DLL that the local player is talking and fades after about 200ms.
+void Voice_LocalPlayerTalkingAck();
+
+
+//! Call every frame to update the voice stuff.
+void Voice_Idle(float frametime);
+
+
+//! Returns true if mic input is currently being recorded.
+bool Voice_IsRecording();
+
+//! Begin recording input from the mic.
+bool Voice_RecordStart(
+ //! Filename to store incoming mic data, or NULL if none.
+ const char *pUncompressedFile,
+
+ //! Filename to store the output of compression and decompressiong with the codec, or NULL if none.
+ const char *pDecompressedFile,
+
+ //! If this is non-null, the voice manager will use this file for input instead of the mic.
+ const char *pMicInputFile
+ );
+
+// User wants to stop recording
+void Voice_UserDesiresStop();
+
+//! Stop recording from the mic.
+bool Voice_RecordStop();
+
+
+//! Get the most recent N bytes of compressed data. If nCount is less than the number of
+//! available bytes, it discards the first bytes and gives you the last ones.
+//! Set bFinal to true on the last call to this (it will flush out any stored voice data).
+int Voice_GetCompressedData(char *pchData, int nCount, bool bFinal);
+
+
+
+//! Pass incoming data from the server into here.
+//! The data should have been compressed and gotten through a Voice_GetCompressedData call.
+int Voice_AddIncomingData(
+ //! Channel index.
+ int nChannel,
+ //! Compressed data to add to the channel.
+ const char *pchData,
+ //! Number of bytes in pchData.
+ int nCount,
+ //! Sequence number. If a packet is missed, it adds padding so the time isn't squashed.
+ int iSequenceNumber
+ );
+
+//! Call this to reserve a voice channel for the specified entity to talk into.
+//! \return A channel index for use with Voice_AddIncomingData or VOICE_CHANNEL_ERROR on error.
+int Voice_AssignChannel(int nEntity, bool bProximity );
+
+//! Call this to get the channel index that the specified entity is talking into.
+//! \return A channel index for use with Voice_AddIncomingData or VOICE_CHANNEL_ERROR if the entity isn't talking.
+int Voice_GetChannel(int nEntity);
+
+#if !defined( NO_VOICE )
+extern IVoiceTweak g_VoiceTweakAPI;
+extern bool g_bUsingSteamVoice;
+#endif
+
+/*! @} */
+
+
+#endif // VOICE_H