Function at 0x4f7040
Capabilities:
Hash data using fnv

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x5e631d
mov eax, dword fs:[0]
push eax
sub esp, 0x6c
mov eax, dword [0x64e2c0]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov edi, ecx
mov esi, dword [ebp + 8]
mov ecx, dword [ebp + 0xc]
mov edx, dword [ebp + 0x14]
mov dword [ebp - 0x78], esi
mov dword [ebp - 0x64], ecx
mov dword [ebp - 0x70], edx
test esi, esi
je 0x4f7594
test edx, edx
jne 0x4f7095
push str.Voice_pointer_must_be_non_null
jmp 0x4f7599
mov dword [edx], 0
cmp dword [edi], 0
je 0x4f7576
cmp byte [edi + 0x3c], 0
jne 0x4f7576
xor ebx, ebx
cmp byte [ebp + 0x10], bl
je 0x4f74c0
test cl, 7
je 0x4f70c8
push str.Invalid_flags_for_one_shot_voice
jmp 0x4f7599
test dword [edi + 0x40], 0x40000
jne 0x4f746d
movzx ecx, word [esi + 2]
cmp ecx, 0x7f
jbe 0x4f70e5
xor ebx, ebx
jmp 0x4f7461
mov ebx, 0xfffe
cmp word [esi], bx
jne 0x4f7123
movzx eax, word [esi + 0x12]
test ax, ax
je 0x4f7105
cmp ax, word [esi + 0xe]
je 0x4f7105
xor ebx, ebx
jmp 0x4f7461
cmp dword [esi + 0x14], 0
je 0x4f7123
push ecx
call fcn.004f9da0
mov edx, dword [ebp - 0x70]
add esp, 4
cmp dword [esi + 0x14], eax
je 0x4f7123
xor ebx, ebx
jmp 0x4f7461
movzx eax, word [esi]
cmp ax, bx
jne 0x4f7156
cmp word [esi + 0x10], 0x16
jb 0x4f7165
mov eax, dword [esi + 0x1c]
cmp eax, dword [0x602808]
jne 0x4f7165
mov eax, dword [esi + 0x20]
cmp eax, dword [0x60280c]
jne 0x4f7165
mov eax, dword [esi + 0x24]
cmp eax, dword [0x602810]
jne 0x4f7165
mov eax, dword [esi + 0x18]
sub eax, 1
je 0x4f71a4
sub eax, 1
je 0x4f718c
sub eax, 1
je 0x4f716c
xor ebx, ebx
jmp 0x4f7461
cmp word [esi + 0xe], 0x20
je 0x4f717a
xor ebx, ebx
jmp 0x4f7461
movzx ebx, word [esi + 2]
and ebx, 0x7f
shl ebx, 9
or ebx, 0x200003
jmp 0x4f71bd
movzx ebx, word [esi + 2]
movzx eax, word [esi + 0x12]
and ebx, 0x7f
shl eax, 7
or ebx, eax
shl ebx, 9
or ebx, 2
jmp 0x4f71bd
movzx eax, word [esi + 0xe]
movzx ebx, al
movzx eax, word [esi + 2]
shl ebx, 7
and eax, 0x7f
or ebx, eax
shl ebx, 9
or ebx, 1
movzx eax, bl
xor eax, 0x811c9dc5
imul ecx, eax, 0x1000193
mov eax, ebx
shr eax, 8
movzx eax, al
xor ecx, eax
mov eax, ebx
imul ecx, ecx, 0x1000193
shr eax, 0x10
movzx eax, al
xor ecx, eax
mov eax, ebx
imul ecx, ecx, 0x1000193
shr eax, 0x18
xor ecx, eax
imul eax, ecx, 0x1000193
mov ecx, dword [edi + 0x70]
and ecx, eax
mov eax, dword [edi + 0x64]
mov eax, dword [eax + ecx*8]
cmp eax, dword [edi + 0x5c]
je 0x4f739a
mov edx, dword [edi + 0x64]
mov ecx, dword [edx + ecx*8 + 4]
mov edx, dword [ebp - 0x70]
cmp dword [eax + 8], ebx
je 0x4f722f
nop dword [eax + eax]
cmp eax, ecx
je 0x4f739a
mov eax, dword [eax]
cmp dword [eax + 8], ebx
jne 0x4f7220
cmp eax, dword [edi + 0x5c]
je 0x4f739a
mov ecx, dword [eax + 0xc]
mov dword [edx], ecx
movzx ecx, byte [eax + 8]
xor ecx, 0x811c9dc5
imul edx, ecx, 0x1000193
movzx ecx, byte [eax + 9]
xor edx, ecx
movzx ecx, byte [eax + 0xa]
imul edx, edx, 0x1000193
xor edx, ecx
movzx ecx, byte [eax + 0xb]
imul edx, edx, 0x1000193
xor edx, ecx
imul ecx, edx, 0x1000193
mov edx, dword [edi + 0x70]
and edx, ecx
mov ecx, dword [edi + 0x64]
mov dword [ebp - 0x74], ecx
mov esi, dword [ecx + edx*8]
mov dword [ebp - 0x14], esi
mov esi, dword [ebp - 0x78]
cmp dword [ecx + edx*8 + 4], eax
jne 0x4f72ab
cmp dword [ecx + edx*8], eax
jne 0x4f729f
mov esi, dword [ebp - 0x74]
mov ecx, dword [edi + 0x5c]
mov dword [esi + edx*8], ecx
mov dword [esi + edx*8 + 4], ecx
jmp 0x4f72b8
mov esi, dword [ebp - 0x74]
mov ecx, dword [eax + 4]
mov dword [esi + edx*8 + 4], ecx
jmp 0x4f72b8
cmp dword [ebp - 0x14], eax
jne 0x4f72bb
mov esi, dword [ebp - 0x74]
mov ecx, dword [eax]
mov dword [esi + edx*8], ecx
mov esi, dword [ebp - 0x78]
mov edx, dword [eax]
dec dword [edi + 0x60]
mov ecx, dword [eax + 4]
push 0x10
push eax
mov dword [ecx], edx
mov ecx, dword [eax + 4]
mov dword [edx + 4], ecx
call fcn.005b26d8
mov eax, dword [ebp - 0x70]
add esp, 8
mov eax, dword [eax]
push 0
mov ecx, dword [eax]
push ecx
mov dword [esp], 0x3f800000
push eax
call dword [ecx + 0x30]
push eax
call fcn.004f8090
mov eax, dword [ebp - 0x70]
add esp, 4
mov eax, dword [eax]
push 0
mov ecx, dword [eax]
push ecx
mov dword [esp], 0x3f800000
push eax
call dword [ecx + 0x68]
push eax
call fcn.004f8090
movzx eax, word [esi + 2]
add esp, 4
cmp eax, 1
je 0x4f7320
cmp eax, 2
jne 0x4f736d
push 0x40
lea eax, [ebp - 0x60]
push 0
push eax
call fcn.005b4c50
add esp, 0xc
lea eax, [ebp - 0x60]
push eax
movzx eax, word [esi + 2]
push eax
push ecx
mov dword [esp], 0
call fcn.004f9b70
mov eax, dword [ebp - 0x70]
add esp, 0xc
mov ecx, dword [eax]
lea eax, [ebp - 0x60]
push 0
push eax
push dword [edi + 0x10]
movzx eax, word [esi + 2]
mov edx, dword [ecx]
push eax
push 0
push ecx
call dword [edx + 0x40]
push eax
call fcn.004f8090
add esp, 4
mov eax, dword [ebp - 0x70]
push dword [esi + 4]
mov eax, dword [eax]
push eax
mov ecx, dword [eax]
call dword [ecx + 0x70]
test eax, eax
jns 0x4f745e
push str.SetSourceSampleRate
lea ecx, [ebp - 0x6c]
call fcn.004f5698
push 0x645114
jmp 0x4f75a6
mov eax, dword [edi + 0x54]
inc eax
add eax, dword [edi + 0x60]
cmp eax, dword [edi + 0x1c]
jae 0x4f7576
push 0x40
lea eax, [ebp - 0x60]
push 0
push eax
call fcn.005b4c50
push esi
call fcn.004f7630
add esp, 0x10
sub eax, 1
je 0x4f7402
sub eax, 1
je 0x4f73e5
sub eax, 1
jne 0x4f741b
movzx eax, word [esi + 2]
push eax
push dword [edi + 0x18]
lea eax, [ebp - 0x60]
push eax
call fcn.004f9d10
add esp, 0xc
jmp 0x4f741b
movzx eax, word [esi + 0x12]
push eax
movzx eax, word [esi + 2]
push eax
push dword [edi + 0x18]
lea eax, [ebp - 0x60]
push 0x40
push eax
call fcn.004f9c50
add esp, 0x14
jmp 0x4f741b
movzx eax, word [esi + 0xe]
push eax
movzx eax, word [esi + 2]
push eax
push dword [edi + 0x18]
lea eax, [ebp - 0x60]
push eax
call fcn.004f9d50
add esp, 0x10
mov ecx, dword [edi]
lea eax, [edi + 0x8c]
push 0
push 0
push eax
mov edx, dword [ecx]
lea eax, [ebp - 0x60]
push ecx
mov dword [esp], 0x40000000
push 0
push eax
push dword [ebp - 0x70]
push ecx
call dword [edx + 0x14]
test eax, eax
jns 0x4f736d
push str.CreateSourceVoice
lea ecx, [ebp - 0x6c]
call fcn.004f5698
push 0x645114
jmp 0x4f75a6
mov edx, dword [ebp - 0x70]
cmp dword [edx], 0
jne 0x4f752f
mov dword [ebp - 0x14], ebx
mov eax, dword [edi + 0x54]
inc eax
add eax, dword [edi + 0x60]
cmp eax, dword [edi + 0x1c]
jae 0x4f7576
mov ecx, dword [ebp - 0x64]
mov eax, ecx
shr eax, 1
and eax, 2
mov dword [ebp - 0x74], eax
push 0
test cl, 1
je 0x4f74e3
mov eax, dword [edi + 4]
and ecx, 2
shl ecx, 6
mov dword [ebp - 0x18], ecx
mov dword [ebp - 0x20], ecx
xor ecx, ecx
mov dword [ebp - 0x1c], eax
mov eax, dword [edi + 8]
test eax, eax
mov dword [ebp - 0x14], eax
lea eax, [ebp - 0x20]
setne cl
mov dword [ebp - 0x64], eax
inc ecx
lea eax, [ebp - 0x68]
mov dword [ebp - 0x68], ecx
push eax
jmp 0x4f74e5
mov eax, dword [edi + 0x88]
inc eax
cmp eax, dword [edi + 0x20]
jb 0x4f7480
push str.Too_many_instance_voices
lea ecx, [ebp - 0x6c]
call fcn.004f5698
push 0x645114
jmp 0x4f75a6
push 0
mov ecx, dword [edi]
lea eax, [edi + 0x8c]
push eax
push ecx
mov dword [esp], 0x40000000
push dword [ebp - 0x74]
mov edx, dword [ecx]
push esi
push dword [ebp - 0x70]
push ecx
call dword [edx + 0x14]
test eax, eax
jns 0x4f751e
push str.CreateSourceVoice
lea ecx, [ebp - 0x6c]
call fcn.004f5698
push 0x645114
jmp 0x4f75a6
cmp byte [ebp + 0x10], 0
jne 0x4f752c
inc dword [edi + 0x88]
jmp 0x4f7576
mov edx, dword [ebp - 0x70]
mov eax, dword [edx]
add edi, 0x50
mov dword [ebp - 0x64], eax
cmp dword [edi + 4], 0xfffffff
mov esi, dword [edi]
je 0x4f75af
mov dword [ebp - 0x18], edi
push 0x10
mov dword [ebp - 4], 0
mov dword [ebp - 0x14], 0
call fcn.005b2e07
mov ecx, dword [ebp - 0x64]
add esp, 4
mov dword [eax + 8], ebx
mov dword [eax + 0xc], ecx
inc dword [edi + 4]
mov ecx, dword [esi + 4]
mov dword [eax], esi
mov dword [eax + 4], ecx
mov dword [esi + 4], eax
mov dword [ecx], eax
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.005b26e6
mov esp, ebp
pop ebp
ret 0x10
push str.Wave_format_is_required_n
lea ecx, [ebp - 0x6c]
call fcn.004f55ea
push 0x645044
lea eax, [ebp - 0x6c]
push eax
call fcn.005b4f5d
push str.list_too_long
call fcn.004f573e
int3