Skip to content

Commit

Permalink
Switched to SFML, started implementing audio
Browse files Browse the repository at this point in the history
  • Loading branch information
Lightwood13 committed Oct 3, 2020
1 parent 746b7a5 commit add4fb6
Show file tree
Hide file tree
Showing 9 changed files with 318 additions and 4,189 deletions.
18 changes: 18 additions & 0 deletions GameBoy_Emulator/APU.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#include "APU.h"
#include "Memory.h"

void APU::execute_one_cycle()
{
static float phase = 0;
static constexpr int w = 5000;
clock_cycles++;
if (clock_cycles % 23 == 0) // 1048576 / 44100 = 23
{
// generate 1 sound sample
sound_buffer[(cur_pos + 1) % sound_buffer.size()] = 0; // 2000 * sin(phase);
phase += w * 1.0 / BIT_RATE;
if (phase > 2 * 3.1415)
phase -= 2 * 3.1415;
cur_pos = (cur_pos + 1) % sound_buffer.size();
}
}
37 changes: 37 additions & 0 deletions GameBoy_Emulator/APU.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#pragma once

#include <array>
#include <atomic>

class Memory;

class APU
{
public:
static constexpr size_t BIT_RATE = 44100;
static constexpr size_t BUFFER_SIZE = 3 * BIT_RATE;
private:
Memory* mem;

uint64_t clock_cycles = 0;

std::array<int16_t, BUFFER_SIZE> sound_buffer;
std::atomic_size_t cur_pos = 0;
// change constant 23 in execute_one_cycle if you want to change bit rate
public:
APU(Memory* mem) : mem(mem) {};
void execute_one_cycle();

const std::array<int16_t, BUFFER_SIZE>& get_sound_buffer();
size_t get_cur_pos();
};

inline const std::array<int16_t, APU::BUFFER_SIZE>& APU::get_sound_buffer()
{
return sound_buffer;
}

inline size_t APU::get_cur_pos()
{
return cur_pos;
}
124 changes: 0 additions & 124 deletions GameBoy_Emulator/GameBoy_Emulator.cpp

This file was deleted.

14 changes: 11 additions & 3 deletions GameBoy_Emulator/GameBoy_Emulator.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,17 @@
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;SFML_STATIC;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile />
<LanguageStandard>stdcpp17</LanguageStandard>
<AdditionalIncludeDirectories>D:\lib\SFML-2.5.1\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>D:\lib\SFML-2.5.1\lib</AdditionalLibraryDirectories>
<AdditionalDependencies>sfml-graphics-s-d.lib;sfml-window-s-d.lib;sfml-system-s-d.lib;sfml-audio-s-d.lib;openal32.lib;flac.lib;vorbisenc.lib;vorbisfile.lib;vorbis.lib;ogg.lib;opengl32.lib;freetype.lib;winmm.lib;gdi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
Expand All @@ -119,18 +122,21 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;SFML_STATIC;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile />
<LanguageStandard>stdcpp17</LanguageStandard>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>D:\lib\SFML-2.5.1\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>D:\lib\SFML-2.5.1\lib</AdditionalLibraryDirectories>
<AdditionalDependencies>sfml-graphics-s.lib;sfml-window-s.lib;sfml-system-s.lib;sfml-audio-s.lib;openal32.lib;flac.lib;vorbisenc.lib;vorbisfile.lib;vorbis.lib;ogg.lib;opengl32.lib;freetype.lib;winmm.lib;gdi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
Expand All @@ -155,13 +161,15 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="APU.cpp" />
<ClCompile Include="CPU.cpp" />
<ClCompile Include="GameBoy_Emulator.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="Memory.cpp" />
<ClCompile Include="PPU.cpp" />
<ClCompile Include="Timer.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="APU.h" />
<ClInclude Include="CPU.h" />
<ClInclude Include="instructions_definitions.h" />
<ClInclude Include="Memory.h" />
Expand Down
8 changes: 7 additions & 1 deletion GameBoy_Emulator/GameBoy_Emulator.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@
<ClCompile Include="Timer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="GameBoy_Emulator.cpp">
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="APU.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
Expand All @@ -53,6 +56,9 @@
<ClInclude Include="olcPixelGameEngine.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="APU.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="cpp.hint" />
Expand Down
Loading

0 comments on commit add4fb6

Please sign in to comment.