mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 22:29:39 -06:00
MusicMod: Prepare to fix the MusicMod build
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3505 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
417
Externals/MusicMod/Main/Main.vcproj
vendored
Normal file
417
Externals/MusicMod/Main/Main.vcproj
vendored
Normal file
@ -0,0 +1,417 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9,00"
|
||||
Name="Main"
|
||||
ProjectGUID="{95CCAABC-7062-47C4-B8C1-A064DD5F16FF}"
|
||||
RootNamespace="MusicMod"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\..\Source\Core\Common\Src;..\..\..\Externals\wxWidgets\Include;..\..\..\Externals\wxWidgets\Include\msvc;..\..\..\Source\Core\Core\Src"
|
||||
PreprocessorDefinitions="_SECURE_SCL=0"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\..\Source\Core\Common\Src;..\..\..\Externals\wxWidgets\Include;..\..\..\Externals\wxWidgets\Include\msvc;..\..\..\Source\Core\Core\Src"
|
||||
PreprocessorDefinitions="_SECURE_SCL=0"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
AdditionalIncludeDirectories="..\..\..\Source\Core\Common\Src;..\..\..\Externals\wxWidgets\Include;..\..\..\Externals\wxWidgets\Include\msvc;..\..\..\Source\Core\Core\Src"
|
||||
PreprocessorDefinitions="NDEBUG;_SECURE_SCL=0"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
AdditionalOptions="/NODEFAULTLIB:msvcrt"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
AdditionalIncludeDirectories="..\..\..\Source\Core\Common\Src;..\..\..\Externals\wxWidgets\Include;..\..\..\Externals\wxWidgets\Include\msvc;..\..\..\Source\Core\Core\Src"
|
||||
PreprocessorDefinitions="_SECURE_SCL=0"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
AdditionalOptions="/NODEFAULTLIB:msvcrt"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="DebugFast|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
AdditionalIncludeDirectories="..\..\..\Source\Core\Common\Src;..\..\..\Externals\wxWidgets\Include;..\..\..\Externals\wxWidgets\Include\msvc;..\..\..\Source\Core\Core\Src"
|
||||
PreprocessorDefinitions="NDEBUG;DEBUGFAST;_SECURE_SCL=0"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
AdditionalOptions="/NODEFAULTLIB:msvcrt"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="DebugFast|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
AdditionalIncludeDirectories="..\..\..\Source\Core\Common\Src;..\..\..\Externals\wxWidgets\Include;..\..\..\Externals\wxWidgets\Include\msvc;..\..\..\Source\Core\Core\Src"
|
||||
PreprocessorDefinitions="_SECURE_SCL=0"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
AdditionalOptions="/NODEFAULTLIB:msvcrt"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<File
|
||||
RelativePath=".\Src\Frame.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Src\Main.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Src\Main.h"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
466
Externals/MusicMod/Main/Src/Frame.cpp
vendored
Normal file
466
Externals/MusicMod/Main/Src/Frame.cpp
vendored
Normal file
@ -0,0 +1,466 @@
|
||||
// Copyright (C) 2003-2008 Dolphin Project.
|
||||
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, version 2.0.
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License 2.0 for more details.
|
||||
|
||||
// A copy of the GPL 2.0 should have been included with the program.
|
||||
// If not, see http://www.gnu.org/licenses/
|
||||
|
||||
// Official SVN repository and contact information can be found at
|
||||
// http://code.google.com/p/dolphin-emu/
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Include
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#include <iostream> // System
|
||||
|
||||
#include "Core.h" // Core
|
||||
|
||||
#include "IniFile.h" // Common
|
||||
#include "Log.h"
|
||||
|
||||
#include "../../../../Source/Core/DolphinWX/Src/Globals.h" // DolphinWX
|
||||
#include "../../../../Source/Core/DolphinWX/Src/Frame.h"
|
||||
|
||||
#include "../../../../Source/Core/DolphinWX/resources/toolbar_plugin_dsp.c" // Icons
|
||||
#include "../../../../Source/Core/DolphinWX/resources/Boomy.h"
|
||||
#include "../../../../Source/Core/DolphinWX/resources/Vista.h"
|
||||
#include "../../../../Source/Core/DolphinWX/resources/KDE.h"
|
||||
#include "../../../../Source/Core/DolphinWX/resources/X-Plastik.h"
|
||||
|
||||
#include "../../Player/Src/PlayerExport.h" // Player
|
||||
//////////////////////////////////
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Declarations and definitions
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
namespace MusicMod
|
||||
{
|
||||
bool GlobalMute = false;
|
||||
bool GlobalPause = false;
|
||||
bool bShowConsole = false;
|
||||
int GlobalVolume = 125;
|
||||
extern bool dllloaded;
|
||||
|
||||
void ShowConsole();
|
||||
void Init();
|
||||
}
|
||||
//////////////////////////////////
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Change the brightness of a wxBitmap
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
wxBitmap SetBrightness(wxBitmap _Bitmap, int _Brightness, bool Gray)
|
||||
{
|
||||
wxImage _Image = _Bitmap.ConvertToImage();
|
||||
wxImage _Image2 = _Bitmap.ConvertToImage();
|
||||
|
||||
wxString Tmp;
|
||||
|
||||
if(_Brightness < 0) _Brightness = 0; // Limits
|
||||
if(_Brightness > 255) _Brightness = 255;
|
||||
|
||||
_Brightness = 255 - _Brightness; // Make big values brighter
|
||||
|
||||
// Remove the alpha layer first
|
||||
for(int y = 0; y < _Bitmap.GetWidth(); y++)
|
||||
{
|
||||
for(int x = 0; x < _Bitmap.GetHeight(); x++)
|
||||
_Image.SetAlpha(x, y, 255);
|
||||
}
|
||||
|
||||
for(int y = 0; y < _Bitmap.GetWidth(); y++)
|
||||
{
|
||||
//Tmp += wxString::Format("\n %i: ", y);
|
||||
|
||||
for(int x = 0; x < _Bitmap.GetHeight(); x++)
|
||||
{
|
||||
u8 R = _Image.GetRed(x, y); // Get colors
|
||||
u8 G = _Image.GetGreen(x, y);
|
||||
u8 B = _Image.GetBlue(x, y);
|
||||
|
||||
//if((x == 5 | x == 6) && y == 15) Tmp += wxString::Format("%03i %03i %03i", R, G, B);
|
||||
|
||||
if(_Brightness > 128)
|
||||
{
|
||||
int Bright = _Brightness - 128;
|
||||
R = R - Bright * (R - 0) / 128;
|
||||
G = G - Bright * (G - 0) / 128;
|
||||
B = B - Bright * (B - 0) / 128;
|
||||
|
||||
// 118 - 72 * 118 / 128 = 118 - 66.3 = 52
|
||||
// 119 - = 119 - 66.9 = 52
|
||||
}
|
||||
else
|
||||
{
|
||||
int Bright = 128 - _Brightness;
|
||||
R = R - Bright * (R - 255) / 128;
|
||||
G = G - Bright * (G - 255) / 128;
|
||||
B = B - Bright * (B - 255) / 128;
|
||||
}
|
||||
|
||||
//if((x == 5 | x == 6) && y == 15) Tmp += wxString::Format(" %03i %03i %03i | ", R, G, B);
|
||||
|
||||
_Image.SetRGB(x, y, R, G, B);
|
||||
}
|
||||
}
|
||||
// Return the alpha
|
||||
_Image.SetAlpha(_Image2.GetAlpha(), true);
|
||||
|
||||
// Update the bitmap
|
||||
if(Gray)
|
||||
return wxBitmap(_Image.ConvertToGreyscale());
|
||||
else
|
||||
return wxBitmap(_Image);
|
||||
|
||||
//wxMessageBox(Tmp);
|
||||
}
|
||||
//////////////////////////////////
|
||||
|
||||
|
||||
#ifdef MUSICMOD
|
||||
void
|
||||
CFrame::MM_InitBitmaps(int Theme)
|
||||
{
|
||||
// Define the log bitmaps
|
||||
switch (Theme)
|
||||
{
|
||||
case BOOMY:
|
||||
m_Bitmaps[Toolbar_Log] = wxGetBitmapFromMemory(Toolbar_Log_png);
|
||||
break;
|
||||
case VISTA:
|
||||
m_Bitmaps[Toolbar_Log] = wxGetBitmapFromMemory(Toolbar_Log1_png);
|
||||
break;
|
||||
case XPLASTIK:
|
||||
m_Bitmaps[Toolbar_Log] = wxGetBitmapFromMemory(Toolbar_Log2_png);
|
||||
break;
|
||||
case KDE:
|
||||
m_Bitmaps[Toolbar_Log] = wxGetBitmapFromMemory(Toolbar_Log3_png);
|
||||
break;
|
||||
default: PanicAlert("Theme selection went wrong");
|
||||
}
|
||||
|
||||
// Create a gray version
|
||||
m_Bitmaps[Toolbar_PluginDSP_Dis] = wxBitmap(SetBrightness(m_Bitmaps[Toolbar_PluginDSP], 165, true));
|
||||
m_Bitmaps[Toolbar_Log_Dis] = wxBitmap(SetBrightness(m_Bitmaps[Toolbar_Log], 165, true));
|
||||
|
||||
// Update in case the bitmap has been updated
|
||||
//if (GetToolBar() != NULL) TheToolBar->FindById(Toolbar_Log)->SetNormalBitmap(m_Bitmaps[Toolbar_Log]);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
CFrame::MM_PopulateGUI()
|
||||
{
|
||||
wxToolBar* toolBar = TheToolBar; // Shortcut
|
||||
|
||||
toolBar->AddSeparator();
|
||||
|
||||
MusicMod::Init();
|
||||
|
||||
// ---------------------------------------
|
||||
// Draw a rotated music label
|
||||
// ---------------------
|
||||
wxBitmap m_RotatedText(30, 15);
|
||||
wxMemoryDC dc;
|
||||
dc.SelectObject(m_RotatedText);
|
||||
wxBrush BackgroundGrayBrush(_T("#ece9d8")); // The right color in windows
|
||||
|
||||
// Set outline and fill colors
|
||||
dc.SetBackground(BackgroundGrayBrush);
|
||||
dc.Clear();
|
||||
|
||||
wxFont m_font(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD);
|
||||
dc.SetFont(m_font);
|
||||
dc.SetTextForeground(wxColour(*wxLIGHT_GREY));
|
||||
|
||||
dc.DrawText(wxT("Music"), 0, 0);
|
||||
m_RotatedText = wxBitmap(m_RotatedText.ConvertToImage().Rotate90(false));
|
||||
|
||||
wxStaticBitmap * m_StaticBitmap = new wxStaticBitmap(toolBar, wxID_ANY, m_RotatedText);
|
||||
|
||||
toolBar->AddControl(m_StaticBitmap);
|
||||
// ---------------------------
|
||||
|
||||
|
||||
|
||||
mm_ToolMute = toolBar->AddTool(IDM_MUTE, _T("Mute"), m_Bitmaps[Toolbar_PluginDSP], _T("Mute music"));
|
||||
mm_ToolPlay = toolBar->AddTool(IDM_MUSIC_PLAY, _T("Play"), m_Bitmaps[Toolbar_Play], _T("Play or pause music without pausing the game"));
|
||||
|
||||
// This cause the disabled tool bitmap to become some kind of monochrome version
|
||||
/*
|
||||
mm_ToolMute = new wxToolBarToolBase(toolBar, IDM_MUTE, _T("Mute"), m_Bitmaps[Toolbar_PluginDSP],
|
||||
m_Bitmaps[Toolbar_PluginDSP], wxITEM_CHECK, 0, _T("Mute music"));
|
||||
toolBar->AddTool(mm_ToolMute);
|
||||
|
||||
mm_ToolPlay = new wxToolBarToolBase(toolBar, IDM_MUSIC_PLAY, _T("Play"), m_Bitmaps[Toolbar_Play],
|
||||
m_Bitmaps[Toolbar_Play], wxITEM_NORMAL, 0, _T("Play or pause music without pausing the game"));
|
||||
toolBar->AddTool(mm_ToolPlay);
|
||||
*/
|
||||
|
||||
|
||||
// ---------------------
|
||||
/* Lots of code to get a label for the slider, in 2.9.0 AddControl accepts a label so then
|
||||
this code can be simplified a lot */
|
||||
// ---------
|
||||
wxPanel * mm_SliderPanel = new wxPanel(toolBar, IDS_VOLUME_PANEL, wxDefaultPosition, wxDefaultSize);
|
||||
mm_Slider = new wxSlider(mm_SliderPanel, IDS_VOLUME, 125, 0, 255, wxDefaultPosition, wxDefaultSize);
|
||||
//mm_Slider->SetToolTip("Change the music volume");
|
||||
mm_Slider->SetValue(MusicMod::GlobalVolume);
|
||||
|
||||
wxStaticText * mm_SliderText = new wxStaticText(mm_SliderPanel, IDS_VOLUME_LABEL, _T("Volume"), wxDefaultPosition, wxDefaultSize);
|
||||
wxBoxSizer * mm_VolSizer = new wxBoxSizer(wxVERTICAL);
|
||||
mm_VolSizer->Add(mm_Slider, 0, wxEXPAND | wxALL, 0);
|
||||
mm_VolSizer->Add(mm_SliderText, 0, wxCENTER | wxALL, 0);
|
||||
|
||||
mm_SliderPanel->SetSizer(mm_VolSizer);
|
||||
mm_SliderPanel->SetSize(mm_VolSizer->GetMinSize().GetWidth(), mm_VolSizer->GetMinSize().GetHeight());
|
||||
|
||||
toolBar->AddControl((wxControl*)mm_SliderPanel);
|
||||
// ---------
|
||||
|
||||
mm_ToolLog = toolBar->AddTool(IDT_LOG, _T("Log"), m_Bitmaps[Toolbar_Log],
|
||||
wxT("Show or hide log. Enable the log window and restart Dolphin to show the DLL status."));
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Update GUI
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void
|
||||
CFrame::MM_UpdateGUI()
|
||||
{
|
||||
if(MusicMod::GlobalMute)
|
||||
{
|
||||
mm_ToolMute->SetLabel("Unmute");
|
||||
mm_ToolMute->SetNormalBitmap(m_Bitmaps[Toolbar_PluginDSP_Dis]);
|
||||
}
|
||||
else
|
||||
{
|
||||
mm_ToolMute->SetLabel("Mute");
|
||||
mm_ToolMute->SetNormalBitmap(m_Bitmaps[Toolbar_PluginDSP]);
|
||||
}
|
||||
|
||||
if(MusicMod::GlobalPause)
|
||||
{
|
||||
mm_ToolPlay->SetLabel("Play");
|
||||
mm_ToolPlay->SetNormalBitmap(m_Bitmaps[Toolbar_Play]);
|
||||
}
|
||||
else
|
||||
{
|
||||
mm_ToolPlay->SetLabel("Pause");
|
||||
mm_ToolPlay->SetNormalBitmap(m_Bitmaps[Toolbar_Pause]);
|
||||
}
|
||||
|
||||
if(MusicMod::bShowConsole)
|
||||
{
|
||||
mm_ToolLog->SetNormalBitmap(m_Bitmaps[Toolbar_Log]);
|
||||
}
|
||||
else
|
||||
{
|
||||
mm_ToolLog->SetNormalBitmap(m_Bitmaps[Toolbar_Log_Dis]);
|
||||
}
|
||||
}
|
||||
//////////////////////////////////
|
||||
|
||||
|
||||
|
||||
// =======================================================================================
|
||||
// Play and stop music
|
||||
// ---------------------------------------------------------------------------------------
|
||||
void
|
||||
CFrame::MM_OnPlay()
|
||||
{
|
||||
//INFO_LOG(AUDIO,"\nCFrame::OnPlayMusicMod > Begin\n");
|
||||
|
||||
// Save the volume
|
||||
MusicMod::GlobalVolume = mm_Slider->GetValue();
|
||||
|
||||
IniFile file;
|
||||
file.Load("Plainamp.ini");
|
||||
file.Set("Plainamp", "Volume", MusicMod::GlobalVolume);
|
||||
file.Save("Plainamp.ini");
|
||||
|
||||
if (Core::GetState() != Core::CORE_UNINITIALIZED)
|
||||
{
|
||||
if (Core::GetState() == Core::CORE_RUN)
|
||||
{
|
||||
//INFO_LOG(AUDIO,"CFrame::OnPlayMusicMod > Pause\n");
|
||||
if(!MusicMod::GlobalPause) // we may has set this elsewhere
|
||||
{
|
||||
MusicMod::GlobalPause = true;
|
||||
if (MusicMod::dllloaded)
|
||||
{
|
||||
Player_Pause();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//INFO_LOG(AUDIO,"CFrame::OnPlayMusicMod > Play\n");
|
||||
if(MusicMod::GlobalPause) // we may has set this elsewhere
|
||||
{
|
||||
MusicMod::GlobalPause = false;
|
||||
if (MusicMod::dllloaded)
|
||||
{
|
||||
Player_Unpause();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CFrame::MM_OnStop()
|
||||
{
|
||||
Player_Stop();
|
||||
MusicMod::GlobalPause = false;
|
||||
}
|
||||
// =======================================================================================
|
||||
|
||||
|
||||
// =======================================================================================
|
||||
// Mute music
|
||||
// ---------------------------------------------------------------------------------------
|
||||
void
|
||||
CFrame::MM_OnMute(wxCommandEvent& WXUNUSED (event))
|
||||
{
|
||||
//INFO_LOG(AUDIO,"CFrame::OnMute > Begin\n");
|
||||
//MessageBox(0, "", "", 0);
|
||||
|
||||
if(!MusicMod::GlobalMute)
|
||||
{
|
||||
if(MusicMod::dllloaded) // avoid crash
|
||||
{
|
||||
Player_Mute(MusicMod::GlobalVolume);
|
||||
}
|
||||
|
||||
MusicMod::GlobalMute = true;
|
||||
UpdateGUI();
|
||||
}
|
||||
else
|
||||
{
|
||||
if(MusicMod::dllloaded) // avoid crash
|
||||
{
|
||||
Player_Mute(MusicMod::GlobalVolume);
|
||||
}
|
||||
MusicMod::GlobalMute = false;
|
||||
UpdateGUI();
|
||||
}
|
||||
}
|
||||
// =======================================================================================
|
||||
|
||||
|
||||
// =======================================================================================
|
||||
// Pause music
|
||||
// ---------------------------------------------------------------------------------------
|
||||
void
|
||||
CFrame::MM_OnPause(wxCommandEvent& WXUNUSED (event))
|
||||
{
|
||||
INFO_LOG(AUDIO,"CFrame::OnPause > Begin\n");
|
||||
//MessageBox(0, "", "", 0);
|
||||
|
||||
if(!MusicMod::GlobalPause)
|
||||
{
|
||||
if(MusicMod::dllloaded) // avoid crash
|
||||
{
|
||||
Player_Pause();
|
||||
}
|
||||
MusicMod::GlobalPause = true;
|
||||
UpdateGUI();
|
||||
}
|
||||
else
|
||||
{
|
||||
if(MusicMod::dllloaded) // avoid crash
|
||||
{
|
||||
Player_Pause();
|
||||
}
|
||||
MusicMod::GlobalPause = false;
|
||||
UpdateGUI();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// =======================================================================================
|
||||
// Change volume
|
||||
// ---------------------------------------------------------------------------------------
|
||||
void CFrame::MM_OnVolume(wxScrollEvent& event)
|
||||
{
|
||||
//INFO_LOG(AUDIO,"CFrame::OnVolume > Begin <%i>\n", event.GetPosition());
|
||||
//MessageBox(0, "", "", 0);
|
||||
|
||||
//if(event.GetEventType() == wxEVT_SCROLL_PAGEUP || event.GetEventType() == wxEVT_SCROLL_PAGEDOWN)
|
||||
// return;
|
||||
|
||||
if(MusicMod::dllloaded) // avoid crash
|
||||
{
|
||||
|
||||
Player_Volume(event.GetPosition());
|
||||
MusicMod::GlobalVolume = event.GetPosition();
|
||||
|
||||
MusicMod::GlobalMute = false; // Unmute to
|
||||
mm_ToolMute->Toggle(false);
|
||||
|
||||
|
||||
if(event.GetEventType() == wxEVT_SCROLL_CHANGED)
|
||||
{
|
||||
// Only update this on release, to avoid major flickering when changing volume
|
||||
UpdateGUI();
|
||||
|
||||
/* Use this to avoid that the focus get stuck on the slider when the main
|
||||
window has been replaced */
|
||||
this->SetFocus();}
|
||||
}
|
||||
}
|
||||
//=======================================================================================
|
||||
|
||||
|
||||
|
||||
// =======================================================================================
|
||||
// Show log
|
||||
// ---------------------------------------------------------------------------------------
|
||||
void CFrame::MM_OnLog(wxCommandEvent& event)
|
||||
{
|
||||
//INFO_LOG(AUDIO,"CFrame::OnLog > Begin\n");
|
||||
//MessageBox(0, "", "", 0);
|
||||
|
||||
if(!MusicMod::dllloaded) return; // Avoid crash
|
||||
|
||||
MusicMod::bShowConsole = !MusicMod::bShowConsole;
|
||||
|
||||
if(MusicMod::bShowConsole)
|
||||
/* What we do here is run StartConsoleWin() in Common directly after each
|
||||
other first in the exe then in the DLL, sometimes this would give me a rampant memory
|
||||
usage increase until the exe crashed at 700 MB memory usage or something like that.
|
||||
For that reason I'm trying to sleep for a moment between them here. */
|
||||
{ MusicMod::ShowConsole(); Sleep(100); Player_Console(true); }
|
||||
else
|
||||
{
|
||||
#if defined (_WIN32)
|
||||
Console::Close(); Player_Console(false);
|
||||
#endif
|
||||
}
|
||||
|
||||
IniFile file;
|
||||
file.Load("Plainamp.ini");
|
||||
file.Set("Interface", "ShowConsole", MusicMod::bShowConsole);
|
||||
file.Save("Plainamp.ini");
|
||||
|
||||
UpdateGUI();
|
||||
}
|
||||
//=======================================================================================
|
||||
|
||||
#endif // MUSICMOD
|
342
Externals/MusicMod/Main/Src/Main.cpp
vendored
Normal file
342
Externals/MusicMod/Main/Src/Main.cpp
vendored
Normal file
@ -0,0 +1,342 @@
|
||||
// Copyright (C) 2003-2008 Dolphin Project.
|
||||
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, version 2.0.
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License 2.0 for more details.
|
||||
|
||||
// A copy of the GPL 2.0 should have been included with the program.
|
||||
// If not, see http://www.gnu.org/licenses/
|
||||
|
||||
// Official SVN repository and contact information can be found at
|
||||
// http://code.google.com/p/dolphin-emu/
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Include
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <windows.h>
|
||||
|
||||
#include "Common.h" // Common
|
||||
#include "IniFile.h"
|
||||
#include "Log.h"
|
||||
|
||||
#include "PowerPC/PowerPc.h" // Core
|
||||
|
||||
#include "../../../../Source/Core/DiscIO/Src/FileSystemGCWii.h" // This file has #include "Filesystem.h"
|
||||
#include "../../../../Source/Core/DiscIO/Src/VolumeCreator.h"
|
||||
|
||||
#include "../../Player/Src/PlayerExport.h" // Local player
|
||||
//////////////////////////////////
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Declarations and definitions
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
namespace MusicMod
|
||||
{
|
||||
|
||||
struct MyFilesStructure
|
||||
{
|
||||
std::string path;
|
||||
int offset; // Is int enough, how high does offset go?
|
||||
};
|
||||
|
||||
std::vector <MyFilesStructure> MyFiles;
|
||||
void StructSort (std::vector <MyFilesStructure> &MyFiles);
|
||||
|
||||
|
||||
// Playback
|
||||
std::string CurrentFile;
|
||||
std::string CurrentPlayFile;
|
||||
std::string CurrentPlayFilePath;
|
||||
std::string unique_gameid;
|
||||
|
||||
std::string MusicPath;
|
||||
|
||||
DiscIO::CFileSystemGCWii* my_pFileSystem;
|
||||
|
||||
int WritingFile = false;
|
||||
bool dllloaded = false;
|
||||
|
||||
extern bool bShowConsole; // Externally define
|
||||
extern int GlobalVolume;
|
||||
//////////////////////////////////
|
||||
|
||||
|
||||
// =======================================================================================
|
||||
// Supported music files
|
||||
// ---------------------------------------------------------------------------------------
|
||||
bool CheckFileEnding(std::string FileName)
|
||||
{
|
||||
if (
|
||||
(FileName.find(".adp") != std::string::npos) // 1080 Avalanche, Crash Bandicoot etc
|
||||
|| (FileName.find(".afc") != std::string::npos) // Zelda WW
|
||||
|| (FileName.find(".ast") != std::string::npos) // Zelda TP, Mario Kart
|
||||
|| (FileName.find(".dsp") != std::string::npos) // Metroid Prime
|
||||
|| (FileName.find(".hps") != std::string::npos) // SSB Melee
|
||||
)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
// =======================================================================================
|
||||
|
||||
|
||||
// =======================================================================================
|
||||
// A function to sort the filelist table after offset
|
||||
// ------------------------
|
||||
void StructSort (std::vector <MyFilesStructure> &MyFiles)
|
||||
{
|
||||
MyFilesStructure temp;
|
||||
|
||||
//INFO_LOG(AUDIO,"StructSort > Begin\n");
|
||||
|
||||
for(int i = 0; i < MyFiles.size() - 1; i++)
|
||||
{
|
||||
for (int j = i + 1; j < MyFiles.size(); j++)
|
||||
{
|
||||
if (MyFiles[ i ].offset > MyFiles[ j ].offset) //comparing cost
|
||||
{
|
||||
temp = MyFiles[ i ]; // Swapping entire struct
|
||||
MyFiles[ i ] = MyFiles[ j ];
|
||||
MyFiles[ j ] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (long i=1; i<(long)MyFiles.size(); ++i)
|
||||
{
|
||||
std::cout << i << " " << MyFiles[i].path.c_str() << "#" << MyFiles[i].offset << "\n";
|
||||
}
|
||||
|
||||
//INFO_LOG(AUDIO,"StructSort > Done\n");
|
||||
}
|
||||
// ============================
|
||||
|
||||
|
||||
// =======================================================================================
|
||||
/* Run these things once */
|
||||
// ------------------------
|
||||
void ShowConsole()
|
||||
{
|
||||
// Console::Open(100, 2000, "MusicMod", true); // Give room for 2000 rows
|
||||
}
|
||||
|
||||
void Init()
|
||||
{
|
||||
// These things below will not need to be updated after a new game is started
|
||||
if (dllloaded) return;
|
||||
|
||||
// ---------------------------------------
|
||||
// Load config
|
||||
// ---------------------
|
||||
IniFile file;
|
||||
file.Load("Plainamp.ini");
|
||||
file.Get("Interface", "ShowConsole", &MusicMod::bShowConsole, false);
|
||||
file.Get("Plainamp", "Volume", &MusicMod::GlobalVolume, 125);
|
||||
// -------
|
||||
|
||||
// ---------------------------------------
|
||||
// Make a debugging window
|
||||
// ---------------------
|
||||
if(MusicMod::bShowConsole) ShowConsole();
|
||||
|
||||
// Write version
|
||||
#ifdef _M_X64
|
||||
INFO_LOG(AUDIO,"64 bit version\n");
|
||||
#else
|
||||
INFO_LOG(AUDIO,"32 bit version\n");
|
||||
#endif
|
||||
// -----------
|
||||
|
||||
// Set volume
|
||||
Player_Volume(MusicMod::GlobalVolume);
|
||||
|
||||
// Show DLL status
|
||||
Player_Main(MusicMod::bShowConsole);
|
||||
//play_file("c:\\demo36_02.ast");
|
||||
//INFO_LOG(AUDIO,"DLL loaded\n");
|
||||
|
||||
dllloaded = true; // Do this once
|
||||
}
|
||||
// ============================
|
||||
|
||||
|
||||
// =======================================================================================
|
||||
/* This will read the GC file system. */
|
||||
// ------------------------
|
||||
void Main(std::string FileName)
|
||||
{
|
||||
//
|
||||
DiscIO::IVolume* pVolume = DiscIO::CreateVolumeFromFilename(FileName.c_str());
|
||||
|
||||
//
|
||||
my_pFileSystem = new DiscIO::CFileSystemGCWii(pVolume);
|
||||
|
||||
/* We have to sort the files according to offset so that out scan in Blob.cpp works.
|
||||
Because StructSort() only works for MyFilesStructure I copy the offset and filenames
|
||||
to a new vetor first. */
|
||||
MyFiles.resize(my_pFileSystem->m_FileInfoVector.size()); // Set size
|
||||
for (size_t i = 0; i < my_pFileSystem->m_FileInfoVector.size(); i++)
|
||||
{
|
||||
MyFiles.at(i).offset = my_pFileSystem->m_FileInfoVector.at(i).m_Offset;
|
||||
MyFiles.at(i).path = my_pFileSystem->m_FileInfoVector.at(i).m_FullPath;
|
||||
}
|
||||
|
||||
// Sort the files by offset
|
||||
StructSort(MyFiles);
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
// Make Music directory
|
||||
// -------------------------
|
||||
LPSECURITY_ATTRIBUTES attr;
|
||||
attr = NULL;
|
||||
MusicPath = "Music\\";
|
||||
INFO_LOG(AUDIO,"Created a Music directory\n");
|
||||
CreateDirectory(MusicPath.c_str(), attr);
|
||||
// ----------------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
|
||||
// =======================================================================================
|
||||
// Check if we should play this file
|
||||
// ---------------------------------------------------------------------------------------
|
||||
void CheckFile(std::string File, int FileNumber)
|
||||
{
|
||||
// Do nothing if we found the same file again
|
||||
if (CurrentFile == File) return;
|
||||
|
||||
//INFO_LOG(AUDIO,">>>> (%i)Current read %s <%u = %ux%i> <block %u>\n", i, CurrentFiles[i].path.c_str(), offset, CurrentFiles[i].offset, size);
|
||||
|
||||
// Check if it's a music file
|
||||
if (CheckFileEnding(File.c_str()))
|
||||
{
|
||||
/* Don't restart the playback if we find the same music file again. If the game is playing
|
||||
a streaming music file it may read from it once in a while, after it has read other
|
||||
files in between, if did not do this check we would restart the playback in those cases */
|
||||
if (CurrentPlayFile == File) return;
|
||||
|
||||
// Notify the user
|
||||
INFO_LOG(AUDIO,"\n >>> (%i/%i) Match %s\n\n", FileNumber, MyFiles.size(), File.c_str());
|
||||
|
||||
// Save the matched file
|
||||
CurrentPlayFile = File;
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
// We will now save the file to the PC hard drive
|
||||
// ------------------
|
||||
// Get the filename
|
||||
std::size_t pointer = File.find_last_of("\\");
|
||||
std::string fragment = File.substr (0, (pointer-0));
|
||||
int compare = File.length() - fragment.length(); // Get the length of the filename
|
||||
fragment = File.substr ((pointer+1), compare); // Now we have the filename
|
||||
|
||||
// Create the target file path
|
||||
std::string FilePath = (MusicPath + fragment);
|
||||
|
||||
WritingFile = true; // Avoid detecting the file we are writing
|
||||
INFO_LOG(AUDIO,"Writing <%s> to <%s>\n", File.c_str(), FilePath.c_str());
|
||||
my_pFileSystem->ExportFile(File.c_str(), FilePath.c_str());
|
||||
WritingFile = false;
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
// Play the file we found
|
||||
// ------------------
|
||||
if(dllloaded)
|
||||
{
|
||||
Player_Play((char*)FilePath.c_str()); // retype it from const char* to char*
|
||||
} else {
|
||||
INFO_LOG(AUDIO,"Warning > Music DLL is not loaded");
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
// Remove the last file, if any
|
||||
// ------------------
|
||||
if(CurrentPlayFilePath.length() > 0)
|
||||
{
|
||||
if(!remove(CurrentPlayFilePath.c_str()))
|
||||
{
|
||||
INFO_LOG(AUDIO,"The program failed to remove <%s>\n", CurrentPlayFilePath.c_str());
|
||||
} else {
|
||||
INFO_LOG(AUDIO,"The program removed <%s>\n", CurrentPlayFilePath.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
// Save the current playing file
|
||||
// ------------------
|
||||
CurrentPlayFilePath = FilePath; // Save the filename so we can remove it later
|
||||
}
|
||||
|
||||
// Tell the user about the files we ignored
|
||||
INFO_LOG(AUDIO,"(%i/%i) Ignored %s\n", FileNumber, MyFiles.size(), File.c_str());
|
||||
|
||||
// Update the current file
|
||||
CurrentFile = File;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Find the current filename for a certain offset on the GC fileystem
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void FindFilename(u64 offset, u64 size)
|
||||
{
|
||||
// =======================================================================================
|
||||
/* Only do this test:
|
||||
1. After boot, not on ISO scan
|
||||
2. Not if offset = 0.
|
||||
3. Not when WritingFile. We will lead to calls back to here (Read) and it will mess
|
||||
upp the scanning */
|
||||
if(PowerPC::GetState() == PowerPC::CPUState::CPU_RUNNING && offset != 0 && !WritingFile)
|
||||
{
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
/* Get the filename. Here we go through all files until we come to the file that has
|
||||
the matching offset. Before MyFiles has data this loop will go nowhere. We have to
|
||||
specify (MyFiles.size() - 1) because we will be reading MyFiles.at(i + 1).
|
||||
MyFiles.size() is the amount of files on the disc, and the last file is
|
||||
MyFiles.at(MyFiles.size() - 1) */
|
||||
// ---------------------------------------------------------------------------------------
|
||||
for (int i = 0; i < (int)(MyFiles.size() - 1); ++i)
|
||||
{
|
||||
// ---------------------------------------------------------------------------------------
|
||||
/* If we assume that myoffset is the begginning of every file this works.
|
||||
Suppose there are three files
|
||||
1 is 0 to 149
|
||||
2 is 150 to 170
|
||||
3 is 171 to 200
|
||||
If the offset is 160 the game is reading file number two, for example
|
||||
myoffset = 150: (myoffset >= offset) == false
|
||||
myoffset = 171: (myoffset >= offset) == true, break
|
||||
|
||||
However if the offset is 195 the game is reading the last file and we will get
|
||||
myoffset = 171: (myoffset >= offset) == false
|
||||
we therefore need to add the condition (offset > MyFiles[MyFiles.size() - 1].offset)
|
||||
to. */
|
||||
if (MyFiles[i + 1].offset >= offset || offset > MyFiles[MyFiles.size() - 1].offset)
|
||||
{
|
||||
// Now we know that the game is reading from MyFiles[i].path
|
||||
CheckFile(MyFiles[i].path, i);
|
||||
|
||||
// Stop checking
|
||||
break;
|
||||
}
|
||||
}
|
||||
} // This ends the entire filescan
|
||||
// =======================================================================================
|
||||
}
|
||||
/////////////////////////////////
|
||||
|
||||
|
||||
} // end of namespace
|
31
Externals/MusicMod/Main/Src/Main.h
vendored
Normal file
31
Externals/MusicMod/Main/Src/Main.h
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
// Copyright (C) 2003-2008 Dolphin Project.
|
||||
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, version 2.0.
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License 2.0 for more details.
|
||||
|
||||
// A copy of the GPL 2.0 should have been included with the program.
|
||||
// If not, see http://www.gnu.org/licenses/
|
||||
|
||||
// Official SVN repository and contact information can be found at
|
||||
// http://code.google.com/p/dolphin-emu/
|
||||
|
||||
|
||||
#include <iostream> // System: For std
|
||||
|
||||
#include "Common.h" // Common: For u64
|
||||
|
||||
|
||||
namespace MusicMod
|
||||
{
|
||||
|
||||
void Main(std::string FileName);
|
||||
void FindFilename(u64 offset, u64 size);
|
||||
void CheckFile(std::string File, int FileNumber = 0);
|
||||
|
||||
}
|
Reference in New Issue
Block a user