Skip to content

Commit ca9fae1

Browse files
committed
Audio emitters removed after being played to prevent memory leak
1 parent 7f522f5 commit ca9fae1

File tree

7 files changed

+46
-3
lines changed

7 files changed

+46
-3
lines changed

Minecraft Note Block Studio.yyp

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/control_create/control_create.gml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ ds_list_add(instrument_list, new_instrument("Pling", "pling.ogg", false)
268268
instrument = instrument_list[| 0]
269269
first_custom_index = ds_list_size(instrument_list)
270270
user_instruments = 0
271+
emitters_to_remove = ds_list_create()
271272

272273
// Initialize instruments
273274
str = ""

scripts/control_draw/control_draw.gml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ if (delay > 0) delay -= 1 / (room_speed / 20)
1717
if (delay < 0) delay = 0
1818
work_mins += 1 / (room_speed * 60)
1919

20+
remove_emitters()
21+
2022
if (selected = 0) {
2123
if((tempo = 10 || tempo = 5 ||tempo = 2.5) && (block_outside = 0 && block_custom = 0))compatible = 1
2224
else if ((tempo = 20 || tempo = 6.66 || tempo = 4|| tempo = 3.33 || tempo = 2.86) && (block_outside = 0 && block_custom = 0))compatible = 2

scripts/play_sound/play_sound.gml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
/// @param key
55
/// @param volume
66

7-
var ins, key, vol, pan;
7+
var ins, key, vol, pan, newemitter, emitter
88
ins = argument0
99
key = argument1
1010
vol = argument2
@@ -18,4 +18,10 @@ audio_emitter_gain(emitter, vol)
1818
if (realstereo = 0) audio_emitter_position(emitter,pan,0,0)
1919
else audio_emitter_position(emitter,100,0,0)
2020

21-
audio_play_sound_on(emitter,ins.sound, 0, 0)
21+
audio_play_sound_on(emitter,ins.sound, 0, 0)
22+
23+
//Schedule emitter to be deleted from memory
24+
newemitter = ds_list_create()
25+
ds_list_add(newemitter,emitter) //store emitter id
26+
ds_list_add(newemitter, (audio_sound_length(ins.sound) * 600000) + get_timer()) //store moment of which the emitter should be removed
27+
ds_list_add(emitters_to_remove, newemitter)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//Called from control_draw every frame
2+
//Removes emitters from memory to prevent memory leaking
3+
var pos, arr, emitterid, timetoremove
4+
5+
for(pos = 0; pos < ds_list_size(emitters_to_remove); pos++){
6+
arr = ds_list_find_value(emitters_to_remove,pos)
7+
8+
emitterid = ds_list_find_value(arr,0)
9+
timetoremove = ds_list_find_value(arr,1)
10+
11+
if(get_timer() >= timetoremove){
12+
ds_list_delete(emitters_to_remove,pos)
13+
audio_emitter_free(emitterid)
14+
//log("freeing emitter with id " + string(emitterid))
15+
}
16+
}

scripts/remove_emitters/remove_emitters.yy

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

views/4fd2cb19-cfa9-4079-bae1-c74ab83b6a03.yy

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)