diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua
index 3d954a235..7ef5ae35c 100644
--- a/autogen/lua_definitions/functions.lua
+++ b/autogen/lua_definitions/functions.lua
@@ -7391,6 +7391,12 @@ function audio_sample_play(audio, position, volume)
-- ...
end
+--- @param audio BassAudio
+--- @return nil
+function audio_sample_stop(audio)
+ -- ...
+end
+
--- @param audio BassAudio
--- @return nil
function audio_stream_destroy(audio)
diff --git a/docs/lua/functions-4.md b/docs/lua/functions-4.md
index b952265a3..474e129d3 100644
--- a/docs/lua/functions-4.md
+++ b/docs/lua/functions-4.md
@@ -5673,6 +5673,26 @@
+## [audio_sample_stop](#audio_sample_stop)
+
+### Lua Example
+`audio_sample_stop(audio)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| audio | [BassAudio](structs.md#BassAudio) |
+
+### Returns
+- None
+
+### C Prototype
+`void audio_sample_stop(struct BassAudio* audio);`
+
+[:arrow_up_small:](#)
+
+
+
## [audio_stream_destroy](#audio_stream_destroy)
### Lua Example
diff --git a/docs/lua/functions.md b/docs/lua/functions.md
index d3df62759..f9265ab32 100644
--- a/docs/lua/functions.md
+++ b/docs/lua/functions.md
@@ -1385,6 +1385,7 @@
- [audio_sample_destroy](functions-4.md#audio_sample_destroy)
- [audio_sample_load](functions-4.md#audio_sample_load)
- [audio_sample_play](functions-4.md#audio_sample_play)
+ - [audio_sample_stop](functions-4.md#audio_sample_stop)
- [audio_stream_destroy](functions-4.md#audio_stream_destroy)
- [audio_stream_get_frequency](functions-4.md#audio_stream_get_frequency)
- [audio_stream_get_looping](functions-4.md#audio_stream_get_looping)
diff --git a/src/bass_audio/bass_audio_helpers.c b/src/bass_audio/bass_audio_helpers.c
index 48277f04d..bcd16d4b6 100644
--- a/src/bass_audio/bass_audio_helpers.c
+++ b/src/bass_audio/bass_audio_helpers.c
@@ -24,6 +24,10 @@ void bassh_free_sample(HSAMPLE sample) {
BASS_SampleFree(sample);
}
+void bassh_stop_sample(HSAMPLE sample) {
+ BASS_SampleStop(sample);
+}
+
void bassh_set_looping(HSTREAM stream, BOOL loop) {
BASS_ChannelFlags(stream, loop == TRUE ? BASS_SAMPLE_LOOP : 0, BASS_SAMPLE_LOOP);
}
diff --git a/src/bass_audio/bass_audio_helpers.h b/src/bass_audio/bass_audio_helpers.h
index d1606b099..9dee7a253 100644
--- a/src/bass_audio/bass_audio_helpers.h
+++ b/src/bass_audio/bass_audio_helpers.h
@@ -7,6 +7,7 @@ HSAMPLE bassh_create_sample_from_file(char* data, QWORD length, QWORD offset);
HSTREAM bassh_sample_get_stream(HSAMPLE sample);
void bassh_free_sample(HSAMPLE sample);
+void bassh_stop_sample(HSAMPLE sample);
void bassh_set_looping(HSTREAM stream, BOOL loop);
void bassh_set_stream_volume(HSTREAM stream, float volume);
diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c
index 52ffd01c8..f9dcf190a 100644
--- a/src/pc/lua/smlua_functions_autogen.c
+++ b/src/pc/lua/smlua_functions_autogen.c
@@ -16405,6 +16405,17 @@ int smlua_func_audio_sample_play(lua_State* L) {
return 1;
}
+int smlua_func_audio_sample_stop(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ struct BassAudio* audio = (struct BassAudio*)smlua_to_cobject(L, 1, LOT_BASSAUDIO);
+ if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter 1 for function 'audio_sample_stop'"); return 0; }
+
+ audio_sample_stop(audio);
+
+ return 1;
+}
+
int smlua_func_audio_stream_destroy(lua_State* L) {
if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
@@ -19635,6 +19646,7 @@ void smlua_bind_functions_autogen(void) {
smlua_bind_function(L, "audio_sample_destroy", smlua_func_audio_sample_destroy);
smlua_bind_function(L, "audio_sample_load", smlua_func_audio_sample_load);
smlua_bind_function(L, "audio_sample_play", smlua_func_audio_sample_play);
+ smlua_bind_function(L, "audio_sample_stop", smlua_func_audio_sample_stop);
smlua_bind_function(L, "audio_stream_destroy", smlua_func_audio_stream_destroy);
smlua_bind_function(L, "audio_stream_get_frequency", smlua_func_audio_stream_get_frequency);
smlua_bind_function(L, "audio_stream_get_looping", smlua_func_audio_stream_get_looping);
diff --git a/src/pc/lua/utils/smlua_audio_utils.c b/src/pc/lua/utils/smlua_audio_utils.c
index e08b06074..065bb7cce 100644
--- a/src/pc/lua/utils/smlua_audio_utils.c
+++ b/src/pc/lua/utils/smlua_audio_utils.c
@@ -407,6 +407,13 @@ void audio_sample_destroy(struct BassAudio* audio) {
audio->rawData = NULL;
}
+void audio_sample_stop(struct BassAudio* audio) {
+ if (!audio_sanity_check(audio, false, "stop")) {
+ return;
+ }
+ bassh_stop_sample(audio->handle);
+}
+
void audio_sample_play(struct BassAudio* audio, Vec3f position, f32 volume) {
if (!audio_sanity_check(audio, false, "play")) {
return;
diff --git a/src/pc/lua/utils/smlua_audio_utils.h b/src/pc/lua/utils/smlua_audio_utils.h
index e5c7e18e7..40491aa26 100644
--- a/src/pc/lua/utils/smlua_audio_utils.h
+++ b/src/pc/lua/utils/smlua_audio_utils.h
@@ -37,6 +37,7 @@ void audio_stream_set_speed(struct BassAudio* audio, f32 initial_freq, f32 speed
struct BassAudio* audio_sample_load(const char* filename);
void audio_sample_destroy(struct BassAudio* audio);
+void audio_sample_stop(struct BassAudio* audio);
void audio_sample_play(struct BassAudio* audio, Vec3f position, f32 volume);
void audio_custom_shutdown(void);