add sointu, add song, update shader_minifier

This commit is contained in:
2025-06-23 20:49:20 +03:00
parent 076ee0be68
commit 47cb2c965f
19 changed files with 1425 additions and 1053 deletions

4
.gitignore vendored
View File

@ -286,3 +286,7 @@ __pycache__/
*.btm.cs
*.odx.cs
*.xsd.cs
# Ignore output directories
out/*.exe
out.html

View File

@ -54,7 +54,9 @@
<UseOfMfc>false</UseOfMfc>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="ExtensionSettings">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
@ -169,7 +171,7 @@
<Culture>0x0409</Culture>
</ResourceCompile>
<Link>
<AdditionalDependencies>winmm.lib;opengl32.lib;src/4klang/4klang.obj;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>winmm.lib;opengl32.lib;src/sointu/song.obj;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>out/leviathan-debug.exe</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<GenerateDebugInformation>true</GenerateDebugInformation>
@ -238,7 +240,7 @@ shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
<Culture>0x0409</Culture>
</ResourceCompile>
<Link>
<AdditionalDependencies>winmm.lib;opengl32.lib;src/4klang/4klang.obj;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>winmm.lib;opengl32.lib;src/sointu/song.obj;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>out/leviathan-debug.exe</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<GenerateDebugInformation>true</GenerateDebugInformation>
@ -323,7 +325,7 @@ shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
</ResourceCompile>
<Link>
<AdditionalOptions>/CRINKLER /RANGE:opengl32 /HASHTRIES:300 /COMPMODE:SLOW /ORDERTRIES:9000 /REPORT:out.html /PROGRESSGUI /HASHSIZE:1000 /UNSAFEIMPORT /UNALIGNCODE /SATURATE /NOINITIALIZERS /TRANSFORM:CALLS /TRUNCATEFLOATS:32 %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>opengl32.lib;winmm.lib;src/4klang/4klang.obj;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>opengl32.lib;winmm.lib;src/sointu/song.obj;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>out\leviathan-release.exe</OutputFile>
<SuppressStartupBanner>
</SuppressStartupBanner>
@ -415,7 +417,7 @@ shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
</ResourceCompile>
<Link>
<AdditionalOptions>/CRINKLER /RANGE:opengl32 /HASHTRIES:1000 /COMPMODE:VERYSLOW /ORDERTRIES:30000 /REPORT:out.html /PROGRESSGUI /HASHSIZE:1000 /UNSAFEIMPORT /UNALIGNCODE /SATURATE /NOINITIALIZERS /TRANSFORM:CALLS %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>opengl32.lib;winmm.lib;src/4klang/4klang.obj;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>opengl32.lib;winmm.lib;src/sointu/song.obj;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>out\leviathan-release.exe</OutputFile>
<SuppressStartupBanner>
</SuppressStartupBanner>
@ -451,7 +453,7 @@ shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
<LinkLibraryDependencies>false</LinkLibraryDependencies>
</ProjectReference>
<PreBuildEvent>
<Command>shader_minifier.exe -v -o src\shaders\fragment.inl src\shaders\fragment.frag</Command>
<Command>shader_minifier.exe -v -o src\shaders\fragment.inl src\shaders\fragment.frag shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
<Message>Minify user-supplied shader files.</Message>
</PreBuildEvent>
</ItemDefinitionGroup>
@ -512,7 +514,7 @@ shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
</ResourceCompile>
<Link>
<AdditionalOptions>/CRINKLER /RANGE:opengl32 /HASHTRIES:100 /COMPMODE:INSTANT /ORDERTRIES:2000 /PROGRESSGUI /HASHSIZE:100 /UNSAFEIMPORT /UNALIGNCODE /SATURATE /NOINITIALIZERS /TRANSFORM:CALLS %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>opengl32.lib;winmm.lib;src/4klang/4klang.obj;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>opengl32.lib;winmm.lib;src/sointu/song.obj;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>out\leviathan-snapshot.exe</OutputFile>
<SuppressStartupBanner>
</SuppressStartupBanner>
@ -550,8 +552,7 @@ shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
<LinkLibraryDependencies>false</LinkLibraryDependencies>
</ProjectReference>
<PreBuildEvent>
<Command>shader_minifier.exe -v -o src\shaders\fragment.inl src\shaders\fragment.frag
shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
<Command>shader_minifier.exe -v -o src\shaders\fragment.inl src\shaders\fragment.frag shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
<Message>Minify user-supplied shader files.</Message>
</PreBuildEvent>
</ItemDefinitionGroup>
@ -561,7 +562,7 @@ shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Heavy Release|Win32'">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="src\4klang\4klang.h" />
<ClInclude Include="src\sointu\sointu.h" />
<ClInclude Include="src\debug.h">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Heavy Release|Win32'">false</ExcludedFromBuild>
@ -612,5 +613,4 @@ shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
<None Include="src\shaders\post.inl" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets" />
</Project>

View File

@ -6,7 +6,6 @@
<ClCompile Include="src\editor.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\4klang\4klang.h" />
<ClInclude Include="src\debug.h" />
<ClInclude Include="src\definitions.h" />
<ClInclude Include="src\glext.h">
@ -17,6 +16,7 @@
</ClInclude>
<ClInclude Include="src\song.h" />
<ClInclude Include="src\editor.h" />
<ClInclude Include="src\sointu\sointu.h" />
</ItemGroup>
<ItemGroup>
<None Include="src\shaders\post.inl">
@ -40,4 +40,7 @@
<UniqueIdentifier>{84f225d6-acf8-4151-aab3-e246410cdeba}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<MASM Include="src\sointu\sointu.asm" />
</ItemGroup>
</Project>

BIN
nasm.exe Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

7
prepare_music.bat Normal file
View File

@ -0,0 +1,7 @@
sointu-compile -o . -arch=386 song.yml
nasm -f win32 song.asm
del song.inc
del song.asm
move song.obj src\sointu\
move song.h src\sointu\

Binary file not shown.

BIN
sointu-compile.exe Normal file

Binary file not shown.

363
song.yml Normal file
View File

@ -0,0 +1,363 @@
bpm: 138
rowsperbeat: 4
score:
tracks:
- numvoices: 2
order: [-1, -1, -1, -1, 0, -1, 1, -1, 0, -1, 1, -1, 2, -1, 1, -1, 3, -1, 1, -1, 2, -1, 1, -1, 4, -1, 1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 2, -1, -1, -1, 2, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 4, -1, 2, -1, 0, -1, -1, -1, 4, -1, 2, -1, 0, -1, -1, -1, 0, -1, -1, -1, 2, -1, 2, -1, 3, 5, 2, 6, 0, -1, -1, -1, 0, -1, 1, -1, 0, -1, 1, -1, 0, -1, 1, -1]
patterns: [[33, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 28, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, 1, 1]]
- numvoices: 2
order: [-1, -1, -1, -1, 0, -1, 1, -1, 0, -1, 1, -1, 2, -1, 1, -1, 3, -1, 1, -1, 2, -1, 1, -1, 4, -1, 1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 2, -1, -1, -1, 2, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 4, -1, 2, -1, 0, -1, -1, -1, 4, -1, 2, -1, 0, -1, -1, -1, 0, -1, -1, -1, 5, -1, 5, -1, 6, 7, 5, 8, 9, -1, -1, -1, 9, -1, 1, -1, 9, -1, 1, -1, 0, -1, 1, -1]
patterns: [[45, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [43, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [53, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 52, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 55, 1, 1, 1, 1, 1, 1, 1], [57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
- numvoices: 1
order: [-1, -1, -1, -1, 0, -1, 1, -1, 2, -1, 1, -1, 3, -1, 1, -1, 4, -1, 1, -1, 3, -1, 1, -1, 5, -1, 1, -1, 6, 7, 6, 7, 6, 7, 6, 8, 6, 7, 6, 7, 6, 7, 6, 7, 9, 10, 9, 10, 9, 10, 9, 10, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 5, -1, 3, -1, 6, 7, 6, 7, 11, 12, 9, 10, 6, 7, 6, 13, 6, 7, 6, 7, 9, 10, 9, 14, 15, 16, 9, 17, 6, 6, 6, 6, 0, -1, 1, -1, 0, -1, 1, -1, 2, -1, 1, -1]
patterns: [[57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [45, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [53, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [55, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0], [57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 67, 0, 69, 0], [57, 0, 57, 0, 57, 0, 57, 0, 64, 1, 62, 1, 60, 1, 55, 1], [53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0], [53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 63, 0, 65, 0], [55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 55, 0], [55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 65, 0, 67, 0], [57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 69, 0, 57, 0], [53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 65, 0], [50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0], [50, 0, 50, 0, 50, 0, 50, 0, 52, 0, 52, 0, 52, 0, 52, 0], [53, 0, 53, 0, 53, 0, 53, 0, 55, 0, 55, 0, 55, 0, 55, 0]]
- numvoices: 1
order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
patterns: [[60, 1, 1, 1, 1, 1, 1, 1, 60, 1, 1, 1, 1, 1, 1, 1], [60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 60, 1, 1, 1, 60, 1], [60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1]]
- numvoices: 1
order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 72, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 72, 1, 1, 1, 72, 1, 1, 1], [1, 1, 1, 1, 72, 1, 1, 1, 1, 1, 1, 1, 72, 1, 1, 1]]
- numvoices: 1
order: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -1, 4, -1]
patterns: [[88, 0, 83, 0, 84, 0, 81, 0, 88, 0, 83, 0, 84, 0, 81, 0], [91, 0, 83, 0, 84, 0, 81, 0, 91, 0, 83, 0, 84, 0, 81, 0], [89, 0, 83, 0, 84, 0, 81, 0, 89, 0, 83, 0, 84, 0, 81, 0], [45, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
- numvoices: 1
order: [-1, -1, -1, -1, 0, -1, 1, -1, 0, -1, 1, -1, 2, -1, 1, -1, 3, -1, 1, -1, 2, -1, 1, -1, 4, -1, 1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, 1, -1, 0, -1, -1, -1, 2, -1, -1, -1, 2, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 1, -1, 0, -1, 1, -1, -1, -1, -1, -1]
patterns: [[45, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [43, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
- numvoices: 1
order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, -1, 2, 3, 4, 5, -1, 0, 6, -1, -1, 0, 6, -1, 7, 0, -1, -1, -1, 8, -1, -1, 9, -1, -1, -1, -1, 10, 7, 11, 12, 0, -1, -1, 13, 10, 7, 11, 7, 8, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
patterns: [[83, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 84, 1, 81, 1], [1, 1, 1, 1, 1, 1, 1, 1, 72, 1, 74, 1, 76, 1, 1, 1], [71, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 72, 1, 1, 1], [69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 84, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 86, 1, 1, 1, 1, 1, 1, 1], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [88, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [84, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 83, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]]
- numvoices: 4
order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 81, 83, 84, 86], [88, 83, 84, 81, 88, 83, 84, 81, 88, 83, 84, 81, 88, 83, 84, 81], [91, 83, 84, 81, 91, 83, 84, 81, 91, 83, 84, 81, 91, 83, 84, 81], [93, 83, 84, 81, 93, 83, 84, 81, 93, 83, 84, 81, 93, 83, 84, 81], [89, 81, 83, 84, 86, 88, 89, 91, 89, 81, 83, 84, 83, 84, 86, 88], [89, 79, 81, 83, 81, 83, 84, 86, 84, 86, 88, 89, 88, 84, 86, 83], [91, 88, 89, 86, 88, 84, 86, 83, 84, 81, 83, 79, 81, 77, 79, 76], [77, 74, 76, 72, 74, 71, 72, 69, 71, 67, 69, 65, 67, 69, 71, 74], [77, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 76, 1, 77, 76], [74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69, 71, 72, 76], [84, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 83, 1, 1, 1], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 79, 1, 1, 1], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
rowsperpattern: 16
length: 108
patch:
- name: 80s lead
numvoices: 4
units:
- type: oscillator
id: 1089
parameters: {color: 128, detune: 80, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 1, transpose: 76, type: 1, unison: 3}
- type: oscillator
id: 1090
parameters: {color: 128, detune: 57, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 1, transpose: 64, type: 1, unison: 2}
- type: addp
id: 1091
parameters: {stereo: 1}
- type: envelope
id: 1092
parameters: {attack: 37, decay: 66, gain: 90, release: 54, stereo: 1, sustain: 81}
- type: mulp
id: 1098
parameters: {stereo: 1}
- type: pan
id: 1096
parameters: {panning: 60, stereo: 1}
- type: filter
id: 1108
parameters: {bandpass: 0, frequency: 84, highpass: 0, lowpass: 1, negbandpass: 1, neghighpass: 0, resonance: 128, stereo: 1}
- type: gain
id: 1119
parameters: {gain: 64, stereo: 1}
- type: filter
id: 1133
parameters: {bandpass: 0, frequency: 10, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 88, stereo: 1}
- type: outaux
id: 1097
parameters: {auxgain: 34, outgain: 34, stereo: 1}
- name: 80s bass
numvoices: 1
units:
- type: oscillator
id: 3
parameters: {color: 128, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 64, stereo: 1, transpose: 64, type: 1, unison: 0}
- type: oscillator
id: 4
parameters: {color: 128, detune: 76, gain: 128, lfo: 0, phase: 30, shape: 64, stereo: 1, transpose: 52, type: 1, unison: 1}
- type: addp
id: 1084
parameters: {stereo: 1}
- type: envelope
id: 1085
parameters: {attack: 0, decay: 69, gain: 100, release: 68, stereo: 1, sustain: 50}
- type: send
id: 1088
parameters: {amount: 100, port: 0, sendpop: 0, stereo: 1, target: 1087, voice: 0}
- type: mulp
id: 1086
parameters: {stereo: 1}
- type: distort
id: 1107
parameters: {drive: 112, stereo: 1}
- type: filter
id: 1087
parameters: {bandpass: 0, frequency: 30, highpass: 1, lowpass: 1, negbandpass: 1, neghighpass: 0, resonance: 40, stereo: 1}
- type: pan
id: 284
parameters: {panning: 64, stereo: 1}
- type: gain
id: 1121
parameters: {gain: 110, stereo: 1}
- type: outaux
id: 15
parameters: {auxgain: 30, outgain: 30, stereo: 1}
- name: Kick
comment: 'Suggested note: C-3'
numvoices: 1
units:
- type: envelope
id: 261
parameters: {attack: 0, decay: 49, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: noise
id: 269
parameters: {gain: 128, shape: 74, stereo: 0}
- type: send
id: 268
parameters: {amount: 96, port: 0, sendpop: 1, stereo: 0, target: 262, voice: 0}
- type: oscillator
id: 262
parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 57, type: 0, unison: 0}
- type: filter
id: 281
parameters: {bandpass: 0, frequency: 91, highpass: 0, lowpass: 0, negbandpass: 1, neghighpass: 1, resonance: 98, stereo: 0}
- type: mulp
id: 263
parameters: {stereo: 0}
- type: envelope
id: 280
parameters: {attack: 0, decay: 64, gain: 80, release: 64, stereo: 0, sustain: 0}
- type: send
id: 1110
parameters: {amount: 75, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0}
- type: noise
id: 275
parameters: {gain: 72, shape: 24, stereo: 0}
- type: send
id: 276
parameters: {amount: 84, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0}
- type: envelope
id: 274
parameters: {attack: 45, decay: 70, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send
id: 1118
parameters: {amount: 0, port: 0, sendpop: 0, stereo: 0, target: 1119, voice: 0}
- type: send
id: 1122
parameters: {amount: 0, port: 0, sendpop: 0, stereo: 0, target: 1121, voice: 0}
- type: send
id: 1124
parameters: {amount: 32, port: 0, sendpop: 0, stereo: 0, target: 1123, voice: 0}
- type: oscillator
id: 277
parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 45, type: 0}
- type: mulp
id: 279
parameters: {stereo: 0}
- type: addp
id: 271
parameters: {stereo: 0}
- type: pan
id: 294
parameters: {panning: 64, stereo: 0}
- type: filter
id: 1132
parameters: {bandpass: 0, frequency: 11, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 1}
- type: outaux
id: 266
parameters: {auxgain: 14, outgain: 50, stereo: 1}
- name: snare edm 3
comment: 'Suggested range: E-4'
numvoices: 1
units:
- type: envelope
id: 217
parameters: {attack: 0, decay: 67, gain: 29, release: 0, stereo: 0, sustain: 0}
- type: oscillator
id: 218
parameters: {color: 128, detune: 64, gain: 80, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 57, type: 0, unison: 0}
- type: mulp
id: 221
parameters: {stereo: 0}
- type: envelope
id: 222
parameters: {attack: 0, decay: 69, gain: 54, release: 0, stereo: 0, sustain: 0}
- type: noise
id: 223
parameters: {gain: 31, shape: 14, stereo: 0}
- type: mulp
id: 224
parameters: {stereo: 0}
- type: filter
id: 201
parameters: {bandpass: 0, frequency: 78, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 127, stereo: 0}
- type: filter
id: 225
parameters: {bandpass: 0, frequency: 122, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 112, stereo: 0}
- type: addp
id: 226
parameters: {stereo: 0}
- type: distort
id: 338
parameters: {drive: 108, stereo: 0}
- type: pan
id: 231
parameters: {panning: 63, stereo: 0}
- type: outaux
id: 232
parameters: {auxgain: 52, outgain: 58, stereo: 1}
- type: envelope
id: 233
parameters: {attack: 37, decay: 47, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send
id: 234
parameters: {amount: 69, port: 0, sendpop: 1, target: 218}
- type: envelope
id: 235
parameters: {attack: 53, decay: 58, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send
id: 236
parameters: {amount: 0, port: 0, sendpop: 1, target: 201}
- type: envelope
id: 237
parameters: {attack: 53, decay: 73, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send
id: 238
parameters: {amount: 32, port: 0, sendpop: 1, target: 202}
- name: SuperSaw 4
comment: Automate filter frequency for the classic trance sound
numvoices: 2
units:
- type: envelope
id: 1109
parameters: {attack: 0, decay: 0, gain: 64, release: 64, stereo: 0, sustain: 85}
- type: oscillator
id: 1099
parameters: {color: 128, detune: 96, gain: 64, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
- type: oscillator
id: 12
parameters: {color: 128, detune: 77, gain: 80, lfo: 0, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
- type: addp
id: 13
parameters: {stereo: 0}
- type: mulp
id: 16
parameters: {stereo: 0}
- type: envelope
id: 17
parameters: {attack: 18, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 99}
- type: oscillator
id: 18
parameters: {color: 128, detune: 46, gain: 81, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
- type: oscillator
id: 19
parameters: {color: 128, detune: 38, gain: 76, lfo: 0, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
- type: addp
id: 20
parameters: {stereo: 0}
- type: mulp
id: 23
parameters: {stereo: 0}
- type: gain
id: 1123
parameters: {gain: 120, stereo: 1}
- type: delay
id: 24
parameters: {damp: 0, dry: 0, feedback: 0, notetracking: 0, pregain: 128, stereo: 0}
varargs: [420]
- type: delay
id: 29
parameters: {damp: 0, dry: 71, feedback: 32, notetracking: 2, pregain: 71, stereo: 1}
varargs: [32, 36]
- type: outaux
id: 30
parameters: {auxgain: 23, outgain: 25, stereo: 1}
- name: pad
numvoices: 1
units:
- type: envelope
id: 1
parameters: {attack: 72, decay: 96, gain: 128, release: 88, stereo: 0, sustain: 96}
- type: send
id: 2
parameters: {amount: 64, port: 4, sendpop: 0, target: 1}
- type: oscillator
id: 1125
parameters: {color: 80, detune: 60, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 2}
- type: oscillator
id: 1126
parameters: {color: 96, detune: 72, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 1}
- type: oscillator
id: 5
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 90, stereo: 0, transpose: 32, type: 0}
- type: send
id: 6
parameters: {amount: 68, port: 1, sendpop: 0, target: 1125}
- type: send
id: 78
parameters: {amount: 61, port: 1, sendpop: 1, target: 1126}
- type: addp
id: 80
parameters: {stereo: 0}
- type: mulp
id: 10
parameters: {stereo: 0}
- type: filter
id: 11
parameters: {bandpass: 0, frequency: 26, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0}
- type: filter
id: 1127
parameters: {bandpass: 0, frequency: 64, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 64, stereo: 0}
- type: distort
id: 1128
parameters: {drive: 109, stereo: 0}
- type: pan
id: 1129
parameters: {panning: 64, stereo: 0}
- type: delay
id: 1130
parameters: {damp: 64, dry: 128, feedback: 96, notetracking: 2, pregain: 96, stereo: 1}
varargs: [24, 48]
- type: outaux
id: 1131
parameters: {auxgain: 15, outgain: 15, stereo: 1}
- name: HappyLead
numvoices: 4
units:
- type: oscillator
id: 164
parameters: {color: 84, detune: 62, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 0}
- type: oscillator
id: 165
parameters: {color: 128, detune: 62, gain: 92, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 2}
- type: addp
id: 166
parameters: {stereo: 0}
- type: envelope
id: 163
parameters: {attack: 44, decay: 64, gain: 72, release: 64, stereo: 0, sustain: 92}
- type: mulp
id: 167
parameters: {stereo: 0}
- type: pan
id: 168
parameters: {panning: 60, stereo: 0}
- type: delay
id: 169
parameters: {damp: 0, dry: 64, feedback: 64, notetracking: 0, pregain: 54, stereo: 1}
varargs: [12550, 24402, 21265, 32419]
- type: outaux
id: 172
parameters: {auxgain: 64, outgain: 64, stereo: 1}
- name: Global
numvoices: 1
units:
- type: in
id: 7
parameters: {channel: 2, stereo: 1}
- type: delay
id: 8
parameters: {damp: 25, dry: 0, feedback: 120, notetracking: 0, pregain: 40, stereo: 1}
varargs: [1116, 1188, 1276, 1356, 1422, 1492, 1556, 1618, 1140, 1212, 1300, 1380, 1446, 1516, 1580, 1642]
- type: out
id: 9
parameters: {gain: 64, stereo: 1}

View File

@ -1,19 +0,0 @@
// some useful song defines for 4klang
#define SAMPLE_RATE 44100
#define BPM 120.000000
#define MAX_INSTRUMENTS 5
#define MAX_PATTERNS 136
#define PATTERN_SIZE_SHIFT 3
#define PATTERN_SIZE (1 << PATTERN_SIZE_SHIFT)
#define MAX_TICKS (MAX_PATTERNS*PATTERN_SIZE)
#define SAMPLES_PER_TICK 5512
#define MAX_SAMPLES (SAMPLES_PER_TICK*MAX_TICKS)
#define POLYPHONY 2
#define INTEGER_16BIT
#define SAMPLE_TYPE short
#define WINDOWS_OBJECT
// declaration of the external synth render function, you'll always need that
extern "C" void __stdcall _4klang_render(void*);
// declaration of the external envelope buffer. access only if you're song was exported with that option

View File

@ -49,33 +49,29 @@ static DEVMODE screenSettings = {
#include <mmsystem.h>
#include <mmreg.h>
// this file is auto generated by 4klang
#include "4klang/4klang.h"
// this file is auto generated by sointu
#include "sointu/song.h"
#pragma data_seg(".4klangout")
static SAMPLE_TYPE lpSoundBuffer[MAX_SAMPLES * 2];
#pragma data_seg(".sointuout")
static SUsample lpSoundBuffer[(int)SU_LENGTH_IN_SAMPLES * 2];
static HWAVEOUT hWaveOut;
#pragma data_seg(".wavefmt")
static WAVEFORMATEX WaveFMT =
{
#ifdef FLOAT_32BIT
WAVE_FORMAT_IEEE_FLOAT,
#else
WAVE_FORMAT_PCM,
#endif
2, // channels
SAMPLE_RATE, // samples per sec
SAMPLE_RATE*sizeof(SAMPLE_TYPE) * 2, // bytes per sec
sizeof(SAMPLE_TYPE) * 2, // block alignment;
sizeof(SAMPLE_TYPE) * 8, // bits per sample
SU_SAMPLE_RATE, // samples per sec
SU_SAMPLE_RATE*sizeof(SUsample) * 2, // bytes per sec
sizeof(SUsample) * 2, // block alignment;
sizeof(SUsample) * 8, // bits per sample
0 // extension not needed
};
#pragma data_seg(".wavehdr")
static WAVEHDR WaveHDR =
{
(LPSTR)lpSoundBuffer, MAX_SAMPLES * sizeof(SAMPLE_TYPE) * 2, 0, 0, 0, 0, 0, 0
(LPSTR)lpSoundBuffer, SU_LENGTH_IN_SAMPLES * sizeof(SUsample) * 2, 0, 0, 0, 0, 0, 0
};
static MMTIME MMTime =

View File

@ -28,7 +28,9 @@
#pragma data_seg(".shader")
#include "shaders/post.inl"
#endif
#ifdef SU_LOAD_GMDLS
su_load_gmdls();
#endif // SU_LOAD_GMDLS
#pragma data_seg(".pids")
// static allocation saves a few bytes
static int pidMain;
@ -74,7 +76,7 @@ int __cdecl main(int argc, char* argv[])
// initialize sound
#ifndef EDITOR_CONTROLS
#if USE_AUDIO
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)_4klang_render, lpSoundBuffer, 0, 0);
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)su_render_song, lpSoundBuffer, 0, 0);
waveOutOpen(&hWaveOut, WAVE_MAPPER, &WaveFMT, NULL, 0, CALLBACK_NULL);
waveOutPrepareHeader(hWaveOut, &WaveHDR, sizeof(WaveHDR));
waveOutWrite(hWaveOut, &WaveHDR, sizeof(WaveHDR));
@ -154,7 +156,7 @@ int __cdecl main(int argc, char* argv[])
} while(!GetAsyncKeyState(VK_ESCAPE)
#if USE_AUDIO
&& MMTime.u.sample < MAX_SAMPLES
&& MMTime.u.sample < SU_LENGTH_IN_SAMPLES
#endif
);

View File

@ -9,7 +9,6 @@
uniform int m;
out vec4 o;
float u_time = m/float(44100);
//uniform float u_time;
const float PI = 22./7.;
vec3 no(vec3 v) { return normalize(v); }

View File

@ -1,17 +1,15 @@
/* File generated with Shader Minifier 1.2
* http://www.ctrl-alt-test.fr
*/
// Generated with Shader Minifier 1.5.1 (https://github.com/laurentlb/Shader_Minifier/)
#ifndef FRAGMENT_INL_
# define FRAGMENT_INL_
# define VAR_M "v"
# define VAR_O "i"
# define VAR_m "v"
# define VAR_o "i"
const char *fragment_frag =
"#version 460\n"
"uniform int v;"
"out vec4 i;"
"float m=3.1416,y=v/float(44100);"
"const float z=22./7.;"
"float y=v/float(44100);"
"const float m=22./7.;"
"vec3 f(vec3 v)"
"{"
"return normalize(v);"
@ -20,303 +18,286 @@ const char *fragment_frag =
"{"
"return clamp(v,f,y);"
"}"
"mat2 n(float v)"
"mat2 f(float v)"
"{"
"float f=sin(v),y=cos(v);"
"return mat2(y,-f,f,y);"
"float f=sin(v);"
"v=cos(v);"
"return mat2(v,-f,f,v);"
"}"
"float n(float v,float y,float m)"
"float n(float v,float f,float y)"
"{"
"float z=max(m-abs(v-y),0.);"
"return max(v,y)+z*z*.25/m;"
"float z=max(y-abs(v-f),0.);"
"return max(v,f)+z*z*.25/y;"
"}"
"float f(vec2 v,int y)"
"{"
"if(y==1)"
"{"
"float m=dot(v,vec2(127.1,311.7));"
"return fract(sin(m)*43758.5453123);"
"float y=dot(v,vec2(127.1,311.7));"
"return fract(sin(y)*43758.5453123);"
"}"
"v=50.*fract(v*.3183099);"
"return fract(v.x*v.y*(v.x+v.y));"
"}"
"float x(vec2 v,float y,int m)"
"float f(vec2 v,float y,int m)"
"{"
"vec2 a=floor(v),z=fract(v),i=z*z*(3.-2.*z);"
"float x=y;"
"vec2 s=floor(v);"
"v=fract(v);"
"v=v*v*(3.-2.*v);"
"float z=y;"
"if(m==1)"
"x=2.;"
"return-y+x*mix(mix(f(a+vec2(0.),m),f(a+vec2(1.,0.),m),i.x),mix(f(a+vec2(0.,1.),m),f(a+vec2(1.),m),i.x),i.y);"
"z=2.;"
"return-y+z*mix(mix(f(s+vec2(0),m),f(s+vec2(1,0),m),v.x),mix(f(s+vec2(0,1),m),f(s+vec2(1),m),v.x),v.y);"
"}"
"float s(vec3 v,float y,float m)"
"float f(vec3 v,float f,float y)"
"{"
"vec2 f=abs(vec2(length(v.xy),v.z))-vec2(m,y);"
"return min(max(f.x,f.y),0.)+length(max(f,0.));"
"vec2 m=abs(vec2(length(v.xy),v.z))-vec2(y,f);"
"return min(max(m.x,m.y),0.)+length(max(m,0.));"
"}"
"float n(vec3 v,vec3 y)"
"float f(vec3 v,vec3 y)"
"{"
"vec3 f=abs(v)-y;"
"return length(max(f,0.))+min(max(f.x,max(f.y,f.z)),0.);"
"v=abs(v)-y;"
"return length(max(v,0.))+min(max(v.x,max(v.y,v.z)),0.);"
"}"
"float t(vec3 v,vec2 y,float m)"
"float f(vec3 v,vec2 y)"
"{"
"v.xy*=n(m);"
"vec3 f=abs(v);"
"return max(f.z-y.y,max(f.x*.866025+v.y*.5,-v.y)-y.x*.5);"
"v.xy*=f(.5);"
"vec3 m=abs(v);"
"return max(m.z-y.y,max(m.x*.866025+v.y*.5,-v.y)-y.x*.5);"
"}"
"float s(vec3 v,float y)"
"float n(vec3 v)"
"{"
"return v=abs(v),(v.x+v.y+v.z-y)*.577;"
"v=abs(v);"
"return(v.x+v.y+v.z-60.)*.577;"
"}"
"float a=9.,p=0.;"
"vec3 c=vec3(.36,.9,0.);"
"float x=0.;"
"vec3 z=vec3(.36,.9,0);"
"float s(vec3 v)"
"{"
"return min((y-v.y)*v.z,v.x*z);"
"return min((y-v.y)*v.z,v.x*m);"
"}"
"float t(float v)"
"vec3 t(vec3 v)"
"{"
"return a+a*f(sin(s(vec3(1.5,v,4.))*.06),-.9,.9);"
"}"
"vec3 x(vec3 v)"
"for(float i=0.;i<7.;i++)"
"{"
"for(float f=0.;f<7.;f++)"
"{"
"float m=a+f*3.,z=1.;"
"float m=9.+i*3.,z=1.;"
"if(y>m)"
"{"
"if(mod(f,2.)>=1.)"
"if(mod(i,2.)>=1.)"
"z=-1.;"
"v.xy*=n(t(m)*z);"
"v.xy*=f((9.+9.*f(sin(s(vec3(1.5,m,4))*.06),-.9,.9))*z);"
"}"
"}"
"return v;"
"}"
"float w(vec2 v)"
"float f(vec2 v)"
"{"
"if(y>=v.y)"
"v.x+=.045*f(sin(s(vec3(3.,v.y,40.))*.4),-.8,.8);"
"v.x+=.045*f(sin(s(vec3(3,v.y,40))*.4),-.8,.8);"
"return v.x;"
"}"
"float t(vec2 v,float f)"
"float f(vec2 v,float y)"
"{"
"v+=x(v,1.,1);"
"vec2 y=1.-abs(sin(v));"
"y=mix(y,abs(cos(v)),y);"
"return pow(1.-pow(y.x*y.y,.65),f);"
"v+=f(v,1.,1);"
"vec2 m=1.-abs(sin(v));"
"m=mix(m,abs(cos(v)),m);"
"return pow(1.-pow(m.x*m.y,.65),y);"
"}"
"vec3 w(vec3 v,int m)"
"vec3 f(vec3 v,int s)"
"{"
"float f=0.,i=1e3,r=z/12.,p,d=floor(atan(v.y,v.x)/r+.5)*r;"
"vec3 c=v;"
"c.xy=n(d)*c.xy;"
"float l=length(max(abs(c.xy-vec2(1.8,0.))-vec2(.24,.14),0.))-.02,e=abs(length(v.xy)-1.8)-.2;"
"l=min(l,e);"
"e=n(abs(length(v.xy)-1.75)-.08,abs(v.z-.1)-.04,.005);"
"l=max(-e,l);"
"l=n(l,abs(v.z)-.1,.02);"
"vec3 h=x(v),o=h;"
"r=z/16.;"
"o.xy=n(floor(atan(h.y,h.x)/r+.5)*r)*o.xy;"
"e=n(o.xyz-vec3(1.75,0.,0.),vec3(.04,.14,.05))-.02+x(v.xy*100.,.001,0);"
"l=min(l,e);"
"if(l==e)"
"f=6.;"
"e=1e3;"
"float u=1.5,b=0.,g,F=4.,C=.6,k=.2;"
"for(int Z=0;Z<4;Z++)"
"p=n(vec3(v.x,v.y+u+.05,v.z),vec3(2.,.2,u))-.05,e=min(e,p),u+=.2;"
"e+=x(v.xz*50.+200.,.007,0);"
"l=min(l,e);"
"if(l==e)"
"f=2.;"
"if(m==1)"
"float z=0.,i=1e3,r=m/12.,x,a=floor(atan(v.y,v.x)/r+.5)*r;"
"vec3 d=v;"
"d.xy=f(a)*d.xy;"
"float p=length(max(abs(d.xy-vec2(1.8,0))-vec2(.24,.14),0.))-.02,c=abs(length(v.xy)-1.8)-.2;"
"p=min(p,c);"
"c=n(abs(length(v.xy)-1.75)-.08,abs(v.z-.1)-.04,.005);"
"p=n(max(-c,p),abs(v.z)-.1,.02);"
"vec3 l=t(v),o=l;"
"r=m/16.;"
"o.xy=f(floor(atan(l.y,l.x)/r+.5)*r)*o.xy;"
"c=f(o.xyz-vec3(1.75,0,0),vec3(.04,.14,.05))-.02+f(v.xy*1e2,.001,0);"
"p=min(p,c);"
"if(p==c)"
"z=6.;"
"c=1e3;"
"r=1.5;"
"float e=0.,b,C=4.,F=.6,G=.2;"
"for(int i=0;i<4;i++)"
"x=f(vec3(v.x,v.y+r+.05,v.z),vec3(2,.2,r))-.05,c=min(c,x),r+=.2;"
"c+=f(v.xz*50.+2e2,.007,0);"
"p=min(p,c);"
"if(p==c)"
"z=2.;"
"if(s==1)"
"{"
"vec2 Z=v.xy;"
"for(int Y=0;Y<4;Y++)"
"g=t((Z+y)*C,F),g+=t((Z-y)*C,F),b+=g*k,Z*=mat2(1.6,1.2,-1.2,1.6),C*=1.9,k*=.22,F=mix(F,1.,.4);"
"vec2 m=v.xy;"
"for(int i=0;i<4;i++)"
"b=f((m+y)*F,C)+f((m-y)*F,C),e+=b*G,m*=mat2(1.6,1.2,-1.2,1.6),F*=1.9,G*=.22,C=mix(C,1.,.4);"
"}"
"e=max(-s(v,2.,min(1.7-(y-28.9)*2.5,2.3)),s(v,.025,1.6)-b*.15);"
"e=max(e,s(v,.3,1.7));"
"l=min(l,e);"
"if(l==e)"
"f=1.;"
"e=v.y+3.7+x(vec2(v.x,v.z*.44-40.)*.04+100.,20.,0)+.25*sin(v.z*.5+y);"
"l=min(l,e);"
"if(l==e)"
"f=3.;"
"e=s(v+vec3(-75.,0.,100.),60.);"
"l=min(l,e);"
"if(l==e)"
"f=3.;"
"for(float Z=0.;Z<8.;Z++)"
"c=max(max(-f(v,2.,min(1.7-(y-28.9)*2.5,2.3)),f(v,.025,1.6)-e*.15),f(v,.3,1.7));"
"p=min(p,c);"
"if(p==c)"
"z=1.;"
"c=v.y+3.7+f(vec2(v.x,v.z*.44-40.)*.04+1e2,20.,0)+.25*sin(v.z*.5+y);"
"p=min(p,c);"
"if(p==c)"
"z=3.;"
"c=n(v+vec3(-75,0,100));"
"p=min(p,c);"
"if(p==c)"
"z=3.;"
"for(float r=0.;r<8.;r++)"
"{"
"c=v;"
"d=24.67/(z*2.)+(Z+1.)*z/4.;"
"if(Z==1.)"
"d+=.2;"
"if(Z==7.)"
"d-=.2;"
"c.xy=n(d)*c.xy;"
"float Y=a+(Z-1.)*3.+1.5;"
"if(Z>0.)"
"d=v;"
"a=24.67/(m*2.)+(r+1.)*m/4.;"
"if(r==1.)"
"a+=.2;"
"if(r==7.)"
"a-=.2;"
"d.xy=f(a)*d.xy;"
"float x=9.+(r-1.)*3.+1.5;"
"if(r>0.)"
"{"
"c.x-=1.95;"
"vec3 X=c;"
"if(y>Y)"
"X.x=w(vec2(X.x,Y));"
"float W=t(vec3(c.x-.06,c.y,c.z),vec2(.1,.15),.5)-.01;"
"e=max(-t(vec3(X.x-.14,X.y,X.z),vec2(.22),.5)-.01,t(vec3(X.x,X.y,X.z),vec2(.2,.12),.5)-.02);"
"e=min(e,W);"
"l=min(l,e);"
"if(l==e)"
"f=4.;"
"if(l==W)"
"if(y>Y+.2)"
"f=5.,i=min(e,W);"
"d.x-=1.95;"
"vec3 v=d;"
"if(y>x)"
"v.x=f(vec2(v.x,x));"
"float m=f(vec3(d.x-.06,d.yz),vec2(.1,.15))-.01;"
"c=min(max(-f(vec3(v.x-.14,v.yz),vec2(.22))-.01,f(vec3(v),vec2(.2,.12))-.02),m);"
"p=min(p,c);"
"if(p==c)"
"z=4.;"
"if(p==m)"
"if(y>x+.2)"
"z=5.,i=min(c,m);"
"}"
"}"
"return vec3(l,f,i);"
"return vec3(p,z,i);"
"}"
"float w(vec3 v,vec3 y,int m)"
"float f(vec3 v,vec3 y,int m)"
"{"
"vec3 f;"
"vec3 p;"
"float i=0.;"
"for(int l=0;l<100;l++)"
"for(int r=0;r<100;r++)"
"{"
"f=w(v+y*i,0);"
"if(m==0&&f.z<.3)"
"p+=pow(.01/f.z,.8)*.6;"
"i+=f.x;"
"if(f.x<.001||i>500.)"
"p=f(v+y*i,0);"
"if(m==0&&p.z<.3)"
"x+=pow(.01/p.z,.8)*.6;"
"i+=p.x;"
"if(p.x<.001||i>5e2)"
"break;"
"}"
"return i;"
"}"
"vec3 r(vec3 v)"
"vec3 w(vec3 v)"
"{"
"vec2 y=vec2(.01,0.);"
"vec3 m=w(v,1).x-vec3(w(v-y.xyy,1).x,w(v-y.yxy,1).x,w(v-y.yyx,1).x);"
"return f(m);"
"vec2 m=vec2(.01,0);"
"return f(f(v,1).x-vec3(f(v-m.xyy,1).x,f(v-m.yxy,1).x,f(v-m.yyx,1)));"
"}"
"float f(vec3 v,vec3 y,float m,float x,vec3 l,float z)"
"float f(vec3 v,vec3 y,float i,float m,vec3 p,float r)"
"{"
"vec3 e=f(y-v);"
"float i=length(y-v),p=f(dot(l,e)*m,0.,m)/(1.+z*i),Z=w(v+l*.0025,e,1);"
"if(Z<length(y-v))"
"p*=x;"
"return p;"
"}"
"float r(vec3 v,vec3 y,float f)"
"{"
"return pow(dot(v,y)*.4+.6,f);"
"}"
"float f(vec3 v,vec3 y,vec3 m,float f)"
"{"
"float l=(f+8.)/(z*8.);"
"return pow(max(dot(reflect(m,v),y),0.),f)*l;"
"}"
"vec3 n(vec3 v,vec3 y,vec3 m,vec3 e)"
"{"
"vec3 i=vec3(0.,.1,.3)+r(y,m,60.)*vec3(.11,.16,.18)*.3;"
"i-=vec3(.73,.15,.66)*pow(f(1.-dot(y,-e),0.,1.),.7);"
"i+=vec3(f(y,m,e,60.))*.2;"
"vec3 c=f(y-v);"
"i=f(dot(p,c)*i,0.,i)/(1.+r*length(y-v));"
"r=f(v+p*.0025,c,1);"
"if(r<length(y-v))"
"i*=m;"
"return i;"
"}"
"vec3 f(vec3 v,float y,vec3 m,vec3 f,float z)"
"float f(vec3 v,vec3 y,vec3 p,float f)"
"{"
"vec3 l=mix(vec3(.34,.11,.34),vec3(.93,.37,.16),pow(max(dot(m,f),0.),8.));"
"return mix(v,l,1.-exp(-y*z));"
"return pow(max(dot(reflect(p,v),y),0.),f)*((f+8.)/(m*8.));"
"}"
"vec3 r(vec2 v,vec3 y,vec3 m,float z)"
"vec3 f(vec3 v,vec3 y,vec3 m,vec3 c)"
"{"
"vec3 l=f(m-y),e=f(cross(vec3(0.,1.,0.),l)),i=cross(l,e),a=l*z,Z=a+v.x*e+v.y*i,g=f(Z);"
"return g;"
"return vec3(0,.1,.3)+pow(dot(y,m)*.4+.6,60.)*vec3(.11,.16,.18)*.3-vec3(.73,.15,.66)*pow(f(1.-dot(y,-c),0.,1.),.7)+vec3(f(y,m,c,60.))*.2;"
"}"
"vec3 h(vec3 v)"
"vec3 f(vec2 v,vec3 y,vec3 m,float c)"
"{"
"return v*=vec3(.9,.8,.7),v=pow(v,vec3(.45)),v=smoothstep(0.,1.,v),v+=1.-vec3(f((46.-y)*.5,0.,1.)),v;"
"y=f(m-y);"
"m=f(cross(vec3(0,1,0),y));"
"return f(y*c+v.x*m+v.y*cross(y,m));"
"}"
"vec3 f()"
"{"
"vec3 v=vec3(0.,f(6.-y,2.,6.),f(100.-y*11.,6.,100.));"
"vec3 v=vec3(0,f(6.-y,2.,6.),f(1e2-y*11.,6.,1e2));"
"if(y>7.5)"
"v+=vec3(0.,f(7.5-y,-1.,0.),0.);"
"v+=vec3(0,f(7.5-y,-1.,0.),0);"
"if(y>10.5)"
"v=vec3(2.,-1.,1.);"
"v=vec3(2,-1,1);"
"if(y>12.)"
"v=vec3(-1.,-.7,4.);"
"v=vec3(-1,-.7,4);"
"if(y>14.5)"
"v=vec3(0.,0.,4.),v.yz*=n(-.6-cos(y-15.)*.05),v.xz*=n(sin((y-16.5)*.1));"
"v=vec3(0,0,4),v.yz*=f(-.6-cos(y-15.)*.05),v.xz*=f(sin((y-16.5)*.1));"
"if(y>23.5)"
"v=vec3(3.,-.7,4.);"
"v=vec3(3,-.7,4);"
"if(y>32.5)"
"v=vec3(-20.,10.,50.);"
"v=vec3(-20,10,50);"
"if(y>36.5)"
"v=vec3(3.,-.7,4.),v.yz*=n((1.-cos(y-36.5))*-.025),v.xz*=n(sin((y-36.5)*.07));"
"v=vec3(3,-.7,4),v.yz*=f((1.-cos(y-36.5))*-.025),v.xz*=f(sin((y-36.5)*.07));"
"return v;"
"}"
"vec3 h()"
"vec3 n()"
"{"
"vec3 v=vec3(0.,-.5,0.);"
"vec3 v=vec3(0,-.5,0);"
"if(y>10.5)"
"v=vec3(1.7,-1.1,0.);"
"v=vec3(1.7,-1.1,0);"
"if(y>12.)"
"v=vec3(0.);"
"v=vec3(0);"
"if(y>14.5)"
"v=mix(vec3(1.5,1.4,0.),vec3(-1.5,1.4,0.),(y-16.5)*.13);"
"v=mix(vec3(1.5,1.4,0),vec3(-1.5,1.4,0),(y-16.5)*.13);"
"if(y>23.5)"
"v=vec3(0.);"
"v=vec3(0);"
"return v;"
"}"
"vec3 d(vec3 v)"
"vec3 r(vec3 v)"
"{"
"if(y>10.75)"
"{"
"float f=smoothstep(-1.,.8,sin(s(vec3(.8,10.75,8.))*2.));"
"v=mix(v,c*(f*1.4),f*.76);"
"float m=smoothstep(-1.,.8,sin(s(vec3(.8,10.75,8))*2.));"
"v=mix(v,m*1.4*z,m*.76);"
"}"
"return v;"
"}"
"vec3 d(vec3 v,vec3 y,float m,float e)"
"vec3 f(vec3 v,vec3 y,float m,float c)"
"{"
"return vec3(f(v,f(vec3(0.,.3,.8)),f(y),pow(10.,e)))*m;"
"return vec3(f(v,f(vec3(0,.3,.8)),f(y),pow(10.,c)))*m;"
"}"
"vec3 l(vec2 v)"
"vec3 n(vec2 v)"
"{"
"vec3 m=f(),l=r(v,m,h(),f((43.-y)*-2.,2.,25.)),i=vec3(0.);"
"float e=w(m,l,0),Z=0.;"
"if(e<500.)"
"vec3 m=f(),p=f(v,m,n(),f((43.-y)*-2.,2.,25.)),i=vec3(0);"
"float c=f(m,p,0),s=0.;"
"if(c<5e2)"
"{"
"vec3 z=m+l*e,a=r(z);"
"Z=w(z,0).y;"
"i+=vec3(.82,.5,.9)*f(z,vec3(10.,15.,25.),1.,.2,a,1e-10);"
"i+=vec3(.79,.66,.43)*f(z,vec3(4.,2.,-15.),1.,1.,a,1e-10);"
"i+=vec3(0.,.06,.7)*f(z,vec3(0.,0.,5.),f((y-29.)*100.,0.,50.),0.,a,3.1);"
"i+=vec3(.29,.28,.33)*f(dot(a,f(vec3(0.,1.,10.))),0.,1.);"
"if(Z==0.)"
"i*=vec3(.2,.3,.3)+d(a,l,.5,2.);"
"if(Z==1.)"
"i*=n(z,a,f(vec3(0.,.3,.8)),f(l));"
"if(Z==2.)"
"i*=vec3(.7,.7,.4)+x(z.xz*3.+1.5,.1,0);"
"if(Z==3.)"
"i*=vec3(.8,.8,.5)+x(z.xz*500.+1e5,.3,0);"
"if(Z==4.)"
"i*=vec3(0.,.08,.11)+d(a,l,.3,.7);"
"if(Z==5.)"
"i=c*.4;"
"if(Z==6.)"
"i*=vec3(.01,.04,.06)+d(a,l,.1,2.5);"
"vec3 v=m+p*c,r=w(v);"
"s=f(v,0).y;"
"i+=vec3(.82,.5,.9)*f(v,vec3(10,15,25),1.,.2,r,1e-10);"
"i+=vec3(.79,.66,.43)*f(v,vec3(4,2,-15),1.,1.,r,1e-10);"
"i+=vec3(0,.06,.7)*f(v,vec3(0,0,5),f((y-29.)*1e2,0.,50.),0.,r,3.1);"
"i+=vec3(.29,.28,.33)*f(dot(r,f(vec3(0,1,10))),0.,1.);"
"if(s==0.)"
"i*=vec3(.2,.3,.3)+f(r,p,.5,2.);"
"if(s==1.)"
"i*=f(v,r,f(vec3(0,.3,.8)),f(p));"
"if(s==2.)"
"i*=vec3(.7,.7,.4)+f(v.xz*3.+1.5,.1,0);"
"if(s==3.)"
"i*=vec3(.8,.8,.5)+f(v.xz*5e2+1e5,.3,0);"
"if(s==4.)"
"i*=vec3(0,.08,.11)+f(r,p,.3,.7);"
"if(s==5.)"
"i=z*.4;"
"if(s==6.)"
"i*=vec3(.01,.04,.06)+f(r,p,.1,2.5);"
"}"
"i+=p*c*.25;"
"return h(d(f(i,e,l,vec3(0.,-.1,-1.),.01)));"
"i+=x*z*.25;"
"return smoothstep(0.,1.,pow(r(mix(i,mix(vec3(.34,.11,.34),vec3(.93,.37,.16),pow(max(dot(p,vec3(0,-.1,-1)),0.),8.)),1.-exp(-c*.01)))*vec3(.9,.8,.7),vec3(.45)))+1.-vec3(f((46.-y)*.5,0.,1.));"
"}"
"void main()"
"{"
"vec2 v=vec2(1920,1080),f=gl_FragCoord.xy/v.xy,y=-1.+2.*f;"
"y.x*=v.x/v.y;"
"i=vec4(l(y),1.);"
"vec2 v=vec2(1920,1080),m=gl_FragCoord.xy/v.xy;"
"m=-1.+2.*m;"
"m.x*=v.x/v.y;"
"i=vec4(n(m),1);"
"}";
#endif // FRAGMENT_INL_

View File

@ -1,10 +1,8 @@
/* File generated with Shader Minifier 1.2
* http://www.ctrl-alt-test.fr
*/
// Generated with Shader Minifier 1.5.1 (https://github.com/laurentlb/Shader_Minifier/)
#ifndef POST_INL_
# define POST_INL_
# define VAR_I "v"
# define VAR_O "f"
# define VAR_i "v"
# define VAR_o "f"
const char *post_frag =
"#version 130\n"
@ -19,10 +17,9 @@ const char *post_frag =
"v=vec4(0);"
"for(int s=0;s<25;s++)"
"{"
"vec2 i=gl_FragCoord.xy*2./vec2(1920,1080);"
"float d=t(float(s+dot(i,i))),o=t(float(1-s+dot(i,i)));"
"vec2 m=.01*(-1.+2.*vec2(d,o));"
"v+=vec4(textureLod(f,i,(.3+.7*d)*texture(f,(1.+m)*i).w*8).xyz,1);"
"vec2 d=gl_FragCoord.xy*2./vec2(1920,1080);"
"float i=t(float(s+dot(d,d))),C=t(float(1-s+dot(d,d)));"
"v+=vec4(textureLod(f,d,(.3+.7*i)*texture(f,(1.+.01*(-1.+2.*vec2(i,C)))*d).w*8).xyz,1);"
"}"
"v/=vec4(25);"
"}";

43
src/sointu/song.h Normal file
View File

@ -0,0 +1,43 @@
// auto-generated by Sointu, editing not recommended
#ifndef SU_RENDER_H
#define SU_RENDER_H
#define SU_CHANNEL_COUNT 2
#define SU_LENGTH_IN_SAMPLES 8282304
#define SU_BUFFER_LENGTH (SU_LENGTH_IN_SAMPLES*SU_CHANNEL_COUNT)
#define SU_SAMPLE_RATE 44100
#define SU_BPM 138
#define SU_ROWS_PER_BEAT 4
#define SU_ROWS_PER_PATTERN 16
#define SU_LENGTH_IN_PATTERNS 108
#define SU_LENGTH_IN_ROWS (SU_LENGTH_IN_PATTERNS*SU_PATTERN_SIZE)
#define SU_SAMPLES_PER_ROW (SU_SAMPLE_RATE*60/(SU_BPM*SU_ROWS_PER_BEAT))
#include <stdint.h>
#if UINTPTR_MAX == 0xffffffff
#if defined(__clang__) || defined(__GNUC__)
#define SU_CALLCONV __attribute__ ((stdcall))
#elif defined(_WIN32)
#define SU_CALLCONV __stdcall
#endif
#else
#define SU_CALLCONV
#endif
typedef float SUsample;
#define SU_SAMPLE_RANGE 1.0
#define SU_SAMPLE_FLOAT
#define SU_SAMPLE_SIZE 4
#ifdef __cplusplus
extern "C" {
#endif
void SU_CALLCONV su_render_song(SUsample *buffer);
#ifdef __cplusplus
}
#endif
#endif