Skip to content

Commit 1d4b989

Browse files
committed
add all audio classes to client
1 parent 74ac24b commit 1d4b989

35 files changed

+905
-34
lines changed

api/AltV.Net.CApi.Generator/TypeRegistry.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,10 @@ public static class TypeRegistry
190190
{ "alt::IAudio*[]", "nint[]" },
191191
{ "alt::IMarker*[]", "nint[]" },
192192
{ "alt::IColShape*[]", "nint[]" },
193+
{ "alt::IAudioOutput*[]", "nint[]" },
193194
{ "alt::IMarker**", "nint" },
195+
{ "alt::IAudio**", "nint" },
196+
{ "alt::IAudioOutput**", "nint" },
194197
{ "uint8_t*", "byte*" },
195198
{ "head_blend_data_t", "HeadBlendData" },
196199
{ "head_blend_data_t&", "HeadBlendData*" },

api/AltV.Net.CApi/Libraries/ClientLibrary.cs

Lines changed: 42 additions & 17 deletions
Large diffs are not rendered by default.

api/AltV.Net.CApi/Libraries/ServerLibrary.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ public unsafe interface IServerLibrary
424424

425425
public unsafe class ServerLibrary : IServerLibrary
426426
{
427-
public readonly uint Methods = 1575;
427+
public readonly uint Methods = 1583;
428428
public delegate* unmanaged[Cdecl]<nint, nint, void> BaseObject_DeleteSyncedMetaData { get; }
429429
public delegate* unmanaged[Cdecl]<nint, nint, nint, void> BaseObject_SetSyncedMetaData { get; }
430430
public delegate* unmanaged[Cdecl]<nint, nint, void> Blip_AddTargetPlayer { get; }
@@ -1664,7 +1664,7 @@ private IntPtr GetUnmanagedPtr<T>(IDictionary<ulong, IntPtr> funcTable, ulong ha
16641664
public ServerLibrary(Dictionary<ulong, IntPtr> funcTable)
16651665
{
16661666
if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true;
1667-
else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 16891803787576742001UL) Outdated = true;
1667+
else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 1389624033249198436UL) Outdated = true;
16681668
BaseObject_DeleteSyncedMetaData = (delegate* unmanaged[Cdecl]<nint, nint, void>) GetUnmanagedPtr<BaseObject_DeleteSyncedMetaDataDelegate>(funcTable, 8228424877092269355UL, BaseObject_DeleteSyncedMetaDataFallback);
16691669
BaseObject_SetSyncedMetaData = (delegate* unmanaged[Cdecl]<nint, nint, nint, void>) GetUnmanagedPtr<BaseObject_SetSyncedMetaDataDelegate>(funcTable, 8002999088966424231UL, BaseObject_SetSyncedMetaDataFallback);
16701670
Blip_AddTargetPlayer = (delegate* unmanaged[Cdecl]<nint, nint, void>) GetUnmanagedPtr<Blip_AddTargetPlayerDelegate>(funcTable, 12411235729553386187UL, Blip_AddTargetPlayerFallback);

api/AltV.Net.CApi/Libraries/SharedLibrary.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public unsafe interface ISharedLibrary
1212
public bool Outdated { get; }
1313
public delegate* unmanaged[Cdecl]<nint, uint> Audio_GetID { get; }
1414
public delegate* unmanaged[Cdecl]<nint, uint> AudioAttachedOutput_GetID { get; }
15+
public delegate* unmanaged[Cdecl]<nint, uint> AudioFilter_GetID { get; }
1516
public delegate* unmanaged[Cdecl]<nint, uint> AudioFrontendOutput_GetID { get; }
1617
public delegate* unmanaged[Cdecl]<nint, uint> AudioOutput_GetID { get; }
1718
public delegate* unmanaged[Cdecl]<nint, uint> AudioWorldOutput_GetID { get; }
@@ -188,6 +189,8 @@ public unsafe interface ISharedLibrary
188189
public delegate* unmanaged[Cdecl]<nint, Rotation, void> Entity_SetRotation { get; }
189190
public delegate* unmanaged[Cdecl]<nint, void> Event_Cancel { get; }
190191
public delegate* unmanaged[Cdecl]<nint, byte> Event_WasCancelled { get; }
192+
public delegate* unmanaged[Cdecl]<nint, void> FreeAudioArray { get; }
193+
public delegate* unmanaged[Cdecl]<nint, void> FreeAudioOutputArray { get; }
191194
public delegate* unmanaged[Cdecl]<nint, void> FreeBlipArray { get; }
192195
public delegate* unmanaged[Cdecl]<nint, void> FreeCharArray { get; }
193196
public delegate* unmanaged[Cdecl]<nint, void> FreeCheckpointArray { get; }
@@ -361,9 +364,10 @@ public unsafe interface ISharedLibrary
361364

362365
public unsafe class SharedLibrary : ISharedLibrary
363366
{
364-
public readonly uint Methods = 1575;
367+
public readonly uint Methods = 1583;
365368
public delegate* unmanaged[Cdecl]<nint, uint> Audio_GetID { get; }
366369
public delegate* unmanaged[Cdecl]<nint, uint> AudioAttachedOutput_GetID { get; }
370+
public delegate* unmanaged[Cdecl]<nint, uint> AudioFilter_GetID { get; }
367371
public delegate* unmanaged[Cdecl]<nint, uint> AudioFrontendOutput_GetID { get; }
368372
public delegate* unmanaged[Cdecl]<nint, uint> AudioOutput_GetID { get; }
369373
public delegate* unmanaged[Cdecl]<nint, uint> AudioWorldOutput_GetID { get; }
@@ -540,6 +544,8 @@ public unsafe class SharedLibrary : ISharedLibrary
540544
public delegate* unmanaged[Cdecl]<nint, Rotation, void> Entity_SetRotation { get; }
541545
public delegate* unmanaged[Cdecl]<nint, void> Event_Cancel { get; }
542546
public delegate* unmanaged[Cdecl]<nint, byte> Event_WasCancelled { get; }
547+
public delegate* unmanaged[Cdecl]<nint, void> FreeAudioArray { get; }
548+
public delegate* unmanaged[Cdecl]<nint, void> FreeAudioOutputArray { get; }
543549
public delegate* unmanaged[Cdecl]<nint, void> FreeBlipArray { get; }
544550
public delegate* unmanaged[Cdecl]<nint, void> FreeCharArray { get; }
545551
public delegate* unmanaged[Cdecl]<nint, void> FreeCheckpointArray { get; }
@@ -713,6 +719,8 @@ public unsafe class SharedLibrary : ISharedLibrary
713719
private static uint Audio_GetIDFallback(nint _audio) => throw new Exceptions.OutdatedSdkException("Audio_GetID", "Audio_GetID SDK method is outdated. Please update your module nuget");
714720
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint AudioAttachedOutput_GetIDDelegate(nint _audioAttachedOutput);
715721
private static uint AudioAttachedOutput_GetIDFallback(nint _audioAttachedOutput) => throw new Exceptions.OutdatedSdkException("AudioAttachedOutput_GetID", "AudioAttachedOutput_GetID SDK method is outdated. Please update your module nuget");
722+
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint AudioFilter_GetIDDelegate(nint _audioFilter);
723+
private static uint AudioFilter_GetIDFallback(nint _audioFilter) => throw new Exceptions.OutdatedSdkException("AudioFilter_GetID", "AudioFilter_GetID SDK method is outdated. Please update your module nuget");
716724
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint AudioFrontendOutput_GetIDDelegate(nint _audioFrontendOutput);
717725
private static uint AudioFrontendOutput_GetIDFallback(nint _audioFrontendOutput) => throw new Exceptions.OutdatedSdkException("AudioFrontendOutput_GetID", "AudioFrontendOutput_GetID SDK method is outdated. Please update your module nuget");
718726
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint AudioOutput_GetIDDelegate(nint _audioOutput);
@@ -1065,6 +1073,10 @@ public unsafe class SharedLibrary : ISharedLibrary
10651073
private static void Event_CancelFallback(nint _event) => throw new Exceptions.OutdatedSdkException("Event_Cancel", "Event_Cancel SDK method is outdated. Please update your module nuget");
10661074
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte Event_WasCancelledDelegate(nint _event);
10671075
private static byte Event_WasCancelledFallback(nint _event) => throw new Exceptions.OutdatedSdkException("Event_WasCancelled", "Event_WasCancelled SDK method is outdated. Please update your module nuget");
1076+
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void FreeAudioArrayDelegate(nint _audioArray);
1077+
private static void FreeAudioArrayFallback(nint _audioArray) => throw new Exceptions.OutdatedSdkException("FreeAudioArray", "FreeAudioArray SDK method is outdated. Please update your module nuget");
1078+
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void FreeAudioOutputArrayDelegate(nint _audioOutputArray);
1079+
private static void FreeAudioOutputArrayFallback(nint _audioOutputArray) => throw new Exceptions.OutdatedSdkException("FreeAudioOutputArray", "FreeAudioOutputArray SDK method is outdated. Please update your module nuget");
10681080
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void FreeBlipArrayDelegate(nint _blipArray);
10691081
private static void FreeBlipArrayFallback(nint _blipArray) => throw new Exceptions.OutdatedSdkException("FreeBlipArray", "FreeBlipArray SDK method is outdated. Please update your module nuget");
10701082
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void FreeCharArrayDelegate(nint charArray);
@@ -1412,9 +1424,10 @@ private IntPtr GetUnmanagedPtr<T>(IDictionary<ulong, IntPtr> funcTable, ulong ha
14121424
public SharedLibrary(Dictionary<ulong, IntPtr> funcTable)
14131425
{
14141426
if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true;
1415-
else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 16891803787576742001UL) Outdated = true;
1427+
else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 1389624033249198436UL) Outdated = true;
14161428
Audio_GetID = (delegate* unmanaged[Cdecl]<nint, uint>) GetUnmanagedPtr<Audio_GetIDDelegate>(funcTable, 4464042055475980737UL, Audio_GetIDFallback);
14171429
AudioAttachedOutput_GetID = (delegate* unmanaged[Cdecl]<nint, uint>) GetUnmanagedPtr<AudioAttachedOutput_GetIDDelegate>(funcTable, 17725794901805112189UL, AudioAttachedOutput_GetIDFallback);
1430+
AudioFilter_GetID = (delegate* unmanaged[Cdecl]<nint, uint>) GetUnmanagedPtr<AudioFilter_GetIDDelegate>(funcTable, 8824535635529306325UL, AudioFilter_GetIDFallback);
14181431
AudioFrontendOutput_GetID = (delegate* unmanaged[Cdecl]<nint, uint>) GetUnmanagedPtr<AudioFrontendOutput_GetIDDelegate>(funcTable, 11669001756876579861UL, AudioFrontendOutput_GetIDFallback);
14191432
AudioOutput_GetID = (delegate* unmanaged[Cdecl]<nint, uint>) GetUnmanagedPtr<AudioOutput_GetIDDelegate>(funcTable, 2317043539516492557UL, AudioOutput_GetIDFallback);
14201433
AudioWorldOutput_GetID = (delegate* unmanaged[Cdecl]<nint, uint>) GetUnmanagedPtr<AudioWorldOutput_GetIDDelegate>(funcTable, 6392405167754945669UL, AudioWorldOutput_GetIDFallback);
@@ -1591,6 +1604,8 @@ public SharedLibrary(Dictionary<ulong, IntPtr> funcTable)
15911604
Entity_SetRotation = (delegate* unmanaged[Cdecl]<nint, Rotation, void>) GetUnmanagedPtr<Entity_SetRotationDelegate>(funcTable, 7991844148745066430UL, Entity_SetRotationFallback);
15921605
Event_Cancel = (delegate* unmanaged[Cdecl]<nint, void>) GetUnmanagedPtr<Event_CancelDelegate>(funcTable, 4913360914395691424UL, Event_CancelFallback);
15931606
Event_WasCancelled = (delegate* unmanaged[Cdecl]<nint, byte>) GetUnmanagedPtr<Event_WasCancelledDelegate>(funcTable, 15923635865693275395UL, Event_WasCancelledFallback);
1607+
FreeAudioArray = (delegate* unmanaged[Cdecl]<nint, void>) GetUnmanagedPtr<FreeAudioArrayDelegate>(funcTable, 1942658126885529974UL, FreeAudioArrayFallback);
1608+
FreeAudioOutputArray = (delegate* unmanaged[Cdecl]<nint, void>) GetUnmanagedPtr<FreeAudioOutputArrayDelegate>(funcTable, 2308827124743768700UL, FreeAudioOutputArrayFallback);
15941609
FreeBlipArray = (delegate* unmanaged[Cdecl]<nint, void>) GetUnmanagedPtr<FreeBlipArrayDelegate>(funcTable, 12999641840922984330UL, FreeBlipArrayFallback);
15951610
FreeCharArray = (delegate* unmanaged[Cdecl]<nint, void>) GetUnmanagedPtr<FreeCharArrayDelegate>(funcTable, 1943718755920302008UL, FreeCharArrayFallback);
15961611
FreeCheckpointArray = (delegate* unmanaged[Cdecl]<nint, void>) GetUnmanagedPtr<FreeCheckpointArrayDelegate>(funcTable, 16715093567839162130UL, FreeCheckpointArrayFallback);

api/AltV.Net.Client/Alt.Create.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ public partial class Alt
1616
public static IWebView CreateWebView(string url, bool isOverlay = false, Vector2? pos = null, Vector2? size = null) => Core.CreateWebView(url, isOverlay, pos, size);
1717
public static IWebView CreateWebView(string url, uint propHash, string targetTexture) => Core.CreateWebView(url, propHash, targetTexture);
1818
public static IRmlDocument CreateRmlDocument(string url) => Core.CreateRmlDocument(url);
19-
public static IAudio CreateAudio(string source, float volume, uint category, bool frontend) => Core.CreateAudio(source, volume, category, frontend);
19+
public static IAudio CreateAudio(string source, float volume) => Core.CreateAudio(source, volume);
20+
public static IAudioFilter CreateAudioFilter(uint hash) => Core.CreateAudioFilter(hash);
21+
public static IAudioFrontendOutput CreateFrontendOutput(uint categoryHash) => Core.CreateFrontendOutput(categoryHash);
22+
public static IAudioWorldOutput CreateWorldOutput(uint categoryHash, Position pos) => Core.CreateWorldOutput(categoryHash, pos);
23+
public static IAudioAttachedOutput CreateAttachedOutput(uint categoryHash, IWorldObject worldObject) => Core.CreateAttachedOutput(categoryHash, worldObject);
2024
public static IObject CreateObject(uint modelHash, Position position, Rotation rotation, bool noOffset = false, bool dynamic = false, bool useStreaming = false, uint streamingDistance = 0) => Core.CreateObject(modelHash, position, rotation, noOffset, dynamic, useStreaming, streamingDistance);
2125
public static IHttpClient CreateHttpClient() => Core.CreateHttpClient();
2226
public static IWebSocketClient CreateWebSocketClient(string url) => Core.CreateWebSocketClient(url);

api/AltV.Net.Client/Core.cs

Lines changed: 76 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -359,26 +359,98 @@ public ICheckpoint CreateCheckpoint(CheckpointType type, Vector3 pos, Vector3 ne
359359
return PoolManager.Checkpoint.Create(this, ptr, id);
360360
}
361361

362-
public IntPtr CreateAudioPtr(out uint id, string source, float volume, uint category, bool frontend)
362+
public IntPtr CreateAudioPtr(out uint id, string source, float volume)
363363
{
364364
unsafe
365365
{
366366
uint pId = default;
367367
var sourcePtr = MemoryUtils.StringToHGlobalUtf8(source);
368-
var ptr = Library.Client.Core_CreateAudio(NativePointer, Resource.NativePointer, sourcePtr, volume, category, (byte) (frontend ? 1 : 0), &pId);
368+
var ptr = Library.Client.Core_CreateAudio(NativePointer, sourcePtr, volume, Resource.NativePointer, &pId);
369369
id = pId;
370370
Marshal.FreeHGlobal(sourcePtr);
371371
return ptr;
372372
}
373373
}
374374

375-
public IAudio CreateAudio(string source, float volume, uint category, bool frontend)
375+
public IAudio CreateAudio(string source, float volume)
376376
{
377-
var ptr = CreateAudioPtr(out var id, source, volume, category, frontend);
377+
var ptr = CreateAudioPtr(out var id, source, volume);
378378
if (ptr == IntPtr.Zero) return null;
379379
return PoolManager.Audio.Create(this, ptr, id);
380380
}
381381

382+
public IntPtr CreateAudioFilterPtr(out uint id, uint hash)
383+
{
384+
unsafe
385+
{
386+
uint pId = default;
387+
var ptr = Library.Client.Core_CreateAudioFilter(NativePointer, hash, Resource.NativePointer, &pId);
388+
id = pId;
389+
return ptr;
390+
}
391+
}
392+
393+
public IntPtr CreateFrontendOutputPtr(out uint id, uint categoryHash)
394+
{
395+
unsafe
396+
{
397+
uint pId = default;
398+
var ptr = Library.Client.Core_CreateFrontendOutput(NativePointer, categoryHash, Resource.NativePointer, &pId);
399+
id = pId;
400+
return ptr;
401+
}
402+
}
403+
404+
public IntPtr CreateWorldOutputPtr(out uint id, uint categoryHash, Position pos)
405+
{
406+
unsafe
407+
{
408+
uint pId = default;
409+
var ptr = Library.Client.Core_CreateWorldOutput(NativePointer, categoryHash, pos, Resource.NativePointer, &pId);
410+
id = pId;
411+
return ptr;
412+
}
413+
}
414+
415+
public IntPtr CreateAttachedOutputPtr(out uint id, uint categoryHash, IWorldObject worldObject)
416+
{
417+
unsafe
418+
{
419+
uint pId = default;
420+
var ptr = Library.Client.Core_CreateAttachedOutput(NativePointer, categoryHash, worldObject.WorldObjectNativePointer, Resource.NativePointer, &pId);
421+
id = pId;
422+
return ptr;
423+
}
424+
}
425+
426+
public IAudioFilter CreateAudioFilter(uint hash)
427+
{
428+
var ptr = CreateAudioFilterPtr(out var id, hash);
429+
if (ptr == IntPtr.Zero) return null;
430+
return PoolManager.AudioFilter.Create(this, ptr, id);
431+
}
432+
433+
public IAudioFrontendOutput CreateFrontendOutput(uint categoryHash)
434+
{
435+
var ptr = CreateFrontendOutputPtr(out var id, categoryHash);
436+
if (ptr == IntPtr.Zero) return null;
437+
return PoolManager.AudioFrontendOutput.Create(this, ptr, id);
438+
}
439+
440+
public IAudioWorldOutput CreateWorldOutput(uint categoryHash, Position pos)
441+
{
442+
var ptr = CreateWorldOutputPtr(out var id, categoryHash, pos);
443+
if (ptr == IntPtr.Zero) return null;
444+
return PoolManager.AudioWorldOutput.Create(this, ptr, id);
445+
}
446+
447+
public IAudioAttachedOutput CreateAttachedOutput(uint categoryHash, IWorldObject worldObject)
448+
{
449+
var ptr = CreateAttachedOutputPtr(out var id, categoryHash, worldObject);
450+
if (ptr == IntPtr.Zero) return null;
451+
return PoolManager.AudioAttachedOutput.Create(this, ptr, id);
452+
}
453+
382454
public IntPtr CreateObjectPtr(out uint id, uint modelHash, Position position, Rotation rotation, bool noOffset = false,
383455
bool dynamic = false, bool useStreaming = false, uint streamingDistance = 0)
384456
{

api/AltV.Net.Client/Elements/Entities/Audio.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public Audio(ICore core, IntPtr audioNativePointer, uint id) : base(core, GetBas
3131
}
3232

3333
[Obsolete("Use Alt.CreateAudio instead")]
34-
public Audio(ICore core, string source, float volume, uint category, bool frontend) : this(core, core.CreateAudioPtr(out var id,source, volume, category, frontend), id)
34+
public Audio(ICore core, string source, float volume) : this(core, core.CreateAudioPtr(out var id,source, volume), id)
3535
{
3636
core.PoolManager.Audio.Add(this);
3737
}
@@ -126,7 +126,7 @@ public double MaxTime
126126
}
127127
}
128128

129-
public bool Playing
129+
public bool IsPlaying
130130
{
131131
get
132132
{
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using AltV.Net.Client.Elements.Interfaces;
2+
using AltV.Net.Elements.Entities;
3+
4+
namespace AltV.Net.Client.Elements.Entities;
5+
6+
public class AudioAttachedOutput : AudioOutput, IAudioAttachedOutput
7+
{
8+
public static IntPtr GetAudioNativePointer(ICore core, IntPtr audioAttachedOutputNativePointer)
9+
{
10+
unsafe
11+
{
12+
return core.Library.Client.AudioFrontendOutput_GetAudioOutputObject(audioAttachedOutputNativePointer);
13+
}
14+
}
15+
public AudioAttachedOutput(ICore core, IntPtr audioAttachedOutputNativePointer, uint id) : base(core,
16+
GetAudioNativePointer(core, audioAttachedOutputNativePointer), BaseObjectType.AudioOutputAttached, id)
17+
{
18+
AudioAttachedOutputNativePointer = audioAttachedOutputNativePointer;
19+
}
20+
21+
public IntPtr AudioAttachedOutputNativePointer { get; }
22+
23+
public IWorldObject Entity
24+
{
25+
get
26+
{
27+
unsafe
28+
{
29+
CheckIfEntityExists();
30+
BaseObjectType type = BaseObjectType.Audio;
31+
var entityPointer = Core.Library.Client.AudioAttachedOutput_GetEntity(AudioAttachedOutputNativePointer, &type);
32+
if (entityPointer == IntPtr.Zero) return null;
33+
return (IWorldObject)Core.PoolManager.Get(entityPointer, type);
34+
}
35+
}
36+
set
37+
{
38+
unsafe
39+
{
40+
CheckIfEntityExists();
41+
Core.Library.Client.AudioAttachedOutput_SetEntity(AudioAttachedOutputNativePointer, value.WorldObjectNativePointer);
42+
}
43+
}
44+
}
45+
46+
public override IntPtr NativePointer => AudioAttachedOutputNativePointer;
47+
}

0 commit comments

Comments
 (0)