@@ -547,6 +547,63 @@ LUA_FUNCTION_STATIC(IGModAudioChannel_CreateEncoder)
547547 return 2 ;
548548}
549549
550+ LUA_FUNCTION_STATIC (IGModAudioChannelEncoder_SetPaused)
551+ {
552+ IGModAudioChannelEncoder* encoder = Get_IGModAudioChannelEncoder (LUA, 1 , true );
553+
554+ encoder->SetPaused (LUA->GetBool (2 ));
555+ return 0 ;
556+ }
557+
558+ LUA_FUNCTION_STATIC (IGModAudioChannelEncoder_GetState)
559+ {
560+ IGModAudioChannelEncoder* encoder = Get_IGModAudioChannelEncoder (LUA, 1 , true );
561+
562+ LUA->PushNumber (encoder->GetState ());
563+ return 1 ;
564+ }
565+
566+ LUA_FUNCTION_STATIC (IGModAudioChannelEncoder_SetChannel)
567+ {
568+ IGModAudioChannelEncoder* encoder = Get_IGModAudioChannelEncoder (LUA, 1 , true );
569+ IGModAudioChannel* channel = Get_IGModAudioChannel (LUA, 2 , true );
570+
571+ const char * pErrorCode = nullptr ;
572+ encoder->SetChannel (channel, &pErrorCode);
573+ LUA->PushBool (pErrorCode == nullptr );
574+ if (pErrorCode) {
575+ LUA->PushString (pErrorCode);
576+ } else {
577+ LUA->PushNil ();
578+ }
579+ return 2 ;
580+ }
581+
582+ LUA_FUNCTION_STATIC (IGModAudioChannelEncoder_InsertVoiceData)
583+ {
584+ IGModAudioChannelEncoder* encoder = Get_IGModAudioChannelEncoder (LUA, 1 , true );
585+
586+ #if MODULE_EXISTS_VOICECHAT
587+ VoiceData* pVoiceData = Get_VoiceData (LUA, 2 , true );
588+ extern char * VoiceData_GetDecompressedData (VoiceData* pData, int * pLength); // exposed for us :3
589+
590+ int nLength = -1 ;
591+ char * pRawData = VoiceData_GetDecompressedData (pVoiceData, &nLength);
592+ if (!pRawData)
593+ {
594+ LUA->PushBool (false );
595+ return 1 ;
596+ }
597+
598+ encoder->WriteData (pRawData, nLength);
599+ #else
600+ MISSING_MODULE_ERROR (LUA, voicechat);
601+ #endif
602+
603+ LUA->PushBool (true );
604+ return 1 ;
605+ }
606+
550607LUA_FUNCTION_STATIC (bass_PlayFile)
551608{
552609 const char * filePath = LUA->CheckString (1 );
@@ -614,6 +671,23 @@ LUA_FUNCTION_STATIC(bass_GetVersion)
614671 return 1 ;
615672}
616673
674+ LUA_FUNCTION_STATIC (bass_CreateDummyChannel)
675+ {
676+ int nSampleRate = LUA->CheckNumber (1 );
677+ int nChannels = LUA->CheckNumber (2 );
678+ unsigned long nFlags = (unsigned long )LUA->CheckNumber (3 );
679+
680+ const char * pErrorCode = nullptr ;
681+ IGModAudioChannel* pChannel = gGModAudio ->CreateDummyChannel (nSampleRate, nChannels, nFlags, &pErrorCode);
682+ Push_IGModAudioChannel (LUA, pChannel);
683+ if (pErrorCode) {
684+ LUA->PushString (pErrorCode);
685+ } else {
686+ LUA->PushNil ();
687+ }
688+ return 2 ;
689+ }
690+
617691LUA_FUNCTION_STATIC (bass_LoadPlugin)
618692{
619693 const char * pError = NULL ;
@@ -666,6 +740,9 @@ void CBassModule::LuaInit(GarrysMod::Lua::ILuaInterface* pLua, bool bServerInit)
666740 Util::AddFunc (pLua, IGModAudioChannelEncoder__index, " __index" );
667741 Util::AddFunc (pLua, IGModAudioChannelEncoder__newindex, " __newindex" );
668742 Util::AddFunc (pLua, IGModAudioChannelEncoder_MakeServer, " MakeServer" );
743+ Util::AddFunc (pLua, IGModAudioChannelEncoder_SetPaused, " SetPaused" );
744+ Util::AddFunc (pLua, IGModAudioChannelEncoder_GetState, " GetState" );
745+ Util::AddFunc (pLua, IGModAudioChannelEncoder_SetChannel, " SetChannel" );
669746 pLua->Pop (1 );
670747
671748 Lua::GetLuaData (pLua)->RegisterMetaTable (Lua::IGModAudioChannel, pLua->CreateMetaTable (" IGModAudioChannel" ));
@@ -726,6 +803,7 @@ void CBassModule::LuaInit(GarrysMod::Lua::ILuaInterface* pLua, bool bServerInit)
726803 Util::AddFunc (pLua, bass_PlayURL, " PlayURL" );
727804 Util::AddFunc (pLua, bass_Update, " Update" );
728805 Util::AddFunc (pLua, bass_GetVersion, " GetVersion" );
806+ Util::AddFunc (pLua, bass_CreateDummyChannel, " CreateDummyChannel" );
729807 // Util::AddFunc(pLua, bass_LoadPlugin, "LoadPlugin");
730808 Util::FinishTable (pLua, " bass" );
731809}
0 commit comments