<feed xmlns='http://www.w3.org/2005/Atom'>
<title>Shipwright/soh/include/z64audio.h, branch Caladius-patch-1</title>
<subtitle>Ship of Harkinian: Ocarina of Time PC port</subtitle>
<link rel='alternate' type='text/html' href='https://git.dog6.net/Shipwright/'/>
<entry>
<title>Reopen the OPUS decoder when a note moves to another sample (#7137)</title>
<updated>2026-09-06T13:10:21+00:00</updated>
<author>
<name>David Racine</name>
<email>bass_dr@hotmail.com</email>
</author>
<published>2026-09-06T13:10:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/Shipwright/commit/?id=17a4c2cf89a9b34c8b1b6db9bf17cd46ddb3c93b'/>
<id>17a4c2cf89a9b34c8b1b6db9bf17cd46ddb3c93b</id>
<content type='text'>
The decoder cached on a note was keyed on nothing, so a note reused for a
different streamed sample carried on decoding the previous track. Audible as
the wrong custom music: the sequence and soundfont the audio editor reports
are correct, only the samples reaching the mixer are not.

Reproduced on the game-start cutscene chain with a streamed music pack in 4
of 6 runs; 0 of 6 after.

Co-authored-by: Claude Opus 5 &lt;noreply@anthropic.com&gt;
Co-authored-by: serprex &lt;159546+serprex@users.noreply.github.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The decoder cached on a note was keyed on nothing, so a note reused for a
different streamed sample carried on decoding the previous track. Audible as
the wrong custom music: the sequence and soundfont the audio editor reports
are correct, only the samples reaching the mixer are not.

Reproduced on the game-start cutscene chain with a streamed music pack in 4
of 6 runs; 0 of 6 after.

Co-authored-by: Claude Opus 5 &lt;noreply@anthropic.com&gt;
Co-authored-by: serprex &lt;159546+serprex@users.noreply.github.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>fix(audio): bound audio-heap cache tables (SIGSEGV with large custom music packs) (#6932)</title>
<updated>2026-08-09T18:36:33+00:00</updated>
<author>
<name>Pedro Nascimento</name>
<email>pnascimento@gmail.com</email>
</author>
<published>2026-08-09T18:36:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/Shipwright/commit/?id=4e39d06accfa65fbed9e034c3cd7face91a6d80c'/>
<id>4e39d06accfa65fbed9e034c3cd7face91a6d80c</id>
<content type='text'>
Root cause of three identical field crashes (audio thread, opcode fetch
through a pointer with its low 32 bits overwritten, seconds after scene
transitions): AudioHeap_AllocPermanent writes permanentCache[index] with
index = permanentPool.count and no bound against the 32-entry array. In
SoH every soundfont sync-load is forced permanent, and custom sequences
whose SEQ.xml says CachePolicy="Temporary" ALSO allocate permanently
(the factory stores the LUS enum where CACHE_TEMPORARY == 0, while
AudioLoad_SyncLoad's switch reads 0 with the ROM convention
'permanent'). A pack with ~60 streamed customs plus vanilla fonts pushes
count past 32 within a session, after which each allocation sprays a
{ptr, size, tableType/id} triplet at 24-byte stride through
gAudioContext - entry[135]'s ptr field lands exactly on
seqPlayers[0].scriptState.pc and entry[156] on seqPlayers[1]'s (both
verified against the crash-dump registers).

- permanentCache raised 32 -&gt; 512 (12 KB) and AllocPermanent refuses
  allocations past the array instead of corrupting memory.
- Same unbounded-index disease fixed in the three sibling writers:
  AllocCached's persistent path (16-entry array; CACHE_EITHER degrades
  to temporary, hard persistent requests fail cleanly),
  AllocPersistentSampleCacheEntry, AllocTemporarySampleCacheEntry.
- seqLoadStatus malloc sized for the full id space (sequenceMapSize +
  0xF) matching sequenceMap; custom ids above sequenceMapSize previously
  overflowed the allocation by up to 15 bytes.

Upstream SoH bugs, not branch-introduced - this branch's many-track
packs merely made the overflow reachable in normal play. Standalone
upstreamable fix.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Root cause of three identical field crashes (audio thread, opcode fetch
through a pointer with its low 32 bits overwritten, seconds after scene
transitions): AudioHeap_AllocPermanent writes permanentCache[index] with
index = permanentPool.count and no bound against the 32-entry array. In
SoH every soundfont sync-load is forced permanent, and custom sequences
whose SEQ.xml says CachePolicy="Temporary" ALSO allocate permanently
(the factory stores the LUS enum where CACHE_TEMPORARY == 0, while
AudioLoad_SyncLoad's switch reads 0 with the ROM convention
'permanent'). A pack with ~60 streamed customs plus vanilla fonts pushes
count past 32 within a session, after which each allocation sprays a
{ptr, size, tableType/id} triplet at 24-byte stride through
gAudioContext - entry[135]'s ptr field lands exactly on
seqPlayers[0].scriptState.pc and entry[156] on seqPlayers[1]'s (both
verified against the crash-dump registers).

- permanentCache raised 32 -&gt; 512 (12 KB) and AllocPermanent refuses
  allocations past the array instead of corrupting memory.
- Same unbounded-index disease fixed in the three sibling writers:
  AllocCached's persistent path (16-entry array; CACHE_EITHER degrades
  to temporary, hard persistent requests fail cleanly),
  AllocPersistentSampleCacheEntry, AllocTemporarySampleCacheEntry.
- seqLoadStatus malloc sized for the full id space (sequenceMapSize +
  0xF) matching sequenceMap; custom ids above sequenceMapSize previously
  overflowed the allocation by up to 15 bytes.

Upstream SoH bugs, not branch-introduced - this branch's many-track
packs merely made the overflow reachable in normal play. Standalone
upstreamable fix.</pre>
</div>
</content>
</entry>
<entry>
<title>Decomp, update AudioOcarina (code_800EC960.c) (#6941)</title>
<updated>2026-07-19T16:54:43+00:00</updated>
<author>
<name>djevangelia</name>
<email>263709373+djevangelia@users.noreply.github.com</email>
</author>
<published>2026-07-19T16:54:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/Shipwright/commit/?id=29d4ff4205025fc2684abd166af14be1d9a1311d'/>
<id>29d4ff4205025fc2684abd166af14be1d9a1311d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Decomp pull, some `z_player` and global changes (#6908)</title>
<updated>2026-07-12T14:59:10+00:00</updated>
<author>
<name>djevangelia</name>
<email>263709373+djevangelia@users.noreply.github.com</email>
</author>
<published>2026-07-12T14:59:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/Shipwright/commit/?id=1003c462a886e6046071865d2091c6e742a2f4b7'/>
<id>1003c462a886e6046071865d2091c6e742a2f4b7</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Cleanup unused includes &amp; remove remaining LUS umbrella includes (#6813)</title>
<updated>2026-06-27T00:20:03+00:00</updated>
<author>
<name>Tim Schneeberger</name>
<email>tim.schneeberger@outlook.de</email>
</author>
<published>2026-06-27T00:20:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/Shipwright/commit/?id=633e92096964ce036e7c18426c98a4835e1aace5'/>
<id>633e92096964ce036e7c18426c98a4835e1aace5</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>update lus includes for new LUS file structure (#5820)</title>
<updated>2025-10-09T23:50:51+00:00</updated>
<author>
<name>briaguya</name>
<email>70942617+briaguya0@users.noreply.github.com</email>
</author>
<published>2025-10-09T23:50:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/Shipwright/commit/?id=57c368aa2c7ecb2c7d85f1f52ea7c0ea7d5c2d69'/>
<id>57c368aa2c7ecb2c7d85f1f52ea7c0ea7d5c2d69</id>
<content type='text'>
* Bump LUS to include FileDropMgr's new registration system and initial cursor visibility changes.

* New LUS ref.

* Remove default on for cursor always visible.
Add option to camera controls next to enable mouse input for autocapture.
Set autocapture on startup.

* next LUS

* clang again

* Add "EnableMouse" CVar check to startup SetAutoCaptureMouse.

* Back to LUS main.

* lus version with fixes we need

* very wip

* get it building

* soh otr

* bump lus before fixing soh side stuff

* build

* still builds

* mac error

* bump otrexporter

* bump to lus main

* upstream otrexporter

---------

Co-authored-by: Malkierian &lt;malkierian@gmail.com&gt;
Co-authored-by: briaguya &lt;70942617+briaguya-ai@users.noreply.github.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Bump LUS to include FileDropMgr's new registration system and initial cursor visibility changes.

* New LUS ref.

* Remove default on for cursor always visible.
Add option to camera controls next to enable mouse input for autocapture.
Set autocapture on startup.

* next LUS

* clang again

* Add "EnableMouse" CVar check to startup SetAutoCaptureMouse.

* Back to LUS main.

* lus version with fixes we need

* very wip

* get it building

* soh otr

* bump lus before fixing soh side stuff

* build

* still builds

* mac error

* bump otrexporter

* bump to lus main

* upstream otrexporter

---------

Co-authored-by: Malkierian &lt;malkierian@gmail.com&gt;
Co-authored-by: briaguya &lt;70942617+briaguya-ai@users.noreply.github.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>Backport 2ship streamed audio (#5457)</title>
<updated>2025-06-28T00:15:02+00:00</updated>
<author>
<name>louist103</name>
<email>35883445+louist103@users.noreply.github.com</email>
</author>
<published>2025-06-28T00:15:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/Shipwright/commit/?id=e15f8d395b316c79bbe55af5cbdb483231785f98'/>
<id>e15f8d395b316c79bbe55af5cbdb483231785f98</id>
<content type='text'>
* Bring over changes from 2ship

# Conflicts:
#	.github/workflows/apt-deps.txt
#	soh/CMakeLists.txt
#	soh/soh/resource/importer/AudioSampleFactory.h
#	soh/soh/resource/importer/AudioSequenceFactory.cpp
#	soh/soh/resource/importer/AudioSequenceFactory.h
#	soh/soh/resource/importer/AudioSoundFontFactory.h

* Update xml format

* Format and fix mixer for Windows

* Fixes for new LUS

* Good ole clang-format</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Bring over changes from 2ship

# Conflicts:
#	.github/workflows/apt-deps.txt
#	soh/CMakeLists.txt
#	soh/soh/resource/importer/AudioSampleFactory.h
#	soh/soh/resource/importer/AudioSequenceFactory.cpp
#	soh/soh/resource/importer/AudioSequenceFactory.h
#	soh/soh/resource/importer/AudioSoundFontFactory.h

* Update xml format

* Format and fix mixer for Windows

* Fixes for new LUS

* Good ole clang-format</pre>
</div>
</content>
</entry>
<entry>
<title>docs: update `func_800FADF8` to `Audio_ResetActiveSequences` (#3471)</title>
<updated>2023-12-26T18:30:49+00:00</updated>
<author>
<name>briaguya</name>
<email>70942617+briaguya-ai@users.noreply.github.com</email>
</author>
<published>2023-12-26T18:30:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/Shipwright/commit/?id=99194a75f1f77a101669aff860eb98255644393f'/>
<id>99194a75f1f77a101669aff860eb98255644393f</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Makes sequenceMap and seqLoadStatus a dynamic size (#2610)</title>
<updated>2023-03-12T19:55:25+00:00</updated>
<author>
<name>Christopher Leggett</name>
<email>chris@leggett.dev</email>
</author>
<published>2023-03-12T19:55:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/Shipwright/commit/?id=d9008938f8518de31bce394615b0db19287e0805'/>
<id>d9008938f8518de31bce394615b0db19287e0805</id>
<content type='text'>
Refactors to allow the above two arrays to be a dynamic size when the game launches, size is set during the AudioLoad_Init function.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Refactors to allow the above two arrays to be a dynamic size when the game launches, size is set during the AudioLoad_Init function.</pre>
</div>
</content>
</entry>
<entry>
<title>refactor: use LUS 1.0 RC</title>
<updated>2023-01-17T05:33:56+00:00</updated>
<author>
<name>briaguya</name>
<email>70942617+briaguya-ai@users.noreply.github.com</email>
</author>
<published>2023-01-17T05:17:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/Shipwright/commit/?id=ba13e6b2c40d17adef064c2022ceeef260622981'/>
<id>ba13e6b2c40d17adef064c2022ceeef260622981</id>
<content type='text'>
Co-authored-by: kenix3 &lt;kenixwhisperwind@gmail.com&gt;
Co-authored-by: David Chavez &lt;david@dcvz.io&gt;
Co-authored-by: KiritoDv &lt;kiritodev01@gmail.com&gt;
Co-authored-by: Christopher Leggett &lt;chris@leggett.dev&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-authored-by: kenix3 &lt;kenixwhisperwind@gmail.com&gt;
Co-authored-by: David Chavez &lt;david@dcvz.io&gt;
Co-authored-by: KiritoDv &lt;kiritodev01@gmail.com&gt;
Co-authored-by: Christopher Leggett &lt;chris@leggett.dev&gt;
</pre>
</div>
</content>
</entry>
</feed>
