Simulator first commit

This commit is contained in:
2019-09-18 11:11:16 +03:00
commit 6e1686be67
5028 changed files with 985331 additions and 0 deletions

View File

@ -0,0 +1,741 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8,00"
Name="libmpg123"
ProjectGUID="{5ABE9A83-CA20-4321-878B-BF71EFDE3A6D}"
RootNamespace="libmpg123"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug_Generic|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="4"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_WARNINGS;REAL_IS_FLOAT;OPT_GENERIC;_DEBUG;_LIB"
MinimalRebuild="false"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="3"
CompileAs="1"
DisableSpecificWarnings="4996"
/>
<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_Generic|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="4"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
OmitFramePointers="true"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_WARNINGS;REAL_IS_FLOAT;OPT_GENERIC;NDEBUG;_LIB"
ExceptionHandling="0"
RuntimeLibrary="2"
BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
EnableEnhancedInstructionSet="1"
FloatingPointModel="2"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="0"
CompileAs="1"
DisableSpecificWarnings="4996"
/>
<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_i386|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="4"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
OmitFramePointers="true"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_WARNINGS;REAL_IS_FLOAT;OPT_I386;NDEBUG;_LIB"
ExceptionHandling="0"
RuntimeLibrary="2"
BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
EnableEnhancedInstructionSet="1"
FloatingPointModel="2"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="0"
CompileAs="1"
DisableSpecificWarnings="4996"
/>
<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_i486|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="4"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
OmitFramePointers="true"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_WARNINGS;REAL_IS_FLOAT;OPT_I486;NDEBUG;_LIB"
ExceptionHandling="0"
RuntimeLibrary="2"
BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
EnableEnhancedInstructionSet="1"
FloatingPointModel="2"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="0"
CompileAs="1"
DisableSpecificWarnings="4996"
/>
<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_i386|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="4"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_WARNINGS;REAL_IS_FLOAT;OPT_I386;_DEBUG;_LIB"
MinimalRebuild="false"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="3"
CompileAs="1"
DisableSpecificWarnings="4996"
/>
<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_i486|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="4"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_WARNINGS;OPT_I486;REAL_IS_FLOAT;_DEBUG;_LIB"
MinimalRebuild="false"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="3"
CompileAs="1"
DisableSpecificWarnings="4996"
/>
<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>
</Configurations>
<References>
</References>
<Files>
<File
RelativePath="..\..\..\..\src\libmpg123\compat.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\compat.h"
>
</File>
<File
RelativePath="..\..\config.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\dct64.c"
>
<FileConfiguration
Name="Release_i386|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
<FileConfiguration
Name="Release_i486|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\dct64_i386.c"
>
<FileConfiguration
Name="Debug_Generic|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
<FileConfiguration
Name="Release_Generic|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\dct64_i486.c"
>
<FileConfiguration
Name="Debug_Generic|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
<FileConfiguration
Name="Release_Generic|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
<FileConfiguration
Name="Release_i386|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
<FileConfiguration
Name="Release_i486|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug_i386|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\debug.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\decode.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\equalizer.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\feature.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\format.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\frame.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\frame.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\getbits.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\huffman.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\icy.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\icy.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\icy2utf8.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\icy2utf8.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\id3.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\id3.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\index.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\index.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\l2tables.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\layer1.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\layer2.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\layer3.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\libmpg123.c"
>
</File>
<File
RelativePath="..\..\mpg123.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\mpg123lib_intern.h"
>
</File>
<File
RelativePath="..\..\msvc.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\ntom.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\optimize.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\optimize.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\parse.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\parse.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\reader.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\readers.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\sample.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\stringbuf.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\synth.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\synth.h"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\synth_8bit.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\synth_i486.c"
>
<FileConfiguration
Name="Debug_Generic|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
<FileConfiguration
Name="Release_Generic|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
<FileConfiguration
Name="Release_i386|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug_i386|Win32"
ExcludedFromBuild="true"
>
<Tool
Name="VCCLCompilerTool"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\synth_real.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\synth_s32.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\tabinit.c"
>
</File>
<File
RelativePath="..\..\..\..\src\libmpg123\true.h"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@ -0,0 +1,194 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9,00"
Name="dump_seekindex"
ProjectGUID="{B086EA3E-700A-4DED-A91D-85ED8A79A8FC}"
RootNamespace="dump_seekindex"
Keyword="Win32Proj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="false"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
CompileAs="1"
DisableSpecificWarnings="4996"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
OmitFramePointers="true"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
ExceptionHandling="0"
RuntimeLibrary="2"
BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
EnableEnhancedInstructionSet="1"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="0"
CompileAs="1"
DisableSpecificWarnings="4996"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
<ProjectReference
ReferencedProjectIdentifier="{67CAA87B-7CF1-4F93-BB67-21C513F40803}"
RelativePathToProject=".\libmpg123\libmpg123.vcproj"
/>
</References>
<Files>
<File
RelativePath="..\..\..\..\doc\examples\dump_seekindex.c"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@ -0,0 +1,195 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9,00"
Name="feedseek"
ProjectGUID="{472481BF-11B6-41A9-BF6A-8BE16A7F8FD6}"
RootNamespace="feedseek"
Keyword="Win32Proj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="false"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
CompileAs="1"
DisableSpecificWarnings="4996"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
OmitFramePointers="true"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
ExceptionHandling="0"
RuntimeLibrary="2"
BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
EnableEnhancedInstructionSet="1"
FloatingPointModel="0"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="0"
CompileAs="1"
DisableSpecificWarnings="4996"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
<ProjectReference
ReferencedProjectIdentifier="{67CAA87B-7CF1-4F93-BB67-21C513F40803}"
RelativePathToProject=".\libmpg123\libmpg123.vcproj"
/>
</References>
<Files>
<File
RelativePath="..\..\examples\feedseek.c"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,44 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmpg123", "libmpg123\libmpg123.vcproj", "{67CAA87B-7CF1-4F93-BB67-21C513F40803}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mpglib", "mpglib\mpglib.vcproj", "{9FB32EE1-C45A-4CCD-9AC8-112C43AF80A7}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "feedseek", "feedseek\feedseek.vcproj", "{472481BF-11B6-41A9-BF6A-8BE16A7F8FD6}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scan", "scan\scan.vcproj", "{245C2785-2FA9-4A6B-8558-35BB8473AEA1}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dump_seekindex", "dump_seekindex\dump_seekindex.vcproj", "{B086EA3E-700A-4DED-A91D-85ED8A79A8FC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Debug|Win32.ActiveCfg = Debug_Generic|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Debug|Win32.Build.0 = Debug_Generic|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Release|Win32.ActiveCfg = Release_Generic_Dll|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Release|Win32.Build.0 = Release_Generic_Dll|Win32
{9FB32EE1-C45A-4CCD-9AC8-112C43AF80A7}.Debug|Win32.ActiveCfg = Debug|Win32
{9FB32EE1-C45A-4CCD-9AC8-112C43AF80A7}.Debug|Win32.Build.0 = Debug|Win32
{9FB32EE1-C45A-4CCD-9AC8-112C43AF80A7}.Release|Win32.ActiveCfg = Release|Win32
{9FB32EE1-C45A-4CCD-9AC8-112C43AF80A7}.Release|Win32.Build.0 = Release|Win32
{472481BF-11B6-41A9-BF6A-8BE16A7F8FD6}.Debug|Win32.ActiveCfg = Debug|Win32
{472481BF-11B6-41A9-BF6A-8BE16A7F8FD6}.Debug|Win32.Build.0 = Debug|Win32
{472481BF-11B6-41A9-BF6A-8BE16A7F8FD6}.Release|Win32.ActiveCfg = Release|Win32
{472481BF-11B6-41A9-BF6A-8BE16A7F8FD6}.Release|Win32.Build.0 = Release|Win32
{245C2785-2FA9-4A6B-8558-35BB8473AEA1}.Debug|Win32.ActiveCfg = Debug|Win32
{245C2785-2FA9-4A6B-8558-35BB8473AEA1}.Debug|Win32.Build.0 = Debug|Win32
{245C2785-2FA9-4A6B-8558-35BB8473AEA1}.Release|Win32.ActiveCfg = Release|Win32
{245C2785-2FA9-4A6B-8558-35BB8473AEA1}.Release|Win32.Build.0 = Release|Win32
{B086EA3E-700A-4DED-A91D-85ED8A79A8FC}.Debug|Win32.ActiveCfg = Debug|Win32
{B086EA3E-700A-4DED-A91D-85ED8A79A8FC}.Debug|Win32.Build.0 = Debug|Win32
{B086EA3E-700A-4DED-A91D-85ED8A79A8FC}.Release|Win32.ActiveCfg = Release|Win32
{B086EA3E-700A-4DED-A91D-85ED8A79A8FC}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,191 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9,00"
Name="mpglib"
ProjectGUID="{9FB32EE1-C45A-4CCD-9AC8-112C43AF80A7}"
RootNamespace="mpglib"
Keyword="Win32Proj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
OmitFramePointers="true"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
ExceptionHandling="0"
RuntimeLibrary="2"
BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
EnableEnhancedInstructionSet="1"
FloatingPointModel="0"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="0"
CompileAs="1"
DisableSpecificWarnings="4996"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
<ProjectReference
ReferencedProjectIdentifier="{67CAA87B-7CF1-4F93-BB67-21C513F40803}"
RelativePathToProject=".\libmpg123\libmpg123.vcproj"
/>
</References>
<Files>
<File
RelativePath="..\..\..\..\doc\examples\mpglib.c"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@ -0,0 +1,195 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9,00"
Name="scan"
ProjectGUID="{245C2785-2FA9-4A6B-8558-35BB8473AEA1}"
RootNamespace="scan"
Keyword="Win32Proj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="false"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
CompileAs="1"
DisableSpecificWarnings="4996"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
OmitFramePointers="true"
AdditionalIncludeDirectories="../..;../../../../src/libmpg123"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
ExceptionHandling="0"
RuntimeLibrary="2"
BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
EnableEnhancedInstructionSet="1"
FloatingPointModel="0"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="0"
CompileAs="1"
DisableSpecificWarnings="4996"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
<ProjectReference
ReferencedProjectIdentifier="{67CAA87B-7CF1-4F93-BB67-21C513F40803}"
RelativePathToProject=".\libmpg123\libmpg123.vcproj"
/>
</References>
<Files>
<File
RelativePath="..\..\examples\scan.c"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@ -0,0 +1,81 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mpg123clr", "mpg123clr\mpg123clr.vcproj", "{99E8B20E-9C29-46BC-B766-A50F237D88BF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "scanclr", "examples\scanclr\scanclr.csproj", "{53664927-0A21-4056-A5D5-C6A1B4B1F839}"
ProjectSection(ProjectDependencies) = postProject
{99E8B20E-9C29-46BC-B766-A50F237D88BF} = {99E8B20E-9C29-46BC-B766-A50F237D88BF}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "feedseekclr", "examples\feedseekclr\feedseekclr.csproj", "{626B52AB-1E46-46FB-A259-03DCE3994BE6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReplaceReaderclr", "examples\ReplaceReaderclr\ReplaceReaderclr.csproj", "{6415FBC0-44EC-4158-8A24-127D9BAC5CEA}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmpg123", "..\2008\libmpg123\libmpg123.vcproj", "{67CAA87B-7CF1-4F93-BB67-21C513F40803}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|Win32 = Debug|Win32
Release|Any CPU = Release|Any CPU
Release|Mixed Platforms = Release|Mixed Platforms
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{99E8B20E-9C29-46BC-B766-A50F237D88BF}.Debug|Any CPU.ActiveCfg = Debug|Win32
{99E8B20E-9C29-46BC-B766-A50F237D88BF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{99E8B20E-9C29-46BC-B766-A50F237D88BF}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{99E8B20E-9C29-46BC-B766-A50F237D88BF}.Debug|Win32.ActiveCfg = Debug|Win32
{99E8B20E-9C29-46BC-B766-A50F237D88BF}.Debug|Win32.Build.0 = Debug|Win32
{99E8B20E-9C29-46BC-B766-A50F237D88BF}.Release|Any CPU.ActiveCfg = Release|Win32
{99E8B20E-9C29-46BC-B766-A50F237D88BF}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{99E8B20E-9C29-46BC-B766-A50F237D88BF}.Release|Mixed Platforms.Build.0 = Release|Win32
{99E8B20E-9C29-46BC-B766-A50F237D88BF}.Release|Win32.ActiveCfg = Release|Win32
{99E8B20E-9C29-46BC-B766-A50F237D88BF}.Release|Win32.Build.0 = Release|Win32
{53664927-0A21-4056-A5D5-C6A1B4B1F839}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{53664927-0A21-4056-A5D5-C6A1B4B1F839}.Debug|Any CPU.Build.0 = Debug|Any CPU
{53664927-0A21-4056-A5D5-C6A1B4B1F839}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{53664927-0A21-4056-A5D5-C6A1B4B1F839}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{53664927-0A21-4056-A5D5-C6A1B4B1F839}.Debug|Win32.ActiveCfg = Debug|Any CPU
{53664927-0A21-4056-A5D5-C6A1B4B1F839}.Release|Any CPU.ActiveCfg = Release|Any CPU
{53664927-0A21-4056-A5D5-C6A1B4B1F839}.Release|Any CPU.Build.0 = Release|Any CPU
{53664927-0A21-4056-A5D5-C6A1B4B1F839}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{53664927-0A21-4056-A5D5-C6A1B4B1F839}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{53664927-0A21-4056-A5D5-C6A1B4B1F839}.Release|Win32.ActiveCfg = Release|Any CPU
{626B52AB-1E46-46FB-A259-03DCE3994BE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{626B52AB-1E46-46FB-A259-03DCE3994BE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{626B52AB-1E46-46FB-A259-03DCE3994BE6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{626B52AB-1E46-46FB-A259-03DCE3994BE6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{626B52AB-1E46-46FB-A259-03DCE3994BE6}.Debug|Win32.ActiveCfg = Debug|Any CPU
{626B52AB-1E46-46FB-A259-03DCE3994BE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{626B52AB-1E46-46FB-A259-03DCE3994BE6}.Release|Any CPU.Build.0 = Release|Any CPU
{626B52AB-1E46-46FB-A259-03DCE3994BE6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{626B52AB-1E46-46FB-A259-03DCE3994BE6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{626B52AB-1E46-46FB-A259-03DCE3994BE6}.Release|Win32.ActiveCfg = Release|Any CPU
{6415FBC0-44EC-4158-8A24-127D9BAC5CEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6415FBC0-44EC-4158-8A24-127D9BAC5CEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6415FBC0-44EC-4158-8A24-127D9BAC5CEA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{6415FBC0-44EC-4158-8A24-127D9BAC5CEA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{6415FBC0-44EC-4158-8A24-127D9BAC5CEA}.Debug|Win32.ActiveCfg = Debug|Any CPU
{6415FBC0-44EC-4158-8A24-127D9BAC5CEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6415FBC0-44EC-4158-8A24-127D9BAC5CEA}.Release|Any CPU.Build.0 = Release|Any CPU
{6415FBC0-44EC-4158-8A24-127D9BAC5CEA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{6415FBC0-44EC-4158-8A24-127D9BAC5CEA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{6415FBC0-44EC-4158-8A24-127D9BAC5CEA}.Release|Win32.ActiveCfg = Release|Any CPU
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Debug|Any CPU.ActiveCfg = Debug_x86_Dll_Minimal|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Debug|Mixed Platforms.ActiveCfg = Debug_Generic_Dll|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Debug|Mixed Platforms.Build.0 = Debug_Generic_Dll|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Debug|Win32.ActiveCfg = Debug_x86_Dll_Minimal|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Debug|Win32.Build.0 = Debug_x86_Dll_Minimal|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Release|Any CPU.ActiveCfg = Release_x86_Dll_Minimal|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Release|Mixed Platforms.ActiveCfg = Release_Generic_Dll|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Release|Mixed Platforms.Build.0 = Release_Generic_Dll|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Release|Win32.ActiveCfg = Release_x86_Dll_Minimal|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Release|Win32.Build.0 = Release_x86_Dll_Minimal|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,435 @@
/*
replacereaderclr: test program for mpg123clr, showing how to use ReplaceReader in a CLR enviro.
copyright 2009 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
initially written by Malcolm Boczek
not to be used as an example of good coding practices, note the total absence of error handling!!!
*/
/*
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
1.12.0.0 14-Apr-10 Added ReplaceReaderHandle sample code (mb)
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; // for ReplaceReaderHandle example
using System.Runtime.InteropServices; // for ReplaceReaderHandle example
using mpg123clr;
namespace ReplaceReaderclr
{
class Program
{
private unsafe static int MyReadFunc(int a, void* b, uint c)
{
// need to call posix read function here...
// PosixRead is an example, substitute your replacement function here.
int ret = mpg123.PosixRead(a, b, c);
return ret;
}
private static int MySeekFunc(int a, int b, int c)
{
// NOTE: Largefile conflict with use of "int" position values.
// Convert to long if off_t is defined as long long
// need to call posix lseek function here...
// PosixSeek is an example, substitute your replacement function here.
int ret = mpg123.PosixSeek(a, b, c);
return ret;
}
private unsafe static int MyHandleReadFunc(void* a, void* b, uint c)
{
GCHandle gch = GCHandle.FromIntPtr((IntPtr)a);
BinaryReader br = (BinaryReader)gch.Target;
byte[] buf = br.ReadBytes((int)c);
// NOTE: no discernible performance difference between Marshal.Copy and ptr++ loop
Marshal.Copy(buf, 0, (IntPtr)b, buf.Length);
// byte* ptr = (byte*)b;
// for (int i = 0, l = buf.Length; i < l; i++)
// *(ptr++) = buf[i];
return buf.Length;
}
private unsafe static int MyHandleSeekFunc(void* a, int b, int c)
{
// NOTE: Largefile conflict with use of "int" position values.
// Convert to long if off_t is defined as long long
GCHandle gch = GCHandle.FromIntPtr((IntPtr)a);
BinaryReader br = (BinaryReader)gch.Target;
return (int)br.BaseStream.Seek(b, (SeekOrigin)c);
}
private unsafe static void MyHandleCleanFunc(void* a)
{
GCHandle gch = GCHandle.FromIntPtr((IntPtr)a);
BinaryReader br = (BinaryReader)gch.Target;
br.Close();
}
static unsafe void Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine("I need a file to work on:\n\nPress any key to exit.");
while (Console.Read() == 0) ;
return;
}
mpg123clr.mpg.ErrorCode err;
string filename = args[0];
err = mpg123.mpg123_init();
Console.WriteLine("Init:");
RunReplaceReaderTest(filename);
RunReplaceReaderHandleTest(filename);
RunFrameByFrameTest(filename);
Console.WriteLine("\nPress any key to exit:");
while (Console.Read() == 0) ;
mpg123.mpg123_exit();
}
static unsafe void RunReplaceReaderTest(string filename)
{
mpg123clr.mpg.ErrorCode err;
mpg123 mp = new mpg123();
err = mp.mpg123_new();
// ReplaceReader example
mpg123clr.mpg123.ReadDelegate rdel = MyReadFunc;
mpg123clr.mpg123.SeekDelegate sdel = MySeekFunc;
err = mp.mpg123_replace_reader(rdel, sdel);
//err = mp.mpg123_open(args[0]);
err = mp.mpg123_open(filename);
if (err != mpg123clr.mpg.ErrorCode.ok)
{
Console.WriteLine("Error: " + mp.mpg123_strerror());
}
else
{
Console.WriteLine("Open:");
// Show available decoders
string[] Decoders = mp.mpg123_decoders();
if (Decoders.Length > 0)
{
Console.WriteLine("\nDecoders:");
foreach (string str in Decoders) Console.WriteLine(str);
}
// Show supported decoders
string[] supDecoders = mp.mpg123_supported_decoders();
if (supDecoders.Length > 0)
{
Console.WriteLine("\nSupported Decoders:");
foreach (string str in supDecoders) Console.WriteLine(str);
}
// Show actual decoder
Console.WriteLine("\nDecoder: " + mp.mpg123_current_decoder());
// Show estimated file length
Console.WriteLine("\nLength Estimate: " + mp.mpg123_length().ToString());
// Scan - gets actual details including ID3v2 and Frame offsets
err = mp.mpg123_scan();
// Show actual file length
if (err == mpg123clr.mpg.ErrorCode.ok) Console.WriteLine("Length Actual : " + mp.mpg123_length().ToString());
// Get ID3 data
mpg123clr.id3.mpg123id3v1 iv1;
mpg123clr.id3.mpg123id3v2 iv2;
err = mp.mpg123_id3(out iv1, out iv2);
// Show ID3v2 data
Console.WriteLine("\nTitle : " + iv2.title);
Console.WriteLine("Artist : " + iv2.artist);
Console.WriteLine("Album : " + iv2.album);
Console.WriteLine("Comment: " + iv2.comment);
Console.WriteLine("Year : " + iv2.year);
// Demo seek (back to start of file - note: scan should already have done this)
long pos = mp.mpg123_seek(0, System.IO.SeekOrigin.Begin);
long[] frameindex;
long step;
err = mp.mpg123_index(out frameindex, out step);
if (err == mpg123clr.mpg.ErrorCode.ok)
{
Console.WriteLine("\nFrameIndex:");
foreach (long idx in frameindex)
{
// Console.WriteLine(idx.ToString());
}
}
int num;
uint cnt;
IntPtr audio;
// Walk the file - effectively decode the data without using it...
Console.WriteLine("\nWalking : " + iv2.title);
DateTime dte, dts = DateTime.Now;
while (err == mpg123clr.mpg.ErrorCode.ok || err == mpg123clr.mpg.ErrorCode.new_format)
{
err = mp.mpg123_decode_frame(out num, out audio, out cnt);
// do something with "audio" here....
}
dte = DateTime.Now;
TimeSpan ts = dte - dts;
Console.WriteLine("Duration: " + ts.ToString());
mp.mpg123_close();
}
mp.Dispose();
}
static unsafe void RunReplaceReaderHandleTest(string filename)
{
mpg123clr.mpg.ErrorCode err;
mpg123 mp = new mpg123();
err = mp.mpg123_new();
// ReplaceReader example
mpg123clr.mpg123.ReadHandleDelegate rdel = MyHandleReadFunc;
mpg123clr.mpg123.SeekHandleDelegate sdel = MyHandleSeekFunc;
mpg123clr.mpg123.CleanupHandleDelegate cdel = MyHandleCleanFunc;
err = mp.mpg123_replace_reader_handle(rdel, sdel, cdel);
//err = mp.mpg123_open(args[0]);
BinaryReader br = new BinaryReader(File.OpenRead(filename));
err = mp.mpg123_open_handle(br);
if (err != mpg123clr.mpg.ErrorCode.ok)
{
Console.WriteLine("Error: " + mp.mpg123_strerror());
}
else
{
Console.WriteLine("Open:");
// Show available decoders
string[] Decoders = mp.mpg123_decoders();
if (Decoders.Length > 0)
{
Console.WriteLine("\nDecoders:");
foreach (string str in Decoders) Console.WriteLine(str);
}
// Show supported decoders
string[] supDecoders = mp.mpg123_supported_decoders();
if (supDecoders.Length > 0)
{
Console.WriteLine("\nSupported Decoders:");
foreach (string str in supDecoders) Console.WriteLine(str);
}
// Show actual decoder
Console.WriteLine("\nDecoder: " + mp.mpg123_current_decoder());
// Show estimated file length
Console.WriteLine("\nLength Estimate: " + mp.mpg123_length().ToString());
// Scan - gets actual details including ID3v2 and Frame offsets
err = mp.mpg123_scan();
// Show actual file length
if (err == mpg123clr.mpg.ErrorCode.ok) Console.WriteLine("Length Actual : " + mp.mpg123_length().ToString());
// Get ID3 data
mpg123clr.id3.mpg123id3v1 iv1;
mpg123clr.id3.mpg123id3v2 iv2;
err = mp.mpg123_id3(out iv1, out iv2);
// Show ID3v2 data
Console.WriteLine("\nTitle : " + iv2.title);
Console.WriteLine("Artist : " + iv2.artist);
Console.WriteLine("Album : " + iv2.album);
Console.WriteLine("Comment: " + iv2.comment);
Console.WriteLine("Year : " + iv2.year);
// Demo seek (back to start of file - note: scan should already have done this)
long pos = mp.mpg123_seek(0, System.IO.SeekOrigin.Begin);
long[] frameindex;
long step;
err = mp.mpg123_index(out frameindex, out step);
if (err == mpg123clr.mpg.ErrorCode.ok)
{
Console.WriteLine("\nFrameIndex:");
foreach (long idx in frameindex)
{
// Console.WriteLine(idx.ToString());
}
}
int num;
uint cnt;
IntPtr audio;
// Walk the file - effectively decode the data without using it...
Console.WriteLine("\nWalking : " + iv2.title);
DateTime dte, dts = DateTime.Now;
while (err == mpg123clr.mpg.ErrorCode.ok || err == mpg123clr.mpg.ErrorCode.new_format)
{
err = mp.mpg123_decode_frame(out num, out audio, out cnt);
// do something with "audio" here....
}
dte = DateTime.Now;
TimeSpan ts = dte - dts;
Console.WriteLine("Duration: " + ts.ToString());
mp.mpg123_close();
}
mp.Dispose();
}
static unsafe void RunFrameByFrameTest(string filename)
{
mpg123clr.mpg.ErrorCode err;
mpg123 mp = new mpg123();
err = mp.mpg123_new();
err = mp.mpg123_open(filename);
if (err != mpg123clr.mpg.ErrorCode.ok)
{
Console.WriteLine("Error: " + mp.mpg123_strerror());
}
else
{
Console.WriteLine("Open:");
// Show available decoders
string[] Decoders = mp.mpg123_decoders();
if (Decoders.Length > 0)
{
Console.WriteLine("\nDecoders:");
foreach (string str in Decoders) Console.WriteLine(str);
}
// Show supported decoders
string[] supDecoders = mp.mpg123_supported_decoders();
if (supDecoders.Length > 0)
{
Console.WriteLine("\nSupported Decoders:");
foreach (string str in supDecoders) Console.WriteLine(str);
}
// Show actual decoder
Console.WriteLine("\nDecoder: " + mp.mpg123_current_decoder());
// Show estimated file length
Console.WriteLine("\nLength Estimate: " + mp.mpg123_length().ToString());
// Scan - gets actual details including ID3v2 and Frame offsets
err = mp.mpg123_scan();
// Show actual file length
if (err == mpg123clr.mpg.ErrorCode.ok) Console.WriteLine("Length Actual : " + mp.mpg123_length().ToString());
// Get ID3 data
mpg123clr.id3.mpg123id3v1 iv1;
mpg123clr.id3.mpg123id3v2 iv2;
err = mp.mpg123_id3(out iv1, out iv2);
// Show ID3v2 data
Console.WriteLine("\nTitle : " + iv2.title);
Console.WriteLine("Artist : " + iv2.artist);
Console.WriteLine("Album : " + iv2.album);
Console.WriteLine("Comment: " + iv2.comment);
Console.WriteLine("Year : " + iv2.year);
// Demo seek (back to start of file - note: scan should already have done this)
long pos = mp.mpg123_seek(0, System.IO.SeekOrigin.Begin);
long[] frameindex;
long step;
err = mp.mpg123_index(out frameindex, out step);
if (err == mpg123clr.mpg.ErrorCode.ok)
{
Console.WriteLine("\nFrameIndex:");
foreach (long idx in frameindex)
{
// Console.WriteLine(idx.ToString());
}
}
int num;
uint cnt;
IntPtr audio;
// Walk the file - effectively decode the data without using it...
Console.WriteLine("\nFrame Walking : " + iv2.title);
DateTime dte, dts = DateTime.Now;
while (err == mpg123clr.mpg.ErrorCode.ok || err == mpg123clr.mpg.ErrorCode.new_format)
{
err = mp.mpg123_framebyframe_decode(out num, out audio, out cnt);
err = mp.mpg123_framebyframe_next();
// do something with "audio" here....
}
dte = DateTime.Now;
TimeSpan ts = dte - dts;
Console.WriteLine("Duration: " + ts.ToString());
mp.mpg123_close();
}
mp.Dispose();
}
}
}

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ReplaceReaderclr")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ReplaceReaderclr")]
[assembly: AssemblyCopyright("© mpg123 project 2009")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("c65bdebb-51d7-41ba-875d-b2c938f187fc")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{6415FBC0-44EC-4158-8A24-127D9BAC5CEA}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ReplaceReaderclr</RootNamespace>
<AssemblyName>ReplaceReaderclr</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\mpg123clr\mpg123clr.vcproj">
<Project>{99E8B20E-9C29-46BC-B766-A50F237D88BF}</Project>
<Name>mpg123clr</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup>
<PostBuildEvent>if exist "$(SolutionDir)$(ConfigurationName)\libmpg123.dll" copy /y "$(SolutionDir)$(ConfigurationName)\libmpg123.dll" "$(TargetDir)"</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,331 @@
/*
feedseekclr: test program for mpg123clr, showing how to use fuzzy seeking in feeder mode
copyright 2009 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
based on feedseek.c example for libmpg123.
Comment (Malcolm Boczek)
this CLR example has been written to allow easy comparison to the original feedseek.c example
and uses some constructs that would not normally be used in a C# environment,
eg: byte[]/ASCII text, Marshal.Copy, static fields, lots of casts etc.
*/
/*
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
using mpg123clr;
namespace feedseekclr
{
class Program
{
const int WAVE_FORMAT_PCM = 0x0001;
const int WAVE_FORMAT_IEEE_FLOAT = 0x0003;
static BinaryWriter _out;
static long totaloffset, dataoffset;
static int rate;
static mpg123clr.mpg.channelcount channels;
static mpg123clr.mpg.enc enc;
static short bitspersample, wavformat;
// write wav header
static void initwav()
{
uint tmp32 = 0;
ushort tmp16 = 0;
byte[] rifftxt = new byte[] { (byte)'R', (byte)'I', (byte)'F', (byte)'F' };
byte[] wavetxt = new byte[] { (byte)'W', (byte)'A', (byte)'V', (byte)'E' };
byte[] fmttxt = new byte[] { (byte)'f', (byte)'m', (byte)'t', (byte)' ' };
byte[] datatxt = new byte[] { (byte)'d', (byte)'a', (byte)'t', (byte)'a' };
_out.Write(rifftxt);
totaloffset = _out.BaseStream.Position;
_out.Write(tmp32); // total size
_out.Write(wavetxt);
_out.Write(fmttxt);
tmp32 = 16;
_out.Write(tmp32); // format length
tmp16 = (ushort)wavformat;
_out.Write(tmp16); // format
tmp16 = (ushort)channels;
_out.Write(tmp16); // channels
tmp32 = (uint)rate;
_out.Write(tmp32); // sample rate
tmp32 = (uint) (rate * bitspersample / 8 * (int)channels);
_out.Write(tmp32); // bytes / second
tmp16 = (ushort)(bitspersample / 8 * (int)channels); // float 16 or signed int 16
_out.Write(tmp16); // block align
tmp16 = (ushort)bitspersample;
_out.Write(tmp16); // bits per sample
_out.Write(datatxt);
tmp32 = 0;
dataoffset = _out.BaseStream.Position;
_out.Write(tmp32); // data length
}
// rewrite wav header with final length infos
static void closewav()
{
uint tmp32 = 0;
// ushort tmp16 = 0;
int total = (int)_out.BaseStream.Position;
_out.Seek((int)totaloffset, SeekOrigin.Begin);
tmp32 = (uint)(total - (totaloffset + 4));
_out.Write(tmp32);
_out.Seek((int)dataoffset, SeekOrigin.Begin);
tmp32 = (uint)(total - (dataoffset + 4));
_out.Write(tmp32);
}
// determine correct wav format and bits per sample
// from mpg123 enc value
static void initwavformat()
{
if ((enc & mpg123clr.mpg.enc.enc_float_64) != 0)
{
bitspersample = 64;
wavformat = WAVE_FORMAT_IEEE_FLOAT;
}
else if ((enc & mpg123clr.mpg.enc.enc_float_32) != 0)
{
bitspersample = 32;
wavformat = WAVE_FORMAT_IEEE_FLOAT;
}
else if ((enc & mpg123clr.mpg.enc.enc_16) != 0)
{
bitspersample = 16;
wavformat = WAVE_FORMAT_PCM;
}
else
{
bitspersample = 8;
wavformat = WAVE_FORMAT_PCM;
}
}
static void Main(string[] args)
{
const long INBUFF = 16384 * 2 * 2;
int ret;
mpg123clr.mpg.ErrorCode state;
long inoffset,inc = 0;
long outc = 0;
byte[] buf = new byte[INBUFF];
if (args.Length < 2)
{
Console.WriteLine("Please supply in and out filenames\n");
Console.WriteLine("Press any key to exit:");
while (Console.Read() == 0) ;
return;
}
mpg123clr.mpg.ErrorCode err;
err = mpg123.mpg123_init();
mpg123 mp = new mpg123();
err = mp.mpg123_new();
if (err != mpg123clr.mpg.ErrorCode.ok)
{
Console.WriteLine("Unable to create mpg123 handle: " + mpg123error.mpg123_plain_strerror(err));
Console.WriteLine("Press any key to exit:");
while (Console.Read() == 0) ;
return;
}
mp.mpg123_param(mpg123clr.mpg.parms.verbose, 4, 0);
err = mp.mpg123_param(mpg123clr.mpg.parms.flags,
(int) (mpg123clr.mpg.param_flags.fuzzy |
mpg123clr.mpg.param_flags.seekbuffer |
mpg123clr.mpg.param_flags.gapless), 0);
if (err != mpg123clr.mpg.ErrorCode.ok)
{
Console.WriteLine("Unable to set library options: " + mp.mpg123_strerror());
Console.WriteLine("Press any key to exit:");
while (Console.Read() == 0) ;
return;
}
// Let the seek index auto-grow and contain an entry for every frame
err = mp.mpg123_param(mpg123clr.mpg.parms.index_size, -1, 0);
if (err != mpg123clr.mpg.ErrorCode.ok)
{
Console.WriteLine("Unable to set index size: " + mp.mpg123_strerror());
Console.WriteLine("Press any key to exit:");
while (Console.Read() == 0) ;
return;
}
// Use float output formats only
err = mp.mpg123_format_none();
if (err != mpg123clr.mpg.ErrorCode.ok)
{
Console.WriteLine("Unable to disable all output formats: " + mp.mpg123_strerror());
Console.WriteLine("Press any key to exit:");
while (Console.Read() == 0) ;
return;
}
int[] rates = mp.mpg123_rates();
foreach (int rate in rates)
{
err = mp.mpg123_format(rate, mpg123clr.mpg.channelcount.both, mpg123clr.mpg.enc.enc_float_32);
if (err != mpg123clr.mpg.ErrorCode.ok)
{
Console.WriteLine("Unable to set float output formats: " + mp.mpg123_strerror());
Console.WriteLine("Press any key to exit:");
while (Console.Read() == 0) ;
return;
}
}
err = mp.mpg123_open_feed();
if (err != mpg123clr.mpg.ErrorCode.ok)
{
Console.WriteLine("Unable to open feed: " + mp.mpg123_strerror());
Console.WriteLine("Press any key to exit:");
while (Console.Read() == 0) ;
return;
}
string filename = args[0];
BinaryReader _in = new BinaryReader(File.Open(filename, FileMode.Open));
_out = new BinaryWriter(File.Open(args[1], FileMode.Create));
while ((ret = (int)(mp.mpg123_feedseek(95000, SeekOrigin.Begin, out inoffset))) == (int)mpg123clr.mpg.ErrorCode.need_more) // equiv to mpg123_feedseek
{
buf = _in.ReadBytes((int)INBUFF);
if (buf.Length <= 0) break;
inc += buf.Length;
state = mp.mpg123_feed(buf, (uint)buf.Length);
if (state == mpg123clr.mpg.ErrorCode.err)
{
Console.WriteLine("Feed error: " + mp.mpg123_strerror());
Console.WriteLine("Press any key to exit:");
while (Console.Read() == 0) ;
return;
}
}
_in.BaseStream.Seek(inoffset, SeekOrigin.Begin);
while (true)
{
buf = _in.ReadBytes((int)INBUFF);
if (buf.Length <= 0) break;
inc += buf.Length;
err = mp.mpg123_feed(buf, (uint)buf.Length);
int num;
uint bytes;
IntPtr audio;
while (err != mpg123clr.mpg.ErrorCode.err && err != mpg123clr.mpg.ErrorCode.need_more)
{
err = mp.mpg123_decode_frame(out num, out audio, out bytes);
if (err == mpg123clr.mpg.ErrorCode.new_format)
{
mp.mpg123_getformat(out rate, out channels, out enc);
initwavformat();
initwav();
}
// (Surprisingly?) even though it does a Marshal.Copy it's as efficient as the pointer example below!!!
if (bytes > 0)
{
byte[] outbuf = new byte[bytes];
Marshal.Copy(audio, outbuf, 0, (int)bytes);
_out.Write(outbuf, 0, (int)bytes);
}
// Alternative example of direct usage of audio data via pointers - note it needs "unsafe"
// and I'm fairly sure pointers should be "fixed" first
// if (bytes > 0)
// unsafe{
// byte* p = (byte*)audio;
// for (int ii = 0; ii < bytes; ii++)
// _out.Write(*p++);
// }
outc += bytes;
}
if (err == mpg123clr.mpg.ErrorCode.err)
{
Console.WriteLine("Error: " + mp.mpg123_strerror());
break;
}
}
Console.WriteLine("Finished");
closewav();
_out.Close();
_in.Close();
mp.mpg123_delete();
mp.Dispose();
mpg123.mpg123_exit();
}
}
}

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("feedseekclr")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("feedseekclr")]
[assembly: AssemblyCopyright("© mpg123 project 2009")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("1fdb46e2-eb93-4e8f-8266-0d386215cc75")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{626B52AB-1E46-46FB-A259-03DCE3994BE6}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>feedseekclr</RootNamespace>
<AssemblyName>feedseekclr</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\mpg123clr\mpg123clr.vcproj">
<Project>{99E8B20E-9C29-46BC-B766-A50F237D88BF}</Project>
<Name>mpg123clr</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup>
<PostBuildEvent>if exist "$(SolutionDir)$(ConfigurationName)\libmpg123.dll" copy /y "$(SolutionDir)$(ConfigurationName)\libmpg123.dll" "$(TargetDir)"</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,79 @@
/*
scanclr: Estimate length (sample count) of a mpeg file and compare to length from exact scan.
copyright 2009 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
CLR example initially written by Malcolm Boczek
Based on scan.c example initially written by Thomas Orgis
*/
/* Note the lack of error checking here.
While it would be nicer to inform the user about troubles, libmpg123 is designed _not_ to bite you on operations with invalid handles , etc.
You just jet invalid results on invalid operations... */
/* Ditto for mpg123clr (MB) */
/*
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using mpg123clr;
namespace scanclr
{
class Program
{
static void Main(string[] args)
{
if (args.Length < 1)
{
Console.WriteLine("\nI will give you the estimated and exact sample lengths of MPEG audio files.\n");
Console.WriteLine("\nUsage: scanclr <mpeg audio file list>\n\n");
Console.WriteLine("Press any key to exit:");
while (Console.Read() == 0) ;
return;
}
mpg123clr.mpg.ErrorCode err;
err = mpg123.mpg123_init();
mpg123 mp = new mpg123();
err = mp.mpg123_new();
mp.mpg123_param(mpg123clr.mpg.parms.resync_limit, -1, 0);
foreach (string name in args)
{
err = mp.mpg123_open(name);
long a, b;
a = mp.mpg123_length();
mp.mpg123_scan();
b = mp.mpg123_length();
mp.mpg123_close();
Console.WriteLine(string.Format("File {0}: estimated {1} vs. scanned {2}", name, a, b));
}
Console.WriteLine("\nPress any key to exit:");
while (Console.Read() == 0) ;
mp.Dispose();
mpg123.mpg123_exit();
}
}
}

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("scanclr")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("scanclr")]
[assembly: AssemblyCopyright("© mpg123 project 2009")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("a22ea83e-2dba-4835-b0d8-cca3f0bc73a8")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{53664927-0A21-4056-A5D5-C6A1B4B1F839}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>scanclr</RootNamespace>
<AssemblyName>scanclr</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\mpg123clr\mpg123clr.vcproj">
<Project>{99E8B20E-9C29-46BC-B766-A50F237D88BF}</Project>
<Name>mpg123clr</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup>
<PostBuildEvent>if exist "$(SolutionDir)$(ConfigurationName)\libmpg123.dll" copy /y "$(SolutionDir)$(ConfigurationName)\libmpg123.dll" "$(TargetDir)"</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,76 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
*/
#include "stdafx.h"
using namespace System::Reflection;
using namespace System::Runtime::CompilerServices;
//
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//
[assembly:AssemblyTitleAttribute("mpg123clr.dll")];
[assembly:AssemblyDescriptionAttribute("mpg123clr Dynamic Link Library")];
[assembly:AssemblyConfigurationAttribute("")];
[assembly:AssemblyCompanyAttribute("mpg123 Project")];
[assembly:AssemblyProductAttribute("mpg123clr.dll")];
[assembly:AssemblyCopyrightAttribute("<EFBFBD> 2009-2011 by the mpg123 project")];
[assembly:AssemblyTrademarkAttribute("")];
[assembly:AssemblyCultureAttribute("")];
//
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the value or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly:AssemblyVersionAttribute("1.13.0.0")];
//
// In order to sign your assembly you must specify a key to use. Refer to the
// Microsoft .NET Framework documentation for more information on assembly signing.
//
// Use the attributes below to control which key is used for signing.
//
// Notes:
// (*) If no key is specified, the assembly is not signed.
// (*) KeyName refers to a key that has been installed in the Crypto Service
// Provider (CSP) on your machine. KeyFile refers to a file which contains
// a key.
// (*) If the KeyFile and the KeyName values are both specified, the
// following processing occurs:
// (1) If the KeyName can be found in the CSP, that key is used.
// (2) If the KeyName does not exist and the KeyFile does exist, the key
// in the KeyFile is installed into the CSP and used.
// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
// When specifying the KeyFile, the location of the KeyFile should be
// relative to the project directory.
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
// documentation for more information on this.
//
[assembly:AssemblyDelaySignAttribute(false)];
[assembly:AssemblyKeyFileAttribute("")];
[assembly:AssemblyKeyNameAttribute("")];

View File

@ -0,0 +1,165 @@
========================================================================
DYNAMIC LINK LIBRARY : mpg123clr Project Overview
========================================================================
Project Installation:
The project is part of a Visual Studio 2008 Solution.
The Visual Studio solution file is 2008clr.sln located in a folder/directory named 2008clr.
This folder/directory should be located in the mpg123/ports/MSVC++ folder to maintain file relationships
with required mpg123 library files. i.e. at mpg123/ports/MSVC++/2008clr.
The solution includes the following projects:
mpg123clr The mpg123 CLR project. This creates the CLR compatible DLL file.
scanclr Demonstration project for comparison with scan.c example.
feedseekclr Demonstration project for comparison with feedseek.c example
replacereaderclr Demonstration project, how to implement ReplaceReader in CLR (proof of concept)
libmpg123 For convenience, ensures that libmpg123.lib is available for linking
=========================================================================
Compiling:
Configuration Manager:
mpg123clr requires linking to a libmpg123 static library, this library must be compiled prior to
compiling the clr projects. mpg123clr uses relative folder position during linking; therefore either:-
ensure that the 2008clr solution is correctly located within the ports\msvc++ folder, or
change the "linker->input->additional dependencies" to suit your installation configuration
NOTE: x64 Active Solution Platform configurations are not supplied with this solution but have been tested.
(Effectively all that is required is to change all "include" references to account for the "x64" output locations)
NOTE: The "unsafe" context of the ReplaceReaderClr project is only required to allow the use of callbacks.
mpg123clr is written to avoid the use of "unsafe" for the majority of normal operations.
==========================================================================
Using mpg123clr:
Mpg123clr is a CLR ready dll. Simply add a reference to the mpg123clr.dll file in your application project.
You may also add a "using" directive in your program files. C# e.g. using mpg123clr;
The mpg123clr project is configured to create an additional Intellisense documentation file (mpg123clr.xml)
to assist usage. If you manually relocate the .dll please also copy the .xml file to ensure correct Intellisense
operation.
===========================================================================
Common Errors:
1) Problem: "Unhandled Exception - file not found" error when the application is executed.
Cause: Incorrect libmpg123 library build / missing libmpg123.dll.
Solution: Copy libmpg123.dll to the application output folder - possibly in a Post-Build Event (see scanclr for
an example).
Explanation: mpg123clr requires static library libmpg123.lib and NOT dynamic library libmpg123.dll.
If the libmpg123 library is built using an incorrect Project Context (such as Debug_Generic_Dll), mpg123clr
will attempt to load the libmpg123.dll at runtime even though this file is not required.
Alternatively: Use Configuration Manager and select a non-dll build context for the libmpg123 project.
(i.e. Debug_Generic not Debug_Generic_Dll)
===========================================================================
Developer Notes:
1) Documentation <remarks> do not appear in CLR Intellisense environment (at time of writing).
So deferred in favour of <para> within <summary>.
2) During development "off_t" parameters conflicted with intellisense (although size_t worked just fine)
Since many CLR functions that refer to off_t features (e.g. positioners) actually expect 64bit long
(or long long in C++) parameters, I've implemented off_t as a long long - with one notable exception.
This fixed intellisense and accommodates the CLR 64bit long implementation positioners: And then intellisense
started working correctly and made this a moot point - at least as far as intellisense is concerned.
3) off_t notable exception - SeekDelegate, SeekHandleDelegate
Usually 2008clr functions are called by the callee, long long (clr 64bit long) can be marshaled and passed
to libmpg123. The seek delegate is called directly by the libmpg123 seek functions - there isn't an opportunity
to marshal the offending parameters. A library compiled in 32 bit will expect the SeekDelegate to have a 32bit
position parameter but in 64bit compilation the same parameter will be 64bit. Therefore the need to be correct
overrides the need for consistency with CLR 64bit positioners.
SIDE NOTE: In early tests the SeekDelegate was defined with a long long parameter - libmpg123 called it oblivious
to the fact that the type was incorrect. The only impact was that the 32bit position and 32bit origin (whence)
were compacted to a single 64bit parameter. This is fixed, no longer an issue!!!
4) PosixSeek and PosixRead ARE ONLY INCLUDED AS PROOF OF CONCEPT - to prove that the callbacks into CLR would
function correctly with libmpg123 cdecl calls. It saved making a separate dll for the posix elements.
REPEAT AFTER ME: Not for normal consumption....
5) The __clrcall decoration of mpg123clr functions is not strictly necessary for Visual Studio 2005 and later,
but has been left in for compatibility with earlier versions. See MS documentation of "double thunking"
6) Many functions use pin_ptr to pin the return variables prior to calling the libmpg123 function, this was
considered as an alternative to avoid the use of local variables with attendant overhead of
allocate/use/copy/destroy etc. In practice pin_ptr has significant overhead, empirical tests showed very
little performance difference between either method.
7) Set pin_ptr to NULL after use, to force early GC (recommended). Carried out performance trials and found
insignificant impact. Since most functions are likely to be used repeatedly decided to follow recommended usage.
If code analysis proves this to be redundant - can be removed...
(1.9.0.1 update) "insignificant" in Debug mode, quite significant if the debug overhead is removed,
i.e. Release mode. So try/finally blocks removed in favour of allocating temporary local return variable.
8) (1.12.0.0 update) Support for mpg123_open_handle warrants further description... here it is.
a) Pinning of delegates is not required. See Microsoft: C++, How to: Marshal Callbacks and Delegates Using C++ Interop
b) Pinning of objects is an entirely different matter, so why is the open_handle object not pinned?
Answer: Because it's an object. I allowed passing of any object not just handles.
i) a pin_ptr cannot be a field member for instance scope.
ii) cannot pin the object itself because there's no object.field to pin
iii) cannot pin the object target because the referenced object may be unblittable.
iv) GCHandle.Alloc(obj, GCHandleType.Pinned) doesn't work on unblittable objects (eg managed references like BinaryReader)
Since I don't restrict which objects may be passed I'm forced to exclude pinning.
c) The generated handle doesn't need to be pinned. GCHandle.Alloc(obj) creates a potentially GC relocatable object
containing a Handle to the object. The GCHandle.ToIntPtr(userObjectHandle) creates an integer representation of the
handle that is valid irrespective of any GC relocation of either the object or the GCHandle and can therefore be
passed through unmanaged code to CLR native methods that can re-reference the original object via GCHandle.FromIntPtr
and gch.Target.
All this seems relatively efficient, certainly there is little performance difference between the ReplaceReader
and ReplaceReaderHandle sample code.
=============================================================================
Tested/Untested
I haven't used mpg123clr in a production project yet, although one is about to start. Therefore EVERYTHING should
be treated as though unproven. UPDATE: the scanclr, feedseekclr and replacereaderclr examples have provided a basic
functional test.
Largefile support totally untested... would appreciate a volunteer.
The majority of functions have been tried in test projects with the following exceptions.
64bit compilation. mpg123clr compiles correctly in 64bit x64 platform mode, but hasn't been tested.
ICY(icy_meta); Never had genuine ICY data to test with.
Icy2Utf8(icy_text); Never tried. Please provide sample material.
enc_from_id3(encbyte); Works on libmpg123 enums, never had real world text samples.
store_utf8(...); Works with CLR generated text, not tried with real world text samples.
mpg123str.strlen(...) Not tested with utf8 text strings. Please provide sample material.
==============================================================================
Documentation
mpg123clr is 90% documentation, use intellisense as your reference. If in doubt refer back to the libmpg123
documents. NOTE: You need to build the mpg123clr library to create the intellisense file.
===============================================================================
Error Trapping
libmpg123 is an error agnostic library - it shouldn't generate errors, but neither does it trap them.
mpg123clr is built on the same concept although some CLR generated errors have been trapped. My personal
preference is that exceptions should be avoided not relied on...
THE CALLING APPLICATION IS RESPONSIBLE FOR ERROR DETECTION, TRAPPING AND CORRECTION.
All projects are "as is" with no express or implied warranty. Demonstration projects are to demonstrate the
use of the library and are NOT considered examples of good coding practice. Use at own risk.
===============================================================================
Revision History
1.8.1.0 04-Aug-09 Initial release.
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
1.9.0.0 30-Sep-09 Project config - if exists, copy libmpg123.dll to app output folder (mb)
1.9.0.0 01-Oct-09 Technical cleanup - subst nullptr for NULL (mb)
1.9.0.1 24-Nov-09 Performance update - removed try/finally (mb)
1.12.0.0 14-Apr-10 Release match - added open_handle and framebyframe support (mb)
1.13.0.0 13-Jan-11 Release match - added encsize and strlen support (mb)
Constructive feedback preferred.
Malcolm Boczek
mpg123clr original author.

View File

@ -0,0 +1,91 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
1.9.0.0 13-Oct-09 pin_ptr = nullptr on return (mb)
1.9.0.1 24-Nov-09 performance update - removed try/finally (mb)
*/
#include "StdAfx.h"
#include "advanced.h"
mpg123clr::advpars::advpars(int% error)
{
pin_ptr<int> err = &error;
mp = ::mpg123_new_pars(err);
err = nullptr;
}
mpg123clr::advpars::~advpars(void)
{
// clean up code to release managed resources
// ...
// call Finalizer to clean up unmanaged resources
this->!advpars();
}
mpg123clr::advpars::!advpars(void)
{
if (mp != NULL)
{
::mpg123_delete_pars(mp);
mp = NULL;
}
}
mpg123clr::mpg::ErrorCode mpg123clr::advpars::mpg123_fmt_none(void)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_fmt_none(mp);
}
mpg123clr::mpg::ErrorCode mpg123clr::advpars::mpg123_fmt_all(void)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_fmt_all(mp);
}
mpg123clr::mpg::ErrorCode mpg123clr::advpars::mpg123_fmt(int rate, mpg123clr::mpg::channelcount channels, int encodings)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_fmt(mp, rate, (int)channels, encodings);
}
mpg123clr::mpg::channelcount mpg123clr::advpars::mpg123_fmt_support(int rate, int encodings)
{
return (mpg123clr::mpg::channelcount) ::mpg123_fmt_support(mp, rate, encodings);
}
mpg123clr::mpg::ErrorCode mpg123clr::advpars::mpg123_par(mpg123clr::mpg::parms type, int val, double fval)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_par(mp, (mpg123_parms) type, val, fval);
}
mpg123clr::mpg::ErrorCode mpg123clr::advpars::mpg123_getpar(mpg123clr::mpg::parms type, [Out] int% val, [Out] double% fval)
{
// Avoid need for local intermediary variables
pin_ptr<int> _val = &val;
pin_ptr<double> _fval = &fval;
int ret = ::mpg123_getpar(mp, (mpg123_parms) type, (long*)_val, _fval);
_fval = nullptr;
_val = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}

View File

@ -0,0 +1,130 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
*/
#pragma once
#pragma warning(disable : 4635)
#include "mpg123.h"
#pragma warning(default : 4635)
#include "enum.h"
#include "error.h"
using namespace System;
using namespace System::Runtime::InteropServices;
namespace mpg123clr
{
// Recommended usage when creating reference type on the managed heap (not using stack semantics
// for reference types...) [see (Microsoft) Destructors and Finalizers in Visual C++]
//
// C++/CLI
// A myA;
// // use myA here
//
// Equivalent user code:
//
// A ^ myA = gcnew A;
// try { /* use myA here */ } finally { delete myA; }
//
//
// C# (from wikipedia)
// using(A myA = new A()) { /* Use myA here */ }
// Compiler calls myA.Dispose(), in a "finally" of a "try/finally" block
//
// Equivalent user code:
//
// A myA = new myA();
// try { /* Use myA here */ } finally { myA.Dispose(); }
//
// Otherwise Finalizer will be nondeterministically called by GC
///<summary> CLR wrapper for mpg123_pars object.</summary>
public ref class advpars
{
protected public:
mpg123_pars* mp;
protected:
!advpars(void);
public:
///<summary>Constructor.</summary>
///<param name="error">Returns MPG123_OK or mpg123 error code.</param>
advpars([Out] int% error);
///<summary>Destructor.</summary>
~advpars(void);
///<summary>Configure mpg123 parameters to accept no output formats.
///<para>Use to clear default parameters prior to applying specific settings.</para>
///<para>Returns MPG123 error codes.</para>
///</summary>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_fmt_none(void);
///<summary>Configure mpg123 parameters to accept all formats including custom rate you may set - this is the default.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_fmt_all(void);
///<summary>Configure detailed output formats.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="rate">Sample rate (Hertz)</param>
///<param name="channels">Combination of channelcount.stereo and channelcount.mono</param>
///<param name="encodings">Combination of accepted encodings for rate and channels e.g. enc.enc_signed16 | enc.enc_ulaw_8 (or 0 for none)</param>
///<returns>MPG123 error codes.</returns>
/// VERSION CHECK: long as int for Intellisense
mpg123clr::mpg::ErrorCode __clrcall mpg123_fmt(int rate, mpg123clr::mpg::channelcount channels, int encodings);
///<summary>Get available support for supplied rate and encoding.
///<para>Returns 0 for no support (includes invalid parameters), or combination of channelcount.stereo and channelcount.mono.</para>
///</summary>
///<param name="rate">Sample rate (Hertz)</param>
///<param name="encoding">Combination of accepted encodings for rate and channels e.g. enc.enc_signed16 | enc.enc_ulaw_8 (or 0 for none)</param>
///<returns>Returns 0 for no support (includes invalid parameters), or combination of channelcount.stereo and channelcount.mono.</returns>
/// VERSION CHECK: long as int for Intellisense
mpg123clr::mpg::channelcount __clrcall mpg123_fmt_support(int rate, int encoding);
///<summary>Set a specific advpars value.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="type">Specifies the advpars parameter to be set.</param>
///<param name="val">The integer value to be applied.</param>
///<param name="fval">The real value to be applied.</param>
///<returns>MPG123 error codes.</returns>
/// VERSION CHECK: long as int for Intellisense
mpg123clr::mpg::ErrorCode __clrcall mpg123_par(mpg123clr::mpg::parms type, int val, double fval);
///<summary>Get a specific advpars value.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="type">Specifies the advpars parameter to be returned.</param>
///<param name="val">Returns the applicable integer value.</param>
///<param name="fval">Returns the applicable real value.</param>
///<returns>MPG123 error codes.</returns>
/// VERSION CHECK: long as int for Intellisense
mpg123clr::mpg::ErrorCode __clrcall mpg123_getpar(mpg123clr::mpg::parms type, [Out] int% val, [Out] double% fval);
};
}

View File

@ -0,0 +1,19 @@
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

View File

@ -0,0 +1,218 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2011 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
1.10.0.0 30-Nov-09 release match - added mpg123_feature (mb)
1.13.0.0 13-Jan-11 release match (mb)
*/
#pragma once
#pragma warning(disable : 4635)
#include "mpg123.h"
#pragma warning(default : 4635)
namespace mpg123clr
{
///<summary>Mpg123 enumerations.</summary>
namespace mpg
{
///<summary>Enumeration of the parameters types that it is possible to set/get.</summary>
public enum class parms
{
verbose = MPG123_VERBOSE, /// set verbosity value for enabling messages to stderr, >= 0 makes sense (integer)
flags = MPG123_FLAGS, /// set all flags, p.ex val = MPG123_GAPLESS|MPG123_MONO_MIX (integer)
add_flags = MPG123_ADD_FLAGS, /// add some flags (integer)
force_rate = MPG123_FORCE_RATE, /// when value > 0, force output rate to that value (integer)
down_sample = MPG123_DOWN_SAMPLE, /// 0=native rate, 1=half rate, 2=quarter rate (integer)
rva = MPG123_RVA, /// one of the RVA choices above (integer)
downspeed = MPG123_DOWNSPEED, /// play a frame N times (integer)
upspeed = MPG123_UPSPEED, /// play every Nth frame (integer)
start_frame = MPG123_START_FRAME, /// start with this frame (skip frames before that, integer)
decode_frames = MPG123_DECODE_FRAMES, /// decode only this number of frames (integer)
icy_interval = MPG123_ICY_INTERVAL, /// stream contains ICY metadata with this interval (integer)
outscale = MPG123_OUTSCALE, /// the scale for output samples (amplitude - integer or float according to mpg123 output format, normally integer)
timeout = MPG123_TIMEOUT, /// timeout for reading from a stream (not supported on win32, integer)
remove_flags = MPG123_REMOVE_FLAGS, /// remove some flags (inverse of MPG123_ADD_FLAGS, integer)
resync_limit = MPG123_RESYNC_LIMIT, /// Try resync on frame parsing for that many bytes or until end of stream (<0 ... integer).
index_size = MPG123_INDEX_SIZE, /// Set the frame index size (if supported). Values <0 mean that the index is allowed to grow dynamically in these steps (in positive direction, of course) -- Use this when you really want a full index with every individual frame.
preframes = MPG123_PREFRAMES /// Decode/ignore that many frames in advance for layer 3. This is needed to fill bit reservoir after seeking, for example (but also at least one frame in advance is needed to have all "normal" data for layer 3). Give a positive integer value, please.
};
///<summary>Parameter flag bits.</summary>
///<remarks>Equivalent to MPG123_FLAGS, use the usual binary or ( | ) to combine.</remarks>
public enum class param_flags
{
force_mono = MPG123_FORCE_MONO, /// 0111 Force some mono mode: This is a test bitmask for seeing if any mono forcing is active.
mono_left = MPG123_MONO_LEFT, /// 0001 Force playback of left channel only.
mono_right = MPG123_MONO_RIGHT, /// 0010 Force playback of right channel only.
mono_mix = MPG123_MONO_MIX, /// 0100 Force playback of mixed mono.
force_stereo = MPG123_FORCE_STEREO, /// 1000 Force stereo output.
force_8bit = MPG123_FORCE_8BIT, /// 00010000 Force 8bit formats.
quiet = MPG123_QUIET, /// 00100000 Suppress any printouts (overrules verbose).
gapless = MPG123_GAPLESS, /// 01000000 Enable gapless decoding (default on if libmpg123 has support).
no_resync = MPG123_NO_RESYNC, /// 10000000 Disable resync stream after error.
seekbuffer = MPG123_SEEKBUFFER, /// 000100000000 Enable small buffer on non-seekable streams to allow some peek-ahead (for better MPEG sync).
fuzzy = MPG123_FUZZY, /// 001000000000 Enable fuzzy seeks (guessing byte offsets or using approximate seek points from Xing TOC)
force_float = MPG123_FORCE_FLOAT, /// 010000000000 Force floating point output (32 or 64 bits depends on mpg123 internal precision).
///<summary>Prevent ID3 text translation to UTF-8.
///<para>NOTE: Do not set if you intend to use CLR id3v2 objects.</para>
///</summary>
plain_id3text = MPG123_PLAIN_ID3TEXT, /// 100000000000 Do not translate ID3 text data to UTF-8. ID3 strings will contain the raw text data, with the first byte containing the ID3 encoding code.
ignore_streamlength = MPG123_IGNORE_STREAMLENGTH, /// 1000000000000 Ignore any stream length information contained in the stream, which can be contained in a 'TLEN' frame of an ID3v2 tag or a Xing tag.
// 1.13.0.0
skip_id3v2 = MPG123_SKIP_ID3V2, /// 10 0000 0000 0000 Do not parse ID3v2 tags, just skip them.
};
///<summary>RVA enumeration.</summary>
///<remarks>Equivalent to MPG123_RVA.</remarks>
public enum class rva
{
rva_off = MPG123_RVA_OFF, /// RVA disabled (default).
rva_mix = MPG123_RVA_MIX, /// Use mix/track/radio gain.
rva_album = MPG123_RVA_ALBUM, /// Use album/audiophile gain
rva_max = MPG123_RVA_ALBUM, /// The maximum RVA code, may increase in future.
};
///<summary>Feature set available for query with mpg123_feature. </summary>
///<remarks>Equivalent to MPG123_FEATURE_SET.</remarks>
public enum class feature_set
{
feature_abi_utf8open = MPG123_FEATURE_ABI_UTF8OPEN, /// mpg123 expects path names to be given in UTF-8 encoding instead of plain native.
feature_output_8bit = MPG123_FEATURE_OUTPUT_8BIT, /// 8bit output
feature_output_16bit = MPG123_FEATURE_OUTPUT_16BIT, /// 16bit output
feature_output_32bit = MPG123_FEATURE_OUTPUT_32BIT, /// 32bit output
feature_index = MPG123_FEATURE_INDEX, /// support for building a frame index for accurate seeking
feature_parse_id3v2 = MPG123_FEATURE_PARSE_ID3V2, /// id3v2 parsing
feature_decode_layer1 = MPG123_FEATURE_DECODE_LAYER1, /// mpeg layer-1 decoder enabled
feature_decode_layer2 = MPG123_FEATURE_DECODE_LAYER2, /// mpeg layer-2 decoder enabled
feature_decode_layer3 = MPG123_FEATURE_DECODE_LAYER3, /// mpeg layer-3 decoder enabled
feature_decode_accurate = MPG123_FEATURE_DECODE_ACCURATE, /// accurate decoder rounding
feature_decode_downsample = MPG123_FEATURE_DECODE_DOWNSAMPLE, /// downsample (sample omit)
feature_decode_ntom = MPG123_FEATURE_DECODE_NTOM, /// flexible rate decoding
feature_parse_icy = MPG123_FEATURE_PARSE_ICY, /// ICY support
feature_timeout_read = MPG123_FEATURE_TIMEOUT_READ, /// Reader with timeout (network)
};
///<summary>An enum over all sample types possibly known to mpg123.</summary>
///<remarks><para>The values are designed as bit flags to allow bitmasking for encoding families.</para>
///
///<para>Note that (your build of) libmpg123 does not necessarily support all these.
/// Usually, you can expect the 8bit encodings and signed 16 bit.
/// Also 32bit float will be usual beginning with mpg123-1.7.0 .</para>
///
///<para>What you should bear in mind is that (SSE, etc) optimized routines may be absent
/// for some formats. We do have SSE for 16, 32 bit and float, though.
/// 24 bit integer is done via postprocessing of 32 bit output -- just cutting
/// the last byte, no rounding, even. If you want better, do it yourself.</para>
///
///<para>All formats are in native byte order. On a little endian machine this should mean
/// that you can just feed the MPG123_ENC_SIGNED_32 data to common 24bit hardware that
/// ignores the lowest byte (or you could choose to do rounding with these lower bits).</para>
///</remarks>
public enum class enc
{
enc_8 = MPG123_ENC_8, /// 0000 0000 1111 Some 8 bit integer encoding.
enc_16 = MPG123_ENC_16, /// 0000 0100 0000 Some 16 bit integer encoding.
enc_24 = MPG123_ENC_24, /// 0100 0000 0000 0000 Some 24 bit integer encoding. (r1.13)
enc_32 = MPG123_ENC_32, /// 0001 0000 0000 Some 32 bit integer encoding.
enc_signed = MPG123_ENC_SIGNED, /// 0000 1000 0000 Some signed integer encoding.
enc_float = MPG123_ENC_FLOAT, /// 1110 0000 0000 Some float encoding.
enc_signed_16 = MPG123_ENC_SIGNED_16, /// 1101 0000 signed 16 bit
enc_unsigned_16 = MPG123_ENC_UNSIGNED_16, /// 0110 0000 unsigned 16 bit
enc_unsigned_8 = MPG123_ENC_UNSIGNED_8, /// 0000 0001 unsigned 8 bit
enc_signed_8 = MPG123_ENC_SIGNED_8, /// 1000 0010 signed 8 bit
enc_ulaw_8 = MPG123_ENC_ULAW_8, /// 0000 0100 ulaw 8 bit
enc_alaw_8 = MPG123_ENC_ALAW_8, /// 0000 1000 alaw 8 bit
enc_signed_32 = MPG123_ENC_SIGNED_32, /// 0001 0001 1000 0000 signed 32 bit
enc_unsigned_32 = MPG123_ENC_UNSIGNED_32, /// 0010 0001 0000 0000 unsigned 32 bit
enc_signed_24 = MPG123_ENC_SIGNED_24, /// 0101 0000 1000 0000 signed 24 bit (r1.13)
enc_unsigned_24 = MPG123_ENC_UNSIGNED_24, /// 0110 0000 0000 0000 unsigned 24 bit (r1.13)
enc_float_32 = MPG123_ENC_FLOAT_32, /// 0010 0000 0000 32bit float
enc_float_64 = MPG123_ENC_FLOAT_64, /// 0100 0000 0000 64bit float
enc_any = MPG123_ENC_ANY, /// any encoding
};
///<summary>Channel count enumeration</summary>
///<remarks>clr added <cref name="both">both</cref></remarks>
public enum class channelcount
{
mono = MPG123_MONO,
stereo = MPG123_STEREO,
both = MPG123_MONO | MPG123_STEREO,
};
///<summary>Channel enumeration.</summary>
public enum class channels
{
left = MPG123_LEFT, /// The Left Channel.
right = MPG123_RIGHT, /// The Right Channel.
both = MPG123_LR, /// Both left and right channel; same as MPG123_LEFT|MPG123_RIGHT
};
///<summary>VBR enumeration.</summary>
public enum class mpeg_vbr
{
cbr = MPG123_CBR, /// Constant Bitrate Mode (default)
vbr = MPG123_VBR, /// Variable Bitrate Mode
abr = MPG123_ABR, /// Average Bitrate Mode
};
///<summary>MPEG Version enumeration.</summary>
public enum class mpeg_version
{
mpeg_1_0 = MPG123_1_0, /// MPEG Version 1.0
mpeg_2_0 = MPG123_2_0, /// MPEG Version 2.0
mpeg_2_5 = MPG123_2_5, /// MPEG Version 2.5
};
///<summary>MPEG Mode enumeration.</summary>
public enum class mpeg_mode
{
m_stereo = MPG123_M_STEREO, /// Standard Stereo.
m_joint = MPG123_M_JOINT, /// Joint Stereo.
m_dual = MPG123_M_DUAL, /// Dual Channel.
m_mono = MPG123_M_MONO, /// Single Channel.
};
///<summary>MPEG Flags enumeration.</summary>
public enum class mpeg_flags
{
CRC = MPG123_CRC, /// The bitstream is error protected using 16-bit CRC.
COPYRIGHT = MPG123_COPYRIGHT, /// The bitstream is copyrighted.
PRIVATE = MPG123_PRIVATE, /// The private bit has been set.
ORIGINAL = MPG123_ORIGINAL, /// The bitstream is an original, not a copy.
};
///<summary>Positional state.</summary>
public enum class state
{
accurate = MPG123_ACCURATE /// Query if positons are currently accurate (integer value, 0 if false, 1 if true)
};
}
}

View File

@ -0,0 +1,48 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
*/
#include "StdAfx.h"
#include "error.h"
mpg123clr::mpg123error::mpg123error(void)
{
}
// Destructor cleans up all resources
mpg123clr::mpg123error::~mpg123error(void)
{
// clean up code to release managed resources
// ...
// call Finalizer to clean up unmanaged resources
this->!mpg123error();
}
// Finalizer cleans up unmanaged resources
mpg123clr::mpg123error::!mpg123error(void)
{
// none!
}
String^ mpg123clr::mpg123error::mpg123_plain_strerror(mpg123clr::mpg::ErrorCode errcode)
{
return gcnew String(::mpg123_plain_strerror((int)errcode));
}

View File

@ -0,0 +1,134 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
1.12.0.0 14-Apr-10 Revision harmonization (catch-up)
*/
#pragma once
#pragma warning(disable : 4635)
#include "mpg123.h"
#pragma warning(default : 4635)
#include "enum.h"
using namespace System;
namespace mpg123clr
{
// defgroup mpg123_error mpg123 error handling
//
// Functions to get text version of the error numbers and an enumeration
// of the error codes returned by libmpg123.
//
// Most functions operating on a mpg123_handle simply return MPG123_OK on success and MPG123_ERR on failure (setting the internal error variable of the handle to the specific error code).
// Decoding/seek functions may also return message codes MPG123_DONE, MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!).
// The positive range of return values is used for "useful" values when appropriate.
//
//
//
namespace mpg
{
///<summary>Enumeration of the message and error codes as returned by libmpg123 functions.</summary>
public enum class ErrorCode
{
done = MPG123_DONE, /// Message: Track ended.
new_format = MPG123_NEW_FORMAT, /// Message: Output format will be different on next call.
need_more = MPG123_NEED_MORE, /// Message: For feed reader: "Feed me more!"
err = MPG123_ERR, /// Generic Error
ok = MPG123_OK, /// Success
bad_outformat = MPG123_BAD_OUTFORMAT, /// Unable to set up output format!
bad_channel = MPG123_BAD_CHANNEL, /// Invalid channel number specified.
bad_rate = MPG123_BAD_RATE, /// Invalid sample rate specified.
err_16to8table = MPG123_ERR_16TO8TABLE, /// Unable to allocate memory for 16 to 8 converter table!
bad_param = MPG123_BAD_PARAM, /// Bad parameter id!
bad_buffer = MPG123_BAD_BUFFER, /// Bad buffer given -- invalid pointer or too small size.
out_of_mem = MPG123_OUT_OF_MEM, /// Out of memory -- some malloc() failed.
not_initialized = MPG123_NOT_INITIALIZED, /// You didn't initialize the library!
bad_decoder = MPG123_BAD_DECODER, /// Invalid decoder choice.
bad_handle = MPG123_BAD_HANDLE, /// Invalid mpg123 handle.
no_buffers = MPG123_NO_BUFFERS, /// Unable to initialize frame buffers (out of memory?).
bad_rva = MPG123_BAD_RVA, /// Invalid RVA mode.
no_gapless = MPG123_NO_GAPLESS, /// This build doesn't support gapless decoding.
no_space = MPG123_NO_SPACE, /// Not enough buffer space.
bad_types = MPG123_BAD_TYPES, /// Incompatible numeric data types.
bad_band = MPG123_BAD_BAND, /// Bad equalizer band.
err_null = MPG123_ERR_NULL, /// Null pointer given where valid storage address needed.
err_reader = MPG123_ERR_READER, /// Error reading the stream.
no_seek_from_end = MPG123_NO_SEEK_FROM_END, /// Cannot seek from end (end is not known).
bad_whence = MPG123_BAD_WHENCE, /// Invalid 'whence' for seek function.
no_timeout = MPG123_NO_TIMEOUT, /// Build does not support stream timeouts.
bad_file = MPG123_BAD_FILE, /// File access error.
no_seek = MPG123_NO_SEEK, /// Seek not supported by stream.
no_reader = MPG123_NO_READER, /// No stream opened.
bad_pars = MPG123_BAD_PARS, /// Bad parameter handle.
bad_index_par = MPG123_BAD_INDEX_PAR, /// Bad parameters to mpg123_index()
out_of_sync = MPG123_OUT_OF_SYNC, /// Lost track in bytestream and did not try to resync.
resync_fail = MPG123_RESYNC_FAIL, /// Resync failed to find valid MPEG data.
no_8bit = MPG123_NO_8BIT, /// No 8bit encoding possible.
bad_align = MPG123_BAD_ALIGN, /// Stack aligmnent error
null_buffer = MPG123_NULL_BUFFER, /// NULL input buffer with non-zero size...
no_relseek = MPG123_NO_RELSEEK, /// Relative seek not possible (screwed up file offset)
null_pointer = MPG123_NULL_POINTER, /// You gave a null pointer somewhere where you shouldn't have.
bad_key = MPG123_BAD_KEY, /// Bad key value given.
no_index = MPG123_NO_INDEX, /// No frame index in this build.
index_fail = MPG123_INDEX_FAIL, /// Something with frame index went wrong.
bad_decoder_setup = MPG123_BAD_DECODER_SETUP, /// Something prevents a proper decoder setup
missing_feature = MPG123_MISSING_FEATURE, /// This feature has not been built into libmpg123.
/* 1.8.1 */
bad_value = MPG123_BAD_VALUE, /// A bad value has been given, somewhere.
lseek_failed = MPG123_LSEEK_FAILED, /// Low-level seek failed.
/* 1.12.0 */
bad_custom_io = MPG123_BAD_CUSTOM_IO, /// Custom I/O not prepared.
lfs_overflow = MPG123_LFS_OVERFLOW, /// Offset value overflow during translation of large file API calls,
/// - your client program cannot handle that large file.
};
}
///<summary>Wrapper for mpg123_errors</summary>
public ref class mpg123error
{
protected:
///<summary>Finalizer.
///<para>Cleanly handles mpg123_delete of internal (unmanaged) handles.</para></summary>
/// Implementation of CLR Finalize().
!mpg123error(void);
public:
///<summary>Constructor.</summary>
mpg123error(void);
///<summary>Destructor. Used for final object deletion.
///<para>Calls finalizer for clean disposal of internal (unmanaged) library handles.</para>
///</summary>
/// Implementation of CLR Dispose().
/// ~Destructor and !Finalizer are the prescribed implementation of Dispose() and Finalize().
/// See Destructors and Finalizers in Visual C++
~mpg123error(void);
///<summary>Obtain a string description of the errcode meaning.
///<para>Returns a String description representing the error code.</para>
///</summary>
///<param name="errcode">The error code to be described.</param>
///<returns>Returns a String description representing the error code.</returns>
static String^ __clrcall mpg123_plain_strerror(mpg123clr::mpg::ErrorCode errcode);
};
}

View File

@ -0,0 +1,92 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
1.9.0.0 01-Oct-09 Technical cleanup - subst nullptr for NULL (mb)
*/
#include "StdAfx.h"
#include "id3v1.h"
mpg123clr::id3::mpg123id3v1::mpg123id3v1(void)
{
}
mpg123clr::id3::mpg123id3v1::mpg123id3v1(mpg123_id3v1* sb)
{
this->sb = sb;
}
// Destructor
mpg123clr::id3::mpg123id3v1::~mpg123id3v1(void)
{
// clean up code to release managed resources
// ...
// call Finalizer to clean up unmanaged resources
this->!mpg123id3v1();
}
// Finalizer
mpg123clr::id3::mpg123id3v1::!mpg123id3v1(void)
{
// we do not create the underlying structure, so shouldn't dispose it either...
}
String^ mpg123clr::id3::mpg123id3v1::tag::get()
{
if (sb == nullptr || sb->tag == nullptr) return gcnew String("");
return Marshal::PtrToStringAnsi((IntPtr)sb->tag, (int)strnlen(sb->tag, 3));
}
String^ mpg123clr::id3::mpg123id3v1::title::get()
{
if (sb == nullptr || sb->title == nullptr) return gcnew String("");
return Marshal::PtrToStringAnsi((IntPtr)sb->title, (int)strnlen(sb->title, 30));
}
String^ mpg123clr::id3::mpg123id3v1::artist::get()
{
if (sb == nullptr || sb->artist == nullptr) return gcnew String("");
return Marshal::PtrToStringAnsi((IntPtr)sb->artist, (int)strnlen(sb->artist, 30));
}
String^ mpg123clr::id3::mpg123id3v1::album::get()
{
if (sb == nullptr || sb->album == nullptr) return gcnew String("");
return Marshal::PtrToStringAnsi((IntPtr)sb->album, (int)strnlen(sb->album, 30));
}
String^ mpg123clr::id3::mpg123id3v1::comment::get()
{
if (sb == nullptr || sb->comment == nullptr) return gcnew String("");
return Marshal::PtrToStringAnsi((IntPtr)sb->comment, (int)strnlen(sb->comment, 30));
}
int mpg123clr::id3::mpg123id3v1::genre::get()
{
if (sb == nullptr) return 0;
return sb->genre;
}

View File

@ -0,0 +1,132 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
*/
#pragma once
#pragma warning(disable : 4635)
#include "mpg123.h"
#pragma warning(default : 4635)
#include <string>
#include <iostream>
#include <vcclr.h>
using namespace std;
using namespace System;
using namespace System::Runtime::InteropServices;
namespace mpg123clr
{
namespace id3
{
///<summary>id3check enumeration.</summary>
public enum class id3check
{
none = 0,
id3 = 2, /**< 0010 There is some ID3 info. */
upd_id3 = MPG123_ID3, /**< 0011 There is some ID3 info. Also matches 0010 or NEW_ID3. */
new_id3 = MPG123_NEW_ID3, /**< 0001 There is ID3 info that changed since last call to mpg123_id3. */
icy = 8, /**< 1100 There is some ICY info. Also matches 0100 or NEW_ICY.*/
upd_icy = MPG123_ICY, /**< 1100 There is some ICY info. Also matches 0100 or NEW_ICY.*/
new_icy = MPG123_NEW_ICY, /**< 0100 There is ICY info that changed since last call to mpg123_icy. */
};
// Recommended usage when creating reference type on the managed heap (not using stack semantics
// for reference types...) [see Destructors and Finalizers in Visual C++]
//
// A ^ myA = gcnew A;
// try
// {
// use myA
// }
// finally
// {
// delete myA;
// }
///<summary>Wrapper for mpg123_id3v1.</summary>
[StructLayout(LayoutKind::Sequential)]
public ref struct mpg123id3v1
{
private:
mpg123_id3v1* sb;
protected:
///<summary>Finalizer.
///<para>Cleanly handles mpg123_delete of internal (unmanaged) mpg123 handle.</para></summary>
/// Implementation of CLR Finalize().
!mpg123id3v1(void);
internal:
///<summary>Working Constructor.
///<para>Maps to mpg123_id3v1 memory.</para>
///</summary>
mpg123id3v1(mpg123_id3v1* sb);
public:
///<summary>Constructor.
///<para>Only creates object for use as "out" target in ID3 constructor.</para>
///</summary>
mpg123id3v1(void);
///<summary>Destructor. Used for final object deletion.
///<para>Calls finalizer for clean disposal of internal (unmanaged) library handles.</para>
///</summary>
/// Implementation of CLR Dispose().
/// ~Destructor and !Finalizer are the prescribed implementation of Dispose() and Finalize().
/// See Destructors and Finalizers in Visual C++
~mpg123id3v1(void);
///<summary>Get the ID3v1 tag descriptor.
///<para>Property returns the ID3v1 tag (should always be "TAG").</para>
///</summary>
///<value>The ID3v1 tag (should always be "TAG").</value>
property String^ tag{String^ __clrcall get();}
///<summary>Get the ID3v1 title text.
///<para>Property returns the ID3v1 title text.</para>
///</summary>
///<value>The ID3v1 title text.</value>
property String^ title{String^ __clrcall get();}
///<summary>Get the ID3v1 artist text.
///<para>Property returns the ID3v1 artist text.</para>
///</summary>
///<value>The ID3v1 artist text.</value>
property String^ artist{String^ __clrcall get();}
///<summary>Get the ID3v1 album text.
///<para>Property returns the ID3v1 album text.</para>
///</summary>
///<value>The ID3v1 album text.</value>
property String^ album{String^ __clrcall get();}
///<summary>Get the ID3v1 comment text.
///<para>Property returns the ID3v1 comment text.</para>
///</summary>
///<value>The ID3v1 comment text.</value>
property String^ comment{String^ __clrcall get();}
///<summary>Get the ID3v1 genre index.
///<para>Property returns the ID3v1 genre index.</para>
///</summary>
///<value>The ID3v1 genre index.</value>
property int genre{int __clrcall get();}
};
}
}

View File

@ -0,0 +1,138 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
1.9.0.0 01-Oct-09 Technical cleanup - subst nullptr for NULL (mb)
1.10.0.0 30-Nov-09 Add test for null base (sb) - in addition to null string test (mb)
(required if v2 referenced prior to file scan)
*/
#include "StdAfx.h"
#include "id3v2.h"
mpg123clr::id3::mpg123id3v2::mpg123id3v2(void)
{
}
mpg123clr::id3::mpg123id3v2::mpg123id3v2(mpg123_id3v2* sb)
{
this->sb = sb;
}
// Destructor
mpg123clr::id3::mpg123id3v2::~mpg123id3v2(void)
{
// clean up code to release managed resources
// ...
// call Finalizer to clean up unmanaged resources
this->!mpg123id3v2();
}
// Finalizer
mpg123clr::id3::mpg123id3v2::!mpg123id3v2(void)
{
// we do not create the underlying structure, so shouldn't dispose it either...
}
String^ mpg123clr::id3::mpg123id3v2::title::get()
{
// updated: more efficient "union style" mpg123str
mpg123str^ str = (sb == nullptr || sb->title == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->title);
// Deprecated remnant - uses "overlayed style" mpg123str - note inefficient PtrToStrucure...
// mpg123str^% str = gcnew mpg123str;
// Marshal::PtrToStructure((IntPtr)sb->title, str);
return str->Text;
}
String^ mpg123clr::id3::mpg123id3v2::artist::get()
{
mpg123str^ str = (sb == nullptr || sb->artist == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->artist);
return str->Text;
}
String^ mpg123clr::id3::mpg123id3v2::album::get()
{
mpg123str^ str = (sb == nullptr || sb->album == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->album);
return str->Text;
}
String^ mpg123clr::id3::mpg123id3v2::comment::get()
{
mpg123str^ str = (sb == nullptr || sb->comment == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->comment);
return str->Text;
}
String^ mpg123clr::id3::mpg123id3v2::year::get()
{
mpg123str^ str = (sb == nullptr || sb->year == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->year);
return str->Text;
}
String^ mpg123clr::id3::mpg123id3v2::genre::get()
{
mpg123str^ str = (sb == nullptr || sb->genre == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->genre);
return str->Text;
}
int mpg123clr::id3::mpg123id3v2::version::get()
{
return sb->version;
}
array<mpg123clr::mpg123text^>^ mpg123clr::id3::mpg123id3v2::MakeTextList(mpg123_text* ptr, size_t count)
{
// WARN 4267 - clr limited to 32bit-length-size arrays!!
array<mpg123clr::mpg123text^>^ ary = gcnew array<mpg123clr::mpg123text^>((int)count);
for (int ii = 0; ii < ary->Length; ii++)
{
// Remnant - for explicit layout
// mpg123text^% txt = gcnew mpg123text;
// Marshal::PtrToStructure((IntPtr)ptr++, txt);
// New code - for "handle style" structure
mpg123text^% txt = gcnew mpg123text(ptr++);
ary[ii] = txt;
}
return ary;
}
array<mpg123clr::mpg123text^>^ mpg123clr::id3::mpg123id3v2::Comments::get()
{
return MakeTextList(sb->comment_list, sb->comments);
}
array<mpg123clr::mpg123text^>^ mpg123clr::id3::mpg123id3v2::Texts::get()
{
return MakeTextList(sb->text, sb->texts);
}
array<mpg123clr::mpg123text^>^ mpg123clr::id3::mpg123id3v2::Extras::get()
{
return MakeTextList(sb->extra, sb->extras);
}

View File

@ -0,0 +1,152 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
*/
#pragma once
#pragma warning(disable : 4635)
#include "mpg123.h"
#pragma warning(default : 4635)
#include "string.h"
#include "text.h"
#include <string>
#include <iostream>
#include <vcclr.h>
using namespace std;
using namespace System;
using namespace System::Runtime::InteropServices;
namespace mpg123clr
{
namespace id3
{
// Recommended usage when creating reference type on the managed heap (not using stack semantics
// for reference types...) [see Destructors and Finalizers in Visual C++]
//
// A ^ myA = gcnew A;
// try
// {
// use myA
// }
// finally
// {
// delete myA;
// }
///<summary>Wrapper for mpg123_id3v2.</summary>
[StructLayout(LayoutKind::Sequential)]
public ref struct mpg123id3v2
{
private:
mpg123_id3v2* sb;
array<mpg123text^>^ __clrcall MakeTextList(mpg123_text* ptr, size_t count);
protected:
///<summary>Finalizer.
///<para>Does nothing - wrapper points to underlying memory, this class doesn't allocate memory.</para></summary>
/// Implementation of CLR Finalize().
!mpg123id3v2(void);
internal:
///<summary>Working Constructor.
///<para>Maps to mpg123_id3v2 memory.</para>
///</summary>
mpg123id3v2(mpg123_id3v2* sb);
public:
///<summary>Constructor.
///<para>Only creates object for use as "out" target in ID3 constructor.</para>
///</summary>
mpg123id3v2(void);
///<summary>Destructor. Used for final object deletion.
///<para>Calls finalizer for clean disposal of internal (unmanaged) library handles.</para>
///</summary>
/// Implementation of CLR Dispose().
/// ~Destructor and !Finalizer are the prescribed implementation of Dispose() and Finalize().
/// See Destructors and Finalizers in Visual C++
~mpg123id3v2(void);
///<summary>Get the ID3v2 title text.
///<para>Property returns the last encountered ID3v2 title text.</para>
///</summary>
///<value>The last encountered ID3v2 title text.</value>
property String^ title{String^ __clrcall get();}
///<summary>Get the ID3v2 artist text.
///<para>Property returns the last encountered ID3v2 artist text.</para>
///</summary>
///<value>The last encountered ID3v2 artist text.</value>
property String^ artist{String^ __clrcall get();}
///<summary>Get the ID3v2 album text.
///<para>Property returns the last encountered ID3v2 album text.</para>
///</summary>
///<value>The last encountered ID3v2 album text.</value>
property String^ album{String^ __clrcall get();}
///<summary>Get the ID3v2 comment text.
///<para>Property returns the last encountered ID3v2 comment text.</para>
///</summary>
///<value>The last encountered ID3v2 comment text.</value>
property String^ comment{String^ __clrcall get();}
///<summary>Get the ID3v2 year text.
///<para>Property returns the last encountered ID3v2 year text.</para>
///</summary>
///<value>The last encountered ID3v2 year text.</value>
property String^ year{String^ __clrcall get();}
///<summary>Get the ID3v2 genre text.
///<para>Property returns the last encountered ID3v2 genre text.</para>
///</summary>
///<value>The last encountered ID3v2 genre text.</value>
property String^ genre{String^ __clrcall get();}
///<summary>Get the ID3v2 version.
///<para>Property returns the ID3v2 version.</para>
///</summary>
///<value>The ID3v2 version.</value>
property int version{int __clrcall get();}
///<summary>Get an array of Comments.
///<para>Property returns an array of Comments.</para>
///</summary>
///<value>An array of Comments.</value>
property array<mpg123clr::mpg123text^>^ Comments{array<mpg123clr::mpg123text^>^ __clrcall get();};
///<summary>Get an array of ID3v2 text fields (including USLT).
///<para>Property returns an array of ID3v2 text fields (including USLT).</para>
///</summary>
///<value>An array of ID3v2 text fields (including USLT).</value>
property array<mpg123clr::mpg123text^>^ Texts{array<mpg123clr::mpg123text^>^ __clrcall get();};
///<summary>Get an array of extra (TXXX) fields.
///<para>Property returns an array of extra (TXXX) fields.</para>
///</summary>
///<value>An array of extra (TXXX) fields.</value>
property array<mpg123clr::mpg123text^>^ Extras{array<mpg123clr::mpg123text^>^ __clrcall get();};
};
}
}

View File

@ -0,0 +1,896 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009-2011 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2011 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
1.9.0.0 01-Oct-09 Technical cleanup - subst nullptr for NULL (mb)
1.9.0.0 13-Oct-09 pin_ptr = nullptr on return (mb)
1.9.0.1 24-Nov-09 performance update - removed try/finally (mb)
1.10.0.0 30-Nov-09 release match - added mpg123_feature (mb)
1.12.0.0 14-Apr-10 release match - added framebyframe and "handle" ReplaceReaders (mb)
1.13.0.0 13-Jan-11 release match - added encsize (mb)
*/
// mpg123clr.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "mpg123clr.h"
mpg123clr::mpg123::mpg123(void)
{
mh = nullptr;
useHandleReplacement = false;
lastReplacementWasHandle = false;
}
mpg123clr::mpg123::mpg123(mpg123_handle* mh)
{
this->mh = mh;
useHandleReplacement = false;
lastReplacementWasHandle = false;
}
// Destructor
mpg123clr::mpg123::~mpg123(void)
{
// clean up code to release managed resources
// call Finalizer to clean up unmanaged resources
this->!mpg123();
// CLI implements SuppressFinalize - therefore not required here...
//GC::SuppressFinalize(this);
}
// Finalizer
mpg123clr::mpg123::!mpg123(void)
{
// clean up unmanaged resources
if (mh != nullptr)
{
::mpg123_delete(mh);
mh = nullptr;
}
}
void mpg123clr::mpg123::mpg123_delete(void)
{
if (mh != nullptr)
{
::mpg123_delete(mh);
mh = nullptr;
}
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_init(void)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_init();
}
void mpg123clr::mpg123::mpg123_exit(void)
{
::mpg123_exit();
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_new(String ^ decoder)
{
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(decoder)).ToPointer();
int err;
mh = ::mpg123_new(chars, &err);
Marshal::FreeHGlobal(IntPtr((void*)chars));
return (mpg123clr::mpg::ErrorCode) err;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_new(void)
{
int err;
mh = ::mpg123_new(NULL, &err);
return (mpg123clr::mpg::ErrorCode) err;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_parnew(mpg123clr::advpars^ par, String ^ decoder)
{
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(decoder)).ToPointer();
int err;
mh = ::mpg123_parnew(par->mp, chars, &err);
Marshal::FreeHGlobal(IntPtr((void*)chars));
return (mpg123clr::mpg::ErrorCode) err;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_parnew(mpg123clr::advpars^ par)
{
int err;
mh = ::mpg123_parnew(par->mp, NULL, &err);
return (mpg123clr::mpg::ErrorCode) err;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_param(mpg123clr::mpg::parms type, int val, double fval)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_param(mh, (mpg123_parms)type, val, fval);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_getparam(mpg123clr::mpg::parms type, [Out] int% val, [Out] double% fval)
{
// Avoid need for local intermediary variables
pin_ptr<int> _val = &val;
pin_ptr<double> _fval = &fval;
int ret = ::mpg123_getparam(mh, (mpg123_parms)type, (long*) _val, _fval);
_fval = nullptr;
_val = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}
int mpg123clr::mpg123::mpg123_feature(mpg123clr::mpg::feature_set key)
{
return ::mpg123_feature((mpg123_feature_set) key);
}
String^ mpg123clr::mpg123::mpg123_strerror(void)
{
return gcnew String(::mpg123_strerror(mh));
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_errcode(void)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_errcode(mh);
}
array<String^>^ mpg123clr::mpg123::StringArrayFromPtr(const char** ptr)
{
int count = 0;
// count how many strings in array by walking up the array until NULL found
while (*(ptr++) != NULL){ ++count; }
// create an array of the correct size
array<String^> ^ str = gcnew array<String^>(count);
--ptr; // loop leaves ptr +2 beyond end of array - put ptr back to just after last index
// walk back down the array, extracting the strings
while (count-- > 0){ str[count] = gcnew String(*(--ptr)); }
return str;
}
array<String^>^ mpg123clr::mpg123::mpg123_decoders(void)
{
return StringArrayFromPtr(::mpg123_decoders());
}
array<String^>^ mpg123clr::mpg123::mpg123_supported_decoders(void)
{
return StringArrayFromPtr(::mpg123_supported_decoders());
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_decoder(String^ name)
{
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(name)).ToPointer();
int ret;
// one of the few mpg123 places that fault with an exception...
try { ret = ::mpg123_decoder(mh, chars); }
catch(Exception^){ ret = MPG123_ERR; }
Marshal::FreeHGlobal(IntPtr((void*)chars));
return (mpg123clr::mpg::ErrorCode) ret;
}
String^ mpg123clr::mpg123::mpg123_current_decoder(void)
{
return gcnew String(::mpg123_current_decoder(mh));
}
array<long>^ mpg123clr::mpg123::mpg123_rates(void)
{
size_t number;
const long* list;
::mpg123_rates(&list, &number);
array<long>^ rList = gcnew array<long>((int)number);
int index = 0;
// walk the array, extracting the rates
while (index < (int)number){ rList[index++] = *(list++); }
return rList;
}
array<mpg123clr::mpg::enc>^ mpg123clr::mpg123::mpg123_encodings(void)
{
size_t number;
const int* list;
::mpg123_encodings(&list, &number);
// WARN 4267 - assuming that the number of encodings will never exceed 32bits
array<mpg123clr::mpg::enc>^ rList = gcnew array<mpg123clr::mpg::enc>((int)number);
int index = 0;
// walk the array, extracting the rates
while (index < (int)number){ rList[index++] = (mpg123clr::mpg::enc) *(list++); }
return rList;
}
int mpg123clr::mpg123::mpg123_encsize(mpg123clr::mpg::enc encoding)
{
return ::mpg123_encsize((int) encoding);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_format_none(void)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_format_none(mh);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_format_all(void)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_format_all(mh);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_format(int rate, mpg123clr::mpg::channelcount channels, mpg123clr::mpg::enc encodings)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_format(mh, rate, (int) channels, (int) encodings);
}
mpg123clr::mpg::channelcount mpg123clr::mpg123::mpg123_format_support(int rate, mpg123clr::mpg::enc encodings)
{
return (mpg123clr::mpg::channelcount) ::mpg123_format_support(mh, rate, (int) encodings);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_getformat([Out] int% rate, [Out] mpg123clr::mpg::channelcount% channels, [Out] mpg123clr::mpg::enc% encodings)
{
// either:-
//
// long _rate;
// int _chan, _enc;
// int ret = mpg123_getformat(mh, &_rate, &_chan, &_enc);
// rate = _rate;
// channels = _chan;
// encodings = _enc;
// return (mpg123clr::mpg::ErrorCode) ret;
//
// or:-
// use pinned pointers instead
pin_ptr<int> _rate = &rate;
pin_ptr<mpg123clr::mpg::channelcount> _chan = &channels;
pin_ptr<mpg123clr::mpg::enc> _enc = &encodings;
int ret = ::mpg123_getformat(mh, (long*)_rate, (int*)_chan, (int*)_enc);
_enc = nullptr;
_chan = nullptr;
_rate = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_open(String^ path)
{
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(path)).ToPointer();
_ReplaceReader();
int ret = ::mpg123_open(mh, chars);
Marshal::FreeHGlobal(IntPtr((void*)chars));
return (mpg123clr::mpg::ErrorCode) ret;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_open_fd(int filedescriptor)
{
_ReplaceReader();
return (mpg123clr::mpg::ErrorCode) ::mpg123_open_fd(mh, filedescriptor);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_open_handle(System::Object^ obj)
{
// NOTE: You must have configured callbacks using mpg123_replace_reader_handle
// before calling mpg123_open_handle!
_ReplaceReader(); // activate callbacks
// Make sure we free this in Close functions
userObjectHandle = GCHandle::Alloc(obj);
// NOTE: This sends a HANDLE not an ADDRESS, no pinning required
return (mpg123clr::mpg::ErrorCode) ::mpg123_open_handle(mh, (void*)GCHandle::ToIntPtr(userObjectHandle).ToPointer());
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_open_feed(void)
{
_ReplaceReader();
return (mpg123clr::mpg::ErrorCode) ::mpg123_open_feed(mh);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_close(void)
{
// Closes 'mh' and calls Cleanup delegate if provided
int ret = ::mpg123_close(mh);
// See GCHandle.Free - caller must ensure Free called only once for a given handle.
if (userObjectHandle.IsAllocated) userObjectHandle.Free();
return (mpg123clr::mpg::ErrorCode) ret;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_read(array<unsigned char>^ buffer, [Out] size_t% count)
{
pin_ptr<size_t> _count = &count;
pin_ptr<unsigned char> _ptr = &buffer[0];
int ret = ::mpg123_read(mh, _ptr, buffer->Length, _count);
_ptr = nullptr;
_count = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_read(array<unsigned char>^ buffer, size_t offset, size_t size, [Out] size_t% count)
{
pin_ptr<size_t> _count = &count;
// WARN 4267 - clr limited to 32bit-length-size arrays!!
pin_ptr<unsigned char> _ptr = &buffer[(int)offset];
int ret = ::mpg123_read(mh, _ptr, size, _count);
_ptr = nullptr;
_count = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_feed(array<unsigned char>^ inbuffer, size_t size)
{
pin_ptr<unsigned char> _ptr = &inbuffer[0];
int ret = ::mpg123_feed(mh, _ptr, size);
_ptr = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_decode(array<unsigned char>^ inbuffer, size_t insize, array<unsigned char>^ outbuffer, size_t outsize, [Out] size_t% count)
{
pin_ptr<size_t> _count = &count;
pin_ptr<const unsigned char> _inptr = &inbuffer[0];
pin_ptr<unsigned char> _outptr = &outbuffer[0];
int ret = ::mpg123_decode(mh, _inptr, insize, _outptr, outsize, _count);
_outptr = nullptr;
_inptr = nullptr;
_count = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_decode_frame([Out] off_t% num, [Out] IntPtr% audio, [Out] size_t% count)
{
pin_ptr<size_t> _count = &count;
pin_ptr<off_t> _num = &num;
pin_ptr<IntPtr> _x = &audio;
int ret = ::mpg123_decode_frame(mh, _num, (unsigned char**)_x, _count);
_x = nullptr;
_num = nullptr;
_count = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_framebyframe_decode([Out] off_t% num, [Out] IntPtr% audio, [Out] size_t% count)
{
// NOTE: must use framebyframe_next to obtain successive frames
pin_ptr<size_t> _count = &count;
pin_ptr<off_t> _num = &num;
pin_ptr<IntPtr> _x = &audio;
int ret = ::mpg123_framebyframe_decode(mh, _num, (unsigned char**)_x, _count);
_x = nullptr;
_num = nullptr;
_count = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_framebyframe_next()
{
// mpg123lib has warning, Experimental API. Watch for updates!!!
// framebyframe_decode doesn't automatically move on to next frame,
// use framebyframe_next to move on to "Find, read and parse the next mp3 frame"
int ret = ::mpg123_framebyframe_next(mh);
return (mpg123clr::mpg::ErrorCode) ret;
}
long long mpg123clr::mpg123::mpg123_tell(void)
{
return ::mpg123_tell(mh);
}
long long mpg123clr::mpg123::mpg123_tellframe(void)
{
return ::mpg123_tellframe(mh);
}
long long mpg123clr::mpg123::mpg123_tell_stream(void)
{
return ::mpg123_tell_stream(mh);
}
long long mpg123clr::mpg123::mpg123_seek(long long offset, SeekOrigin origin)
{
return ::mpg123_seek(mh, (off_t)offset, (int)origin);
}
long long mpg123clr::mpg123::mpg123_feedseek(long long offset, SeekOrigin origin, [Out] long long% input_offset)
{
// NOTE: off_t fiddles...
// pin_ptr<int> _input_offset = &input_offset; // type mismatch between 32 and 64 bit offsets.
off_t _input_offset; // type accomodation
off_t ret = ::mpg123_feedseek(mh, (off_t)offset, (int)origin, &_input_offset); // ok types
input_offset = _input_offset; // type conversion
return ret;
}
long long mpg123clr::mpg123::mpg123_seek_frame(long long frameoffset, SeekOrigin origin)
{
return ::mpg123_seek_frame(mh, (off_t)frameoffset, (int)origin);
}
long long mpg123clr::mpg123::mpg123_timeframe(double seconds)
{
return ::mpg123_timeframe(mh, seconds);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_index([Out] array<long long>^% index, [Out] long long% step)
{
// remnant: only works if off_t, index and step are 32 bit - possible redo for 64 bit library
// pin_ptr<int> _step = &step;
// int ret = mpg123_index(mh, &_list, (off_t*)_step, &_count);
// index = gcnew array<int>((int)_count);
// Marshal::Copy((IntPtr)_list, index, 0, (int)_count);
// alternate: works for 32 and 64 bit libraries - returns long long values
off_t* _list;
size_t _count;
off_t _step; // type accomodation
int ret = ::mpg123_index(mh, &_list, &_step, &_count);
step = _step; // type conversion
// WARN 4267 - clr limited to 32bit-length-size arrays!!
index = gcnew array<long long>((int)_count);
// walk the array, extracting the rates
int idx = 0; // array length limited to 32bit
while (idx < index->Length){ index[idx++] = *(_list++); }
return (mpg123clr::mpg::ErrorCode) ret;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_index([Out] IntPtr% indexarr, [Out] long long% step, [Out] size_t% fill)
{
pin_ptr<size_t> _fill = &fill;
pin_ptr<IntPtr> _x = &indexarr; // NOTE: untyped index pointer.
off_t _step; // type accomodation
int ret = ::mpg123_index(mh, (off_t**)_x, &_step, _fill);
step = _step; // type conversion
_x = nullptr;
_fill = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_position(
long long frameoffset, long long bufferedbytes, [Out] long long% currentframe, [Out] long long% framesleft,
[Out] double% currentseconds, [Out] double% secondsleft)
{
// NOTE: off_t fiddles
// pin_ptr<int> _currentframe = &currentframe;
// pin_ptr<int> _framesleft = &framesleft;
pin_ptr<double> _currentseconds = &currentseconds;
pin_ptr<double> _secondsleft = &secondsleft;
off_t _currentframe; // type accomodation
off_t _framesleft; // type accomodation
int ret = ::mpg123_position(mh, (off_t)frameoffset, (off_t)bufferedbytes, &_currentframe, &_framesleft, _currentseconds, _secondsleft);
currentframe = _currentframe; // type conversion
framesleft = _framesleft; // type conversion
_secondsleft = nullptr;
_currentseconds = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}
#pragma region Volume and Equalizer
/// \defgroup mpg123_voleq mpg123 volume and equalizer
///
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_eq(mpg123clr::mpg::channels channel, int band, double fval)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_eq(mh, (mpg123_channels)channel, band, fval);
}
double mpg123clr::mpg123::mpg123_geteq(mpg123clr::mpg::channels channel, int band)
{
return ::mpg123_geteq(mh, (mpg123_channels)channel, band);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_reset_eq(void)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_reset_eq(mh);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_volume(double volume)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_volume(mh, volume);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_volume_change(double change)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_volume_change(mh, change);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_getvolume([Out] double% basevol, [Out] double% really, [Out] double% rva_db)
{
pin_ptr<double> _basevol = &basevol;
pin_ptr<double> _really = &really;
pin_ptr<double> _rva_db = &rva_db;
int ret = ::mpg123_getvolume(mh, _basevol, _really, _rva_db);
_rva_db = nullptr;
_really = nullptr;
_basevol = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}
#pragma endregion -Volume and Equalizer
#pragma region Status and Information
// \defgroup mpg123_status mpg123 status and information
//
//
//
// The "proper" way to manage structs...
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_safeinfo([Out]mpeg_frameinfo^% finfo)
{
// "out" our return reference and grab some memory
finfo = gcnew mpeg_frameinfo;
IntPtr pp = Marshal::AllocHGlobal(Marshal::SizeOf(finfo));
// get the info
// could cast away...
// int ret = mpg123_info(mh, reinterpret_cast<mpg123_frameinfo*>((int)pp));
// int ret = mpg123_info(mh, static_cast<mpg123_frameinfo*>((void*)pp));
// or let the compiler decide...
int ret = ::mpg123_info(mh, (mpg123_frameinfo*)(void*)pp);
// marshal data into return object and free temporary memory
Marshal::PtrToStructure(pp, finfo);
Marshal::FreeHGlobal(pp);
return (mpg123clr::mpg::ErrorCode) ret;
}
// The "efficient" way to manage structs...
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_info([Out]mpeg_frameinfo^% finfo)
{
finfo = gcnew mpeg_frameinfo;
pin_ptr<mpg123clr::mpg::mpeg_version> _ptr = &finfo->version;
// According to SizeOf...
// The unmanaged and managed sizes of an object can differ, this would imply
// that the memory layout for each would also be different, which would indicate
// that using a ptr, derived from a ptr-to-a-managed type, in unmanaged code could
// have unforseen results.
//
// In non-homogenous structs (like mpg123text) it can lead to corrupted CLR stack.
// In homogenous structs (like finfo) it appears to be "managable".
//
// However, until it fails it'll do... and it's much faster (see mpg123_safeinfo(...)).
// WARNING:
// The epitome of "unsafe" as defined by CLR (using unmanaged pointers).
// If we start to get CLR stack corruptions - check here first! (see SafeInfo for "safe" managed version)
int ret = ::mpg123_info(mh, (mpg123_frameinfo*)_ptr);
_ptr = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}
size_t mpg123clr::mpg123::mpg123_safe_buffer(void)
{
return ::mpg123_safe_buffer();
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_scan(void)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_scan(mh);
}
long long mpg123clr::mpg123::mpg123_length(void)
{
return ::mpg123_length(mh);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_set_filesize(long long size)
{
return (mpg123clr::mpg::ErrorCode) ::mpg123_set_filesize(mh, (off_t)size);
}
double mpg123clr::mpg123::mpg123_tpf(void)
{
return ::mpg123_tpf(mh);
}
long mpg123clr::mpg123::mpg123_clip(void)
{
return ::mpg123_clip(mh);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_getstate(mpg123clr::mpg::state key, [Out] int% val, [Out] double% fval)
{
pin_ptr<int> _val = &val;
pin_ptr<double> _fval = &fval;
int ret = ::mpg123_getstate(mh, (mpg123_state)key, (long*) _val, _fval);
_fval = nullptr;
_val = nullptr;
return (mpg123clr::mpg::ErrorCode) ret;
}
#pragma endregion -Status and Information
#pragma region Metadata Handling
// \defgroup mpg123_metadata mpg123 metadata handling
//
// Functions to retrieve the metadata from MPEG Audio files and streams.
// Also includes string handling functions.
//
mpg123clr::id3::id3check mpg123clr::mpg123::mpg123_meta_check(void)
{
return (mpg123clr::id3::id3check ) ::mpg123_meta_check(mh);
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_id3([Out]id3::mpg123id3v1^% v1, [Out]id3::mpg123id3v2^% v2)
{
mpg123_id3v1* pv1;
mpg123_id3v2* pv2;
// doc says "pv1 and pv2 may be set to NULL when there is no corresponding data."
// they may also be set to point to empty structure...
int ret = ::mpg123_id3(mh, &pv1, &pv2);
v1 = gcnew mpg123clr::id3::mpg123id3v1(pv1);
v2 = gcnew mpg123clr::id3::mpg123id3v2(pv2);
return (mpg123clr::mpg::ErrorCode) ret;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_icy([Out]IntPtr% icy_meta)
{
char* _icy_meta;
int ret = ::mpg123_icy(mh, &_icy_meta);
icy_meta = (IntPtr) _icy_meta;
return (mpg123clr::mpg::ErrorCode) ret;
}
array<unsigned char>^ mpg123clr::mpg123::mpg123_icy2utf8(IntPtr icy_text)
{
// TODO: Do we really need this?
// char* putf8 = mpg123_icy2utf8(const_cast<char*>(reinterpret_cast<char*>(icy_text.ToPointer())));
// Or is this adequate?
char* putf8 = ::mpg123_icy2utf8((const char*)(void*) icy_text);
// WARN 4267 - clr limited to 32bit-length-size arrays!!
array<unsigned char>^ ary = gcnew array<unsigned char>((int)strlen(putf8));
Marshal::Copy((IntPtr)putf8, ary, 0, ary->Length);
free(putf8);
return ary;
}
#pragma endregion -Metadata Handling
#pragma region Low Level I/O
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_replace_buffer(IntPtr data, size_t size)
{
// "data" buffer should be fixed BEFORE calling this function.
// TODO: to cast or not to cast??
// return (mpg123clr::mpg::ErrorCode) mpg123_replace_buffer(mh, reinterpret_cast<unsigned char*>(data.ToPointer()), size);
return (mpg123clr::mpg::ErrorCode) ::mpg123_replace_buffer(mh, (unsigned char*)(void*) data, size);
}
size_t mpg123clr::mpg123::mpg123_outblock(void)
{
return ::mpg123_outblock(mh);
}
void mpg123clr::mpg123::_ReplaceReader(void)
{
if ((readDel == r_readDel) && (seekDel == r_seekDel)
&& (readHDel == r_readHDel) && (seekDel == r_seekHDel) && (cleanHDel == r_cleanHDel)) return;
// readDel and seekDel are "keep alive" fields that prevent GC of the delegates.
// the underlying function pointers no not require "pinning".
// Note: most examples use GCHandle::Alloc to "pin" the delegate but this is usually to prevent GC
// outside of function scope and is not strictly necessary here since readDel and seekDel never go
// out of scope.
// See MS: c++, How to: Marshal Callbacks and Delegates Using C++ Interop
// for more details.
readDel = r_readDel;
seekDel = r_seekDel;
readHDel = r_readHDel;
seekHDel = r_seekHDel;
cleanHDel = r_cleanHDel;
// just for clarity
typedef off_t (_cdecl* SEEKCB)(int, off_t, int);
typedef ssize_t (_cdecl* READCB)(int, void*, size_t);
typedef off_t (_cdecl* HSEEKCB)(void*, off_t, int);
typedef ssize_t (_cdecl* HREADCB)(void*, void*, size_t);
typedef void (_cdecl* HCLEANCB)(void*);
// NOTE: GetFunctionPointerForDelegate doesn't like nullptr
// NOTE: I'm not suggesting that replace_reader and replace_reader_handle should be
// intermingled, just trying to maintain a clean stack
if (!useHandleReplacement)
{
if (lastReplacementWasHandle)
::mpg123_replace_reader_handle(mh, nullptr, nullptr, nullptr);
::mpg123_replace_reader(
mh,
(readDel != nullptr) ? (READCB)(Marshal::GetFunctionPointerForDelegate(readDel)).ToPointer() : nullptr,
(seekDel != nullptr) ? (SEEKCB)(Marshal::GetFunctionPointerForDelegate(seekDel)).ToPointer() : nullptr
);
}
else
{
if (!lastReplacementWasHandle) // can give redundant call on first use - microscopically inefficient - not catastrophic
::mpg123_replace_reader(mh, nullptr, nullptr);
::mpg123_replace_reader_handle(
mh,
(readHDel != nullptr) ? (HREADCB)(Marshal::GetFunctionPointerForDelegate(readHDel)).ToPointer() : nullptr,
(seekHDel != nullptr) ? (HSEEKCB)(Marshal::GetFunctionPointerForDelegate(seekHDel)).ToPointer() : nullptr,
(cleanHDel != nullptr) ? (HCLEANCB)(Marshal::GetFunctionPointerForDelegate(cleanHDel)).ToPointer() : nullptr
);
}
lastReplacementWasHandle = useHandleReplacement;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_replace_reader(ReadDelegate^ r_read, SeekDelegate^ r_lseek)
{
// save temporary delegates to be implemented at next 'Open'
r_readDel = r_read;
r_seekDel = r_lseek;
r_readHDel = nullptr;
r_seekHDel = nullptr;
r_cleanHDel = nullptr;
useHandleReplacement = false;
return mpg123clr::mpg::ErrorCode::ok;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_replace_reader_handle(ReadHandleDelegate^ rh_read, SeekHandleDelegate^ rh_lseek, CleanupHandleDelegate^ rh_clean)
{
// save temporary delegates to be implemented at next 'Open'
r_readHDel = rh_read;
r_seekHDel = rh_lseek;
r_cleanHDel = rh_clean;
r_readDel = nullptr;
r_seekDel = nullptr;
useHandleReplacement = true;
return mpg123clr::mpg::ErrorCode::ok;
}
#pragma endregion -Low Level I/O
#pragma region MS Unicode Extension
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_topen(String^ path)
{
_ReplaceReader(); // mpg123_tOpen will replace its own reader, this is just for consistency
const _TCHAR* chars = (const _TCHAR*)(Marshal::StringToHGlobalUni(path)).ToPointer();
int ret = ::mpg123_topen(mh, chars);
Marshal::FreeHGlobal(IntPtr((void*)chars));
return (mpg123clr::mpg::ErrorCode) ret;
}
mpg123clr::mpg::ErrorCode mpg123clr::mpg123::mpg123_tclose(void)
{
// Not sure if t_close calls Cleanup (it shouldn't since t_open substitutes its own readers)
int ret = ::mpg123_tclose(mh);
// Fairly sure replace_reader_handle, topen and tclose are incompatible, just for consistency
// See GCHandle.Free - caller must ensure Free called only once for a given handle.
if (userObjectHandle.IsAllocated) userObjectHandle.Free();
return (mpg123clr::mpg::ErrorCode) ret;
}
#pragma endregion -MS Unicode Extension

View File

@ -0,0 +1,953 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009-2011 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2011 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
1.10.0.0 30-Nov-09 release match - added mpg123_feature (mb)
1.12.0.0 14-Apr-10 release match - added framebyframe and "handle" ReplaceReaders (mb)
1.13.0.0 13-Jan-11 release match - added encsize (mb)
*/
#pragma once
#pragma warning(disable : 4635)
#include "mpg123.h"
#pragma warning(default : 4635)
#include "enum.h"
#include "error.h"
#include "id3v1.h"
#include "id3v2.h"
#include "advanced.h"
#include <io.h> // for posix proof of concept only
#include <string>
#include <iostream>
#include <stdarg.h>
#include <vcclr.h>
using namespace std;
using namespace System;
using namespace System::IO;
using namespace System::Runtime::InteropServices;
namespace mpg123clr
{
// Recommended usage when creating reference type on the managed heap (not using stack semantics
// for reference types...) [see (Microsoft) Destructors and Finalizers in Visual C++]
//
// C++/CLI
// A myA;
// // use myA here
//
// Equivalent user code:
//
// A ^ myA = gcnew A;
// try { /* use myA here */ } finally { delete myA; }
//
//
// C# (from wikipedia)
// using(A myA = new A()) { /* Use myA here */ }
// Compiler calls myA.Dispose(), in a "finally" of a "try/finally" block
//
// Equivalent user code:
//
// A myA = new myA();
// try { /* Use myA here */ } finally { myA.Dispose(); }
//
// Otherwise Finalizer will be nondeterministically called by GC
///<summary>Wrapper for libmpg123.</summary>
public ref class mpg123
{
#pragma region Callback and Delegate
// Functional callbacks for low-level I/O ReplaceReader
public:
///<summary>Seek Delegate.
///<para>Callback seek function to provide low-level stream access to posix-like seek operations.
/// Requires user supplied static callback fuction of form off_t fn(int fd, off_t offset, int origin).</para>
///<para>Returns callee supplied resulting offset from start of file or -1 for error.</para>
///</summary>
///<param name="fd">Contains file descriptor.</param>
///<param name="offset">Contains required offset value.</param>
///<param name="origin">Contains relative origin value (whence) applied to offset.</param>
///<returns>Callee supplied resulting offset from start of file or -1 for error.</returns>
[UnmanagedFunctionPointer(CallingConvention::Cdecl)]
delegate off_t SeekDelegate(int fd, off_t offset, int origin);
[UnmanagedFunctionPointer(CallingConvention::Cdecl)]
delegate off_t SeekHandleDelegate(void* handle, off_t offset, int origin);
///<summary>Read Delegate.
///<para>Callback read function to provide low-level stream access to posix-like read operations.
/// Requires user supplied static callback fuction of form ssize_t fn(int fd, void* buffer, size_t size).</para>
///<para>Returns callee supplied resulting actual number of bytes read or -1 for error.</para>
///</summary>
///<param name="fd">Contains file descriptor.</param>
///<param name="offset">Contains address of buffer.</param>
///<param name="origin">Contains size of buffer.</param>
///<returns>Callee supplied resulting actual number of bytes read or -1 for error.</returns>
[UnmanagedFunctionPointer(CallingConvention::Cdecl)]
delegate ssize_t ReadDelegate(int fd, void* buffer, size_t size);
[UnmanagedFunctionPointer(CallingConvention::Cdecl)]
delegate ssize_t ReadHandleDelegate(void* handle, void* buffer, size_t size);
[UnmanagedFunctionPointer(CallingConvention::Cdecl)]
delegate void CleanupHandleDelegate(void* handle);
private:
// Delegate "keep alive" fields to prevent GC of delegate.
SeekDelegate^ seekDel;
ReadDelegate^ readDel;
SeekHandleDelegate^ seekHDel;
ReadHandleDelegate^ readHDel;
CleanupHandleDelegate^ cleanHDel;
GCHandle userObjectHandle;
// Temporary delegate store, replacereader action is defered until next stream 'open' action
SeekDelegate^ r_seekDel;
ReadDelegate^ r_readDel;
SeekHandleDelegate^ r_seekHDel;
ReadHandleDelegate^ r_readHDel;
CleanupHandleDelegate^ r_cleanHDel;
bool useHandleReplacement;
bool lastReplacementWasHandle;
#pragma endregion -Callback and Delegate
#pragma region Library and Handle Setup
// \defgroup mpg123_init mpg123 library and handle setup
//
// Functions to initialise and shutdown the mpg123 library and handles.
// The parameters of handles have workable defaults, you only have to tune them when you want to tune something;-)
// Tip: Use a RVA setting...
//
private:
mpg123_handle* mh;
internal:
mpg123(mpg123_handle* mh);
protected:
///<summary>Finalizer.
///<para>Cleanly handles mpg123_delete of internal (unmanaged) mpg123 handle.</para></summary>
/// Implementation of CLR Finalize().
!mpg123(void);
public:
///<summary>Constructor.
///<para>Only creates mpg123 object, you must call one of the New() methods to obtain a decoder library handle.</para>
///<para>Recommended usage: using(mpg123 obj = new mpg123()){ use obj here }</para></summary>
mpg123(void);
///<summary>Destructor. Used for final object deletion.
///<para>Calls finalizer for clean disposal of internal (unmanaged) library handles.</para>
///</summary>
/// Implementation of CLR Dispose().
/// ~Destructor and !Finalizer are the prescribed implementation of Dispose() and Finalize().
/// See Destructors and Finalizers in Visual C++
~mpg123(void);
///<summary>(mpg123_init) Function to initialise the mpg123 library.
///<para>This function is not thread-safe. Call it exactly once per process, before any other (possibly threaded) work with the library.</para>
///<para>Returns MPG123_OK if successful, otherwise an error number.</para></summary>
///<returns>Returns MPG123_OK if successful, otherwise an error number.</returns>
static mpg123clr::mpg::ErrorCode __clrcall mpg123_init(void);
///<summary>(mpg123_exit) Function to close down the mpg123 library.
///<para>This function is not thread-safe. Call it exactly once per process, before any other (possibly threaded) work with the library.</para></summary>
static void __clrcall mpg123_exit(void);
///<summary>(mpg123_new) Obtain am mpg123 handle with designated decoder.
///<para>Returns MPG123_OK or applicable error code.</para>
///</summary>
///<param name="decoder">Name of the decoder to attach.</param>
///<returns>MPG123_OK or applicable error code.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_new(String ^ decoder);
///<summary>Obtain an mpg123 handle with default decoder.
///<para>Returns MPG123_OK or applicable error code.</para>
///</summary>
///<returns>MPG123_OK or applicable error code.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_new(void);
///<summary>Obtain am mpg123 handle with default decoder.
///<para>Allows use of common parms object for multiple connections.</para>
///<para>Returns MPG123_OK or applicable error code.</para>
///</summary>
///<param name="par">Supplied Advanced parameter object.</param>
///<returns>MPG123_OK or applicable error code.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_parnew(mpg123clr::advpars^ par);
///<summary>Obtain am mpg123 handle with designated decoder.
///<para>Allows use of common parms object for multiple connections.</para>
///<para>Returns MPG123_OK or applicable error code.</para>
///</summary>
///<param name="par">Supplied Advanced parameter object.</param>
///<param name="decoder">Name of the decoder to attach.</param>
///<returns>MPG123_OK or applicable error code.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_parnew(mpg123clr::advpars^ par, String^ decoder);
///<summary>(mpg123_delete) Delete internal mpg123 handle.
///<para>The framework will dispose of the object when it goes out of scope - you do not need to explicitly call Delete().
/// However it is available to allow reuse of this object with successive handles - using New()/Delete() pairs.</para>
///</summary>
void __clrcall mpg123_delete(void);
public:
///<summary>Set a specific parameter value.
///<para>Returns MPG123_OK or applicable error code.</para>
///</summary>
///<param name="type">Define the parameter to be set. (parms enumeration)</param>
///<param name="val">Integer value to apply.</param>
///<param name="fval">Real value to apply.</param>
///<returns>MPG123_OK or applicable error code.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_param(mpg123clr::mpg::parms type, int val, double fval);
///<summary>Get a specific parameter value.
///<para>Returns MPG123_OK or applicable error code.</para>
///</summary>
///<param name="type">Define the parameter to get. (parms enumeration)</param>
///<param name="val">Returned integer value.</param>
///<param name="fval">Returned real value.</param>
///<returns>MPG123_OK or applicable error code.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_getparam(mpg123clr::mpg::parms type, [Out] int% val, [Out] double% fval);
///<summary>Query libmpg123 feature.
///<para>Returns 1 for success, 0 for unimplemented feature.</para>
///</summary>
///<param name="key">Define the feature to query. (feature_set enumeration)</param>
///<returns>1 for success, 0 for unimplemented feature.</returns>
static int __clrcall mpg123_feature(mpg123clr::mpg::feature_set key);
#pragma endregion -Library and Handle Setup
#pragma region Internal Helpers
internal:
array<String^>^ StringArrayFromPtr(const char ** ptr);
#pragma endregion -Internal Helpers
#pragma region Error Handling
// \defgroup mpg123_error mpg123 error handling
//
// Functions to get text version of the error numbers and an enumeration
// of the error codes returned by libmpg123.
//
// Most functions operating on a mpg123_handle simply return MPG123_OK on success and MPG123_ERR on failure (setting the internal error variable of the handle to the specific error code).
// Decoding/seek functions may also return message codes MPG123_DONE, MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!).
// The positive range of return values is used for "useful" values when appropriate.
//
public:
///<summary>Get string describing what error has occured in the context of this object.
///<para>When a function operating on an mpg123 handle returns MPG123_ERR, you should use this function to check the actual reason.</para>
///<para>This function will catch mh == NULL and return the message for MPG123_BAD_HANDLE.</para>
///<para>Returns text representation of last error (incl. None) encountered by this object.</para>
///</summary>
///<returns>Text representation of last error (incl. None) encountered by this object.</returns>
String^ __clrcall mpg123_strerror(void);
///<summary>Get last error encountered in the context of this object.
///<para>When a function operating on an mpg123 handle returns MPG123_ERR, you should use this function to check the actual reason.</para>
///<para>This function will catch internal handle == NULL and return MPG123_BAD_HANDLE.</para>
///<para>Returns ErrorCode for last encountered error.</para>
///</summary>
///<returns>The plain errcode intead of a string of last error (incl. None) encountered by this object.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_errcode(void);
#pragma endregion -Error Handling
#pragma region Decoder Selection
// \defgroup mpg123_decoder mpg123 decoder selection
//
// Functions to list and select the available decoders.
// Perhaps the most prominent feature of mpg123: You have several (optimized) decoders to choose from (on x86 and PPC (MacOS) systems, that is).
//
public:
///<summary>Obtain list of generally available decoder names (plain 8bit ASCII).
///<para>Retuns a string array of generally available decoder names (plain 8bit ASCII).</para>
///</summary>
///<returns>A string array of generally available decoder names (plain 8bit ASCII).</returns>
array<String^>^ __clrcall mpg123_decoders(void);
///<summary>Obtain list of the decoders supported by the CPU (plain 8bit ASCII).
///<para>Returns a string array of the decoders supported by the CPU (plain 8bit ASCII).</para>
///</summary>
///<returns>A string array of the decoders supported by the CPU (plain 8bit ASCII).</returns>
array<String^>^ __clrcall mpg123_supported_decoders(void);
///<summary>Select the decoder to use.
///<para>Returns MPG123_OK or applicable error code.</para>
///</summary>
///<param name="name">Name of the required decoder. (should be in SupportedDecoders list)</param>
///<returns>MPG123_OK or applicable error code.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_decoder(String^ name);
///<summary>Get the currently active decoder engine name.
///<para>The active decoder engine can vary depening on output constraints, mostly non-resampling, integer output is accelerated via 3DNow and Co.
/// but for other modes a fallback engine kicks in.</para>
///<para>Note that this can return a decoder that is ony active in the hidden and not available as decoder choice from the outside.</para>
///<para>Returns the decoder name or String.Empty on error.</para>
///</summary>
///<returns>The decoder name or String.Empty on error.</returns>
String^ __clrcall mpg123_current_decoder(void);
#pragma endregion -Decoder Selection
#pragma region Output Audio Format
// \defgroup mpg123_output mpg123 output audio format
//
// Functions to get and select the format of the decoded audio.
//
public:
///<summary>Get an array of supported standard sample rates.
///<para>These are possible native sample rates of MPEG audio files.
/// You can still force mpg123 to resample to a different one, but by default you will only get audio in one of these samplings.</para>
///<para>Returns array of sample rates.</para>
///</summary>
///<returns>An array of sample rates.</returns>
array<long>^ __clrcall mpg123_rates(void);
///<summary>An array of supported audio encodings.
///<para>An audio encoding is one of the fully qualified members of mpg.enc</para>
///<para>Returns array of supported Encodings.</para>
///</summary>
///<returns>An array of supported Encodings.</returns>
array<mpg123clr::mpg::enc>^ __clrcall mpg123_encodings(void);
///<summary>Get the size (in bytes) of one mono sample of the named encoding.
///<para>Returns the positive size of encoding in bytes, 0 on invalid encoding.</para>
///</summary>
///<param name="encoding">The encoding value to analyze.</param>
///<returns>The positive size of encoding in bytes, 0 on invalid encoding.</returns>
static int __clrcall mpg123_encsize(mpg123clr::mpg::enc encoding);
///<summary>Configure mpg123 to accept no output format at all.
///<para>Use to clear default parameters prior to applying specific settings.</para>
///<para>Returns MPG123 error codes.</para>
///</summary>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_format_none(void);
///<summary>Configure mpg123 to accept all formats including any custom formats - this is the default.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_format_all(void);
///<summary>Configure detailed output formats.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="rate">Sample rate (Hertz)</param>
///<param name="channels">Combination of channelcount.stereo and channelcount.mono</param>
///<param name="encodings">Combination of accepted encodings for rate and channels e.g. enc.enc_signed16 | enc.enc_ulaw_8 (or 0 for none)</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_format(int rate, mpg123clr::mpg::channelcount channels, mpg123clr::mpg::enc encodings);
///<summary>Get available support for supplied rate and encoding.
///<para>Returns 0 for no support (includes invalid parameters), or combination of channelcount.stereo and channelcount.mono.</para>
///</summary>
///<param name="rate">Sample rate (Hertz)</param>
///<param name="encoding">Combination of accepted encodings for rate and channels e.g. enc.enc_signed16 | enc.enc_ulaw_8 (or 0 for none)</param>
///<returns>Returns 0 for no support (includes invalid parameters), or combination of channelcount.stereo and channelcount.mono.</returns>
mpg123clr::mpg::channelcount __clrcall mpg123_format_support(int rate, mpg123clr::mpg::enc encoding);
///<summary>Get current output format.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="rate">Returns current sample rate (Hertz)</param>
///<param name="channels">Returns combination of channelcount.stereo and channelcount.mono</param>
///<param name="encoding">Returns combination of accepted encodings for rate and channels e.g. enc.enc_signed16 | enc.enc_ulaw_8 (or 0 for none)</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_getformat([Out] int% rate, [Out] mpg123clr::mpg::channelcount% channels, [Out] mpg123clr::mpg::enc% encoding);
#pragma endregion -Output Audio Format
#pragma region File Input and Decoding
// \defgroup mpg123_input mpg123 file input and decoding
//
// Functions for input bitstream and decoding operations.
// Decoding/seek functions may also return message codes MPG123_DONE, MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!).
//
public:
///<summary>Open and prepare to decode the file specified by ANSI filename.
///<para>This does not open HTTP urls; the mpg library contains no networking code.
/// If you want to decode internet streams, use Open(fd) or Open().</para>
///
///<para>Returns MPG123 error codes</para>
///</summary>
///<param name="path">ANSI file path. Accepts ANSI path characters. For Unicode paths use tOpen.
/// NOTE: can be used in Unicode environment as long as wide-char codepages are avoided.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_open(String^ path);
///<summary>Use a previously obtained file descriptor as the bitstream input.
///<para>NOTE: Close() will NOT close a file opened with this method.</para>
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="fd">File Descriptor of pre required file.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_open_fd(int fd);
///<summary>Use an opaque handle as bitstream input.
///<para>This works only with the replaced I/O from mpg123_replace_reader_handle()!</para>
///<para>mpg123_close() will call the cleanup callback for your handle (if you gave one).</para>
///<para>Returns MPG123 error codes.</para>
///</summary>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_open_handle(System::Object^ obj);
///<summary>Open a new bitstream and prepare for direct feeding.
///<para>This works together with Decode(); you are responsible for reading and feeding the input bitstream.</para>
///<para>Returns MPG123 error codes.</para>
///</summary>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_open_feed(void);
///<summary>Closes the source, if the library opened it.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_close(void);
///<summary>Open and prepare to decode the file specified by UNICODE (wide-character) filename.
///<para>This does not open HTTP urls; the mpg library contains no networking code.
/// If you want to decode internet streams, use Open(fd) or Open().</para>
///
///<para>Returns MPG123 error codes</para>
///</summary>
///<param name="path">UNICODE wide-character file path. See also ANSI Open(path).</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_topen(String^ path);
///<summary>Closes the file opened with tOpen.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_tclose(void);
///<summary>Read from stream and decode.
///<para>Equivalent to mpg123_read(,,,)</para>
///<para>Returns MPG123 error codes. (watch out for MPG123_DONE and friends!)</para>
///</summary>
///<param name="buffer">Supplied buffer in which to return audio output data.</param>
///<param name="count">Returns number of actual audio output bytes returned.</param>
///<returns>MPG123 error codes. (watch out for MPG123_DONE and friends!)</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_read(array<unsigned char>^ buffer, [Out] size_t% count);
///<summary>Read from stream and decode.
///<para>Equivalent to mpg123_read(,,,) but modified to better support CLR Stream.Read</para>
///<para>Returns MPG123 error codes. (watch out for MPG123_DONE and friends!)</para>
///</summary>
///<param name="buffer">Supplied buffer in which to return audio output data.</param>
///<param name="offset">Offset in buffer at which to begin storing data.</param>
///<param name="size">Maximum number of bytes to return.</param>
///<param name="count">Returns number of actual audio output bytes returned.</param>
///<returns>MPG123 error codes. (watch out for MPG123_DONE and friends!)</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_read(array<unsigned char>^ buffer, size_t offset, size_t size, [Out] size_t% count);
///<summary>Feed data for a stream that has been opened with Open() - (mpg123_open_feed).
///<para>Equivalent to mpg123_feed(...), it's give and take: You provide the bytestream, mpg123 gives you the decoded samples.</para>
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="inbuffer">Input buffer.</param>
///<param name="size">Number of input bytes.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_feed(array<unsigned char>^ inbuffer, size_t size);
///<summary>Decode MPEG Audio from inmemory to outmemory.
///<para>This is very close to a drop-in replacement for old mpglib.</para>
///<para>When you give zero-sized output buffer the input will be parsed until
/// decoded data is available. This enables you to get MPG123_NEW_FORMAT (and query it)
/// without taking decoded data.</para>
///<para>Think of this function being the union of Read() and Feed() (which it actually is, sort of;-).
/// You can actually always decide if you want those specialized functions in separate steps or one call this one here.</para>
///<para>Returns MPG123 error codes. (watch out especially for MPG123_NEED_MORE)</para>
///</summary>
///<param name="inbuffer">Input buffer.</param>
///<param name="insize">Number of input bytes.</param>
///<param name="outbuffer">Supplied buffer in which to return audio output data.</param>
///<param name="outsize">Size in bytes of buffer.</param>
///<param name="count">Returns number of actual audio output bytes returned.</param>
///<returns>MPG123 error codes. (watch out especially for MPG123_NEED_MORE)</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_decode(array<unsigned char>^ inbuffer, size_t insize, array<unsigned char>^ outbuffer, size_t outsize, [Out] size_t% count);
///<summary>Decode next MPEG frame to internal buffer or read a frame and return after setting a new format.
///<para>Returns MPG123 error codes. (watch out for MPG123_NEW_FORMAT)</para>
///</summary>
///<param name="num">Returns current frame offset.</param>
///<param name="audio">Returns pointer to internal buffer to read the decoded audio from. (Can be NULL for NEW_FORMAT)</param>
///<param name="count">Returns number of actual audio output bytes ready in the buffer.</param>
///<returns>MPG123 error codes. (watch out for MPG123_NEW_FORMAT)</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_decode_frame([Out] off_t% num, [Out] IntPtr% audio, [Out] size_t% count);
///<summary>Decode current MPEG frame to internal buffer.
///<para>Use with mpg123_framebyframe_next to progress through data.</para>
///<para>Warning: This is experimental API that might change in future releases!
/// Please watch mpg123 development closely when using it.</para>
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="num">Returns current frame offset.</param>
///<param name="audio">Returns pointer to internal buffer to read the decoded audio from. (Can be NULL for NEW_FORMAT)</param>
///<param name="bytes">Returns number of actual audio output bytes ready in the buffer.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_framebyframe_decode([Out] off_t% num, [Out] IntPtr% audio, [Out] size_t% bytes);
///<summary>Find, read and parse the next mp3 frame.
///<para>Use with mpg123_framebyframe_decode to obtain frame data.</para>
///<para>Warning: This is experimental API that might change in future releases!
/// Please watch mpg123 development closely when using it.</para>
///<para>Returns MPG123 error codes. (watch out for MPG123_NEW_FORMAT)</para>
///</summary>
///<returns>MPG123 error codes. (watch out for MPG123_NEW_FORMAT)</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_framebyframe_next(void);
#pragma endregion -File Input and Decoding
#pragma region Position and Seeking
// \defgroup mpg123_seek mpg123 position and seeking
//
// Functions querying and manipulating position in the decoded audio bitstream.
// The position is measured in decoded audio samples, or MPEG frame offset for the specific functions.
// If gapless code is in effect, the positions are adjusted to compensate the skipped padding/delay - meaning, you should not care about that at all and just use the position defined for the samples you get out of the decoder;-)
// The general usage is modelled after stdlib's ftell() and fseek().
// Especially, the whence parameter for the seek functions has the same meaning as the one for fseek() and needs the same constants from stdlib.h:
// - SEEK_SET: set position to (or near to) specified offset
// - SEEK_CUR: change position by offset from now
// - SEEK_END: set position to offset from end
//
// Note that sample-accurate seek only works when gapless support has been enabled at compile time; seek is frame-accurate otherwise.
// Also, really sample-accurate seeking (meaning that you get the identical sample value after seeking compared to plain decoding up to the position) is only guaranteed when you do not mess with the position code by using MPG123_UPSPEED, MPG123_DOWNSPEED or MPG123_START_FRAME. The first two mainly should cause trouble with NtoM resampling, but in any case with these options in effect, you have to keep in mind that the sample offset is not the same as counting the samples you get from decoding since mpg123 counts the skipped samples, too (or the samples played twice only once)!
// Short: When you care about the sample position, don't mess with those parameters;-)
// Also, seeking is not guaranteed to work for all streams (underlying stream may not support it).
//
public:
///<summary>Get the current position in samples. On the next read, you'd get that sample.
///<para>Returns the current sample position.</para>
///</summary>
///<returns>The current sample position.</returns>
long long __clrcall mpg123_tell();
///<summary>Get the frame number that the next read will give you data from.
///<para>Returns the current frame number position.</para>
///</summary>
///<returns>The current frame number position.</returns>
long long __clrcall mpg123_tellframe();
///<summary>Get the current byte offset in the input stream.
///<para>Returns the current byte offset.</para>
///</summary>
///<returns>The current byte offset.</returns>
long long __clrcall mpg123_tell_stream();
///<summary>Seek to a desired sample offset.
///<para>Returns the resulting offset >= 0 or error/message code.</para>
///</summary>
///<param name="offset">The distance to move.</param>
///<param name="origin">(whence) The relative location to move from.(SeekOrigin.Begin, SeekOrigin.Current, SeekOrigin.End)</param>
///<returns>Returns the resulting offset >= 0 or error/message code.</returns>
long long __clrcall mpg123_seek(long long offset, SeekOrigin origin);
///<summary>Seek to a desired sample offset in data feeding mode.
///<para>This just prepares things to be right only if you ensure that the next chunk of input data will be from input_offset byte position.</para>
///<para>Returns the resulting offset >= 0 or error/message code.</para>
///</summary>
///<param name="offset">The distance to move.</param>
///<param name="origin">(whence) The relative location to move from.(SeekOrigin.Begin, SeekOrigin.Current, SeekOrigin.End)</param>
///<param name="input_offset">Returns the position it expects to be at the next time data is fed to Decode().</param>
///<returns>Returns the resulting offset >= 0 or error/message code.</returns>
long long __clrcall mpg123_feedseek(long long offset, SeekOrigin origin, [Out] long long% input_offset);
///<summary>Seek to a desired MPEG frame index.
///<para>Returns the resulting offset >= 0 or error/message code.</para>
///</summary>
///<param name="frameoffset">The numberof frames to move.</param>
///<param name="origin">(whence) The relative location to move from.(SEEK_SET, SEEK_CUR or SEEK_END)</param>
///<returns>Returns the resulting offset >= 0 or error/message code.</returns>
long long __clrcall mpg123_seek_frame(long long frameoffset, SeekOrigin origin);
///<summary>Seek to an absolute MPEG frame offset corresponding to an offset in seconds.
///<para>This assumes that the samples per frame do not change in the file/stream, which is a good assumption for any sane file/stream only.</para>
///<para>Returns the resulting offset >= 0 or error/message code.</para>
///</summary>
///<param name="seconds">The absolute time offset required.</param>
///<returns>Returns the resulting offset >= 0 or error/message code.</returns>
long long __clrcall mpg123_timeframe(double seconds);
///<summary>Get a copy of the frame index table. Somewhat equivalent to mpg123_index(,,).
///<para>The library requests not to modify table values. Since this is a copy, modification is meaningless - it has no effect on library routines.</para>
///<para>NOTE: The returned index table value types are Int64 independant of library build.</para>
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="index">Returns array of source file position offsets (not output samples). Length of array is equivalent to mpg123_index "fill" parameter.</param>
///<param name="step">Returns number of MPEG frames per index entry.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_index([Out] array<long long>^% index, [Out] long long% step);
///<summary>Get a pointer to the frame index table. Equivalent to mpg123_index(,,).
///<para>Do not modify table values unless you really know what you are doing!</para>
///<para>NOTE: The returned index table value types may be Int32 or Int64 depending on library build.</para>
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="indexarr">Returns pointer to source file position offset index array (not output samples).</param>
///<param name="step">Returns number of MPEG frames per index entry.</param>
///<param name="fill">Returns number of recorded index offsets; size of the array.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_index([Out] IntPtr% indexarr, [Out] long long% step, [Out] size_t% fill);
///<summary>Get information about current and remaining frames/seconds. Equivalent to mpg123_position(,,,,,,).
///<para>WARNING: This function is there because of special usage by standalone mpg123 and may be removed in the final version of libmpg123!</para>
///<para>You provide an offset (in frames) from now and a number of output bytes
/// served by libmpg123 but not yet played. You get the projected current frame
/// and seconds, as well as the remaining frames/seconds. This does _not_ care
/// about skipped samples due to gapless playback.</para>
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="frameoffset">Offset (in frames) from now.</param>
///<param name="bufferedbytes">Number of output bytes served by library but not yet played.</param>
///<param name="currentframe">Returns projected current frame.</param>
///<param name="framesleft">Returns projected frames remaining.</param>
///<param name="currentseconds">Returns projected current seconds.</param>
///<param name="secondsleft">Returns projected seconds remaining.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_position(long long frameoffset, long long bufferedbytes,
[Out] long long% currentframe, [Out] long long% framesleft,
[Out] double% currentseconds, [Out] double% secondsleft);
#pragma endregion -Position and Seeking
#pragma region Volume and Equalizer
// \defgroup mpg123_voleq mpg123 volume and equalizer
//
public:
///<summary>Set the 32 Band Audio Equalizer settings.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="channel">Can be MPG123_LEFT, MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for both. (enum mpg.channels)</param>
///<param name ="band">The equaliser band to change (from 0 to 31)</param>
///<param name="fval">The (linear) adjustment factor to be applied.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_eq(mpg123clr::mpg::channels channel, int band, double fval);
///<summary>Get the 32 Band Audio Equalizer settings.
///<para>Rreturns the (linear) adjustment factor.</para>
///</summary>
///<param name="channel">Can be MPG123_LEFT, MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for (arithmetic mean of) both. (enum mpg.channels)</param>
///<param name="band">The equaliser band to get (from 0 to 31)</param>
///<return>The (linear) adjustment factor.</return>
double __clrcall mpg123_geteq(mpg123clr::mpg::channels channel, int band);
///<summary>Reset the 32 Band Audio Equalizer settings to flat.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_reset_eq();
///<summary>Set the absolute output volume including the RVA setting.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="volume">The (linear) adjustment factor to be applied, volume &lt; 0 just applies (a possibly changed) RVA setting.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_volume(double volume);
///<summary>Adjust output volume including the RVA setting.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="change">The (linear) adjustment factor to be applied.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_volume_change(double change);
///<summary>Get the current volume setting, the actual value due to RVA, and the RVA adjustment itself.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="basevol">Returns the current linear volume factor. (not percent)</param>
///<param name="really">Returns the actual linear volume factor due to RVA. (not percent)</param>
///<param name="rva_db">Returns the RVA adjustment in decibels.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_getvolume([Out] double% basevol, [Out] double% really, [Out] double% rva_db);
#pragma endregion -Volume and Equalizer
#pragma region Status and Information
// \defgroup mpg123_status mpg123 status and information
//
//
//
[StructLayout(LayoutKind::Sequential, CharSet=CharSet::Ansi, Pack=1)]
ref struct mpeg_frameinfo
{
mpg123clr::mpg::mpeg_version version; // The MPEG version (1.0/2.0/2.5).
int layer; // The MPEG Audio Layer (MP1/MP2/MP3).
long rate; // The sampling rate in Hz.
mpg123clr::mpg::mpeg_mode mode; // The audio mode (Mono, Stereo, Joint-stero, Dual Channel).
int mode_ext; // The mode extension bit flag.
int framesize; // The size of the frame (in bytes).
mpg123clr::mpg::mpeg_flags flags; // MPEG Audio flag bits.
int emphasis; // The emphasis type.
int bitrate; // Bitrate of the frame (kbps).
int abr_rate; // The target average bitrate.
mpg123clr::mpg::mpeg_vbr vbr; // The VBR mode.
};
///<summary>Get the frame information about the MPEG audio bitstream.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="finfo">Returns the frame information.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_info([Out]mpeg_frameinfo^% finfo);
///<summary>Get the frame information about the MPEG audio bitstream.
///<para>SafeInfo uses "safe" managed structures but is somewhat slower than Info().
/// Recommend using Info() unless it gives specific problems.</para>
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="finfo">Returns the frame information.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_safeinfo([Out]mpeg_frameinfo^% finfo);
///<summary>Get the safe output buffer size for all cases (when you want to replace the internal buffer).
///<para>Returns safe buffer size.</para>
///</summary>
///<returns>Safe buffer size.</returns>
static size_t __clrcall mpg123_safe_buffer(void);
///<summary>Make a full parsing scan of each frame in the file.
///<para>ID3 tags are found. An accurate length value is stored. Seek index will be filled.
/// A seek back to current position is performed.</para>
///<para>This function refuses work when stream is not seekable.</para>
///<para>Returns MPG123 error codes.</para>
///</summary>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_scan(void);
///<summary>Return, if possible, the full (expected) length of current track in samples.
///<para>Returns length (>= 0) or MPG123_ERR if there is no length guess possible. (Multiply by BlockAlign for byte-count)</para>
///</summary>
///<returns>Length (>= 0) or MPG123_ERR if there is no length guess possible. (Multiply by BlockAlign for byte-count)</returns>
long long __clrcall mpg123_length(void);
///<summary>Override the value for file size in bytes.
///<para>Useful for getting sensible track length values in feed mode or for HTTP streams.</para>
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="size">Size to set.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_set_filesize(long long size);
///<summary>Time Per Frame (seconds).
///<para>Returns time per frame in seconds ( &lt; 0 is error ).</para>
///</summary>
///<returns>Time per frame in seconds ( &lt; 0 is error ).</returns>
double __clrcall mpg123_tpf(void);
///<summary>Get and reset the clip count.
///<para>Returns the number of previously encountered clips.</para>
///</summary>
///<returns>The number of previously encountered clips.</returns>
long __clrcall mpg123_clip();
///<summary>Get various current decoder/stream state information.
///<para>Returns MPG123 error codes.</para>
///</summary>
///<param name="key">The key to identify the information to get (enum mpg.state).</param>
///<param name="val">Returns integer values.</param>
///<param name="fval">Returns real values.</param>
///<returns>MPG123 error codes.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_getstate(mpg123clr::mpg::state key, [Out] int% val, [Out] double% fval);
#pragma endregion -Status and Information
#pragma region Metadata Handling
// \defgroup mpg123_metadata mpg123 metadata handling
//
// Functions to retrieve the metadata from MPEG Audio files and streams.
// Also includes string handling functions.
//
// clr - much of the metadata has been relocated to class files for maintainability
// see string.h, text.h, id3v1.h and id3v2.h
//
///<summary>Query if there is (new) meta info, be it ID3 or ICY (or something new in future).
///<para>Returns a combination of flags. (enum id3.id3check)</para>
///</summary>
///<returns>Returns a combination of flags. (enum id3.id3check)</returns>
mpg123clr::id3::id3check __clrcall mpg123_meta_check(void); /* On error (no valid handle) just 0 is returned. */
///<summary>Get ID3 data. Data structures may change on any (next) read/decode function call.
///<para>v1 and/or v2 may be Empty if no corresponding data exists.</para>
///<para>Returns MPG123_OK or MPG123_ERR.</para>
///</summary>
///<param name="v1">Returns mpg123id3v1 data structure containing ID3v1 data (usually from end of file).</param>
///<param name="v2">Returns mpg123id3v2 data structure containing ID3v2 data (usually - but not restricted to - from beginning of file).</param>
///<returns>Returns MPG123_OK or MPG123_ERR.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_id3([Out]id3::mpg123id3v1^% v1, [Out]id3::mpg123id3v2^% v2);
///<summary>Get ICY meta data. Data structure may change on any (next) read/decode function call.
///<para>Icy_meta may be null if no corresponding data exists.</para>
///<para>Returns MPG123_OK or MPG123_ERR.</para>
///</summary>
///<param name="icy_meta">Returns ICY meta data (windows-1252 encoded).</param>
///<returns>Returns MPG123_OK or MPG123_ERR.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_icy([Out]IntPtr% icy_meta); /* same for ICY meta string */
///<summary>Decode from windows-1252 (the encoding ICY metainfo used) to UTF-8.
///<para>Returns byte array of utf8 encoded data.</para>
///</summary>
///<param name="icy_text">ICY meta data in ICY encoding.</param>
///<returns>Returns byte array of utf8 encoded data.</returns>
static array<unsigned char>^ __clrcall mpg123_icy2utf8(IntPtr icy_text);
#pragma endregion -Metadata Handling
#pragma region Advanced Parameter API
// \defgroup mpg123_advpar mpg123 advanced parameter API
//
// Direct access to a parameter set without full handle around it.
// Possible uses:
// - Influence behaviour of library _during_ initialization of handle (MPG123_VERBOSE).
// - Use one set of parameters for multiple handles.
//
// The functions for handling mpg123_pars (mpg123_par() and mpg123_fmt()
// family) directly return a fully qualified mpg123 error code, the ones
// operating on full handles normally MPG123_OK or MPG123_ERR, storing the
// specific error code itself inside the handle.
//
// see advanced.h
#pragma endregion -Advanced Parameter API
#pragma region Low Level I/O
// \defgroup mpg123_lowio mpg123 low level I/O
// You may want to do tricky stuff with I/O that does not work with mpg123's default file access or you want to make it decode into your own pocket...
//
///<summary>Replace default internal buffer with user-supplied buffer.
///<para>Instead of working on it's own private buffer, mpg123 will directly use the one you provide for storing decoded audio.</para>
///<para>The data buffer should be pinned before calling this function.</para>
///<para>Returns MPG123_OK or MPG123 error code.</para>
///</summary>
///<param name="data">Pointer to supplied buffer.</param>
///<param name="size">Size of supplied buffer.</param>
///<returns>MPG123_OK or MPG123_ERR code.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_replace_buffer(IntPtr data, size_t size);
///<summary>The max size of one frame's decoded output with current settings.
///<para>Use that to determine an appropriate minimum buffer size for decoding one frame.</para>
///<para>Returns size of required buffer.</para>
///</summary>
///<returns>Size of required buffer.</returns>
size_t __clrcall mpg123_outblock(void);
///<summary>Replace low-level stream access functions; read and lseek as known in POSIX.
///<para>You can use this to make any fancy file opening/closing yourself,
/// using mpg123_open_fd() to set the file descriptor for your read/lseek (doesn't need to be a 'real' file descriptor...).</para>
///<para>Setting a function to NULL means that the default internal function is used (active from next Open call onward).</para>
/////////////////////////
///<para>Always returns MPG123_OK.</para>
///</summary>
///<param name="r_read">Delegate for read function, null for default.</param>
///<param name="r_lseek">Delegate for lseek function, null for default.</param>
///<returns>Always MPG123_OK.</returns>
mpg123clr::mpg::ErrorCode __clrcall mpg123_replace_reader(ReadDelegate^ r_read, SeekDelegate^ r_lseek);
///////////////////////////////////////
mpg123clr::mpg::ErrorCode __clrcall mpg123_replace_reader_handle(ReadHandleDelegate^ rh_read, SeekHandleDelegate^ rh_lseek, CleanupHandleDelegate^ rh_clean);
private:
// Defered internal implementation of ReplaceReader - action is defered until next 'Open' operation.
void __clrcall _ReplaceReader(void);
public:
// These functions are not part of the mpg123clr wrapper but are included as proof of concept
// of how to implement callback functions.
///<summary>Proof of concept posix-like lseek function.
///<para>This routine should not normally be called from your callback routine, it is a sample function
/// showing how such a callback could be implemented.</para>
///</summary>
///<param name="fd">File descriptor.</param>
///<param name="offset">Required position.</param>
///<param name="origin">Whence.</param>
///<returns>Resultant position.</returns>
static long PosixSeek(int fd, long offset, int origin)
{
long ret = _lseek(fd, offset, origin);
return ret;
}
///<summary>Proof of concept posix-like read function.
///<para>This routine should not normally be called from your callback routine, it is a sample function
/// showing how such a callback could be implemented.</para>
///</summary>
///<param name="fd">File descriptor.</param>
///<param name="buf">Buffer address.</param>
///<param name="count">Size of buffer.</param>
///<returns>Actual bytes read.</returns>
static int PosixRead(int fd, void*buf, unsigned int count)
{
int ret = _read(fd, buf, count);
return ret;
}
#pragma endregion -Low Level I/O
};
}

View File

@ -0,0 +1,102 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,13,0,0
PRODUCTVERSION 1,13,0,0
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "mpg123 Project"
VALUE "FileDescription", "mpg123clr Dynamic Link Library"
VALUE "FileVersion", "1, 13, 0, 0"
VALUE "InternalName", "mpg123clr"
VALUE "LegalCopyright", "2009-2011 - the mpg123 project"
VALUE "OriginalFilename", "mpg123clr.dll"
VALUE "ProductName", "mpg123 Common Language Runtime Dynamic Link Library"
VALUE "ProductVersion", "1, 13, 0, 0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@ -0,0 +1,328 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9,00"
Name="mpg123clr"
ProjectGUID="{99E8B20E-9C29-46BC-B766-A50F237D88BF}"
RootNamespace="mpg123clr"
Keyword="Win32Proj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="2"
CharacterSet="1"
ManagedExtensions="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="&quot;$(SolutionDir)..&quot;;&quot;$(SolutionDir)..\..\..\src\libmpg123\&quot;"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MPG123CLR_EXPORTS"
MinimalRebuild="false"
BasicRuntimeChecks="0"
RuntimeLibrary="3"
UsePrecompiledHeader="2"
GenerateXMLDocumentationFiles="true"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="2"
GenerateDebugInformation="true"
AssemblyDebug="1"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
OutputDocumentFile="$(OutDir)\$(ProjectName).xml"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="2"
CharacterSet="1"
ManagedExtensions="1"
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="&quot;$(SolutionDir)..&quot;;&quot;$(SolutionDir)..\..\..\src\libmpg123\&quot;"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MPG123CLR_EXPORTS"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="2"
GenerateXMLDocumentationFiles="true"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
OutputDocumentFile="$(OutDir)\$(ProjectName).xml"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
<ProjectReference
ReferencedProjectIdentifier="{67CAA87B-7CF1-4F93-BB67-21C513F40803}"
RelativePathToProject="..\2008\libmpg123\libmpg123.vcproj"
/>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\advanced.cpp"
>
</File>
<File
RelativePath=".\AssemblyInfo.cpp"
>
</File>
<File
RelativePath=".\dllmain.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
CompileAsManaged="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
CompileAsManaged="0"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\error.cpp"
>
</File>
<File
RelativePath=".\id3v1.cpp"
>
</File>
<File
RelativePath=".\id3v2.cpp"
>
</File>
<File
RelativePath=".\mpg123clr.cpp"
>
</File>
<File
RelativePath=".\stdafx.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\string.cpp"
>
</File>
<File
RelativePath=".\text.cpp"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\advanced.h"
>
</File>
<File
RelativePath=".\enum.h"
>
</File>
<File
RelativePath=".\error.h"
>
</File>
<File
RelativePath=".\id3v1.h"
>
</File>
<File
RelativePath=".\id3v2.h"
>
</File>
<File
RelativePath=".\mpg123clr.h"
>
</File>
<File
RelativePath=".\resource.h"
>
</File>
<File
RelativePath=".\stdafx.h"
>
</File>
<File
RelativePath=".\string.h"
>
</File>
<File
RelativePath=".\targetver.h"
>
</File>
<File
RelativePath=".\text.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath=".\mpg123clr.rc"
>
</File>
</Filter>
<File
RelativePath=".\ReadMe.txt"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@ -0,0 +1,14 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by mpg123clr.rc
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -0,0 +1,8 @@
// stdafx.cpp : source file that includes just the standard includes
// mpg123clr.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
// TODO: reference any additional headers you need in STDAFX.H
// and not in this file

View File

@ -0,0 +1,38 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
*/
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
// TODO: reference additional headers your program requires here
struct mpg123_pars_struct{};
struct mpg123_handle_struct{};

View File

@ -0,0 +1,166 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009-2011 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2011 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
1.9.0.0 01-Oct-09 Technical cleanup - subst nullptr for NULL (mb)
1.13.0.0 13-Jan-11 release match - added strlen (mb)
*/
#include "StdAfx.h"
#include "string.h"
// Constructor for overlaid instance (instanced)
mpg123clr::mpg123str::mpg123str(void)
{
instanced = true;
sb = new ::mpg123_string;
mpg123_init_string();
}
// Constructor for mpg123_string handle instance (referenced)
mpg123clr::mpg123str::mpg123str(mpg123_string* sb)
{
instanced = false;
this->sb = sb;
}
mpg123clr::mpg123str::mpg123str(const char* str)
{
instanced = true;
sb = new ::mpg123_string;
mpg123_init_string();
::mpg123_set_string(sb, str);
}
// Destructor cleans up all resources
mpg123clr::mpg123str::~mpg123str(void)
{
// clean up code to release managed resources
// ...
// call Finalizer to clean up unmanaged resources
this->!mpg123str();
}
// Finalizer cleans up unmanaged resources
mpg123clr::mpg123str::!mpg123str(void)
{
if (instanced && (sb != nullptr)) mpg123_free_string();
}
int mpg123clr::mpg123str::mpg123_add_string(String ^ s)
{
return mpg123_add_substring(s, 0, s->Length);
}
int mpg123clr::mpg123str::mpg123_add_substring(String ^ s, int from, int count)
{
// convert CLR string to CLI string
using namespace Runtime::InteropServices;
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s->Substring(from, count))).ToPointer();
// add mpg123_string info
int ret = ::mpg123_add_string(sb, chars);
// free temporary memory
Marshal::FreeHGlobal(IntPtr((void*)chars));
return ret;
}
int mpg123clr::mpg123str::mpg123_copy_string(mpg123str^ to)
{
return ::mpg123_copy_string(sb, to->sb);
}
void mpg123clr::mpg123str::mpg123_free_string()
{
::mpg123_free_string(sb);
}
int mpg123clr::mpg123str::mpg123_grow_string(int newSize)
{
return ::mpg123_grow_string(sb, newSize);
}
int mpg123clr::mpg123str::mpg123_resize_string(int newSize)
{
return ::mpg123_resize_string(sb, newSize);
}
void mpg123clr::mpg123str::mpg123_init_string()
{
::mpg123_init_string(sb);
}
int mpg123clr::mpg123str::mpg123_set_string(String ^ s)
{
return mpg123_set_substring(s, 0, s->Length);
}
int mpg123clr::mpg123str::mpg123_set_substring(String ^ s, int from, int count)
{
// convert CLR string to CLI string
using namespace Runtime::InteropServices;
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s->Substring(from, count))).ToPointer();
// set mpg123_string info
int ret = ::mpg123_set_string(sb, chars);
// free temporary memory
Marshal::FreeHGlobal(IntPtr((void*)chars));
return ret;
}
long long mpg123clr::mpg123str::mpg123_strlen(bool utf8)
{
// TODO: determine use for utf8 vs ansi
return ::mpg123_strlen(sb, utf8);
}
int mpg123clr::mpg123str::Fill::get()
{
// WARN 4267 - clr limited to 32bit-length-size strings by PtrToStringAnsi
return (int)sb->fill;
}
int mpg123clr::mpg123str::Size::get()
{
// WARN 4267 - clr limited to 32bit-length-size strings by PtrToStringAnsi
return (int)sb->size;
}
String^ mpg123clr::mpg123str::Text::get()
{
if (sb->fill == 0) return gcnew String("");
// WARN 4267 - clr limited to 32bit-length-size strings by PtrToStringAnsi
return Marshal::PtrToStringAnsi((IntPtr)sb->p, (int)strnlen(sb->p, sb->fill));
}
mpg123clr::mpg123str::text_encoding mpg123clr::mpg123str::mpg123_enc_from_id3(unsigned char id3_enc_byte)
{
return (mpg123clr::mpg123str::text_encoding) ::mpg123_enc_from_id3(id3_enc_byte);
}
int mpg123clr::mpg123str::mpg123_store_utf8(text_encoding enc, const unsigned char *source, size_t source_size)
{
return ::mpg123_store_utf8(sb, (mpg123_text_encoding)enc, source, source_size);
}

View File

@ -0,0 +1,265 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009-2011 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2011 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
1.9.0.0 16-Sep-09 1.9.0 Update - add enc_from_id3, store_utf8
1.9.0.0 24-Sep-09 Function names harmonized with libmpg123 (mb)
1.13.0.0 13-Jan-11 release match - added strlen (mb)
*/
#pragma once
#pragma warning(disable : 4635)
#include "mpg123.h"
#pragma warning(default : 4635)
#include <string>
#include <iostream>
#include <vcclr.h>
using namespace std;
using namespace System;
using namespace System::Runtime::InteropServices;
namespace mpg123clr
{
// Recommended usage when creating reference type on the managed heap (not using stack semantics
// for reference types...) [see Destructors and Finalizers in Visual C++]
//
// A ^ myA = gcnew A;
// try
// {
// use myA
// }
// finally
// {
// delete myA;
// }
///<summary>Wrapper for mpg123_string.
///<para>mpg123str can be used as both (publicly) an instance object and (privately) a reference object.
/// Construction and Finalizer operations perform differently depending on the instance type...
///</para>
///<para>Instanced: i.e. new mpg123str();
/// Normal operation of any object. Construction initializes memory and Destruction frees memory.
///</para>
///<para>Referenced: i.e. new mpg123str(sb);
/// Construction and Destruction have no effect on the referenced object, mpg123str objects may be freely
/// made and deleted without affecting the referenced object.
///</para>
///<para>However!
///</para>
///<para>All methods operate on the referenced object (and NOT a copy of the object), the underlying mpg123_string
/// is directly modified in situ. Therefore the referenced object can be initialized and disposed by
/// explicitly calling Init() and Free().</para>
///<para>The length of strings is limited to a 32bit value due to limitations of the CLI marshaler.
///</para>
///</summary>
[StructLayout(LayoutKind::Sequential, CharSet=CharSet::Ansi)]
public ref struct mpg123str
{
public:
///<summary>text_encoding enumeration.</summary>
enum class text_encoding
{
text_unknown = mpg123_text_unknown, /// Unkown encoding... mpg123_id3_encoding can return that on invalid codes.
text_utf8 = mpg123_text_utf8, /// UTF-8
text_latin1 = mpg123_text_latin1, /// ISO-8859-1. Note that sometimes latin1 in ID3 is abused for totally different encodings.
text_icy = mpg123_text_icy, /// ICY metadata encoding, usually CP-1252 but we take it as UTF-8 if it qualifies as such.
text_cp1252 = mpg123_text_cp1252, /// Really CP-1252 without any guessing.
text_utf16 = mpg123_text_utf16, /// Some UTF-16 encoding. The last of a set of leading BOMs (byte order mark) rules.
/// When there is no BOM, big endian ordering is used. Note that UCS-2 qualifies as UTF-8 when
/// you don't mess with the reserved code points. If you want to decode little endian data
/// without BOM you need to prepend 0xff 0xfe yourself.
text_utf16bom = mpg123_text_utf16bom, /// Just an alias for UTF-16, ID3v2 has this as distinct code.
text_utf16be = mpg123_text_utf16be, /// Another alias for UTF16 from ID3v2. Note, that, because of the mess that is reality,
/// BOMs are used if encountered. There really is not much distinction between the UTF16 types for mpg123
/// One exception: Since this is seen in ID3v2 tags, leading null bytes are skipped for all other UTF16
/// types (we expect a BOM before real data there), not so for utf16be!
text_max = mpg123_text_max /// Placeholder for the maximum encoding value.
};
///<summary>id3_enc enumeration.</summary>
enum class id3_enc
{
id3_latin1 = mpg123_id3_latin1, /// Note: This sometimes can mean anything in practice...
id3_utf16bom = mpg123_id3_utf16bom, /// UTF16, UCS-2 ... it's all the same for practical purposes.
id3_utf16be = mpg123_id3_utf16be, /// Big-endian UTF-16, BOM see note for mpg123_text_utf16be.
id3_utf8 = mpg123_id3_utf8, /// Our lovely overly ASCII-compatible 8 byte encoding for the world.
id3_enc_max = mpg123_id3_enc_max /// Placeholder to check valid range of encoding byte.
};
private:
mpg123_string* sb;
bool instanced;
internal:
///<summary>Reference Constructor. Does nothing to referenced mpg123_string structure.
///<para>Reference objects may be freely created and deleted without affecting the underlying mpg123_string object.
/// However, operations on the referenced object do modify the object in-situ (i.e. 'this' is not a 'copy'), and
/// the referenced object may be explicitly initialized and disposed by calling the appropriate methods. (Init() and Free())</para>
///<para>Recommended usage: using(mpg123str obj = new mpg123str(sb)){ use obj here }</para>
///</summary>
mpg123str(mpg123_string* sb);
///<summary>Internal Constructor.
///<para>Only used on empty fields.</para>
///</summary>
mpg123str(const char* str);
protected:
///<summary>Finalizer.
///<para>Cleanly handles mpg123_free_string of instanced mpg123_string object.</para>
///<para>Does not dispose referenced mpg123_string object. Referenced objects may be explicitly disposed by using Free().</para>
///</summary>
/// Implementation of CLR Finalize().
!mpg123str(void);
public:
///<summary>Constructor, also initializes underlying mpg123_string structure.
///<para>Instanced objects automatically dispose of underlying mpg123_string object.</para>
///<para>Recommended usage: using(mpg123str obj = new mpg123str(sb)){ use obj here }</para>
///</summary>
mpg123str(void);
///<summary>Destructor. Used for final object deletion.
///<para>Instance objects call the finalizer for clean disposal of internal mpg123_string object.</para>
///<para>Reference objects may be freely deleted without affecting the underlying mpg123_string object.
/// However, the referenced object may be explicitly disposed by calling Free()</para>
///</summary>
// Implementation of CLR Dispose().
// ~Destructor and !Finalizer are the prescribed implementation of Dispose() and Finalize().
// See Destructors and Finalizers in Visual C++
~mpg123str(void);
///<summary>Append a C# string to this mpg123str.
///<para>Returns 0 on error, 1 on success.</para>
///</summary>
///<param name="s">String to be appended.</param>
///<returns>0 on error, 1 on success.</returns>
int __clrcall mpg123_add_string(String ^ s);
///<summary>Append a C# substring to this mpg123str.
///<para>Returns 0 on error, 1 on success.</para>
///</summary>
///<param name="s">String to be appended.</param>
///<param name="from">String offset to copy from.</param>
///<param name="count">Number of characters to copy. (a null byte is always appended)</param>
///<returns>0 on error, 1 on success.</returns>
int __clrcall mpg123_add_substring(String ^ s, int from, int count);
///<summary>Copy the contents of this string to another.
///<para>Returns 0 on error, 1 on success.</para>
///</summary>
///<param name="to">Where to copy this string to.</param>
///<returns>0 on error, 1 on success.</returns>
int __clrcall mpg123_copy_string(mpg123str^ to);
///<summary>Free-up mempory for an existing mpg123_string.
///</summary>
void __clrcall mpg123_free_string(void);
///<summary>Increase size of a mpg123_string if necessary (it may stay larger).
///<para>Returns 0 on error, 1 on success.</para>
///</summary>
///<param name="newSize">Required size.</param>
///<returns>0 on error, 1 on success.</returns>
int __clrcall mpg123_grow_string(int newSize);
///<summary>Change the size of a mpg123_string.
///<para>Returns 0 on error, 1 on success.</para>
///</summary>
///<param name="newSize">Required size.</param>
///<returns>0 on error, 1 on success.</returns>
int __clrcall mpg123_resize_string(int newSize);
///<summary>Create and allocate memory for a new mpg123_string.
///</summary>
void __clrcall mpg123_init_string(void);
///<summary>Set the contents to a C# string.
///<para>Returns 0 on error, 1 on success.</para>
///</summary>
///<param name="s">String to be applied.</param>
///<returns>0 on error, 1 on success.</returns>
int __clrcall mpg123_set_string(String ^ s);
///<summary>Set the contents to a C# substring.
///<para>Returns 0 on error, 1 on success.</para>
///</summary>
///<param name="s">String to be applied.</param>
///<param name="from">String offset to copy from.</param>
///<param name="count">Number of characters to copy. (a null byte is always appended)</param>
///<returns>0 on error, 1 on success.</returns>
int __clrcall mpg123_set_substring(String ^ s, int from, int count);
///<summary>Count characters in a mpg123 string (non-null bytes or UTF-8 characters).
///<para>Even with the fill property, the character count is not obvious as there could be multiple trailing null bytes.</para>
///<para>Returns the character count.</para>
///</summary>
///<param name="utf8">Flag to tell if the string is in utf8 encoding.</param>
///<returns>Character count.</returns>
long long __clrcall mpg123_strlen(bool utf8);
///<summary>Get the number of used bytes. (including closing zero byte).
///<para>Property returns the number of used bytes.</para>
///</summary>
///<value>The number of used bytes.</value>
property int Fill{int __clrcall get();} // property
///<summary>Get the number of bytes allocated.
///<para>Property returns the number of bytes allocated.</para>
///</summary>
///<value>The number of bytes allocated.</value>
property int Size{int __clrcall get();} // property
///<summary>Get a C# string representation of the mpg123str.
///<para>Property returns C# string text.</para>
///</summary>
///<value>C# string text.</value>
property String^ Text{String^ __clrcall get();}
// 1.9.0.0 +add
///<summary>Convert ID3 encoding byte to mpg123 encoding index.
///<para>Returns the text_encoding enum of the converted value.</para>
///</summary>
///<param name="id3_enc_byte">The ID3 encoding byte to be converted.</param>
///<returns>The text_encoding enum of the converted value.</returns>
static text_encoding __clrcall mpg123_enc_from_id3(unsigned char id3_enc_byte);
///<summary>Store text data in string, after converting to UTF-8 from indicated encoding.
///<para>A prominent error can be that you provided an unknown encoding value, or this build of libmpg123 lacks support for certain encodings (ID3 or ICY stuff missing).
/// Also, you might want to take a bit of care with preparing the data; for example, strip leading zeroes (I have seen that).</para>
///<para>CLR - e.g. UnicodeEncoding(true, true) works with utf16be.</para>
///<para>Returns 0 on error, 1 on success (on error, mpg123_free_string is called on sb).</para>
///</summary>
///<param name="enc">Mpg123 text encoding value.</param>
///<param name="source">Source buffer with plain unsigned bytes.</param>
///<param name="source_size">Number of bytes in the source buffer.</param>
///<returns>0 on error, 1 on success (on error, mpg123_free_string is called on sb).</returns>
int __clrcall mpg123_store_utf8(text_encoding enc, const unsigned char *source, size_t source_size);
// 1.9.0.0 -add
};
}

View File

@ -0,0 +1,24 @@
#pragma once
// The following macros define the minimum required platform. The minimum required platform
// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run
// your application. The macros work by enabling all features available on platform versions up to and
// including the version specified.
// Modify the following defines if you have to target a platform prior to the ones specified below.
// Refer to MSDN for the latest info on corresponding values for different platforms.
#ifndef WINVER // Specifies that the minimum required platform is Windows Vista.
#define WINVER 0x0600 // Change this to the appropriate value to target other versions of Windows.
#endif
#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista.
#define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows.
#endif
#ifndef _WIN32_WINDOWS // Specifies that the minimum required platform is Windows 98.
#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
#endif
#ifndef _WIN32_IE // Specifies that the minimum required platform is Internet Explorer 7.0.
#define _WIN32_IE 0x0700 // Change this to the appropriate value to target other versions of IE.
#endif

View File

@ -0,0 +1,67 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
*/
#include "StdAfx.h"
#include "text.h"
mpg123clr::mpg123text::mpg123text(void)
{
}
mpg123clr::mpg123text::mpg123text(mpg123_text* sb)
{
this->sb = sb;
}
// Destructor
mpg123clr::mpg123text::~mpg123text(void)
{
// clean up code to release managed resources
// ...
// call Finalizer to clean up unmanaged resources
this->!mpg123text();
}
// Finalizer
mpg123clr::mpg123text::!mpg123text(void)
{
}
String^ mpg123clr::mpg123text::lang::get()
{
return Marshal::PtrToStringAnsi((IntPtr)sb->lang, (int)strnlen(sb->lang, 3));
}
String^ mpg123clr::mpg123text::id::get()
{
return Marshal::PtrToStringAnsi((IntPtr)sb->id, (int)strnlen(sb->id, 4));
}
String^ mpg123clr::mpg123text::description::get()
{
mpg123str^ str = gcnew mpg123str(&sb->description);
return str->Text;
}
String^ mpg123clr::mpg123text::text::get()
{
mpg123str^ str = gcnew mpg123str(&sb->text);
return str->Text;
}

View File

@ -0,0 +1,111 @@
/*
mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
All rights to this work freely assigned to the mpg123 project.
*/
/*
libmpg123: MPEG Audio Decoder library
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
/*
1.8.1.0 04-Aug-09 Initial release.
*/
#pragma once
#pragma warning(disable : 4635)
#include "mpg123.h"
#pragma warning(default : 4635)
#include "string.h"
#include <string>
#include <iostream>
#include <vcclr.h>
using namespace std;
using namespace System;
using namespace System::Runtime::InteropServices;
namespace mpg123clr
{
// Recommended usage when creating reference type on the managed heap (not using stack semantics
// for reference types...) [see Destructors and Finalizers in Visual C++]
//
// A ^ myA = gcnew A;
// try
// {
// use myA
// }
// finally
// {
// delete myA;
// }
///<summary>Wrapper for mpg123_text.</summary>
[StructLayout(LayoutKind::Sequential, CharSet=CharSet::Ansi)]
public ref struct mpg123text
{
private:
mpg123_text* sb;
internal:
///<summary>Constructor.
///<para>Recommended usage: only as tracking marker to existing mpg123_text objects.</para></summary>
mpg123text(void);
///<summary>Reference Constructor.
///<para>Recommended usage: only as tracking marker to existing mpg123_text objects.</para></summary>
mpg123text(mpg123_text* sb);
protected:
///<summary>Finalizer.
///<para>Does nothing. mpg123text can only be instanced as a reference to an existing mpg123_text object (which is responsible for its own disposal.</para></summary>
/// Implementation of CLR Finalize().
!mpg123text(void);
public:
///<summary>Destructor. Used for final object deletion.
///<para>Calls finalizer.</para>
///</summary>
/// Implementation of CLR Dispose().
/// ~Destructor and !Finalizer are the prescribed implementation of Dispose() and Finalize().
/// See Destructors and Finalizers in Visual C++
~mpg123text(void);
///<summary>Get a string representation of the 3-letter language code.
///<para>Only COMM and USLT have a language element.</para>
///<para>Property returns string representation of the 3-letter language code.</para>
///</summary>
///<value>String representation of the 3-letter language code.</value>
property String^ lang{String^ __clrcall get();}
///<summary>Get a string representation of the ID3v2 field id. (i.e. TALB, TPE2 etc.)
///<para>Property returns string representation of the ID3v2 field id. (i.e. TALB, TPE2 etc.)</para>
///</summary>
///<value>String representation of the ID3v2 field id. (i.e. TALB, TPE2 etc.)</value>
property String^ id{String^ __clrcall get();}
///<summary>Get a string representation of the description field.
///<para>Only COMM and TXXX have a description element.</para>
///<para>Property returns string representation of the description field.</para>
///</summary>
///<value>String representation of the description field.</value>
property String^ description{String^ __clrcall get();}
///<summary>Get a string representation of the ID3 tag text.
///<para>This is for COMM, TXXX and all the other text fields.</para>
///<para>Property returns string representation of the ID3 tag text.</para>
///</summary>
///<value>String representation of the ID3 tag text.</value>
property String^ text{String^ __clrcall get();}
};
}

View File

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{3C75D302-5DA2-49DD-A27A-5EB199D6933B}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>dump_seekindex</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)$(Configuration)\</OutDir>
<IncludePath>..\..\..\MSVC++;..\..\..\..\src\libmpg123;$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\..\doc\examples\dump_seekindex.c" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\libmpg123\libmpg123.vcxproj">
<Project>{67caa87b-7cf1-4f93-bb67-21c513f40803}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="..\..\..\..\doc\examples\dump_seekindex.c" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\examples\feedseek.c" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\libmpg123\libmpg123.vcxproj">
<Project>{67caa87b-7cf1-4f93-bb67-21c513f40803}</Project>
</ProjectReference>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{AE56D9D0-ECBA-44CD-943A-E530F6C46E15}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>feedseek</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>..\..\..\MSVC++;..\..\..\..\src\libmpg123;$(IncludePath)</IncludePath>
<OutDir>$(ProjectDir)$(Configuration)\</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>..\..\..\MSVC++;..\..\..\..\src\libmpg123;$(IncludePath)</IncludePath>
<OutDir>$(ProjectDir)$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<MinimalRebuild>true</MinimalRebuild>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<Optimization>Disabled</Optimization>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<Optimization>MaxSpeed</Optimization>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="..\..\examples\feedseek.c" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,960 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug_Generic_Dll|Win32">
<Configuration>Debug_Generic_Dll</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug_Generic|Win32">
<Configuration>Debug_Generic</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug_x86_Dll_Minimal|Win32">
<Configuration>Debug_x86_Dll_Minimal</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug_x86_Dll|Win32">
<Configuration>Debug_x86_Dll</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug_x86|Win32">
<Configuration>Debug_x86</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release_Generic_Dll|Win32">
<Configuration>Release_Generic_Dll</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release_Generic|Win32">
<Configuration>Release_Generic</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release_x86_Dll_Minimal|Win32">
<Configuration>Release_x86_Dll_Minimal</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release_x86_Dll|Win32">
<Configuration>Release_x86_Dll</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release_x86|Win32">
<Configuration>Release_x86</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{67CAA87B-7CF1-4F93-BB67-21C513F40803}</ProjectGuid>
<RootNamespace>libmpg123</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll_Minimal|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll_Minimal|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_x86|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_x86|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Generic_Dll|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Generic_Dll|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Generic|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Generic|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll_Minimal|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll_Minimal|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_x86|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_x86|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Generic_Dll|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Generic_Dll|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Generic|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Generic|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.21006.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_Generic|Win32'">$(ProjectDir)Debug\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_Generic|Win32'">Debug\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_Generic|Win32'">$(ProjectDir)Release\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_Generic|Win32'">Release\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_Generic_Dll|Win32'">$(ProjectDir)Debug\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_Generic_Dll|Win32'">Debug\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_Generic_Dll|Win32'">$(ProjectDir)Release\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_Generic_Dll|Win32'">Release\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_x86|Win32'">$(ProjectDir)Debug\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_x86|Win32'">Debug\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_x86|Win32'">$(ProjectDir)Release\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_x86|Win32'">Release\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll|Win32'">$(ProjectDir)Debug\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll|Win32'">Debug\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll|Win32'">$(ProjectDir)Release\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll|Win32'">Release\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll|Win32'">false</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll_Minimal|Win32'">$(ProjectDir)Debug\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll_Minimal|Win32'">Debug\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll_Minimal|Win32'">$(ProjectDir)Release\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll_Minimal|Win32'">Release\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll_Minimal|Win32'">false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Generic|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../..;../../../../src/libmpg123;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;OPT_GENERIC;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Lib>
<OutputFile>$(ProjectDir)Debug\$(ProjectName).lib</OutputFile>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Generic|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>../..;../../../../src/libmpg123;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;OPT_GENERIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>
</ExceptionHandling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<FunctionLevelLinking>false</FunctionLevelLinking>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<FloatingPointModel>Precise</FloatingPointModel>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Lib>
<OutputFile>$(ProjectDir)Release\$(ProjectName).lib</OutputFile>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Generic_Dll|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../..;../../../../src/libmpg123;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;OPT_GENERIC;_DEBUG;BUILD_MPG123_DLL;ACCURATE_ROUNDING;IEEE_FLOAT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<TreatWarningAsError>false</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<OutputFile>$(ProjectDir)Debug\$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>$(ProjectDir)\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AssemblyDebug>true</AssemblyDebug>
<BaseAddress>0x63000000</BaseAddress>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<FixedBaseAddress>true</FixedBaseAddress>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Generic_Dll|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>../..;../../../../src/libmpg123;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;OPT_GENERIC;BUILD_MPG123_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>
</ExceptionHandling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<FunctionLevelLinking>false</FunctionLevelLinking>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<FloatingPointModel>Precise</FloatingPointModel>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<TreatWarningAsError>false</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<OutputFile>$(ProjectDir)Release\$(ProjectName).dll</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<BaseAddress>0x63000000</BaseAddress>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<FixedBaseAddress>true</FixedBaseAddress>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_x86|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../..;../../../../src/libmpg123;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;OPT_MULTI;OPT_GENERIC;OPT_I386;OPT_I586;OPT_MMX;OPT_3DNOW;OPT_3DNOWEXT;OPT_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<PreLinkEvent>
<Command>cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct36_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct36_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct36_3dnow.o" "$(ProjectDir)..\libmpg123\Debug\dct36_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct36_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct36_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct36_3dnowext.o" "$(ProjectDir)..\libmpg123\Debug\dct36_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_3dnow.o" "$(ProjectDir)..\libmpg123\Debug\dct64_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_3dnowext.o" "$(ProjectDir)..\libmpg123\Debug\dct64_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_mmx.o" "$(ProjectDir)..\libmpg123\Debug\dct64_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_sse.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_sse.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_sse.o" "$(ProjectDir)..\libmpg123\Debug\dct64_sse.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_sse_float.o" "$(ProjectDir)..\libmpg123\Debug\dct64_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\equalizer_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\equalizer_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\equalizer_3dnow.o" "$(ProjectDir)..\libmpg123\Debug\equalizer_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\getcpuflags.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\getcpuflags.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\getcpuflags.o" "$(ProjectDir)..\libmpg123\Debug\getcpuflags.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_3dnow.o" "$(ProjectDir)..\libmpg123\Debug\synth_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_3dnowext.o" "$(ProjectDir)..\libmpg123\Debug\synth_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_i586.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_i586.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_i586.o" "$(ProjectDir)..\libmpg123\Debug\synth_i586.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_mmx.o" "$(ProjectDir)..\libmpg123\Debug\synth_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_sse.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_sse.o" "$(ProjectDir)..\libmpg123\Debug\synth_sse.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_sse_float.o" "$(ProjectDir)..\libmpg123\Debug\synth_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_float.o" "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\tabinit_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\tabinit_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\tabinit_mmx.o" "$(ProjectDir)..\libmpg123\Debug\tabinit_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_accurate.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_sse_accurate.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_sse_accurate.o" "$(ProjectDir)..\libmpg123\Debug\synth_sse_accurate.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_s32.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_sse_s32.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_sse_s32.o" "$(ProjectDir)..\libmpg123\Debug\synth_sse_s32.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_accurate.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_accurate.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_accurate.o" "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_accurate.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_s32.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_s32.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_s32.o" "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_s32.asm"
</Command>
</PreLinkEvent>
<Lib>
<AdditionalDependencies>dct36_3dnow.o;dct36_3dnowext.o;dct64_3dnow.o;dct64_3dnowext.o;dct64_mmx.o;dct64_sse.o;dct64_sse_float.o;equalizer_3dnow.o;getcpuflags.o;synth_3dnow.o;synth_3dnowext.o;synth_i586.o;synth_mmx.o;synth_sse.o;synth_sse_float.o;synth_stereo_sse_float.o;tabinit_mmx.o;synth_sse_accurate.o;synth_sse_s32.o;synth_stereo_sse_accurate.o;synth_stereo_sse_s32.o;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(ProjectDir)Debug\$(ProjectName).lib</OutputFile>
<AdditionalLibraryDirectories>$(ProjectDir)\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_x86|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>../..;../../../../src/libmpg123;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;OPT_MULTI;OPT_GENERIC;OPT_I386;OPT_I586;OPT_MMX;OPT_3DNOW;OPT_3DNOWEXT;OPT_SSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>
</ExceptionHandling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<FunctionLevelLinking>false</FunctionLevelLinking>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<FloatingPointModel>Precise</FloatingPointModel>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<PreLinkEvent>
<Command>cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct36_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct36_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct36_3dnow.o" "$(ProjectDir)..\libmpg123\Release\dct36_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct36_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct36_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct36_3dnowext.o" "$(ProjectDir)..\libmpg123\Release\dct36_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_3dnow.o" "$(ProjectDir)..\libmpg123\Release\dct64_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_3dnowext.o" "$(ProjectDir)..\libmpg123\Release\dct64_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_mmx.o" "$(ProjectDir)..\libmpg123\Release\dct64_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_sse.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_sse.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_sse.o" "$(ProjectDir)..\libmpg123\Release\dct64_sse.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_sse_float.o" "$(ProjectDir)..\libmpg123\Release\dct64_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\equalizer_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\equalizer_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\equalizer_3dnow.o" "$(ProjectDir)..\libmpg123\Release\equalizer_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\getcpuflags.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\getcpuflags.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\getcpuflags.o" "$(ProjectDir)..\libmpg123\Release\getcpuflags.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_3dnow.o" "$(ProjectDir)..\libmpg123\Release\synth_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_3dnowext.o" "$(ProjectDir)..\libmpg123\Release\synth_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_i586.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_i586.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_i586.o" "$(ProjectDir)..\libmpg123\Release\synth_i586.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_mmx.o" "$(ProjectDir)..\libmpg123\Release\synth_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_sse.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_sse.o" "$(ProjectDir)..\libmpg123\Release\synth_sse.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_sse_float.o" "$(ProjectDir)..\libmpg123\Release\synth_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_float.o" "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\tabinit_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\tabinit_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\tabinit_mmx.o" "$(ProjectDir)..\libmpg123\Release\tabinit_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_accurate.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_sse_accurate.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_sse_accurate.o" "$(ProjectDir)..\libmpg123\Release\synth_sse_accurate.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_s32.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_sse_s32.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_sse_s32.o" "$(ProjectDir)..\libmpg123\Release\synth_sse_s32.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_accurate.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_accurate.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_accurate.o" "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_accurate.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_s32.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_s32.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_s32.o" "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_s32.asm"
</Command>
</PreLinkEvent>
<Lib>
<AdditionalDependencies>dct36_3dnow.o;dct36_3dnowext.o;dct64_3dnow.o;dct64_3dnowext.o;dct64_mmx.o;dct64_sse.o;dct64_sse_float.o;equalizer_3dnow.o;getcpuflags.o;synth_3dnow.o;synth_3dnowext.o;synth_i586.o;synth_mmx.o;synth_sse.o;synth_sse_float.o;synth_stereo_sse_float.o;tabinit_mmx.o;synth_sse_accurate.o;synth_sse_s32.o;synth_stereo_sse_accurate.o;synth_stereo_sse_s32.o;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(ProjectDir)Release\$(ProjectName).lib</OutputFile>
<AdditionalLibraryDirectories>$(ProjectDir)\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../..;../../../../src/libmpg123;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;BUILD_MPG123_DLL;OPT_MULTI;OPT_GENERIC;OPT_I386;OPT_I586;OPT_MMX;OPT_3DNOW;OPT_3DNOWEXT;OPT_SSE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<FloatingPointModel>Precise</FloatingPointModel>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<TreatWarningAsError>false</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<PreLinkEvent>
<Command>cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct36_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct36_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct36_3dnow.o" "$(ProjectDir)..\libmpg123\Debug\dct36_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct36_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct36_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct36_3dnowext.o" "$(ProjectDir)..\libmpg123\Debug\dct36_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_3dnow.o" "$(ProjectDir)..\libmpg123\Debug\dct64_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_3dnowext.o" "$(ProjectDir)..\libmpg123\Debug\dct64_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_mmx.o" "$(ProjectDir)..\libmpg123\Debug\dct64_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_sse.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_sse.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_sse.o" "$(ProjectDir)..\libmpg123\Debug\dct64_sse.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_sse_float.o" "$(ProjectDir)..\libmpg123\Debug\dct64_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\equalizer_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\equalizer_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\equalizer_3dnow.o" "$(ProjectDir)..\libmpg123\Debug\equalizer_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\getcpuflags.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\getcpuflags.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\getcpuflags.o" "$(ProjectDir)..\libmpg123\Debug\getcpuflags.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_3dnow.o" "$(ProjectDir)..\libmpg123\Debug\synth_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_3dnowext.o" "$(ProjectDir)..\libmpg123\Debug\synth_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_i586.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_i586.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_i586.o" "$(ProjectDir)..\libmpg123\Debug\synth_i586.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_mmx.o" "$(ProjectDir)..\libmpg123\Debug\synth_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_sse.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_sse.o" "$(ProjectDir)..\libmpg123\Debug\synth_sse.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_sse_float.o" "$(ProjectDir)..\libmpg123\Debug\synth_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_float.o" "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\tabinit_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\tabinit_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\tabinit_mmx.o" "$(ProjectDir)..\libmpg123\Debug\tabinit_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_accurate.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_sse_accurate.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_sse_accurate.o" "$(ProjectDir)..\libmpg123\Debug\synth_sse_accurate.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_s32.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_sse_s32.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_sse_s32.o" "$(ProjectDir)..\libmpg123\Debug\synth_sse_s32.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_accurate.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_accurate.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_accurate.o" "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_accurate.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_s32.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_s32.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_s32.o" "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_s32.asm"
</Command>
</PreLinkEvent>
<Link>
<AdditionalDependencies>dct36_3dnow.o;dct36_3dnowext.o;dct64_3dnow.o;dct64_3dnowext.o;dct64_mmx.o;dct64_sse.o;dct64_sse_float.o;equalizer_3dnow.o;getcpuflags.o;synth_3dnow.o;synth_3dnowext.o;synth_i586.o;synth_mmx.o;synth_sse.o;synth_sse_float.o;synth_stereo_sse_float.o;tabinit_mmx.o;synth_sse_accurate.o;synth_sse_s32.o;synth_stereo_sse_accurate.o;synth_stereo_sse_s32.o;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(ProjectDir)Debug\$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>$(ProjectDir)\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AssemblyDebug>true</AssemblyDebug>
<BaseAddress>0x63000000</BaseAddress>
<RandomizedBaseAddress>true</RandomizedBaseAddress>
<FixedBaseAddress>false</FixedBaseAddress>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll|Win32'">
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>../..;../../../../src/libmpg123;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;BUILD_MPG123_DLL;OPT_MULTI;OPT_GENERIC;OPT_I386;OPT_I586;OPT_MMX;OPT_3DNOW;OPT_3DNOWEXT;OPT_SSE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>
</ExceptionHandling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<FunctionLevelLinking>false</FunctionLevelLinking>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<FloatingPointModel>Precise</FloatingPointModel>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<TreatWarningAsError>false</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<PreLinkEvent>
<Command>cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct36_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct36_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct36_3dnow.o" "$(ProjectDir)..\libmpg123\Release\dct36_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct36_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct36_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct36_3dnowext.o" "$(ProjectDir)..\libmpg123\Release\dct36_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_3dnow.o" "$(ProjectDir)..\libmpg123\Release\dct64_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_3dnowext.o" "$(ProjectDir)..\libmpg123\Release\dct64_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_mmx.o" "$(ProjectDir)..\libmpg123\Release\dct64_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_sse.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_sse.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_sse.o" "$(ProjectDir)..\libmpg123\Release\dct64_sse.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_sse_float.o" "$(ProjectDir)..\libmpg123\Release\dct64_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\equalizer_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\equalizer_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\equalizer_3dnow.o" "$(ProjectDir)..\libmpg123\Release\equalizer_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\getcpuflags.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\getcpuflags.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\getcpuflags.o" "$(ProjectDir)..\libmpg123\Release\getcpuflags.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_3dnow.o" "$(ProjectDir)..\libmpg123\Release\synth_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_3dnowext.o" "$(ProjectDir)..\libmpg123\Release\synth_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_i586.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_i586.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_i586.o" "$(ProjectDir)..\libmpg123\Release\synth_i586.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_mmx.o" "$(ProjectDir)..\libmpg123\Release\synth_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_sse.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_sse.o" "$(ProjectDir)..\libmpg123\Release\synth_sse.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_sse_float.o" "$(ProjectDir)..\libmpg123\Release\synth_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_float.o" "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\tabinit_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\tabinit_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\tabinit_mmx.o" "$(ProjectDir)..\libmpg123\Release\tabinit_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_accurate.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_sse_accurate.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_sse_accurate.o" "$(ProjectDir)..\libmpg123\Release\synth_sse_accurate.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_s32.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_sse_s32.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_sse_s32.o" "$(ProjectDir)..\libmpg123\Release\synth_sse_s32.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_accurate.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_accurate.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_accurate.o" "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_accurate.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_s32.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_s32.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_s32.o" "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_s32.asm"
</Command>
</PreLinkEvent>
<Link>
<AdditionalDependencies>dct36_3dnow.o;dct36_3dnowext.o;dct64_3dnow.o;dct64_3dnowext.o;dct64_mmx.o;dct64_sse.o;dct64_sse_float.o;equalizer_3dnow.o;getcpuflags.o;synth_3dnow.o;synth_3dnowext.o;synth_i586.o;synth_mmx.o;synth_sse.o;synth_sse_float.o;synth_stereo_sse_float.o;tabinit_mmx.o;synth_sse_accurate.o;synth_sse_s32.o;synth_stereo_sse_accurate.o;synth_stereo_sse_s32.o;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(ProjectDir)Release\$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>$(ProjectDir)\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<BaseAddress>0x63000000</BaseAddress>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<FixedBaseAddress>true</FixedBaseAddress>
</Link>
<PostBuildEvent>
<Command>
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll_Minimal|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../..;../../../../src/libmpg123;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;BUILD_MPG123_DLL;OPT_MULTI;OPT_GENERIC;OPT_I386;OPT_I586;OPT_MMX;OPT_3DNOW;OPT_3DNOWEXT;OPT_SSE;NO_STRING;NO_ID3V2;NO_ICY;NO_DOWNSAMPLE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<FloatingPointModel>Precise</FloatingPointModel>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<TreatWarningAsError>false</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<PreLinkEvent>
<Command>cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct36_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct36_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct36_3dnow.o" "$(ProjectDir)..\libmpg123\Debug\dct36_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct36_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct36_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct36_3dnowext.o" "$(ProjectDir)..\libmpg123\Debug\dct36_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_3dnow.o" "$(ProjectDir)..\libmpg123\Debug\dct64_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_3dnowext.o" "$(ProjectDir)..\libmpg123\Debug\dct64_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_mmx.o" "$(ProjectDir)..\libmpg123\Debug\dct64_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_sse.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_sse.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_sse.o" "$(ProjectDir)..\libmpg123\Debug\dct64_sse.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\dct64_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\dct64_sse_float.o" "$(ProjectDir)..\libmpg123\Debug\dct64_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\equalizer_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\equalizer_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\equalizer_3dnow.o" "$(ProjectDir)..\libmpg123\Debug\equalizer_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\getcpuflags.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\getcpuflags.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\getcpuflags.o" "$(ProjectDir)..\libmpg123\Debug\getcpuflags.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_3dnow.o" "$(ProjectDir)..\libmpg123\Debug\synth_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_3dnowext.o" "$(ProjectDir)..\libmpg123\Debug\synth_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_i586.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_i586.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_i586.o" "$(ProjectDir)..\libmpg123\Debug\synth_i586.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_mmx.o" "$(ProjectDir)..\libmpg123\Debug\synth_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_sse.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_sse.o" "$(ProjectDir)..\libmpg123\Debug\synth_sse.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_sse_float.o" "$(ProjectDir)..\libmpg123\Debug\synth_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_float.o" "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\tabinit_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\tabinit_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\tabinit_mmx.o" "$(ProjectDir)..\libmpg123\Debug\tabinit_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_accurate.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_sse_accurate.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_sse_accurate.o" "$(ProjectDir)..\libmpg123\Debug\synth_sse_accurate.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_s32.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_sse_s32.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_sse_s32.o" "$(ProjectDir)..\libmpg123\Debug\synth_sse_s32.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_accurate.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_accurate.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_accurate.o" "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_accurate.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_s32.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_s32.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_s32.o" "$(ProjectDir)..\libmpg123\Debug\synth_stereo_sse_s32.asm"
</Command>
</PreLinkEvent>
<Link>
<AdditionalDependencies>dct36_3dnow.o;dct36_3dnowext.o;dct64_3dnow.o;dct64_3dnowext.o;dct64_mmx.o;dct64_sse.o;dct64_sse_float.o;equalizer_3dnow.o;getcpuflags.o;synth_3dnow.o;synth_3dnowext.o;synth_i586.o;synth_mmx.o;synth_sse.o;synth_sse_float.o;synth_stereo_sse_float.o;tabinit_mmx.o;synth_sse_accurate.o;synth_sse_s32.o;synth_stereo_sse_accurate.o;synth_stereo_sse_s32.o;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(ProjectDir)Debug\$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>$(ProjectDir)\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AssemblyDebug>true</AssemblyDebug>
<BaseAddress>0x63000000</BaseAddress>
<RandomizedBaseAddress>true</RandomizedBaseAddress>
<FixedBaseAddress>false</FixedBaseAddress>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll_Minimal|Win32'">
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>../..;../../../../src/libmpg123;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;BUILD_MPG123_DLL;OPT_MULTI;OPT_GENERIC;OPT_I386;OPT_I586;OPT_MMX;OPT_3DNOW;OPT_3DNOWEXT;OPT_SSE;NO_STRING;NO_ID3V2;NO_ICY;NO_DOWNSAMPLE;_BIND_TO_CURRENT_VCLIBS_VERSION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>
</ExceptionHandling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<FunctionLevelLinking>false</FunctionLevelLinking>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<FloatingPointModel>Precise</FloatingPointModel>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<TreatWarningAsError>false</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<PreLinkEvent>
<Command>cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct36_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct36_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct36_3dnow.o" "$(ProjectDir)..\libmpg123\Release\dct36_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct36_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct36_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct36_3dnowext.o" "$(ProjectDir)..\libmpg123\Release\dct36_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_3dnow.o" "$(ProjectDir)..\libmpg123\Release\dct64_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_3dnowext.o" "$(ProjectDir)..\libmpg123\Release\dct64_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_mmx.o" "$(ProjectDir)..\libmpg123\Release\dct64_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_sse.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_sse.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_sse.o" "$(ProjectDir)..\libmpg123\Release\dct64_sse.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\dct64_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\dct64_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\dct64_sse_float.o" "$(ProjectDir)..\libmpg123\Release\dct64_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\equalizer_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\equalizer_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\equalizer_3dnow.o" "$(ProjectDir)..\libmpg123\Release\equalizer_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\getcpuflags.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\getcpuflags.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\getcpuflags.o" "$(ProjectDir)..\libmpg123\Release\getcpuflags.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_3dnow.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_3dnow.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_3dnow.o" "$(ProjectDir)..\libmpg123\Release\synth_3dnow.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_3dnowext.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_3dnowext.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_3dnowext.o" "$(ProjectDir)..\libmpg123\Release\synth_3dnowext.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_i586.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_i586.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_i586.o" "$(ProjectDir)..\libmpg123\Release\synth_i586.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_mmx.o" "$(ProjectDir)..\libmpg123\Release\synth_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_sse.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_sse.o" "$(ProjectDir)..\libmpg123\Release\synth_sse.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_sse_float.o" "$(ProjectDir)..\libmpg123\Release\synth_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_float.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_float.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_float.o" "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_float.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\tabinit_mmx.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\tabinit_mmx.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\tabinit_mmx.o" "$(ProjectDir)..\libmpg123\Release\tabinit_mmx.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_accurate.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_sse_accurate.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_sse_accurate.o" "$(ProjectDir)..\libmpg123\Release\synth_sse_accurate.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_sse_s32.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_sse_s32.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_sse_s32.o" "$(ProjectDir)..\libmpg123\Release\synth_sse_s32.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_accurate.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_accurate.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_accurate.o" "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_accurate.asm"
cl /I "..\.." /EP /TC "$(ProjectDir)..\..\..\..\src\libmpg123\synth_stereo_sse_s32.S" /nologo &gt; "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_s32.asm"
yasm -a x86 -p gas -r raw -f win32 -g null -m x86 -o "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_s32.o" "$(ProjectDir)..\libmpg123\Release\synth_stereo_sse_s32.asm"
</Command>
</PreLinkEvent>
<Link>
<AdditionalDependencies>dct36_3dnow.o;dct36_3dnowext.o;dct64_3dnow.o;dct64_3dnowext.o;dct64_mmx.o;dct64_sse.o;dct64_sse_float.o;equalizer_3dnow.o;getcpuflags.o;synth_3dnow.o;synth_3dnowext.o;synth_i586.o;synth_mmx.o;synth_sse.o;synth_sse_float.o;synth_stereo_sse_float.o;tabinit_mmx.o;synth_sse_accurate.o;synth_sse_s32.o;synth_stereo_sse_accurate.o;synth_stereo_sse_s32.o;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(ProjectDir)Release\$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>$(ProjectDir)\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<BaseAddress>0x63000000</BaseAddress>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<FixedBaseAddress>true</FixedBaseAddress>
</Link>
<PostBuildEvent>
<Command>
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\..\src\libmpg123\compat.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\dct64.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\dct64_i386.c">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_Generic_Dll|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_Generic|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Generic_Dll|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Generic|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\src\libmpg123\dct64_i486.c">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_Generic_Dll|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_Generic|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll_Minimal|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_x86|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Generic_Dll|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Generic|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll_Minimal|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_x86|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\src\libmpg123\equalizer.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\feature.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\format.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\frame.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\icy.c">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll_Minimal|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll_Minimal|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\src\libmpg123\icy2utf8.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\id3.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\index.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\layer1.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\layer2.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\layer3.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\libmpg123.c" />
<ClCompile Include="..\..\msvc.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\ntom.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\optimize.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\parse.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\readers.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\stringbuf.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\synth.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\synth_8bit.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\synth_i486.c">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_Generic_Dll|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_Generic|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll_Minimal|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_x86_Dll|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_x86|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Generic_Dll|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Generic|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll_Minimal|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_x86_Dll|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_x86|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\src\libmpg123\synth_real.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\synth_s32.c" />
<ClCompile Include="..\..\..\..\src\libmpg123\tabinit.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\..\src\libmpg123\compat.h" />
<ClInclude Include="..\..\config.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\debug.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\decode.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\frame.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\getbits.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\getcpuflags.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\huffman.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\icy.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\icy2utf8.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\id3.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\index.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\l2tables.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\mangle.h" />
<ClInclude Include="..\..\mpg123.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\mpg123lib_intern.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\optimize.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\parse.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\reader.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\sample.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\synth.h" />
<ClInclude Include="..\..\..\..\src\libmpg123\true.h" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\..\src\libmpg123\dct36_3dnow.S" />
<None Include="..\..\..\..\src\libmpg123\dct36_3dnowext.S" />
<None Include="..\..\..\..\src\libmpg123\dct64_3dnow.S" />
<None Include="..\..\..\..\src\libmpg123\dct64_3dnowext.S" />
<None Include="..\..\..\..\src\libmpg123\dct64_mmx.S" />
<None Include="..\..\..\..\src\libmpg123\dct64_sse.S" />
<None Include="..\..\..\..\src\libmpg123\dct64_sse_float.S" />
<None Include="..\..\..\..\src\libmpg123\dct64_x86_64.S" />
<None Include="..\..\..\..\src\libmpg123\dct64_x86_64_float.S" />
<None Include="..\..\..\..\src\libmpg123\equalizer_3dnow.S" />
<None Include="..\..\..\..\src\libmpg123\getcpuflags.S" />
<None Include="..\..\..\..\src\libmpg123\mpg123.h.in" />
<None Include="..\..\..\..\src\libmpg123\synth_3dnow.S" />
<None Include="..\..\..\..\src\libmpg123\synth_3dnowext.S" />
<None Include="..\..\..\..\src\libmpg123\synth_i586.S" />
<None Include="..\..\..\..\src\libmpg123\synth_i586_dither.S" />
<None Include="..\..\..\..\src\libmpg123\synth_mmx.S" />
<None Include="..\..\..\..\src\libmpg123\synth_sse.S" />
<None Include="..\..\..\..\src\libmpg123\synth_sse_accurate.S" />
<None Include="..\..\..\..\src\libmpg123\synth_sse_float.S" />
<None Include="..\..\..\..\src\libmpg123\synth_sse_s32.S" />
<None Include="..\..\..\..\src\libmpg123\synth_stereo_sse_accurate.S" />
<None Include="..\..\..\..\src\libmpg123\synth_stereo_sse_float.S" />
<None Include="..\..\..\..\src\libmpg123\synth_stereo_sse_s32.S" />
<None Include="..\..\..\..\src\libmpg123\synth_stereo_x86_64.S" />
<None Include="..\..\..\..\src\libmpg123\synth_stereo_x86_64_accurate.S" />
<None Include="..\..\..\..\src\libmpg123\synth_stereo_x86_64_float.S" />
<None Include="..\..\..\..\src\libmpg123\synth_stereo_x86_64_s32.S" />
<None Include="..\..\..\..\src\libmpg123\synth_x86_64.S" />
<None Include="..\..\..\..\src\libmpg123\synth_x86_64_accurate.S" />
<None Include="..\..\..\..\src\libmpg123\synth_x86_64_float.S" />
<None Include="..\..\..\..\src\libmpg123\synth_x86_64_s32.S" />
<None Include="..\..\..\..\src\libmpg123\tabinit_mmx.S" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,38 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "feedseek", "feedseek\feedseek.vcxproj", "{AE56D9D0-ECBA-44CD-943A-E530F6C46E15}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmpg123", "libmpg123\libmpg123.vcxproj", "{67CAA87B-7CF1-4F93-BB67-21C513F40803}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scan", "scan\scan.vcxproj", "{1B03F4FD-A10A-4F99-A476-BE7FFD1CB508}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dump_seekindex", "dump_seekindex\dump_seekindex.vcxproj", "{3C75D302-5DA2-49DD-A27A-5EB199D6933B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{AE56D9D0-ECBA-44CD-943A-E530F6C46E15}.Debug|Win32.ActiveCfg = Debug|Win32
{AE56D9D0-ECBA-44CD-943A-E530F6C46E15}.Debug|Win32.Build.0 = Debug|Win32
{AE56D9D0-ECBA-44CD-943A-E530F6C46E15}.Release|Win32.ActiveCfg = Release|Win32
{AE56D9D0-ECBA-44CD-943A-E530F6C46E15}.Release|Win32.Build.0 = Release|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Debug|Win32.ActiveCfg = Debug_x86|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Debug|Win32.Build.0 = Debug_x86|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Release|Win32.ActiveCfg = Release_x86|Win32
{67CAA87B-7CF1-4F93-BB67-21C513F40803}.Release|Win32.Build.0 = Release_x86|Win32
{1B03F4FD-A10A-4F99-A476-BE7FFD1CB508}.Debug|Win32.ActiveCfg = Debug|Win32
{1B03F4FD-A10A-4F99-A476-BE7FFD1CB508}.Debug|Win32.Build.0 = Debug|Win32
{1B03F4FD-A10A-4F99-A476-BE7FFD1CB508}.Release|Win32.ActiveCfg = Release|Win32
{1B03F4FD-A10A-4F99-A476-BE7FFD1CB508}.Release|Win32.Build.0 = Release|Win32
{3C75D302-5DA2-49DD-A27A-5EB199D6933B}.Debug|Win32.ActiveCfg = Debug|Win32
{3C75D302-5DA2-49DD-A27A-5EB199D6933B}.Debug|Win32.Build.0 = Debug|Win32
{3C75D302-5DA2-49DD-A27A-5EB199D6933B}.Release|Win32.ActiveCfg = Release|Win32
{3C75D302-5DA2-49DD-A27A-5EB199D6933B}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\examples\scan.c" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\libmpg123\libmpg123.vcxproj">
<Project>{67caa87b-7cf1-4f93-bb67-21c513f40803}</Project>
</ProjectReference>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{1B03F4FD-A10A-4F99-A476-BE7FFD1CB508}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>scan</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)$(Configuration)\</OutDir>
<IncludePath>..\..\..\MSVC++;..\..\..\..\src\libmpg123;$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<MinimalRebuild>true</MinimalRebuild>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<Optimization>Disabled</Optimization>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<Optimization>MaxSpeed</Optimization>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="..\..\examples\scan.c" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,15 @@
// ------------------------------------------------------------------------------------------------
#pragma once
// ------------------------------------------------------------------------------------------------
protected:
::FILE *m_pFile;
PBYTE m_pucMemData;
DWORD m_dwLength;
DWORD m_dwReadPos;
// ------------------------------------------------------------------------------------------------

View File

@ -0,0 +1,139 @@
// ------------------------------------------------------------------------------------------------
#pragma once
// ------------------------------------------------------------------------------------------------
#ifdef _DEBUG
#pragma comment(lib, "libMPG123_d.lib")
#else
#pragma comment(lib, "libMPG123.lib")
#endif
// ------------------------------------------------------------------------------------------------
#include "../DShowBase/streams.h"
#include <CORE/SourceFilter_AsyncIO.H>
#include <CORE/SourceFilter_AsyncReader.H>
#include "../../libMPG123/MPG123.H"
#include <IIEP_FileIn.H>
// ------------------------------------------------------------------------------------------------
#define WAVE_HEADER_LENGTH 44
// ------------------------------------------------------------------------------------------------
#define MP3_DECODE_LEN 0x4000
#define MP3_DECODE_BUF_LEN 0x8000
// ------------------------------------------------------------------------------------------------
namespace IIEP
{
class CMP3Stream : public CAsyncStream
{
public:
CMP3Stream(void);
~CMP3Stream(void);
void SetSeekFlag(void);
bool Open(const WORD *pcwsFileName, CMediaType &coMT, DWORD dwKBPerSec = INFINITE);
void Close(void);
HRESULT SetPointer(LONGLONG llPos);
HRESULT Read(PBYTE pucBuffer,
DWORD dwBytesToRead,
BOOL bAlign,
LPDWORD pdwBytesRead);
LONGLONG Size(LONGLONG *pSizeAvailable);
DWORD Alignment(void);
void Lock (void);
void Unlock(void);
bool DecodeFrame(void);
//
bool OpenFile(const WORD *pcwsFileName);
DWORD ReadFile(PVOID pBuf , DWORD dwLen );
long SeekFile(long nOffset, int iOrigin);
//
private:
CCritSec m_csLock;
DWORD m_dwKBPerSec;
DWORD m_dwTimeStart;
mpg123_handle *m_pcoMH;
DWORD m_dwTotalBlocks;
DWORD m_dwAlignment;
DWORD m_dwLength;
DWORD m_dwPosition;
BYTE m_ucHeader[WAVE_HEADER_LENGTH];
//
DWORD m_dwDataBufPos;
DWORD m_dwDataBufLen;
BYTE m_ucDataBuffer[MP3_DECODE_BUF_LEN];
//
bool m_bSeekFlag;
//
IIEP::CFileIn m_coFileIn;
long m_nDataBegin;
long m_nDataTotal;
};
// ----------------------------------------------------------------------------------------------
class CMP3Reader : public CAsyncReader
{
public:
// We're not going to be CoCreate'd so we don't need registration stuff etc
STDMETHODIMP Register(void)
{
return S_OK;
}
STDMETHODIMP Unregister(void)
{
return S_OK;
}
CMP3Reader(CMP3Stream *pcoStream,
CMediaType *pcoMT,
HRESULT *phr) :
CAsyncReader(NAME("MP3 Reader\0"),
NULL,
pcoStream,
phr)
{
m_coMT = *pcoMT;
}
};
}
// ------------------------------------------------------------------------------------------------

View File

@ -0,0 +1,206 @@
//
// __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __
// /_//_//_//_/\ /_//_//_//_/\ /_//_//_//_/\ /_//_//_//_/\
// \_/_//_/\\_\/ \_/_//_/\\_\//_/\\_\\_\\_\//_/\\_\\_/_/\/
// /_//_/\/ /_//_/\/ /_/\/ __ /_/\/ __ /_/\/
// /_//_/\/ /_//_/\/ /_//_//_/\ /_//_//_//_/\/
// /_//_/\/ /_//_/\/ /_/\\_\\_\/ /_/\\_\\_\\_\/
// __ /_//_/\/ __ /_//_/\/ /_/\/ __ __ /_/\/
// /_//_//_//_/\ /_//_//_//_/\ /_//_//_//_/\ /_/\/
// \_\\_\\_\\_\/ \_\\_\\_\\_\/ \_\\_\\_\\_\/ \_\/
//
//
// ..:: Interactive Internet Entertainment Platform ::..
//
// (C) 2000-2006, FAN YI PENG. ALL RIGHTS RESERVED
//
// ________________________________________________________________________________________________
//
/// @file IIEP_Def.H
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ________________________________________________________________________________________________
//
//
// _____________________________________
// | |
// | DATA |
// _____________________________|_____________________________________|____________________________
//
// __________
// __________________________________________| CONFIG |__________________________________________
#pragma once
#ifdef _DEBUG
#pragma comment(lib, "IIEP_DBG.LIB")
#else
#pragma comment(lib, "IIEP.LIB")
#endif
// ____________________________________________ CONFIG ____________________________________________
//
// __________
// __________________________________________| DEFINE |__________________________________________
//
// _____________
// ____/ Data Type \_____________________________________________________________________________
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef __int64 QWORD;
typedef BYTE *PBYTE;
typedef WORD *PWORD;
typedef DWORD *PDWORD;
typedef QWORD *PQWORD;
typedef void *PVOID;
// ______ Data Type _______________________________________________________________________________
//
// ___________
// ____/ Release \_______________________________________________________________________________
#define SAFE_DELETE(p) if (p) { delete (p); (p) = 0; }
#define SAFE_DELETE_ARRAY(p) if (p) { delete[] (p); (p) = 0; }
#define SAFE_RELEASE(p) if (p) { (p) -> Release(); (p) = 0; }
// ______ Release _________________________________________________________________________________
//
// __________
// ____/ Assert \________________________________________________________________________________
#ifndef ASSERT
#ifdef _DEBUG
namespace IIEP { bool AssertFunction(bool, long, const char *, const char *); }
#define ASSERT(expression) \
if (IIEP::AssertFunction((bool) (expression), __LINE__, __FILE__, __FUNCTION__)) {_asm {int 3}}
#else
#define ASSERT(expression)
#endif
#endif
// ______ Assert __________________________________________________________________________________
//
// _______
// ____/ LOG \___________________________________________________________________________________
namespace IIEP
{
void DebugLog(const char *pcszFormat, ...);
void DebugLog(const WORD *pcwsFormat, ...);
void WriteLog(const char *pcszFormat, ...);
void WriteLog(const WORD *pcwsFormat, ...);
}
// ______ LOG _____________________________________________________________________________________
//
// ________
// ____/ TODO \__________________________________________________________________________________
#ifdef _DEBUG
#define TODO \
IIEP::DebugLog("\n[TODO] %d: \"%s\"- %s()\n~~~~~~\n", __LINE__, __FILE__, __FUNCTION__);
#define ToDo(x) \
IIEP::DebugLog("\n[TODO] %d: \"%s\"- %s(): %s\n~~~~~~\n", __LINE__, __FILE__, __FUNCTION__, (x));
#else
#define TODO
#define ToDo(x)
#endif
// ______ TODO ____________________________________________________________________________________
//
// ________
// ____/ Path \__________________________________________________________________________________
namespace IIEP
{
void ResetToExePath(void);
}
// ______ Path ____________________________________________________________________________________
//
// __________
// ____/ CMutex \________________________________________________________________________________
namespace IIEP
{
class CMutex
{
public:
CMutex(void) { m_bLocked = false; }
~CMutex(void) {}
void Lock(void);
void Unlock(void) { m_bLocked = false; }
void Set(void) { m_bLocked = true; }
void Wait(void);
bool IsLock(void) const { return m_bLocked; }
private:
volatile bool m_bLocked;
};
}
// ______ CMutex __________________________________________________________________________________
//
// _________
// ____/ SRect \_________________________________________________________________________________
namespace IIEP
{
/// @brief <20><><EFBFBD>ν
struct SRect
{
SRect(void) {}
SRect(long nX, long nY, long nWidth, long nHeight)
{
m_nX = nX;
m_nY = nY;
m_nWidth = nWidth;
m_nHeight = nHeight;
}
// -------------------------------------------------------------------------------------------
void Set(long nX, long nY, long nWidth, long nHeight)
{
m_nX = nX;
m_nY = nY;
m_nWidth = nWidth;
m_nHeight = nHeight;
}
// -------------------------------------------------------------------------------------------
long m_nX; ///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD> X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long m_nY; ///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD> Y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long m_nWidth; ///< <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD>
long m_nHeight; ///< <20><><EFBFBD>θ߶<CEB8>
};
}
// ______ SRect ___________________________________________________________________________________
//
// ___________________________
// ____/ Sample Grabber CallBack \_______________________________________________________________
namespace IIEP
{
typedef void (*CALLBACK_SampleGrabberBuffer) (PVOID, DWORD);
}
// ______ Sample Grabber CallBack _________________________________________________________________
//
// ____________________________________________ DEFINE ____________________________________________
//
// ____________________________________________________________________________________ DATA ______
//
// ___________________________________________ FILE END ___________________________________________

View File

@ -0,0 +1,167 @@
//
// __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __
// /_//_//_//_/\ /_//_//_//_/\ /_//_//_//_/\ /_//_//_//_/\
// \_/_//_/\\_\/ \_/_//_/\\_\//_/\\_\\_\\_\//_/\\_\\_/_/\/
// /_//_/\/ /_//_/\/ /_/\/ __ /_/\/ __ /_/\/
// /_//_/\/ /_//_/\/ /_//_//_/\ /_//_//_//_/\/
// /_//_/\/ /_//_/\/ /_/\\_\\_\/ /_/\\_\\_\\_\/
// __ /_//_/\/ __ /_//_/\/ /_/\/ __ __ /_/\/
// /_//_//_//_/\ /_//_//_//_/\ /_//_//_//_/\ /_/\/
// \_\\_\\_\\_\/ \_\\_\\_\\_\/ \_\\_\\_\\_\/ \_\/
//
//
// ..:: Interactive Internet Entertainment Platform ::..
//
// (C) 2000-2005, FAN YI PENG. ALL RIGHTS RESERVED
//
// ________________________________________________________________________________________________
//
/// @file IIEP_FileIn.H
/// @brief <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD>
// ________________________________________________________________________________________________
//
//
// _____________________________________
// | |
// | DATA |
// _____________________________|_____________________________________|____________________________
//
// __________
// __________________________________________| CONFIG |__________________________________________
#pragma once
// ____________________________________________ CONFIG ____________________________________________
//
// __________
// __________________________________________| HEADER |__________________________________________
#include <stdio.h>
#include <string>
#include <IIEP_Def.H>
// ____________________________________________ HEADER ____________________________________________
//
// __________
// __________________________________________| DEFINE |__________________________________________
//
// ___________
// ____/ CFileIn \_______________________________________________________________________________
namespace IIEP
{
/// @brief <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD>
class CFileIn
{
public:
CFileIn(void);
~CFileIn(void);
bool Open(const char *pcszFileName);
bool Open(const WORD *pcwsFileName);
void Close(void);
DWORD GetFileSize(void) const;
DWORD GetReadPosition(void) const;
bool Seek(long nOffset, long nOrigin = 0); // SEEK_SET = 0 SEEK_CUR = 1 SEEK_END = 2
bool Skip(long nOffset) { return Seek(nOffset, 1); }
DWORD Read(PVOID pDataBuffer, DWORD dwReadSize);
bool ReadB(BYTE &ucData)
{
return (1 == Read(&ucData, 1));
}
bool ReadW(WORD &wData)
{
return (2 == Read(&wData, 2));
}
bool ReadDW(DWORD &dwData)
{
return (4 == Read(&dwData, 4));
}
bool ReadInverseW(WORD &wData)
{
if (2 == Read(&wData, 2))
{
_asm
{
MOV ECX, wData
MOV AX, [ECX]
XCHG AH, AL
MOV [ECX], AX
}
return true;
}
return false;
}
bool ReadInverseDW(DWORD &dwData)
{
if (4 == Read(&dwData, 4))
{
_asm
{
MOV ECX, dwData
MOV EAX, [ECX]
BSWAP EAX
MOV [ECX], EAX
}
return true;
}
return false;
}
// --------------------------------------------------------------------------------------------
bool ReadAnsiLine(std::string &strLine);
bool ReadUnicodeLine(std::wstring &wstrLine, bool bBigEndian);
bool ReadAnsiString (char *pszBuffer, DWORD dwBufferLength);
bool ReadUnicodeString(WORD *pwzBuffer, DWORD dwBufferLength);
// --------------------------------------------------------------------------------------------
private:
CFileIn(const CFileIn &); // forbidden
CFileIn & operator = (const CFileIn &); // forbidden
#include <CORE/CORE_FileIn.H>
};
}
// ______ CFileIn _________________________________________________________________________________
//
// _______________
// ____/ Memory File \___________________________________________________________________________
namespace IIEP
{
bool CreateMemoryFile(PVOID pMemory, DWORD dwLength, const char *pcszFileName);
bool CreateMemoryFile(PVOID pMemory, DWORD dwLength, const WORD *pcwsFileName);
bool RemoveMemoryFile(const char *pcszFileName);
bool RemoveMemoryFile(const WORD *pcwsFileName);
void RemoveMemoryFile(void);
}
// ______ Memory File _____________________________________________________________________________
//
// ____________________________________________ DEFINE ____________________________________________
//
// ____________________________________________________________________________________ DATA ______
//
// ___________________________________________ FILE END ___________________________________________

View File

@ -0,0 +1,4 @@
This is a MS Visual C++ project plus wrapper class for libmpg123, contributed by "Gates Fan" <gatesfan@gmail.com>.
You need to copy the stuff from mgp123-x.y.z/src/libmpg123 to the libMPG123 directory and also ensure that you produce a valid mpg123.h from the mpg123.h.in (replace the @BLABLA@ with the appropriate #includes).
Thomas.

View File

@ -0,0 +1,462 @@
// ------------------------------------------------------------------------------------------------
#include <windows.h>
#include <string>
#include <vector>
#include <IIEP_FileIn.H>
#include <IIEP_Hash.H>
#include <IIEP_String.H>
// ------------------------------------------------------------------------------------------------
struct MEM_FILE_IDX
{
MEM_FILE_IDX(void)
{
m_dwID = 0;
m_dwLength = 0;
m_pucData = 0;
}
DWORD m_dwID; // hash ID of filename
DWORD m_dwLength; // file length
PBYTE m_pucData; // memory pointer
};
static std::vector <MEM_FILE_IDX> s_vecMemFile;
// ------------------------------------------------------------------------------------------------
// name: SearchMemFile()
// desc:
// ------------------------------------------------------------------------------------------------
static std::vector <MEM_FILE_IDX> :: iterator SearchMemFile(PCWSTR pcwsFileName)
{
DWORD dwID = IIEP::HashFNV_1a(pcwsFileName);
std::vector <MEM_FILE_IDX>::iterator it;
for (it = s_vecMemFile.begin(); it < s_vecMemFile.end(); it ++)
{
if (it -> m_dwID == dwID) return it;
}
return s_vecMemFile.end();
}
// ------------------------------------------------------------------------------------------------
static std::vector <MEM_FILE_IDX> :: iterator SearchMemFile(const char *pcszFileName)
{
WORD wzNameBuffer[0x1000];
wzNameBuffer[0] = 0;
IIEP::StringFromANSI(pcszFileName, wzNameBuffer, 0x1000);
return SearchMemFile(wzNameBuffer);
}
// ------------------------------------------------------------------------------------------------
// name: CreateMemoryFile()
// desc:
// ------------------------------------------------------------------------------------------------
bool IIEP::CreateMemoryFile(PVOID pMemory, DWORD dwLength, PCWSTR pcwsFileName)
{
if (0 == pcwsFileName || 0 == *pcwsFileName) return false;
RemoveMemoryFile(pcwsFileName);
DWORD dwID = IIEP::HashFNV_1a(pcwsFileName);
MEM_FILE_IDX soIDX;
soIDX.m_dwID = dwID;
soIDX.m_dwLength = dwLength;
soIDX.m_pucData = (PBYTE) pMemory;
s_vecMemFile.push_back(soIDX);
return true;
}
// ------------------------------------------------------------------------------------------------
bool IIEP::CreateMemoryFile(PVOID pMemory, DWORD dwLength, const char *pcszFileName)
{
WORD wzNameBuffer[0x1000];
wzNameBuffer[0] = 0;
StringFromANSI(pcszFileName, wzNameBuffer, 0x1000);
return CreateMemoryFile(pMemory, dwLength, wzNameBuffer);
}
// ------------------------------------------------------------------------------------------------
// name: RemoveMemoryFile()
// desc:
// ------------------------------------------------------------------------------------------------
bool IIEP::RemoveMemoryFile(PCWSTR pcwsFileName)
{
if (0 == pcwsFileName || 0 == *pcwsFileName) return false;
std::vector <MEM_FILE_IDX>::iterator it = SearchMemFile(pcwsFileName);
if (it == s_vecMemFile.end()) return false;
s_vecMemFile.erase(it);
return true;
}
// ------------------------------------------------------------------------------------------------
bool IIEP::RemoveMemoryFile(const char *pcszFileName)
{
WORD wzNameBuffer[0x1000];
wzNameBuffer[0] = 0;
StringFromANSI(pcszFileName, wzNameBuffer, 0x1000);
return RemoveMemoryFile(wzNameBuffer);
}
// ------------------------------------------------------------------------------------------------
void IIEP::RemoveMemoryFile(void)
{
s_vecMemFile.clear();
}
// ------------------------------------------------------------------------------------------------
// name: CFileIn()
// desc:
// ------------------------------------------------------------------------------------------------
IIEP::CFileIn::CFileIn(void)
{
m_pFile = 0;
m_pucMemData = 0;
m_dwLength = 0;
m_dwReadPos = 0;
}
// ------------------------------------------------------------------------------------------------
// name: ~CFileIn()
// desc:
// ------------------------------------------------------------------------------------------------
IIEP::CFileIn::~CFileIn(void)
{
Close();
}
// ------------------------------------------------------------------------------------------------
// name: Open()
// desc:
// ------------------------------------------------------------------------------------------------
bool IIEP::CFileIn::Open(const char *pcszFileName)
{
WORD wzNameBuffer[0x1000];
wzNameBuffer[0] = 0;
StringFromANSI(pcszFileName, wzNameBuffer, 0x1000);
return Open(wzNameBuffer);
}
// ------------------------------------------------------------------------------------------------
bool IIEP::CFileIn::Open(const WORD *pcwsFileName)
{
Close();
if (0 == pcwsFileName || 0 == *pcwsFileName) return false;
std::vector <MEM_FILE_IDX>::iterator it = SearchMemFile(pcwsFileName);
if (it == s_vecMemFile.end()) // not found in memory
{
m_pFile = _wfopen(pcwsFileName, L"rb");
if (m_pFile)
{
return true; // found DOS file
}
return false;
}
if (s_vecMemFile.empty()) return false;
m_pucMemData = it -> m_pucData;
m_dwLength = it -> m_dwLength;
return true;
}
// ------------------------------------------------------------------------------------------------
// name: Close()
// desc:
// ------------------------------------------------------------------------------------------------
void IIEP::CFileIn::Close(void)
{
if (m_pFile)
{
fclose(m_pFile);
m_pFile = 0;
}
m_pucMemData = 0;
m_dwLength = 0;
m_dwReadPos = 0;
}
// ------------------------------------------------------------------------------------------------
// name: GetFileSize()
// desc:
// ------------------------------------------------------------------------------------------------
DWORD IIEP::CFileIn::GetFileSize(void) const
{
if (m_pFile)
{
DWORD dwPostion = ftell(m_pFile);
fseek(m_pFile, 0, SEEK_END);
DWORD dwFileSize = ftell(m_pFile);
fseek(m_pFile, dwPostion, SEEK_SET);
return dwFileSize;
}
return m_dwLength;
}
// ------------------------------------------------------------------------------------------------
// name: GetReadPosition()
// desc:
// ------------------------------------------------------------------------------------------------
DWORD IIEP::CFileIn::GetReadPosition(void) const
{
if (m_pFile)
{
return ftell(m_pFile);
}
return m_dwReadPos;
}
// ------------------------------------------------------------------------------------------------
// name: Seek()
// desc:
// ------------------------------------------------------------------------------------------------
bool IIEP::CFileIn::Seek(long nOffset, long nOrigin)
{
if (m_pFile)
{
return (0 == fseek(m_pFile, nOffset, nOrigin));
}
if (m_pucMemData)
{
switch (nOrigin)
{
case SEEK_SET:
if (nOffset < 0 || nOffset >= (long) m_dwLength) return false;
m_dwReadPos = nOffset;
return true;
case SEEK_CUR:
nOffset += m_dwReadPos;
if (nOffset < 0 || nOffset >= (long) m_dwLength) return false;
m_dwReadPos = nOffset;
return true;
case SEEK_END:
ASSERT(nOffset <= 0); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD>
nOffset = m_dwLength - 1 + nOffset;
if (nOffset < 0 || nOffset >= (long) m_dwLength) return false;
m_dwReadPos = nOffset;
return true;
}
}
return false;
}
// ------------------------------------------------------------------------------------------------
// name: Read()
// desc:
// ------------------------------------------------------------------------------------------------
DWORD IIEP::CFileIn::Read(PVOID pDataBuffer, DWORD dwReadSize)
{
if (m_pFile)
{
return (DWORD) fread(pDataBuffer, 1, dwReadSize, m_pFile);
}
if (m_pucMemData)
{
if (m_dwReadPos + dwReadSize > m_dwLength) dwReadSize = m_dwLength - m_dwReadPos;
memcpy(pDataBuffer, m_pucMemData + m_dwReadPos, dwReadSize);
m_dwReadPos += dwReadSize;
return dwReadSize;
}
return 0;
}
// ------------------------------------------------------------------------------------------------
// name: ReadAnsiLine()
// desc:
// ------------------------------------------------------------------------------------------------
bool IIEP::CFileIn::ReadAnsiLine(std::string &strLine)
{
BYTE ucChar = 0;
strLine.clear();
while (ReadB(ucChar))
{
if (0x0D == ucChar)
{
}
else
if (0x0A == ucChar)
{
return true;
}
else
{
strLine.push_back(ucChar);
}
}
if (strLine.empty()) return false;
return true;
}
// ------------------------------------------------------------------------------------------------
// name: ReadUnicodeLine()
// desc:
// ------------------------------------------------------------------------------------------------
bool IIEP::CFileIn::ReadUnicodeLine(std::wstring &wstrLine, bool bBigEndian)
{
WORD wChar = 0;
wstrLine.clear();
while (bBigEndian ? ReadInverseW(wChar) : ReadW(wChar))
{
if (0x000D == wChar)
{
}
else
if (0x000A == wChar)
{
return true;
}
else
{
wstrLine.push_back(wChar);
}
}
if (wstrLine.empty()) return false;
return true;
}
// ------------------------------------------------------------------------------------------------
// name: ReadAnsiString()
// desc:
// ------------------------------------------------------------------------------------------------
bool IIEP::CFileIn::ReadAnsiString(char *pszBuffer, DWORD dwBufferLength)
{
DWORD dwIndex = 0;
BYTE ucChar;
while (ReadB(ucChar))
{
if (dwIndex >= dwBufferLength) return true;
pszBuffer[dwIndex ++] = ucChar;
if (0 == ucChar)
{
return true;
}
}
return false;
}
// ------------------------------------------------------------------------------------------------
// name: ReadUnicodeString()
// desc:
// ------------------------------------------------------------------------------------------------
bool IIEP::CFileIn::ReadUnicodeString(WORD *pwzBuffer, DWORD dwBufferLength)
{
DWORD dwIndex = 0;
WORD wChar;
ReadInverseW(wChar);
if (wChar == 0xFFFE) // Unicode
{
while (ReadW(wChar))
{
if (dwIndex >= dwBufferLength) return true;
pwzBuffer[dwIndex ++] = wChar;
if (0 == wChar)
{
return true;
}
}
}
else
if (wChar == 0xFEFF) // Unicode big endian
{
while (ReadInverseW(wChar))
{
if (dwIndex >= dwBufferLength) return true;
pwzBuffer[dwIndex ++] = wChar;
if (0 == wChar)
{
return true;
}
}
}
return false;
}
// ------------------------------------------------------------------------------------------------

View File

@ -0,0 +1,122 @@
// ------------------------------------------------------------------------------------------------
#include <stdarg.h>
#include <stdio.h>
#include <windows.h>
#include <IIEP_Def.H>
// ------------------------------------------------------------------------------------------------
static bool s_bLogFileOpened = false;
// ------------------------------------------------------------------------------------------------
// name: DebugLog()
// desc:
// ------------------------------------------------------------------------------------------------
void IIEP::DebugLog(const char *pcszFormat, ...)
{
#ifdef _DEBUG
char cBuffer[0x8000];
va_list pcArg;
va_start(pcArg, pcszFormat);
_vsnprintf(cBuffer, 0x8000, pcszFormat, pcArg);
va_end(pcArg);
::OutputDebugStringA(cBuffer);
#endif
}
// ------------------------------------------------------------------------------------------------
void IIEP::DebugLog(const WORD *pcwsFormat, ...)
{
#ifdef _DEBUG
WCHAR wcBuffer[0x8000];
va_list pcArg;
va_start(pcArg, pcwsFormat);
_vsnwprintf(wcBuffer, 0x8000, pcwsFormat, pcArg);
va_end(pcArg);
::OutputDebugStringW(wcBuffer);
#endif
}
// ------------------------------------------------------------------------------------------------
// name: WriteLog()
// desc:
// ------------------------------------------------------------------------------------------------
void IIEP::WriteLog(const char *pcszFormat, ...)
{
char cBuffer[0x8000];
va_list pcArg;
va_start(pcArg, pcszFormat);
_vsnprintf(cBuffer, 0x8000, pcszFormat, pcArg);
va_end(pcArg);
FILE *phFile;
#define LOG_FILE "C:\\IIEP.LOG"
if (s_bLogFileOpened)
{
phFile = fopen(LOG_FILE, "a+");
}
else
{
phFile = fopen(LOG_FILE, "w");
s_bLogFileOpened = true;
}
if (phFile)
{
fprintf(phFile, cBuffer);
fclose(phFile);
}
}
// ------------------------------------------------------------------------------------------------
void IIEP::WriteLog(const WORD *pcwsFormat, ...)
{
WCHAR wcBuffer[0x8000];
va_list pcArg;
va_start(pcArg, pcwsFormat);
_vsnwprintf(wcBuffer, 0x8000, pcwsFormat, pcArg);
va_end(pcArg);
FILE *phFile;
#define LOG_FILE "C:\\IIEP.LOG"
if (s_bLogFileOpened)
{
phFile = fopen(LOG_FILE, "a");
}
else
{
phFile = fopen(LOG_FILE, "w");
s_bLogFileOpened = true;
}
if (phFile)
{
fwprintf(phFile, wcBuffer);
fclose(phFile);
}
}
// ------------------------------------------------------------------------------------------------

View File

@ -0,0 +1,35 @@
// ------------------------------------------------------------------------------------------------
#include <windows.h>
#include <IIEP_Def.H>
// ------------------------------------------------------------------------------------------------
// name: Lock()
// desc:
// ------------------------------------------------------------------------------------------------
void IIEP::CMutex::Lock(void)
{
while (m_bLocked)
{
::Sleep(1);
}
m_bLocked = true;
}
// ------------------------------------------------------------------------------------------------
// name: Wait()
// desc:
// ------------------------------------------------------------------------------------------------
void IIEP::CMutex::Wait(void)
{
while (m_bLocked)
{
::Sleep(1);
}
}
// ------------------------------------------------------------------------------------------------

View File

@ -0,0 +1,586 @@
// ------------------------------------------------------------------------------------------------
#include <IIEP_Def.H>
#include <CORE/SourceFilter_MP3.H>
// ------------------------------------------------------------------------------------------------
extern BYTE g_ucWaveHeader[WAVE_HEADER_LENGTH];
// ------------------------------------------------------------------------------------------------
// name: CMP3Stream()
// desc:
// ------------------------------------------------------------------------------------------------
static size_t read_sub(int fd, void *pBuf, size_t nSize)
{
if (fd)
{
IIEP::CMP3Stream *pcoStream = (IIEP::CMP3Stream *) fd;
return pcoStream -> ReadFile(pBuf, nSize);
}
return 0;
}
// ------------------------------------------------------------------------------------------------
// name: CMP3Stream()
// desc:
// ------------------------------------------------------------------------------------------------
static off_t seek_sub(int fd, off_t nOffset, int iOrigin)
{
if (fd)
{
IIEP::CMP3Stream *pcoStream = (IIEP::CMP3Stream *) fd;
return pcoStream -> SeekFile(nOffset, iOrigin);
}
return 0;
}
// ------------------------------------------------------------------------------------------------
// name: CMP3Stream()
// desc:
// ------------------------------------------------------------------------------------------------
IIEP::CMP3Stream::CMP3Stream(void)
{
m_dwKBPerSec = INFINITE;
m_dwTimeStart = 0;
m_pcoMH = 0;
m_dwTotalBlocks = 0;
m_dwAlignment = 4;
m_dwLength = 0;
m_dwPosition = 0;
memcpy(m_ucHeader, g_ucWaveHeader, WAVE_HEADER_LENGTH);
m_dwDataBufPos = 0;
m_dwDataBufLen = 0;
m_bSeekFlag = false;
}
// ------------------------------------------------------------------------------------------------
// name: ~CMP3Stream()
// desc:
// ------------------------------------------------------------------------------------------------
IIEP::CMP3Stream::~CMP3Stream(void)
{
Close();
}
// ------------------------------------------------------------------------------------------------
// name: SetSeekFlag()
// desc: called by IIEP::CPlayer::SetMediaPosition(QWORD qwPosition)
// ------------------------------------------------------------------------------------------------
void IIEP::CMP3Stream::SetSeekFlag(void)
{
m_bSeekFlag = true;
}
// ------------------------------------------------------------------------------------------------
// name: Open()
// desc:
// ------------------------------------------------------------------------------------------------
bool IIEP::CMP3Stream::Open(const WORD *pcwsFileName, CMediaType &coMT, DWORD dwKBPerSec)
{
Close();
//
if (MPG123_OK != mpg123_init())
{
goto OPEN_FAIL;
}
m_pcoMH = mpg123_new(NULL, NULL);
if (0 == m_pcoMH)
{
goto OPEN_FAIL;
}
if (false == OpenFile(pcwsFileName))
{
goto OPEN_FAIL;
}
if (MPG123_OK != mpg123_replace_reader(m_pcoMH, read_sub, seek_sub))
{
goto OPEN_FAIL;
}
if (MPG123_OK != mpg123_open_fd(m_pcoMH, (int) this))
{
goto OPEN_FAIL;
}
long nRate;
int iChannels;
int iEncoding;
if (MPG123_OK != mpg123_getformat(m_pcoMH, &nRate, &iChannels, &iEncoding))
{
goto OPEN_FAIL;
}
// Ensure that this output format will not change (it could, when we allow it)
mpg123_format_none(m_pcoMH);
mpg123_format(m_pcoMH, nRate, iChannels, iEncoding);
// scan & get total samples
mpg123_scan(m_pcoMH);
off_t nOff = mpg123_length(m_pcoMH);
if (nOff < 0)
{
goto OPEN_FAIL;
}
m_dwTotalBlocks = (DWORD) nOff;
// set other format
m_dwAlignment = iChannels * 2;
if (0 == m_dwAlignment)
{
m_dwAlignment = 4;
}
m_dwLength = m_dwTotalBlocks * m_dwAlignment + WAVE_HEADER_LENGTH;
WORD wChannels = (WORD ) iChannels;
DWORD dwSamplesPerSec = (DWORD) nRate;
DWORD dwAvgBytesPerSec = m_dwAlignment * dwSamplesPerSec;
WORD wBlockAlign = (WORD ) m_dwAlignment;
WORD wBitsPerSample = 16;
PWORD pwData;
PDWORD pdwData;
pdwData = (PDWORD) &m_ucHeader[0x04];
*pdwData = m_dwTotalBlocks * m_dwAlignment + WAVE_HEADER_LENGTH - 8;
pwData = (PWORD) &m_ucHeader[0x16];
*pwData = wChannels;
pdwData = (PDWORD) &m_ucHeader[0x18];
*pdwData = dwSamplesPerSec;
pdwData = (PDWORD) &m_ucHeader[0x1C];
*pdwData = dwAvgBytesPerSec;
pwData = (PWORD) &m_ucHeader[0x20];
*pwData = wBlockAlign;
pwData = (PWORD) &m_ucHeader[0x22];
*pwData = wBitsPerSample;
pdwData = (PDWORD) &m_ucHeader[0x28];
*pdwData = m_dwTotalBlocks * m_dwAlignment;
coMT.majortype = MEDIATYPE_Stream;
coMT.subtype = MEDIASUBTYPE_WAVE;
SetPointer(0);
m_dwTimeStart = ::timeGetTime();
return true;
OPEN_FAIL:
Close();
return false;
}
// ------------------------------------------------------------------------------------------------
// name: Close()
// desc:
// ------------------------------------------------------------------------------------------------
void IIEP::CMP3Stream::Close(void)
{
m_coFileIn.Close();
if (m_pcoMH)
{
mpg123_close (m_pcoMH);
mpg123_delete(m_pcoMH);
m_pcoMH = 0;
}
mpg123_exit();
m_dwTimeStart = 0;
m_dwTotalBlocks = 0;
m_dwLength = 0;
m_dwPosition = 0;
m_bSeekFlag = false;
m_nDataBegin = 0;
m_nDataTotal = 0;
}
// ------------------------------------------------------------------------------------------------
// name: SetPointer()
// desc:
// ------------------------------------------------------------------------------------------------
HRESULT IIEP::CMP3Stream::SetPointer(LONGLONG llPos)
{
if (llPos < 0 || llPos > (LONGLONG) m_dwLength)
{
return S_FALSE;
}
m_dwPosition = (DWORD) llPos;
if (llPos < WAVE_HEADER_LENGTH)
{
mpg123_seek(m_pcoMH, 0, SEEK_SET);
m_dwDataBufLen = 0;
}
else
{
if (m_bSeekFlag && m_dwAlignment > 0)
{
m_bSeekFlag = false;
mpg123_seek(m_pcoMH, (long) (m_dwPosition - WAVE_HEADER_LENGTH) / m_dwAlignment, SEEK_SET);
m_dwDataBufLen = 0;
}
}
return S_OK;
}
// ------------------------------------------------------------------------------------------------
// name: Read()
// desc:
// ------------------------------------------------------------------------------------------------
HRESULT IIEP::CMP3Stream::Read(PBYTE pucBuffer,
DWORD dwBytesToRead,
BOOL bAlign,
LPDWORD pdwBytesRead)
{
if (0 == m_pcoMH) return S_FALSE;
CAutoLock lck(&m_csLock);
DWORD dwReadLength;
// wait until the bytes are here
DWORD dwTime = ::timeGetTime();
if (m_dwPosition + dwBytesToRead > m_dwLength)
{
dwReadLength = m_dwLength - m_dwPosition;
}
else
{
dwReadLength = dwBytesToRead;
}
DWORD dwTimeToArrive = (m_dwPosition + dwReadLength) / m_dwKBPerSec;
if (dwTime - m_dwTimeStart < dwTimeToArrive)
{
::Sleep(dwTimeToArrive - dwTime + m_dwTimeStart);
}
// read data
DWORD dwRead = 0;
if (m_dwPosition < WAVE_HEADER_LENGTH)
{
DWORD dwPatchLen = WAVE_HEADER_LENGTH - m_dwPosition;
if (dwReadLength < dwPatchLen)
{
dwPatchLen = dwReadLength;
}
memcpy(pucBuffer, m_ucHeader + m_dwPosition, dwPatchLen);
m_dwPosition += dwPatchLen;
dwReadLength -= dwPatchLen;
pucBuffer += dwPatchLen;
dwRead += dwPatchLen;
}
if (dwReadLength > 0)
{
while (m_dwDataBufLen < dwReadLength)
{
if (m_dwDataBufLen > 0)
{
memcpy(pucBuffer, m_ucDataBuffer + m_dwDataBufPos, m_dwDataBufLen);
dwRead += m_dwDataBufLen;
dwReadLength -= m_dwDataBufLen;
pucBuffer += m_dwDataBufLen;
m_dwDataBufPos += m_dwDataBufLen;
m_dwDataBufLen = 0;
}
if (DecodeFrame() == false) break;
}
if (dwReadLength > 0)
{
if (m_dwDataBufLen >= dwReadLength)
{
memcpy(pucBuffer, m_ucDataBuffer + m_dwDataBufPos, dwReadLength);
dwRead += dwReadLength;
m_dwDataBufPos += dwReadLength;
m_dwDataBufLen -= dwReadLength;
}
}
}
m_dwPosition += dwRead;
*pdwBytesRead = dwRead;
return S_OK;
}
// ------------------------------------------------------------------------------------------------
// name: Size()
// desc:
// ------------------------------------------------------------------------------------------------
LONGLONG IIEP::CMP3Stream::Size(LONGLONG *pSizeAvailable)
{
// LONGLONG llCurrentAvailable = Int32x32To64((::timeGetTime() - m_dwTimeStart), m_dwKBPerSec);
LONGLONG llLength = (LONGLONG) m_dwTotalBlocks * m_dwAlignment + WAVE_HEADER_LENGTH;
if (pSizeAvailable)
{
// *pSizeAvailable = min(llLength, llCurrentAvailable);
*pSizeAvailable = llLength;
}
return llLength;
}
// ------------------------------------------------------------------------------------------------
// name: Alignment()
// desc:
// ------------------------------------------------------------------------------------------------
DWORD IIEP::CMP3Stream::Alignment(void)
{
return m_dwAlignment;
}
// ------------------------------------------------------------------------------------------------
// name: Lock()
// desc:
// ------------------------------------------------------------------------------------------------
void IIEP::CMP3Stream::Lock(void)
{
m_csLock.Lock();
}
// ------------------------------------------------------------------------------------------------
// name: Unlock()
// desc:
// ------------------------------------------------------------------------------------------------
void IIEP::CMP3Stream::Unlock(void)
{
m_csLock.Unlock();
}
// ------------------------------------------------------------------------------------------------
// name: DecodeFrame()
// desc:
// ------------------------------------------------------------------------------------------------
bool IIEP::CMP3Stream::DecodeFrame(void)
{
if (0 == m_dwDataBufLen)
{
m_dwDataBufPos = 0;
}
if (m_dwDataBufPos + m_dwDataBufLen + MP3_DECODE_LEN > MP3_DECODE_BUF_LEN)
{
return true;
}
size_t nBytesRead = 0;
mpg123_read(m_pcoMH, m_ucDataBuffer + m_dwDataBufPos + m_dwDataBufLen, MP3_DECODE_LEN, &nBytesRead);
m_dwDataBufLen += (DWORD) nBytesRead;
return (m_dwDataBufLen > 0);
}
// ------------------------------------------------------------------------------------------------
// name: OpenFile()
// desc:
// ------------------------------------------------------------------------------------------------
bool IIEP::CMP3Stream::OpenFile(const WORD *pcwsFileName)
{
if (m_coFileIn.Open(pcwsFileName))
{
m_nDataBegin = 0;
m_nDataTotal = m_coFileIn.GetFileSize();
// check ID3 Tag V2.x
BYTE ucBuffer[8];
bool bFound;
TRY_ID3_AGAIN:
bFound = false;
if (6 == m_coFileIn.Read(ucBuffer, 6))
{
if (ucBuffer[0] == 'I' &&
ucBuffer[1] == 'D' &&
ucBuffer[2] == '3')
{
bFound = true;
DWORD dwHeaderSize;
if (m_coFileIn.ReadInverseDW(dwHeaderSize))
{
dwHeaderSize = ((dwHeaderSize & 0x7F000000) >> 3) +
((dwHeaderSize & 0x007F0000) >> 2) +
((dwHeaderSize & 0x00007F00) >> 1) +
((dwHeaderSize & 0x0000007F) );
dwHeaderSize += 10;
m_nDataBegin += dwHeaderSize;
m_nDataTotal -= dwHeaderSize;
if (ucBuffer[3] >= 0x03) // ID3 Tag version >= 2.3
{
if (ucBuffer[5] & 0x40) // has extended header
{
if (m_coFileIn.ReadInverseDW(dwHeaderSize))
{
dwHeaderSize = ((dwHeaderSize & 0x7F000000) >> 3) +
((dwHeaderSize & 0x007F0000) >> 2) +
((dwHeaderSize & 0x00007F00) >> 1) +
((dwHeaderSize & 0x0000007F) );
dwHeaderSize += 4;
m_nDataBegin += dwHeaderSize;
m_nDataTotal -= dwHeaderSize;
}
}
}
}
}
}
SeekFile(0, SEEK_SET);
if (bFound)
{
goto TRY_ID3_AGAIN;
}
/*
m_coFileIn.Read(ucBuffer, 2);
if (ucBuffer[0] != 0xFF || ucBuffer[1] < 0xF0)
{
m_nDataBegin ++;
m_nDataTotal --;
SeekFile(0, SEEK_SET);
goto TRY_ID3_AGAIN;
}
SeekFile(0, SEEK_SET);
*/
return true;
}
return false;
}
// ------------------------------------------------------------------------------------------------
// name: ReadFile()
// desc:
// ------------------------------------------------------------------------------------------------
DWORD IIEP::CMP3Stream::ReadFile(PVOID pBuf, DWORD dwLen)
{
return m_coFileIn.Read(pBuf, dwLen);
}
// ------------------------------------------------------------------------------------------------
// name: SeekFile()
// desc:
// ------------------------------------------------------------------------------------------------
long IIEP::CMP3Stream::SeekFile(long nOffset, int iOrigin)
{
switch (iOrigin)
{
case SEEK_SET:
if (nOffset < 0 || nOffset >= m_nDataTotal) return -1;
break;
case SEEK_CUR:
nOffset += (m_coFileIn.GetReadPosition() - m_nDataBegin);
if (nOffset < 0 || nOffset >= m_nDataTotal) return -1;
break;
case SEEK_END:
nOffset = m_nDataTotal - 1 + nOffset;
if (nOffset < 0 || nOffset >= m_nDataTotal) return -1;
break;
}
if (m_coFileIn.Seek(nOffset + m_nDataBegin, SEEK_SET))
{
return nOffset;
}
return -1;
}
// ------------------------------------------------------------------------------------------------

View File

@ -0,0 +1,245 @@
<?xml version="1.0" encoding="gb2312"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="libMPG123"
ProjectGUID="{5227AA93-1E16-49FC-AE09-939AA023A7C1}"
Keyword="Win32Proj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="..\LIB"
IntermediateDirectory="\TEMP\libMPG123\Debug"
ConfigurationType="4"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="REAL_IS_FLOAT;OPT_X86;OPT_GENERIC; WIN32;_DEBUG;_LIB"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="3"
DisableSpecificWarnings="4305"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLibrarianTool"
OutputFile="$(OutDir)/libMPG123_d.lib"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="..\LIB"
IntermediateDirectory="\TEMP\libMPG123\Release"
ConfigurationType="4"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
GlobalOptimizations="TRUE"
ImproveFloatingPointConsistency="TRUE"
FavorSizeOrSpeed="2"
OmitFramePointers="TRUE"
EnableFiberSafeOptimizations="TRUE"
OptimizeForProcessor="2"
OptimizeForWindowsApplication="TRUE"
PreprocessorDefinitions="REAL_IS_FLOAT;OPT_X86;OPT_GENERIC; WIN32;NDEBUG;_LIB"
StringPooling="TRUE"
RuntimeLibrary="0"
StructMemberAlignment="1"
BufferSecurityCheck="FALSE"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="0"
DisableSpecificWarnings="4305"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLibrarianTool"
OutputFile="$(OutDir)/libMPG123.lib"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="libMPG123"
Filter="">
<File
RelativePath=".\compat.c">
</File>
<File
RelativePath=".\compat.h">
</File>
<File
RelativePath=".\dct64.c">
</File>
<File
RelativePath=".\dct64_i386.c">
</File>
<File
RelativePath=".\debug.h">
</File>
<File
RelativePath=".\decode.c">
</File>
<File
RelativePath=".\decode.h">
</File>
<File
RelativePath=".\decode_2to1.c">
</File>
<File
RelativePath=".\decode_4to1.c">
</File>
<File
RelativePath=".\decode_i386.c">
</File>
<File
RelativePath=".\decode_ntom.c">
</File>
<File
RelativePath=".\decode_sse3d.h">
</File>
<File
RelativePath=".\dnoise.c">
</File>
<File
RelativePath=".\equalizer.c">
</File>
<File
RelativePath=".\format.c">
</File>
<File
RelativePath=".\frame.c">
</File>
<File
RelativePath=".\frame.h">
</File>
<File
RelativePath=".\getbits.h">
</File>
<File
RelativePath=".\getcpuflags.h">
</File>
<File
RelativePath=".\huffman.h">
</File>
<File
RelativePath=".\icy.c">
</File>
<File
RelativePath=".\icy.h">
</File>
<File
RelativePath=".\id3.c">
</File>
<File
RelativePath=".\id3.h">
</File>
<File
RelativePath=".\l2tables.h">
</File>
<File
RelativePath=".\layer1.c">
</File>
<File
RelativePath=".\layer2.c">
</File>
<File
RelativePath=".\layer3.c">
</File>
<File
RelativePath=".\libmpg123.c">
</File>
<File
RelativePath=".\mangle.h">
</File>
<File
RelativePath=".\mpg123lib_intern.h">
</File>
<File
RelativePath=".\optimize.c">
</File>
<File
RelativePath=".\optimize.h">
</File>
<File
RelativePath=".\parse.c">
</File>
<File
RelativePath=".\parse.h">
</File>
<File
RelativePath=".\reader.h">
</File>
<File
RelativePath=".\readers.c">
</File>
<File
RelativePath=".\stringbuf.c">
</File>
<File
RelativePath=".\tabinit.c">
</File>
<File
RelativePath=".\testcpu.c">
</File>
<File
RelativePath=".\true.h">
</File>
</Filter>
<File
RelativePath=".\config.h">
</File>
<File
RelativePath=".\mpg123.h">
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

35
node_modules/lame/deps/mpg123/ports/MSVC++/config.h generated vendored Normal file
View File

@ -0,0 +1,35 @@
#define strcasecmp _strcmpi
#define strncasecmp _strnicmp
#define strdup _strdup
#define HAVE_STRERROR 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_STRDUP
#define HAVE_STDLIB_H
#define HAVE_STRING_H
/* We want some frame index, eh? */
#define FRAME_INDEX 1
#define INDEX_SIZE 1000
/* also gapless playback! */
#define GAPLESS 1
/* #ifdef GAPLESS
#undef GAPLESS
#endif */
/* #define DEBUG
#define EXTRA_DEBUG */
#define REAL_IS_FLOAT
#define inline __inline
/* we are on win32 */
#define HAVE_WINDOWS_H
/* use the unicode support within libmpg123 */
#ifdef UNICODE
#define WANT_WIN32_UNICODE
#endif

View File

@ -0,0 +1,240 @@
/*
feedseek: test program for libmpg123, showing how to use fuzzy seeking in feeder mode
copyright 2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
*/
#include <mpg123.h>
#include <stdio.h>
#include <tchar.h>
#include <wchar.h>
#define INBUFF 16384 * 2 * 2
#define WAVE_FORMAT_PCM 0x0001
#define WAVE_FORMAT_IEEE_FLOAT 0x0003
FILE *out;
size_t totaloffset, dataoffset;
long rate;
int channels, enc;
unsigned short bitspersample, wavformat;
// write wav header
void initwav()
{
unsigned int tmp32 = 0;
unsigned short tmp16 = 0;
fwrite("RIFF", 1, 4, out);
totaloffset = ftell(out);
fwrite(&tmp32, 1, 4, out); // total size
fwrite("WAVE", 1, 4, out);
fwrite("fmt ", 1, 4, out);
tmp32 = 16;
fwrite(&tmp32, 1, 4, out); // format length
tmp16 = wavformat;
fwrite(&tmp16, 1, 2, out); // format
tmp16 = channels;
fwrite(&tmp16, 1, 2, out); // channels
tmp32 = rate;
fwrite(&tmp32, 1, 4, out); // sample rate
tmp32 = rate * bitspersample/8 * channels;
fwrite(&tmp32, 1, 4, out); // bytes / second
tmp16 = bitspersample/8 * channels; // float 16 or signed int 16
fwrite(&tmp16, 1, 2, out); // block align
tmp16 = bitspersample;
fwrite(&tmp16, 1, 2, out); // bits per sample
fwrite("data ", 1, 4, out);
tmp32 = 0;
dataoffset = ftell(out);
fwrite(&tmp32, 1, 4, out); // data length
}
// rewrite wav header with final length infos
void closewav()
{
unsigned int tmp32 = 0;
unsigned short tmp16 = 0;
long total = ftell(out);
fseek(out, totaloffset, SEEK_SET);
tmp32 = total - (totaloffset + 4);
fwrite(&tmp32, 1, 4, out);
fseek(out, dataoffset, SEEK_SET);
tmp32 = total - (dataoffset + 4);
fwrite(&tmp32, 1, 4, out);
}
// determine correct wav format and bits per sample
// from mpg123 enc value
void initwavformat()
{
if(enc & MPG123_ENC_FLOAT_64)
{
bitspersample = 64;
wavformat = WAVE_FORMAT_IEEE_FLOAT;
}
else if(enc & MPG123_ENC_FLOAT_32)
{
bitspersample = 32;
wavformat = WAVE_FORMAT_IEEE_FLOAT;
}
else if(enc & MPG123_ENC_16)
{
bitspersample = 16;
wavformat = WAVE_FORMAT_PCM;
}
else
{
bitspersample = 8;
wavformat = WAVE_FORMAT_PCM;
}
}
int _tmain(int argc, TCHAR **argv)
{
unsigned char buf[INBUFF];
unsigned char *audio;
FILE *in;
mpg123_handle *m;
int ret, state;
size_t inc, outc;
off_t len, num;
size_t bytes;
off_t inoffset;
size_t nrates;
const long *rates;
size_t i;
inc = outc = 0;
nrates = 0;
rates = NULL;
if(argc < 3)
{
fprintf(stderr,"Please supply in and out filenames\n");
return -1;
}
mpg123_init();
m = mpg123_new(NULL, &ret);
if(m == NULL)
{
fprintf(stderr,"Unable to create mpg123 handle: %s\n", mpg123_plain_strerror(ret));
return -1;
}
mpg123_param(m, MPG123_VERBOSE, 4, 0);
ret = mpg123_param(m, MPG123_FLAGS, MPG123_FUZZY | MPG123_SEEKBUFFER | MPG123_GAPLESS, 0);
if(ret != MPG123_OK)
{
fprintf(stderr,"Unable to set library options: %s\n", mpg123_plain_strerror(ret));
return -1;
}
// Let the seek index auto-grow and contain an entry for every frame
ret = mpg123_param(m, MPG123_INDEX_SIZE, -1, 0);
if(ret != MPG123_OK)
{
fprintf(stderr,"Unable to set index size: %s\n", mpg123_plain_strerror(ret));
return -1;
}
// Use float output formats only
ret = mpg123_format_none(m);
if(ret != MPG123_OK)
{
fprintf(stderr,"Unable to disable all output formats: %s\n", mpg123_plain_strerror(ret));
return -1;
}
mpg123_rates(&rates, &nrates);
for(i=0; i<nrates; i++)
{
ret = mpg123_format(m, rates[i], MPG123_MONO | MPG123_STEREO, MPG123_ENC_FLOAT_32);
if(ret != MPG123_OK)
{
fprintf(stderr,"Unable to set float output formats: %s\n", mpg123_plain_strerror(ret));
return -1;
}
}
ret = mpg123_open_feed(m);
if(ret != MPG123_OK)
{
fprintf(stderr,"Unable open feed: %s\n", mpg123_plain_strerror(ret));
return -1;
}
in = _tfopen(argv[1], __T("rb"));
if(in == NULL)
{
_ftprintf(stderr,__T("Unable to open input file %s\n"), argv[1]);
return -1;
}
out = _tfopen(argv[2], __T("wb"));
if(out == NULL)
{
_ftprintf(stderr,__T("Unable to open output file %s\n"), argv[2]);
return -1;
}
while(ret = mpg123_feedseek(m, 95000, SEEK_SET, &inoffset) == MPG123_NEED_MORE)
{
len = fread(buf, sizeof(unsigned char), INBUFF, in);
if(len <= 0)
break;
inc += len;
state = mpg123_feed(m, buf, len);
if(state == MPG123_ERR)
{
fprintf(stderr, "Error: %s", mpg123_strerror(m));
return -1;
}
}
fseek(in, inoffset, SEEK_SET);
while(1)
{
len = fread(buf, sizeof(unsigned char), INBUFF, in);
if(len <= 0)
break;
inc += len;
ret = mpg123_feed(m, buf, len);
while(ret != MPG123_ERR && ret != MPG123_NEED_MORE)
{
ret = mpg123_decode_frame(m, &num, &audio, &bytes);
if(ret == MPG123_NEW_FORMAT)
{
mpg123_getformat(m, &rate, &channels, &enc);
initwavformat();
initwav();
fprintf(stderr, "New format: %li Hz, %i channels, encoding value %i\n", rate, channels, enc);
}
fwrite(audio, sizeof(unsigned char), bytes, out);
outc += bytes;
}
if(ret == MPG123_ERR)
{
fprintf(stderr, "Error: %s", mpg123_strerror(m));
break;
}
}
fprintf(stderr, "Finished\n", (unsigned long)inc, (unsigned long)outc);
closewav();
fclose(out);
fclose(in);
mpg123_delete(m);
mpg123_exit();
return 0;
}

View File

@ -0,0 +1,47 @@
/*
scan: Estimate length (sample count) of a mpeg file and compare to length from exact scan.
copyright 2007 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
initially written by Thomas Orgis
*/
/* Note the lack of error checking here.
While it would be nicer to inform the user about troubles, libmpg123 is designed _not_ to bite you on operations with invalid handles , etc.
You just jet invalid results on invalid operations... */
#include <mpg123.h>
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
mpg123_handle *m;
int i;
if(argc < 2)
{
fprintf(stderr, "\nI will give you the estimated and exact sample lengths of MPEG audio files.\n");
fprintf(stderr, "\nUsage: %s <mpeg audio file list>\n\n", argv[0]);
return -1;
}
mpg123_init();
m = mpg123_new(NULL, NULL);
mpg123_param(m, MPG123_RESYNC_LIMIT, -1, 0); /* New in library version 0.0.1 . */
for(i = 1; i < argc; ++i)
{
off_t a, b;
mpg123_topen(m, argv[i]);
a = mpg123_length(m);
mpg123_scan(m);
b = mpg123_length(m);
mpg123_tclose(m);
printf("File %i: estimated %li vs. scanned %li\n", i, (long)a, (long)b);
}
mpg123_delete(m);
mpg123_exit();
return 0;
}

46
node_modules/lame/deps/mpg123/ports/MSVC++/mpg123.h generated vendored Normal file
View File

@ -0,0 +1,46 @@
/*
mpg123_msvc: MPEG Audio Decoder library wrapper header for MS VC++ 2005
copyright 2008 by the mpg123 project - free software under the terms of the LGPL 2.1
initially written by Patrick Dehne and Thomas Orgis.
*/
#ifndef MPG123_MSVC_H
#define MPG123_MSVC_H
#include <tchar.h>
#include <stdlib.h>
#include <sys/types.h>
typedef long ssize_t;
// Needed for Visual Studio versions before VS 2010.
#if (_MSC_VER < 1600)
typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
#else
#include <stdint.h>
#endif
#define PRIiMAX "I64i"
typedef __int64 intmax_t;
// ftell returns long, _ftelli64 returns __int64
// off_t is long, not __int64, use ftell
#define ftello ftell
#define MPG123_NO_CONFIGURE
#include "mpg123.h.in" /* Yes, .h.in; we include the configure template! */
#ifdef __cplusplus
extern "C" {
#endif
// Wrapper around mpg123_open that supports path names with unicode
// characters
EXPORT int mpg123_topen(mpg123_handle *fr, const _TCHAR *path);
EXPORT int mpg123_tclose(mpg123_handle *fr);
#ifdef __cplusplus
}
#endif
#endif

59
node_modules/lame/deps/mpg123/ports/MSVC++/msvc.c generated vendored Normal file
View File

@ -0,0 +1,59 @@
/*
msvc: libmpg123 add-ons for MSVC++
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
see COPYING and AUTHORS files in distribution or http://mpg123.org
originally written by Patrick Dehne (inspired by libmpg123/readers.c)
*/
#include "mpg123lib_intern.h"
#include <tchar.h>
#include <fcntl.h>
#include <io.h>
#include "debug.h"
int mpg123_topen(mpg123_handle *fr, const _TCHAR *path)
{
int ret;
int filept; /* descriptor of opened file/stream */
ret = mpg123_replace_reader(fr, _read, _lseek);
if(ret != MPG123_OK)
{
return ret;
}
if((filept = _topen(path, O_RDONLY|O_BINARY)) < 0)
{
/* Will not work with unicode path name
if(NOQUIET) error2("Cannot open file %s: %s", path, strerror(errno)); */
if(NOQUIET) error1("Cannot open file: %s", strerror(errno));
fr->err = MPG123_BAD_FILE;
return filept; /* error... */
}
if(mpg123_open_fd(fr, filept) == MPG123_OK) {
return MPG123_OK;
}
else
{
_close(filept);
return MPG123_ERR;
}
}
int mpg123_tclose(mpg123_handle *fr)
{
int ret, filept;
filept = fr->rdat.filept;
ret = mpg123_close(fr);
_close(filept);
return ret;
}

26
node_modules/lame/deps/mpg123/ports/README generated vendored Normal file
View File

@ -0,0 +1,26 @@
This directory contains some (contributed) works covering usage and/or building of mpg123/libmpg123 from different programming environments.
Note that those may be a bit outdated (especially when a file is added/removed in libmpg123 sources); as the team lacks resource to test everything. But in any case, the ports can provide a good starting point on the respective platform, to get it to work with minimal fuzz.
- Delphi: mpg123_.pas
Unit for linking against libmpg123 (Win32, DLL).
...by Arthur Pires <arthurprs@gmail.com>
- Sony PSP: Sony_PSP/; building libmpg123 for the PSP (used for the MODO player).
...by Bastian Pflieger <wb@illogical.de>
- MSVC++: Microsoft Windows / Visual C++ builds
- MSVC++/CMP3Stream:
project for building libmpg123 with interface class.
...by "Gates Fan" <gatesfan@gmail.com>
- MSVC++/mpg123.h
A wrapper header over mpg123.h.in (yes, the template file in ../src/libmpg123) to use in MSVC++ projects that link to libmpg123.
- MSVC++/2005 and MSVC++/2008 contain project files for building and using libmpg123 with the corresponding versions of Microsoft Visual C++.
To use it add the project to your solution. Then add a reference to libmpg123 from the project that wants to use it.
Also add ports/MSVC++ and src/libmpg123 to the include path.
If you want to use the asm build you will need yasm (http://www.tortall.net/projects/yasm/).
Please put yasm.exe into a directory where MSVC++ can find it. Finally switch the libmpg123 project to the
Release_MMX_Dll build using the Visual Studio Configuration Manager.
- Xcode contains the project file for building and using libmpg123 with
Xcode for Mac and iOS (arm and simulator builds). Please add the
ports/Xcode folder to the header search path of your project so that
Xcode can find the right mpg123.h and config.h. Then drag the mpg123
Xcode project into your own project. Finally in your build target, build
phases, add mpg123-ios or mpg123-mac to the libraries to link.

View File

@ -0,0 +1,38 @@
PSPSDK = $(shell psp-config --pspsdk-path)
PSPDIR = $(shell psp-config --psp-prefix)
#DEFINES := PSP OPT_GENERIC REAL_IS_FIXED HAVE_CONFIG_H
DEFINES := PSP OPT_GENERIC REAL_IS_FLOAT HAVE_CONFIG_H
#DEFINES := PSP OPT_GENERIC FLOATOUT REAL_IS_FLOAT HAVE_CONFIG_H
DEFINEFLAGS := $(addprefix -D,$(DEFINES))
INCDIR := ../.
CFLAGS = -g -O2 -Wall -fomit-frame-pointer -funroll-all-loops -finline-functions -ffast-math $(DEFINEFLAGS)
MPG123_OBJS = compat.o parse.o frame.o format.o index.o synth.o synth_8bit.o \
ntom.o icy2utf8.o synth_real.o synth_s32.o\
equalizer.o icy.o id3.o layer1.o layer2.o layer3.o optimize.o readers.o tabinit.o stringbuf.o libmpg123.o dct64.o
MPG123_LIB_FILE = ./libmpg123.a
OBJS = $(MPG123_OBJS)
TARGET_LIB = $(MPG123_LIB_FILE)
include $(PSPSDK)/lib/build.mak
####################
## Makefile rules ##
####################
install: $(MPG123_LIB_FILE)
@echo ""
@echo "**********************************************************************"
@echo "Installing libstsound into $(PSPDIR)"
@mkdir -p $(PSPDIR)/include $(PSPDIR)/lib
@cp -v mpg123.h $(PSPDIR)/include
@cp -v libmpg123.a $(PSPDIR)/lib
@echo "Done"
@echo "**********************************************************************"
@echo ""

11
node_modules/lame/deps/mpg123/ports/Sony_PSP/README generated vendored Normal file
View File

@ -0,0 +1,11 @@
Hi
* Place Makefile.psp in the directory src/libmpg123.
* Patch readers.c (present in src/libmpg123) using readers.c.patch
* Place Config.h in directory src/
* cd to src/libmpg123 and do "make -f Makefile.psp install"
Tested on mpg123 1.4.x and psptoolchain rev. 2398
Regards
Bastian

368
node_modules/lame/deps/mpg123/ports/Sony_PSP/config.h generated vendored Normal file
View File

@ -0,0 +1,368 @@
/* src/config.h. Generated from config.h.in by configure. */
/* src/config.h.in. Generated from configure.ac by autoheader. */
/* Define if your architecture wants/needs/can use attribute_align_arg and
alignment checks. It's for 32bit x86... */
#define ABI_ALIGN_FUN 1
/* Define to use proper rounding. */
/* #undef ACCURATE_ROUNDING */
/* Define if .align takes 3 for alignment of 2^3=8 bytes instead of 8. */
/* #undef ASMALIGN_EXP */
/* Define if __attribute__((aligned(16))) shall be used */
/* #undef CCALIGN */
/* Define if checking of stack alignment is wanted. */
#define CHECK_ALIGN 1
/* Define if debugging is enabled. */
/* #undef DEBUG */
/* The default audio output module(s) to use */
#define DEFAULT_OUTPUT_MODULE "alsa,oss,esd,sdl,nas,arts"
/* Define if building with dynamcally linked libmpg123 */
#define DYNAMIC_BUILD 1
/* Define if FIFO support is enabled. */
#define FIFO 1
/* Define if frame index should be used. */
#define FRAME_INDEX 1
/* Define if gapless is enabled. */
#define GAPLESS 1
/* Define to 1 if you have the <Alib.h> header file. */
/* #undef HAVE_ALIB_H */
/* Define to 1 if you have the <arpa/inet.h> header file. */
#define HAVE_ARPA_INET_H 1
/* Define to 1 if you have the <asm/audioio.h> header file. */
/* #undef HAVE_ASM_AUDIOIO_H */
/* Define to 1 if you have the `atoll' function. */
#define HAVE_ATOLL 1
/* Define to 1 if you have the <audios.h> header file. */
/* #undef HAVE_AUDIOS_H */
/* Define to 1 if you have the <AudioToolbox/AudioToolbox.h> header file. */
/* #undef HAVE_AUDIOTOOLBOX_AUDIOTOOLBOX_H */
/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */
/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */
/* Define to 1 if you have the <CoreServices/CoreServices.h> header file. */
/* #undef HAVE_CORESERVICES_CORESERVICES_H */
/* Define to 1 if you have the <CUlib.h> header file. */
/* #undef HAVE_CULIB_H */
/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1
/* Define to 1 if you have the `getaddrinfo' function. */
#define HAVE_GETADDRINFO 1
/* Define to 1 if you have the `getpagesize' function. */
#define HAVE_GETPAGESIZE 1
/* Define to 1 if you have the `getuid' function. */
#define HAVE_GETUID 1
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if you have the <langinfo.h> header file. */
#define HAVE_LANGINFO_H 1
/* Define to 1 if you have the `m' library (-lm). */
#define HAVE_LIBM 1
/* Define to 1 if you have the `mx' library (-lmx). */
/* #undef HAVE_LIBMX */
/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define to 1 if you have the <linux/soundcard.h> header file. */
#define HAVE_LINUX_SOUNDCARD_H 1
/* Define to 1 if you have the <locale.h> header file. */
#define HAVE_LOCALE_H 1
/* Define if libltdl is available */
#define HAVE_LTDL 1
/* Define to 1 if you have the <machine/soundcard.h> header file. */
/* #undef HAVE_MACHINE_SOUNDCARD_H */
/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
/* Define to 1 if you have the `mkfifo' function. */
#define HAVE_MKFIFO 1
/* Define to 1 if you have a working `mmap' system call. */
#define HAVE_MMAP 1
/* Define to 1 if you have the <netdb.h> header file. */
#define HAVE_NETDB_H 1
/* Define to 1 if you have the <netinet/in.h> header file. */
#define HAVE_NETINET_IN_H 1
/* Define to 1 if you have the <netinet/tcp.h> header file. */
/* #undef HAVE_NETINET_TCP_H */
/* Define to 1 if you have the `nl_langinfo' function. */
#define HAVE_NL_LANGINFO 1
/* Define to 1 if you have the <os2me.h> header file. */
/* #undef HAVE_OS2ME_H */
/* Define to 1 if you have the <os2.h> header file. */
/* #undef HAVE_OS2_H */
/* Define to 1 if you have the `random' function. */
#define HAVE_RANDOM 1
/* Define to 1 if you have the <sched.h> header file. */
#define HAVE_SCHED_H 1
/* Define to 1 if you have the `sched_setscheduler' function. */
#define HAVE_SCHED_SETSCHEDULER 1
/* Define to 1 if you have the `setlocale' function. */
#define HAVE_SETLOCALE 1
/* Define to 1 if you have the `setpriority' function. */
#define HAVE_SETPRIORITY 1
/* Define to 1 if you have the `setuid' function. */
#define HAVE_SETUID 1
/* Define to 1 if you have the <signal.h> header file. */
#define HAVE_SIGNAL_H 1
/* Define to 1 if you have the <sndio.h> header file. */
/* #undef HAVE_SNDIO_H */
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
/* Define to 1 if you have the <stdio.h> header file. */
#define HAVE_STDIO_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the `strdup' function. */
#define HAVE_STRDUP 1
/* Define to 1 if you have the `strerror' function. */
#define HAVE_STRERROR 1
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the <sun/audioio.h> header file. */
/* #undef HAVE_SUN_AUDIOIO_H */
/* Define to 1 if you have the <sys/audioio.h> header file. */
/* #undef HAVE_SYS_AUDIOIO_H */
/* Define to 1 if you have the <sys/audio.h> header file. */
/* #undef HAVE_SYS_AUDIO_H */
/* Define to 1 if you have the <sys/ioctl.h> header file. */
#define HAVE_SYS_IOCTL_H 1
/* Define to 1 if you have the <sys/param.h> header file. */
#define HAVE_SYS_PARAM_H 1
/* Define to 1 if you have the <sys/resource.h> header file. */
#define HAVE_SYS_RESOURCE_H 1
/* Define to 1 if you have the <sys/signal.h> header file. */
#define HAVE_SYS_SIGNAL_H 1
/* Define to 1 if you have the <sys/socket.h> header file. */
#define HAVE_SYS_SOCKET_H 1
/* Define to 1 if you have the <sys/soundcard.h> header file. */
#define HAVE_SYS_SOUNDCARD_H 1
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <sys/wait.h> header file. */
#define HAVE_SYS_WAIT_H 1
/* Define this if you have the POSIX termios library */
#define HAVE_TERMIOS 1
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
/* Define to 1 if you have the <windows.h> header file. */
/* #undef HAVE_WINDOWS_H */
/* Define to indicate that float storage follows IEEE754. */
#define IEEE_FLOAT 1
/* size of the frame index seek table */
#define INDEX_SIZE 1000
/* Define if IPV6 support is enabled. */
#define IPV6 1
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#define LT_OBJDIR ".libs/"
/* Define if network support is enabled. */
/* #define NETWORK 1 */
/* Define to disable 16 bit integer output. */
/* #undef NO_16BIT */
/* Define to disable 32 bit integer output. */
/* define NO_32BIT 1 */
/* Define to disable 8 bit integer output. */
/* #undef NO_8BIT */
/* Define to disable downsampled decoding. */
/* #undef NO_DOWNSAMPLE */
/* Define to disable error messages in combination with a return value (the
return is left intact). */
/* #undef NO_ERETURN */
/* Define to disable error messages. */
/* #undef NO_ERRORMSG */
/* Define to disable feeder and buffered readers. */
/* #undef NO_FEEDER */
/* Define to disable ICY handling. */
/* #undef NO_ICY */
/* Define to disable ID3v2 parsing. */
/* #undef NO_ID3V2 */
/* Define to disable layer I. */
/* #undef NO_LAYER1 */
/* Define to disable layer II. */
/* #undef NO_LAYER2 */
/* Define to disable layer III. */
/* #undef NO_LAYER3 */
/* Define to disable ntom resampling. */
/* #undef NO_NTOM */
/* Define to disable real output. */
/* define NO_REAL 1 */
/* Define to disable string functions. */
/* #undef NO_STRING */
/* Define to disable warning messages. */
/* #undef NO_WARNING */
/* Name of package */
#define PACKAGE "mpg123"
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "mpg123-devel@lists.sourceforge.net"
/* Define to the full name of this package. */
#define PACKAGE_NAME "mpg123"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "mpg123 1.8rc5"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "mpg123"
/* Define to the version of this package. */
#define PACKAGE_VERSION "1.8rc5"
/* Define if portaudio v18 API is wanted. */
/* #undef PORTAUDIO18 */
/* The size of `int32_t', as computed by sizeof. */
#define SIZEOF_INT32_T 4
/* The size of `long', as computed by sizeof. */
#define SIZEOF_LONG 4
/* The size of `off_t', as computed by sizeof. */
#define SIZEOF_OFF_T 4
/* The size of `size_t', as computed by sizeof. */
#define SIZEOF_SIZE_T 4
/* The size of `ssize_t', as computed by sizeof. */
#define SIZEOF_SSIZE_T 4
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define if modules are enabled */
#define USE_MODULES 1
/* Version number of package */
#define VERSION "1.8rc5"
/* Number of bits in a file offset, on hosts where this is settable. */
/* #undef _FILE_OFFSET_BITS */
/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
/* Define to `__inline__' or `__inline' if that's what the C compiler
calls it, or to nothing if 'inline' is not supported under any name. */
#ifndef __cplusplus
/* #undef inline */
#endif
/* Define to `short' if <sys/types.h> does not define. */
/* #undef int16_t */
/* Define to `int' if <sys/types.h> does not define. */
/* #undef int32_t */
/* Define to `long int' if <sys/types.h> does not define. */
/* #undef off_t */
/* Define to `unsigned long' if <sys/types.h> does not define. */
/* #undef size_t */
/* Define to `long' if <sys/types.h> does not define. */
/* #undef ssize_t */
/* Define to `unsigned short' if <sys/types.h> does not define. */
/* #undef uint16_t */
/* Define to `unsigned int' if <sys/types.h> does not define. */
/* #undef uint32_t */

View File

@ -0,0 +1,2 @@
14a15
> #include <sys/fd_set.h>

197
node_modules/lame/deps/mpg123/ports/Xcode/config.h generated vendored Normal file
View File

@ -0,0 +1,197 @@
#include "TargetConditionals.h"
#if TARGET_IPHONE_SIMULATOR
#define DEFAULT_OUTPUT_MODULE "dummy"
/* #undef HAVE_AUDIOTOOLBOX_AUDIOTOOLBOX_H */
/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */
/* #undef HAVE_CORESERVICES_CORESERVICES_H */
/* #undef HAVE_OPENAL_ALC_H */
/* #undef HAVE_OPENAL_AL_H */
#define ABI_ALIGN_FUN 1
#define HAVE_GAI_ADDRCONFIG 1
#define LFS_ALIAS_BITS 32
/* #undef HAVE_LIBMX */
#define HAVE_MMAP 1
#define IEEE_FLOAT 1
#define SIZEOF_INT32_T 4
#define SIZEOF_LONG 4
#define SIZEOF_OFF_T 8
#define SIZEOF_SIZE_T 4
#define SIZEOF_SSIZE_T 4
#define OPT_GENERIC
#elif TARGET_OS_IPHONE
#define DEFAULT_OUTPUT_MODULE "dummy"
/* #undef HAVE_AUDIOTOOLBOX_AUDIOTOOLBOX_H */
/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */
/* #undef HAVE_CORESERVICES_CORESERVICES_H */
/* #undef HAVE_OPENAL_ALC_H */
/* #undef HAVE_OPENAL_AL_H */
/* #undef ABI_ALIGN_FUN */
/* #undef HAVE_GAI_ADDRCONFIG */
#define LFS_ALIAS_BITS 32
/* #undef HAVE_LIBMX */
/* #undef HAVE_MMAP */
/* #undef IEEE_FLOAT */
#define SIZEOF_INT32_T 4
#define SIZEOF_LONG 4
#define SIZEOF_OFF_T 8
#define SIZEOF_SIZE_T 4
#define SIZEOF_SSIZE_T 4
#define OPT_NEON
#elif TARGET_OS_MAC
#define DEFAULT_OUTPUT_MODULE "coreaudio"
#define HAVE_AUDIOTOOLBOX_AUDIOTOOLBOX_H 1
#define HAVE_AUDIOUNIT_AUDIOUNIT_H 1
#define HAVE_CORESERVICES_CORESERVICES_H 1
#define HAVE_OPENAL_ALC_H 1
#define HAVE_OPENAL_AL_H 1
/* #undef ABI_ALIGN_FUN */
#define HAVE_GAI_ADDRCONFIG 1
#define LFS_ALIAS_BITS 64
#define HAVE_LIBMX 1
#define HAVE_MMAP 1
#define IEEE_FLOAT 1
#define SIZEOF_INT32_T 4
#define SIZEOF_LONG 8
#define SIZEOF_OFF_T 8
#define SIZEOF_SIZE_T 8
#define SIZEOF_SIZE_T 8
#define SIZEOF_SSIZE_T 8
#define OPT_GENERIC
#else
#error "Unknown target."
#endif
/* #undef ACCURATE_ROUNDING */
/* #undef AC_APPLE_UNIVERSAL_BUILD */
#define ASMALIGN_EXP 1
#define CCALIGN 1
/* #undef DEBUG */
/* #undef DYNAMIC_BUILD */
#define FIFO 1
#define FRAME_INDEX 1
#define GAPLESS 1
/* #undef HAVE_ALC_H */
/* #undef HAVE_ALIB_H */
/* #undef HAVE_AL_ALC_H */
/* #undef HAVE_AL_AL_H */
/* #undef HAVE_AL_H */
#define HAVE_ARPA_INET_H 1
/* #undef HAVE_ASM_AUDIOIO_H */
#define HAVE_ATOLL 1
/* #undef HAVE_AUDIOS_H */
/* #undef HAVE_CULIB_H */
#define HAVE_DLFCN_H 1
#define HAVE_GETADDRINFO 1
#define HAVE_GETPAGESIZE 1
#define HAVE_GETUID 1
#define HAVE_INTTYPES_H 1
#define HAVE_LANGINFO_H 1
#define HAVE_LIBM 1
#define HAVE_LIMITS_H 1
/* #undef HAVE_LINUX_SOUNDCARD_H */
#define HAVE_LOCALE_H 1
/* #undef HAVE_LTDL */
/* #undef HAVE_MACHINE_SOUNDCARD_H */
#define HAVE_MEMORY_H 1
#define HAVE_MKFIFO 1
#define HAVE_NETDB_H 1
#define HAVE_NETINET_IN_H 1
/* #undef HAVE_NETINET_TCP_H */
#define HAVE_NL_LANGINFO 1
/* #undef HAVE_OS2ME_H */
/* #undef HAVE_OS2_H */
#define HAVE_RANDOM 1
#define HAVE_SCHED_H 1
/* #undef HAVE_SCHED_SETSCHEDULER */
#define HAVE_SETLOCALE 1
#define HAVE_SETPRIORITY 1
#define HAVE_SETUID 1
#define HAVE_SIGNAL_H 1
/* #undef HAVE_SNDIO_H */
#define HAVE_STDINT_H 1
#define HAVE_STDIO_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRDUP 1
#define HAVE_STRERROR 1
#define HAVE_STRINGS_H 1
#define HAVE_STRING_H 1
/* #undef HAVE_SUN_AUDIOIO_H */
/* #undef HAVE_SYS_AUDIOIO_H */
/* #undef HAVE_SYS_AUDIO_H */
#define HAVE_SYS_IOCTL_H 1
#define HAVE_SYS_PARAM_H 1
#define HAVE_SYS_RESOURCE_H 1
#define HAVE_SYS_SIGNAL_H 1
#define HAVE_SYS_SOCKET_H 1
/* #undef HAVE_SYS_SOUNDCARD_H */
#define HAVE_SYS_STAT_H 1
#define HAVE_SYS_TIME_H 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_WAIT_H 1
#define HAVE_TERMIOS 1
#define HAVE_UNISTD_H 1
/* #undef HAVE_WINDOWS_H */
/* #undef HAVE_WS2TCPIP_H */
#define INDEX_SIZE 1000
#define IPV6 1
#define LT_OBJDIR ".libs/"
#define MODULE_FILE_SUFFIX ".la"
#define NETWORK 1
/* #undef NO_16BIT */
/* #undef NO_32BIT */
/* #undef NO_8BIT */
/* #undef NO_DOWNSAMPLE */
/* #undef NO_ERETURN */
/* #undef NO_ERRORMSG */
/* #undef NO_FEEDER */
/* #undef NO_ICY */
/* #undef NO_ID3V2 */
/* #undef NO_LAYER1 */
/* #undef NO_LAYER2 */
/* #undef NO_LAYER3 */
/* #undef NO_NTOM */
/* #undef NO_REAL */
/* #undef NO_STRING */
/* #undef NO_WARNING */
#define PACKAGE "mpg123"
#define PACKAGE_BUGREPORT "mpg123-devel@lists.sourceforge.net"
#define PACKAGE_NAME "mpg123"
#define PACKAGE_STRING "mpg123 1.14.0"
#define PACKAGE_TARNAME "mpg123"
#define PACKAGE_URL ""
#define PACKAGE_VERSION "1.14.0"
/* #undef PORTAUDIO18 */
#define STDC_HEADERS 1
/* #undef USE_MODULES */
#define VERSION "1.14.0"
/* #undef WANT_WIN32_FIFO */
/* #undef WANT_WIN32_SOCKETS */
/* #undef WANT_WIN32_UNICODE */
/* #undef WINVER */
#if defined AC_APPLE_UNIVERSAL_BUILD
# if defined __BIG_ENDIAN__
# define WORDS_BIGENDIAN 1
# endif
#else
# ifndef WORDS_BIGENDIAN
/* # undef WORDS_BIGENDIAN */
# endif
#endif
/* #undef _FILE_OFFSET_BITS */
/* #undef _LARGE_FILES */
/* #undef _WIN32_WINNT */
/* #undef const */
#ifndef __cplusplus
/* #undef inline */
#endif
/* #undef int16_t */
/* #undef int32_t */
/* #undef off_t */
/* #undef size_t */
/* #undef ssize_t */
/* #undef uint16_t */
/* #undef uint32_t */
/* #undef uintptr_t */
#define REAL_IS_FLOAT

17
node_modules/lame/deps/mpg123/ports/Xcode/mpg123.h generated vendored Normal file
View File

@ -0,0 +1,17 @@
/*
mpg123.h: MPEG Audio Decoder library wrapper header for Xcode
copyright 2012 by the mpg123 project - free software under the terms of the LGPL 2.1
initially written by Patrick Dehne.
*/
#ifndef MPG123_XCODE_H
#define MPG123_XCODE_H
#include <stdlib.h>
#include <sys/types.h>
#define MPG123_NO_CONFIGURE
#include "../../src/libmpg123/mpg123.h.in" /* Yes, .h.in; we include the configure template! */
#endif

View File

@ -0,0 +1,670 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
CD132C23152A4B8000B4F5A8 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C21152A4B8000B4F5A8 /* config.h */; };
CD132C24152A4B8000B4F5A8 /* mpg123.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C22152A4B8000B4F5A8 /* mpg123.h */; };
CD132C7E152A4D7E00B4F5A8 /* compat.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C62152A4D7E00B4F5A8 /* compat.h */; };
CD132C7F152A4D7E00B4F5A8 /* decode.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C63152A4D7E00B4F5A8 /* decode.h */; };
CD132C80152A4D7E00B4F5A8 /* dither.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C64152A4D7E00B4F5A8 /* dither.h */; };
CD132C81152A4D7E00B4F5A8 /* frame.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C65152A4D7E00B4F5A8 /* frame.h */; };
CD132C82152A4D7E00B4F5A8 /* getbits.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C66152A4D7E00B4F5A8 /* getbits.h */; };
CD132C83152A4D7E00B4F5A8 /* getcpuflags.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C67152A4D7E00B4F5A8 /* getcpuflags.h */; };
CD132C84152A4D7E00B4F5A8 /* huffman.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C68152A4D7E00B4F5A8 /* huffman.h */; };
CD132C85152A4D7E00B4F5A8 /* icy.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C69152A4D7E00B4F5A8 /* icy.h */; };
CD132C86152A4D7E00B4F5A8 /* icy2utf8.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C6A152A4D7E00B4F5A8 /* icy2utf8.h */; };
CD132C87152A4D7E00B4F5A8 /* id3.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C6B152A4D7E00B4F5A8 /* id3.h */; };
CD132C88152A4D7E00B4F5A8 /* index.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C6C152A4D7E00B4F5A8 /* index.h */; };
CD132C89152A4D7E00B4F5A8 /* intsym.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C6D152A4D7E00B4F5A8 /* intsym.h */; };
CD132C8A152A4D7E00B4F5A8 /* l2tables.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C6E152A4D7E00B4F5A8 /* l2tables.h */; };
CD132C8B152A4D7E00B4F5A8 /* l3_integer_tables.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C6F152A4D7E00B4F5A8 /* l3_integer_tables.h */; };
CD132C8C152A4D7E00B4F5A8 /* l12_integer_tables.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C70152A4D7E00B4F5A8 /* l12_integer_tables.h */; };
CD132C8D152A4D7E00B4F5A8 /* mangle.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C71152A4D7E00B4F5A8 /* mangle.h */; };
CD132C8E152A4D7E00B4F5A8 /* mpg123lib_intern.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C73152A4D7E00B4F5A8 /* mpg123lib_intern.h */; };
CD132C8F152A4D7E00B4F5A8 /* optimize.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C74152A4D7E00B4F5A8 /* optimize.h */; };
CD132C90152A4D7E00B4F5A8 /* parse.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C75152A4D7E00B4F5A8 /* parse.h */; };
CD132C91152A4D7E00B4F5A8 /* reader.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C76152A4D7E00B4F5A8 /* reader.h */; };
CD132C92152A4D7E00B4F5A8 /* sample.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C77152A4D7E00B4F5A8 /* sample.h */; };
CD132C93152A4D7E00B4F5A8 /* synth_8bit.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C78152A4D7E00B4F5A8 /* synth_8bit.h */; };
CD132C94152A4D7E00B4F5A8 /* synth_mono.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C79152A4D7E00B4F5A8 /* synth_mono.h */; };
CD132C95152A4D7E00B4F5A8 /* synth_ntom.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C7A152A4D7E00B4F5A8 /* synth_ntom.h */; };
CD132C96152A4D7E00B4F5A8 /* synth.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C7B152A4D7E00B4F5A8 /* synth.h */; };
CD132C97152A4D7E00B4F5A8 /* synths.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C7C152A4D7E00B4F5A8 /* synths.h */; };
CD132C98152A4D7E00B4F5A8 /* true.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C7D152A4D7E00B4F5A8 /* true.h */; };
CD132CB3152A4E7000B4F5A8 /* compat.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C99152A4E7000B4F5A8 /* compat.c */; };
CD132CB4152A4E7000B4F5A8 /* dct64.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C9A152A4E7000B4F5A8 /* dct64.c */; };
CD132CB5152A4E7000B4F5A8 /* dither.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C9B152A4E7000B4F5A8 /* dither.c */; };
CD132CB6152A4E7000B4F5A8 /* equalizer.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C9C152A4E7000B4F5A8 /* equalizer.c */; };
CD132CB7152A4E7000B4F5A8 /* feature.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C9D152A4E7000B4F5A8 /* feature.c */; };
CD132CB8152A4E7000B4F5A8 /* format.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C9E152A4E7000B4F5A8 /* format.c */; };
CD132CB9152A4E7000B4F5A8 /* frame.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C9F152A4E7000B4F5A8 /* frame.c */; };
CD132CBA152A4E7000B4F5A8 /* icy.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA0152A4E7000B4F5A8 /* icy.c */; };
CD132CBB152A4E7000B4F5A8 /* icy2utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA1152A4E7000B4F5A8 /* icy2utf8.c */; };
CD132CBC152A4E7000B4F5A8 /* id3.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA2152A4E7000B4F5A8 /* id3.c */; };
CD132CBD152A4E7000B4F5A8 /* index.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA3152A4E7000B4F5A8 /* index.c */; };
CD132CBE152A4E7000B4F5A8 /* layer1.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA4152A4E7000B4F5A8 /* layer1.c */; };
CD132CBF152A4E7000B4F5A8 /* layer2.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA5152A4E7000B4F5A8 /* layer2.c */; };
CD132CC0152A4E7000B4F5A8 /* layer3.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA6152A4E7000B4F5A8 /* layer3.c */; };
CD132CC1152A4E7000B4F5A8 /* lfs_alias.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA7152A4E7000B4F5A8 /* lfs_alias.c */; };
CD132CC2152A4E7000B4F5A8 /* libmpg123.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA8152A4E7000B4F5A8 /* libmpg123.c */; };
CD132CC3152A4E7000B4F5A8 /* ntom.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA9152A4E7000B4F5A8 /* ntom.c */; };
CD132CC4152A4E7000B4F5A8 /* optimize.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CAA152A4E7000B4F5A8 /* optimize.c */; };
CD132CC5152A4E7000B4F5A8 /* parse.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CAB152A4E7000B4F5A8 /* parse.c */; };
CD132CC6152A4E7000B4F5A8 /* readers.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CAC152A4E7000B4F5A8 /* readers.c */; };
CD132CC7152A4E7000B4F5A8 /* stringbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CAD152A4E7000B4F5A8 /* stringbuf.c */; };
CD132CC8152A4E7000B4F5A8 /* synth_8bit.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CAE152A4E7000B4F5A8 /* synth_8bit.c */; };
CD132CC9152A4E7000B4F5A8 /* synth_real.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CAF152A4E7000B4F5A8 /* synth_real.c */; };
CD132CCA152A4E7000B4F5A8 /* synth_s32.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CB0152A4E7000B4F5A8 /* synth_s32.c */; };
CD132CCB152A4E7000B4F5A8 /* synth.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CB1152A4E7000B4F5A8 /* synth.c */; };
CD132CCC152A4E7000B4F5A8 /* tabinit.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CB2152A4E7000B4F5A8 /* tabinit.c */; };
CD132CD6152A511C00B4F5A8 /* dct64_neon_float.S in Sources */ = {isa = PBXBuildFile; fileRef = CD132CCD152A511800B4F5A8 /* dct64_neon_float.S */; };
CD132CD7152A511C00B4F5A8 /* dct64_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = CD132CCE152A511900B4F5A8 /* dct64_neon.S */; };
CD132CD9152A511C00B4F5A8 /* synth_neon_float.S in Sources */ = {isa = PBXBuildFile; fileRef = CD132CD0152A511A00B4F5A8 /* synth_neon_float.S */; };
CD132CDA152A511C00B4F5A8 /* synth_neon_s32.S in Sources */ = {isa = PBXBuildFile; fileRef = CD132CD1152A511A00B4F5A8 /* synth_neon_s32.S */; };
CD132CDB152A511C00B4F5A8 /* synth_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = CD132CD2152A511A00B4F5A8 /* synth_neon.S */; };
CD132CDC152A511C00B4F5A8 /* synth_stereo_neon_float.S in Sources */ = {isa = PBXBuildFile; fileRef = CD132CD3152A511B00B4F5A8 /* synth_stereo_neon_float.S */; };
CD132CDD152A511C00B4F5A8 /* synth_stereo_neon_s32.S in Sources */ = {isa = PBXBuildFile; fileRef = CD132CD4152A511B00B4F5A8 /* synth_stereo_neon_s32.S */; };
CD132CDE152A511C00B4F5A8 /* synth_stereo_neon.S in Sources */ = {isa = PBXBuildFile; fileRef = CD132CD5152A511C00B4F5A8 /* synth_stereo_neon.S */; };
CDB0288C152B760700B01410 /* compat.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C99152A4E7000B4F5A8 /* compat.c */; };
CDB0288D152B760700B01410 /* compat.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C62152A4D7E00B4F5A8 /* compat.h */; };
CDB0288E152B760700B01410 /* dct64.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C9A152A4E7000B4F5A8 /* dct64.c */; };
CDB02890152B760D00B01410 /* decode.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C63152A4D7E00B4F5A8 /* decode.h */; };
CDB02891152B760D00B01410 /* dither.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C64152A4D7E00B4F5A8 /* dither.h */; };
CDB02892152B760D00B01410 /* dither.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C9B152A4E7000B4F5A8 /* dither.c */; };
CDB02893152B760D00B01410 /* equalizer.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C9C152A4E7000B4F5A8 /* equalizer.c */; };
CDB02894152B760D00B01410 /* feature.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C9D152A4E7000B4F5A8 /* feature.c */; };
CDB02895152B760D00B01410 /* format.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C9E152A4E7000B4F5A8 /* format.c */; };
CDB02896152B761300B01410 /* frame.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C65152A4D7E00B4F5A8 /* frame.h */; };
CDB02897152B761300B01410 /* frame.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132C9F152A4E7000B4F5A8 /* frame.c */; };
CDB02898152B761300B01410 /* getbits.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C66152A4D7E00B4F5A8 /* getbits.h */; };
CDB02899152B761300B01410 /* getcpuflags.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C67152A4D7E00B4F5A8 /* getcpuflags.h */; };
CDB0289A152B761300B01410 /* huffman.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C68152A4D7E00B4F5A8 /* huffman.h */; };
CDB0289B152B761300B01410 /* icy.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C69152A4D7E00B4F5A8 /* icy.h */; };
CDB0289C152B761300B01410 /* icy.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA0152A4E7000B4F5A8 /* icy.c */; };
CDB0289D152B761300B01410 /* icy2utf8.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C6A152A4D7E00B4F5A8 /* icy2utf8.h */; };
CDB0289E152B761300B01410 /* icy2utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA1152A4E7000B4F5A8 /* icy2utf8.c */; };
CDB0289F152B761C00B01410 /* id3.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C6B152A4D7E00B4F5A8 /* id3.h */; };
CDB028A0152B761C00B01410 /* id3.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA2152A4E7000B4F5A8 /* id3.c */; };
CDB028A1152B761C00B01410 /* index.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C6C152A4D7E00B4F5A8 /* index.h */; };
CDB028A2152B761C00B01410 /* index.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA3152A4E7000B4F5A8 /* index.c */; };
CDB028A3152B761C00B01410 /* intsym.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C6D152A4D7E00B4F5A8 /* intsym.h */; };
CDB028A4152B761C00B01410 /* l2tables.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C6E152A4D7E00B4F5A8 /* l2tables.h */; };
CDB028A5152B761C00B01410 /* l3_integer_tables.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C6F152A4D7E00B4F5A8 /* l3_integer_tables.h */; };
CDB028A6152B761C00B01410 /* l12_integer_tables.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C70152A4D7E00B4F5A8 /* l12_integer_tables.h */; };
CDB028A7152B761C00B01410 /* layer1.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA4152A4E7000B4F5A8 /* layer1.c */; };
CDB028A8152B762E00B01410 /* layer2.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA5152A4E7000B4F5A8 /* layer2.c */; };
CDB028A9152B763500B01410 /* layer3.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA6152A4E7000B4F5A8 /* layer3.c */; };
CDB028AA152B763500B01410 /* lfs_alias.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA7152A4E7000B4F5A8 /* lfs_alias.c */; };
CDB028AB152B763500B01410 /* libmpg123.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA8152A4E7000B4F5A8 /* libmpg123.c */; };
CDB028AC152B763500B01410 /* mangle.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C71152A4D7E00B4F5A8 /* mangle.h */; };
CDB028AD152B764100B01410 /* mpg123lib_intern.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C73152A4D7E00B4F5A8 /* mpg123lib_intern.h */; };
CDB028AE152B764100B01410 /* ntom.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CA9152A4E7000B4F5A8 /* ntom.c */; };
CDB028AF152B764100B01410 /* optimize.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C74152A4D7E00B4F5A8 /* optimize.h */; };
CDB028B0152B764100B01410 /* optimize.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CAA152A4E7000B4F5A8 /* optimize.c */; };
CDB028B1152B764100B01410 /* parse.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C75152A4D7E00B4F5A8 /* parse.h */; };
CDB028B2152B764100B01410 /* parse.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CAB152A4E7000B4F5A8 /* parse.c */; };
CDB028B3152B764100B01410 /* reader.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C76152A4D7E00B4F5A8 /* reader.h */; };
CDB028B4152B764100B01410 /* readers.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CAC152A4E7000B4F5A8 /* readers.c */; };
CDB028B5152B764900B01410 /* sample.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C77152A4D7E00B4F5A8 /* sample.h */; };
CDB028B6152B764900B01410 /* stringbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CAD152A4E7000B4F5A8 /* stringbuf.c */; };
CDB028B7152B764900B01410 /* synth.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CB1152A4E7000B4F5A8 /* synth.c */; };
CDB028B8152B764900B01410 /* synth_8bit.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C78152A4D7E00B4F5A8 /* synth_8bit.h */; };
CDB028B9152B764900B01410 /* synth_8bit.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CAE152A4E7000B4F5A8 /* synth_8bit.c */; };
CDB028BA152B764900B01410 /* synth_mono.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C79152A4D7E00B4F5A8 /* synth_mono.h */; };
CDB028BB152B764900B01410 /* synth_ntom.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C7A152A4D7E00B4F5A8 /* synth_ntom.h */; };
CDB028BC152B764900B01410 /* synth_real.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CAF152A4E7000B4F5A8 /* synth_real.c */; };
CDB028BD152B764900B01410 /* synth_s32.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CB0152A4E7000B4F5A8 /* synth_s32.c */; };
CDB028BE152B765000B01410 /* synth.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C7B152A4D7E00B4F5A8 /* synth.h */; };
CDB028BF152B765000B01410 /* synths.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C7C152A4D7E00B4F5A8 /* synths.h */; };
CDB028C0152B765000B01410 /* tabinit.c in Sources */ = {isa = PBXBuildFile; fileRef = CD132CB2152A4E7000B4F5A8 /* tabinit.c */; };
CDB028C1152B765000B01410 /* true.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C7D152A4D7E00B4F5A8 /* true.h */; };
CDB028C2152B765900B01410 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C21152A4B8000B4F5A8 /* config.h */; };
CDB028C3152B765900B01410 /* mpg123.h in Headers */ = {isa = PBXBuildFile; fileRef = CD132C22152A4B8000B4F5A8 /* mpg123.h */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
CD132C0E152A48C200B4F5A8 /* libmpg123-ios.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libmpg123-ios.a"; sourceTree = BUILT_PRODUCTS_DIR; };
CD132C21152A4B8000B4F5A8 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = SOURCE_ROOT; };
CD132C22152A4B8000B4F5A8 /* mpg123.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mpg123.h; sourceTree = SOURCE_ROOT; };
CD132C62152A4D7E00B4F5A8 /* compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compat.h; sourceTree = "<group>"; };
CD132C63152A4D7E00B4F5A8 /* decode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decode.h; sourceTree = "<group>"; };
CD132C64152A4D7E00B4F5A8 /* dither.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dither.h; sourceTree = "<group>"; };
CD132C65152A4D7E00B4F5A8 /* frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = frame.h; sourceTree = "<group>"; };
CD132C66152A4D7E00B4F5A8 /* getbits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = getbits.h; sourceTree = "<group>"; };
CD132C67152A4D7E00B4F5A8 /* getcpuflags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = getcpuflags.h; sourceTree = "<group>"; };
CD132C68152A4D7E00B4F5A8 /* huffman.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = huffman.h; sourceTree = "<group>"; };
CD132C69152A4D7E00B4F5A8 /* icy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = icy.h; sourceTree = "<group>"; };
CD132C6A152A4D7E00B4F5A8 /* icy2utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = icy2utf8.h; sourceTree = "<group>"; };
CD132C6B152A4D7E00B4F5A8 /* id3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = id3.h; sourceTree = "<group>"; };
CD132C6C152A4D7E00B4F5A8 /* index.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = index.h; sourceTree = "<group>"; };
CD132C6D152A4D7E00B4F5A8 /* intsym.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = intsym.h; sourceTree = "<group>"; };
CD132C6E152A4D7E00B4F5A8 /* l2tables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = l2tables.h; sourceTree = "<group>"; };
CD132C6F152A4D7E00B4F5A8 /* l3_integer_tables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = l3_integer_tables.h; sourceTree = "<group>"; };
CD132C70152A4D7E00B4F5A8 /* l12_integer_tables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = l12_integer_tables.h; sourceTree = "<group>"; };
CD132C71152A4D7E00B4F5A8 /* mangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mangle.h; sourceTree = "<group>"; };
CD132C72152A4D7E00B4F5A8 /* mpg123.h.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mpg123.h.in; sourceTree = "<group>"; };
CD132C73152A4D7E00B4F5A8 /* mpg123lib_intern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mpg123lib_intern.h; sourceTree = "<group>"; };
CD132C74152A4D7E00B4F5A8 /* optimize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = optimize.h; sourceTree = "<group>"; };
CD132C75152A4D7E00B4F5A8 /* parse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parse.h; sourceTree = "<group>"; };
CD132C76152A4D7E00B4F5A8 /* reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reader.h; sourceTree = "<group>"; };
CD132C77152A4D7E00B4F5A8 /* sample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sample.h; sourceTree = "<group>"; };
CD132C78152A4D7E00B4F5A8 /* synth_8bit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = synth_8bit.h; sourceTree = "<group>"; };
CD132C79152A4D7E00B4F5A8 /* synth_mono.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = synth_mono.h; sourceTree = "<group>"; };
CD132C7A152A4D7E00B4F5A8 /* synth_ntom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = synth_ntom.h; sourceTree = "<group>"; };
CD132C7B152A4D7E00B4F5A8 /* synth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = synth.h; sourceTree = "<group>"; };
CD132C7C152A4D7E00B4F5A8 /* synths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = synths.h; sourceTree = "<group>"; };
CD132C7D152A4D7E00B4F5A8 /* true.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = true.h; sourceTree = "<group>"; };
CD132C99152A4E7000B4F5A8 /* compat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = compat.c; sourceTree = "<group>"; };
CD132C9A152A4E7000B4F5A8 /* dct64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dct64.c; sourceTree = "<group>"; };
CD132C9B152A4E7000B4F5A8 /* dither.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dither.c; sourceTree = "<group>"; };
CD132C9C152A4E7000B4F5A8 /* equalizer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = equalizer.c; sourceTree = "<group>"; };
CD132C9D152A4E7000B4F5A8 /* feature.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = feature.c; sourceTree = "<group>"; };
CD132C9E152A4E7000B4F5A8 /* format.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = format.c; sourceTree = "<group>"; };
CD132C9F152A4E7000B4F5A8 /* frame.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = frame.c; sourceTree = "<group>"; };
CD132CA0152A4E7000B4F5A8 /* icy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = icy.c; sourceTree = "<group>"; };
CD132CA1152A4E7000B4F5A8 /* icy2utf8.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = icy2utf8.c; sourceTree = "<group>"; };
CD132CA2152A4E7000B4F5A8 /* id3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = id3.c; sourceTree = "<group>"; };
CD132CA3152A4E7000B4F5A8 /* index.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = index.c; sourceTree = "<group>"; };
CD132CA4152A4E7000B4F5A8 /* layer1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = layer1.c; sourceTree = "<group>"; };
CD132CA5152A4E7000B4F5A8 /* layer2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = layer2.c; sourceTree = "<group>"; };
CD132CA6152A4E7000B4F5A8 /* layer3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = layer3.c; sourceTree = "<group>"; };
CD132CA7152A4E7000B4F5A8 /* lfs_alias.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lfs_alias.c; sourceTree = "<group>"; };
CD132CA8152A4E7000B4F5A8 /* libmpg123.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = libmpg123.c; sourceTree = "<group>"; };
CD132CA9152A4E7000B4F5A8 /* ntom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ntom.c; sourceTree = "<group>"; };
CD132CAA152A4E7000B4F5A8 /* optimize.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = optimize.c; sourceTree = "<group>"; };
CD132CAB152A4E7000B4F5A8 /* parse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = parse.c; sourceTree = "<group>"; };
CD132CAC152A4E7000B4F5A8 /* readers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = readers.c; sourceTree = "<group>"; };
CD132CAD152A4E7000B4F5A8 /* stringbuf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stringbuf.c; sourceTree = "<group>"; };
CD132CAE152A4E7000B4F5A8 /* synth_8bit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = synth_8bit.c; sourceTree = "<group>"; };
CD132CAF152A4E7000B4F5A8 /* synth_real.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = synth_real.c; sourceTree = "<group>"; };
CD132CB0152A4E7000B4F5A8 /* synth_s32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = synth_s32.c; sourceTree = "<group>"; };
CD132CB1152A4E7000B4F5A8 /* synth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = synth.c; sourceTree = "<group>"; };
CD132CB2152A4E7000B4F5A8 /* tabinit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tabinit.c; sourceTree = "<group>"; };
CD132CCD152A511800B4F5A8 /* dct64_neon_float.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = dct64_neon_float.S; sourceTree = "<group>"; };
CD132CCE152A511900B4F5A8 /* dct64_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = dct64_neon.S; sourceTree = "<group>"; };
CD132CD0152A511A00B4F5A8 /* synth_neon_float.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = synth_neon_float.S; sourceTree = "<group>"; };
CD132CD1152A511A00B4F5A8 /* synth_neon_s32.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = synth_neon_s32.S; sourceTree = "<group>"; };
CD132CD2152A511A00B4F5A8 /* synth_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = synth_neon.S; sourceTree = "<group>"; };
CD132CD3152A511B00B4F5A8 /* synth_stereo_neon_float.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = synth_stereo_neon_float.S; sourceTree = "<group>"; };
CD132CD4152A511B00B4F5A8 /* synth_stereo_neon_s32.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = synth_stereo_neon_s32.S; sourceTree = "<group>"; };
CD132CD5152A511C00B4F5A8 /* synth_stereo_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = synth_stereo_neon.S; sourceTree = "<group>"; };
CD6D72D1152B748200CF4285 /* libmpg123-mac.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libmpg123-mac.a"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
CD132C0B152A48C200B4F5A8 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
CD6D72CE152B748200CF4285 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
CD132C03152A48C100B4F5A8 = {
isa = PBXGroup;
children = (
CD132C60152A4C9A00B4F5A8 /* src */,
CD132C13152A48C200B4F5A8 /* Xcode */,
CD132C0F152A48C200B4F5A8 /* Products */,
);
sourceTree = "<group>";
};
CD132C0F152A48C200B4F5A8 /* Products */ = {
isa = PBXGroup;
children = (
CD132C0E152A48C200B4F5A8 /* libmpg123-ios.a */,
CD6D72D1152B748200CF4285 /* libmpg123-mac.a */,
);
name = Products;
sourceTree = "<group>";
};
CD132C13152A48C200B4F5A8 /* Xcode */ = {
isa = PBXGroup;
children = (
CD132C21152A4B8000B4F5A8 /* config.h */,
CD132C22152A4B8000B4F5A8 /* mpg123.h */,
);
name = Xcode;
sourceTree = "<group>";
};
CD132C60152A4C9A00B4F5A8 /* src */ = {
isa = PBXGroup;
children = (
CD132C61152A4CA400B4F5A8 /* libmpg123 */,
);
name = src;
path = ../../src;
sourceTree = SOURCE_ROOT;
};
CD132C61152A4CA400B4F5A8 /* libmpg123 */ = {
isa = PBXGroup;
children = (
CD132C99152A4E7000B4F5A8 /* compat.c */,
CD132C62152A4D7E00B4F5A8 /* compat.h */,
CD132C9A152A4E7000B4F5A8 /* dct64.c */,
CD132CCD152A511800B4F5A8 /* dct64_neon_float.S */,
CD132CCE152A511900B4F5A8 /* dct64_neon.S */,
CD132C63152A4D7E00B4F5A8 /* decode.h */,
CD132C64152A4D7E00B4F5A8 /* dither.h */,
CD132C9B152A4E7000B4F5A8 /* dither.c */,
CD132C9C152A4E7000B4F5A8 /* equalizer.c */,
CD132C9D152A4E7000B4F5A8 /* feature.c */,
CD132C9E152A4E7000B4F5A8 /* format.c */,
CD132C65152A4D7E00B4F5A8 /* frame.h */,
CD132C9F152A4E7000B4F5A8 /* frame.c */,
CD132C66152A4D7E00B4F5A8 /* getbits.h */,
CD132C67152A4D7E00B4F5A8 /* getcpuflags.h */,
CD132C68152A4D7E00B4F5A8 /* huffman.h */,
CD132C69152A4D7E00B4F5A8 /* icy.h */,
CD132CA0152A4E7000B4F5A8 /* icy.c */,
CD132C6A152A4D7E00B4F5A8 /* icy2utf8.h */,
CD132CA1152A4E7000B4F5A8 /* icy2utf8.c */,
CD132C6B152A4D7E00B4F5A8 /* id3.h */,
CD132CA2152A4E7000B4F5A8 /* id3.c */,
CD132C6C152A4D7E00B4F5A8 /* index.h */,
CD132CA3152A4E7000B4F5A8 /* index.c */,
CD132C6D152A4D7E00B4F5A8 /* intsym.h */,
CD132C6E152A4D7E00B4F5A8 /* l2tables.h */,
CD132C6F152A4D7E00B4F5A8 /* l3_integer_tables.h */,
CD132C70152A4D7E00B4F5A8 /* l12_integer_tables.h */,
CD132CA4152A4E7000B4F5A8 /* layer1.c */,
CD132CA5152A4E7000B4F5A8 /* layer2.c */,
CD132CA6152A4E7000B4F5A8 /* layer3.c */,
CD132CA7152A4E7000B4F5A8 /* lfs_alias.c */,
CD132CA8152A4E7000B4F5A8 /* libmpg123.c */,
CD132C71152A4D7E00B4F5A8 /* mangle.h */,
CD132C72152A4D7E00B4F5A8 /* mpg123.h.in */,
CD132C73152A4D7E00B4F5A8 /* mpg123lib_intern.h */,
CD132CA9152A4E7000B4F5A8 /* ntom.c */,
CD132C74152A4D7E00B4F5A8 /* optimize.h */,
CD132CAA152A4E7000B4F5A8 /* optimize.c */,
CD132C75152A4D7E00B4F5A8 /* parse.h */,
CD132CAB152A4E7000B4F5A8 /* parse.c */,
CD132C76152A4D7E00B4F5A8 /* reader.h */,
CD132CAC152A4E7000B4F5A8 /* readers.c */,
CD132C77152A4D7E00B4F5A8 /* sample.h */,
CD132CAD152A4E7000B4F5A8 /* stringbuf.c */,
CD132CB1152A4E7000B4F5A8 /* synth.c */,
CD132C78152A4D7E00B4F5A8 /* synth_8bit.h */,
CD132CAE152A4E7000B4F5A8 /* synth_8bit.c */,
CD132C79152A4D7E00B4F5A8 /* synth_mono.h */,
CD132C7A152A4D7E00B4F5A8 /* synth_ntom.h */,
CD132CAF152A4E7000B4F5A8 /* synth_real.c */,
CD132CB0152A4E7000B4F5A8 /* synth_s32.c */,
CD132CD0152A511A00B4F5A8 /* synth_neon_float.S */,
CD132CD1152A511A00B4F5A8 /* synth_neon_s32.S */,
CD132CD2152A511A00B4F5A8 /* synth_neon.S */,
CD132CD3152A511B00B4F5A8 /* synth_stereo_neon_float.S */,
CD132CD4152A511B00B4F5A8 /* synth_stereo_neon_s32.S */,
CD132CD5152A511C00B4F5A8 /* synth_stereo_neon.S */,
CD132C7B152A4D7E00B4F5A8 /* synth.h */,
CD132C7C152A4D7E00B4F5A8 /* synths.h */,
CD132CB2152A4E7000B4F5A8 /* tabinit.c */,
CD132C7D152A4D7E00B4F5A8 /* true.h */,
);
path = libmpg123;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
CD132C0C152A48C200B4F5A8 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
CD132C23152A4B8000B4F5A8 /* config.h in Headers */,
CD132C24152A4B8000B4F5A8 /* mpg123.h in Headers */,
CD132C7E152A4D7E00B4F5A8 /* compat.h in Headers */,
CD132C7F152A4D7E00B4F5A8 /* decode.h in Headers */,
CD132C80152A4D7E00B4F5A8 /* dither.h in Headers */,
CD132C81152A4D7E00B4F5A8 /* frame.h in Headers */,
CD132C82152A4D7E00B4F5A8 /* getbits.h in Headers */,
CD132C83152A4D7E00B4F5A8 /* getcpuflags.h in Headers */,
CD132C84152A4D7E00B4F5A8 /* huffman.h in Headers */,
CD132C85152A4D7E00B4F5A8 /* icy.h in Headers */,
CD132C86152A4D7E00B4F5A8 /* icy2utf8.h in Headers */,
CD132C87152A4D7E00B4F5A8 /* id3.h in Headers */,
CD132C88152A4D7E00B4F5A8 /* index.h in Headers */,
CD132C89152A4D7E00B4F5A8 /* intsym.h in Headers */,
CD132C8A152A4D7E00B4F5A8 /* l2tables.h in Headers */,
CD132C8B152A4D7E00B4F5A8 /* l3_integer_tables.h in Headers */,
CD132C8C152A4D7E00B4F5A8 /* l12_integer_tables.h in Headers */,
CD132C8D152A4D7E00B4F5A8 /* mangle.h in Headers */,
CD132C8E152A4D7E00B4F5A8 /* mpg123lib_intern.h in Headers */,
CD132C8F152A4D7E00B4F5A8 /* optimize.h in Headers */,
CD132C90152A4D7E00B4F5A8 /* parse.h in Headers */,
CD132C91152A4D7E00B4F5A8 /* reader.h in Headers */,
CD132C92152A4D7E00B4F5A8 /* sample.h in Headers */,
CD132C93152A4D7E00B4F5A8 /* synth_8bit.h in Headers */,
CD132C94152A4D7E00B4F5A8 /* synth_mono.h in Headers */,
CD132C95152A4D7E00B4F5A8 /* synth_ntom.h in Headers */,
CD132C96152A4D7E00B4F5A8 /* synth.h in Headers */,
CD132C97152A4D7E00B4F5A8 /* synths.h in Headers */,
CD132C98152A4D7E00B4F5A8 /* true.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
CD6D72CF152B748200CF4285 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
CDB0288D152B760700B01410 /* compat.h in Headers */,
CDB02890152B760D00B01410 /* decode.h in Headers */,
CDB02891152B760D00B01410 /* dither.h in Headers */,
CDB02896152B761300B01410 /* frame.h in Headers */,
CDB02898152B761300B01410 /* getbits.h in Headers */,
CDB02899152B761300B01410 /* getcpuflags.h in Headers */,
CDB0289A152B761300B01410 /* huffman.h in Headers */,
CDB0289B152B761300B01410 /* icy.h in Headers */,
CDB0289D152B761300B01410 /* icy2utf8.h in Headers */,
CDB0289F152B761C00B01410 /* id3.h in Headers */,
CDB028A1152B761C00B01410 /* index.h in Headers */,
CDB028A3152B761C00B01410 /* intsym.h in Headers */,
CDB028A4152B761C00B01410 /* l2tables.h in Headers */,
CDB028A5152B761C00B01410 /* l3_integer_tables.h in Headers */,
CDB028A6152B761C00B01410 /* l12_integer_tables.h in Headers */,
CDB028AC152B763500B01410 /* mangle.h in Headers */,
CDB028AD152B764100B01410 /* mpg123lib_intern.h in Headers */,
CDB028AF152B764100B01410 /* optimize.h in Headers */,
CDB028B1152B764100B01410 /* parse.h in Headers */,
CDB028B3152B764100B01410 /* reader.h in Headers */,
CDB028B5152B764900B01410 /* sample.h in Headers */,
CDB028B8152B764900B01410 /* synth_8bit.h in Headers */,
CDB028BA152B764900B01410 /* synth_mono.h in Headers */,
CDB028BB152B764900B01410 /* synth_ntom.h in Headers */,
CDB028BE152B765000B01410 /* synth.h in Headers */,
CDB028BF152B765000B01410 /* synths.h in Headers */,
CDB028C1152B765000B01410 /* true.h in Headers */,
CDB028C2152B765900B01410 /* config.h in Headers */,
CDB028C3152B765900B01410 /* mpg123.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
CD132C0D152A48C200B4F5A8 /* mpg123-ios */ = {
isa = PBXNativeTarget;
buildConfigurationList = CD132C1B152A48C200B4F5A8 /* Build configuration list for PBXNativeTarget "mpg123-ios" */;
buildPhases = (
CD132C0A152A48C200B4F5A8 /* Sources */,
CD132C0B152A48C200B4F5A8 /* Frameworks */,
CD132C0C152A48C200B4F5A8 /* Headers */,
);
buildRules = (
);
dependencies = (
);
name = "mpg123-ios";
productName = libmpg123;
productReference = CD132C0E152A48C200B4F5A8 /* libmpg123-ios.a */;
productType = "com.apple.product-type.library.static";
};
CD6D72D0152B748200CF4285 /* mpg123-mac */ = {
isa = PBXNativeTarget;
buildConfigurationList = CD6D72D4152B748200CF4285 /* Build configuration list for PBXNativeTarget "mpg123-mac" */;
buildPhases = (
CD6D72CD152B748200CF4285 /* Sources */,
CD6D72CE152B748200CF4285 /* Frameworks */,
CD6D72CF152B748200CF4285 /* Headers */,
);
buildRules = (
);
dependencies = (
);
name = "mpg123-mac";
productName = "mpg123-mac";
productReference = CD6D72D1152B748200CF4285 /* libmpg123-mac.a */;
productType = "com.apple.product-type.library.static";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
CD132C05152A48C100B4F5A8 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0430;
};
buildConfigurationList = CD132C08152A48C100B4F5A8 /* Build configuration list for PBXProject "mpg123" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = CD132C03152A48C100B4F5A8;
productRefGroup = CD132C0F152A48C200B4F5A8 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
CD132C0D152A48C200B4F5A8 /* mpg123-ios */,
CD6D72D0152B748200CF4285 /* mpg123-mac */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
CD132C0A152A48C200B4F5A8 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
CD132CB3152A4E7000B4F5A8 /* compat.c in Sources */,
CD132CB4152A4E7000B4F5A8 /* dct64.c in Sources */,
CD132CB5152A4E7000B4F5A8 /* dither.c in Sources */,
CD132CB6152A4E7000B4F5A8 /* equalizer.c in Sources */,
CD132CB7152A4E7000B4F5A8 /* feature.c in Sources */,
CD132CB8152A4E7000B4F5A8 /* format.c in Sources */,
CD132CB9152A4E7000B4F5A8 /* frame.c in Sources */,
CD132CBA152A4E7000B4F5A8 /* icy.c in Sources */,
CD132CBB152A4E7000B4F5A8 /* icy2utf8.c in Sources */,
CD132CBC152A4E7000B4F5A8 /* id3.c in Sources */,
CD132CBD152A4E7000B4F5A8 /* index.c in Sources */,
CD132CBE152A4E7000B4F5A8 /* layer1.c in Sources */,
CD132CBF152A4E7000B4F5A8 /* layer2.c in Sources */,
CD132CC0152A4E7000B4F5A8 /* layer3.c in Sources */,
CD132CC1152A4E7000B4F5A8 /* lfs_alias.c in Sources */,
CD132CC2152A4E7000B4F5A8 /* libmpg123.c in Sources */,
CD132CC3152A4E7000B4F5A8 /* ntom.c in Sources */,
CD132CC4152A4E7000B4F5A8 /* optimize.c in Sources */,
CD132CC5152A4E7000B4F5A8 /* parse.c in Sources */,
CD132CC6152A4E7000B4F5A8 /* readers.c in Sources */,
CD132CC7152A4E7000B4F5A8 /* stringbuf.c in Sources */,
CD132CC8152A4E7000B4F5A8 /* synth_8bit.c in Sources */,
CD132CC9152A4E7000B4F5A8 /* synth_real.c in Sources */,
CD132CCA152A4E7000B4F5A8 /* synth_s32.c in Sources */,
CD132CCB152A4E7000B4F5A8 /* synth.c in Sources */,
CD132CCC152A4E7000B4F5A8 /* tabinit.c in Sources */,
CD132CD6152A511C00B4F5A8 /* dct64_neon_float.S in Sources */,
CD132CD7152A511C00B4F5A8 /* dct64_neon.S in Sources */,
CD132CD9152A511C00B4F5A8 /* synth_neon_float.S in Sources */,
CD132CDA152A511C00B4F5A8 /* synth_neon_s32.S in Sources */,
CD132CDB152A511C00B4F5A8 /* synth_neon.S in Sources */,
CD132CDC152A511C00B4F5A8 /* synth_stereo_neon_float.S in Sources */,
CD132CDD152A511C00B4F5A8 /* synth_stereo_neon_s32.S in Sources */,
CD132CDE152A511C00B4F5A8 /* synth_stereo_neon.S in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
CD6D72CD152B748200CF4285 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
CDB0288C152B760700B01410 /* compat.c in Sources */,
CDB0288E152B760700B01410 /* dct64.c in Sources */,
CDB02892152B760D00B01410 /* dither.c in Sources */,
CDB02893152B760D00B01410 /* equalizer.c in Sources */,
CDB02894152B760D00B01410 /* feature.c in Sources */,
CDB02895152B760D00B01410 /* format.c in Sources */,
CDB02897152B761300B01410 /* frame.c in Sources */,
CDB0289C152B761300B01410 /* icy.c in Sources */,
CDB0289E152B761300B01410 /* icy2utf8.c in Sources */,
CDB028A0152B761C00B01410 /* id3.c in Sources */,
CDB028A2152B761C00B01410 /* index.c in Sources */,
CDB028A7152B761C00B01410 /* layer1.c in Sources */,
CDB028A8152B762E00B01410 /* layer2.c in Sources */,
CDB028A9152B763500B01410 /* layer3.c in Sources */,
CDB028AA152B763500B01410 /* lfs_alias.c in Sources */,
CDB028AB152B763500B01410 /* libmpg123.c in Sources */,
CDB028AE152B764100B01410 /* ntom.c in Sources */,
CDB028B0152B764100B01410 /* optimize.c in Sources */,
CDB028B2152B764100B01410 /* parse.c in Sources */,
CDB028B4152B764100B01410 /* readers.c in Sources */,
CDB028B6152B764900B01410 /* stringbuf.c in Sources */,
CDB028B7152B764900B01410 /* synth.c in Sources */,
CDB028B9152B764900B01410 /* synth_8bit.c in Sources */,
CDB028BC152B764900B01410 /* synth_real.c in Sources */,
CDB028BD152B764900B01410 /* synth_s32.c in Sources */,
CDB028C0152B765000B01410 /* tabinit.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
CD132C19152A48C200B4F5A8 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
COPY_PHASE_STRIP = NO;
EXCLUDED_SOURCE_FILE_NAMES = "";
"EXCLUDED_SOURCE_FILE_NAMES[sdk=iphonesimulator*]" = (
"synth_neon*",
"synth_stereo_neon*",
"dct64_neon*",
);
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
SDKROOT = iphoneos;
};
name = Debug;
};
CD132C1A152A48C200B4F5A8 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
COPY_PHASE_STRIP = YES;
EXCLUDED_SOURCE_FILE_NAMES = "";
"EXCLUDED_SOURCE_FILE_NAMES[sdk=iphonesimulator*]" = (
"synth_neon*",
"synth_stereo_neon*",
"dct64_neon*",
);
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
CD132C1C152A48C200B4F5A8 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
DSTROOT = /tmp/libmpg123.dst;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
name = Debug;
};
CD132C1D152A48C200B4F5A8 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
DSTROOT = /tmp/libmpg123.dst;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
name = Release;
};
CD6D72D2152B748200CF4285 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
EXECUTABLE_PREFIX = lib;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
MACOSX_DEPLOYMENT_TARGET = 10.7;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
};
name = Debug;
};
CD6D72D3152B748200CF4285 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
EXECUTABLE_PREFIX = lib;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
MACOSX_DEPLOYMENT_TARGET = 10.7;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
CD132C08152A48C100B4F5A8 /* Build configuration list for PBXProject "mpg123" */ = {
isa = XCConfigurationList;
buildConfigurations = (
CD132C19152A48C200B4F5A8 /* Debug */,
CD132C1A152A48C200B4F5A8 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
CD132C1B152A48C200B4F5A8 /* Build configuration list for PBXNativeTarget "mpg123-ios" */ = {
isa = XCConfigurationList;
buildConfigurations = (
CD132C1C152A48C200B4F5A8 /* Debug */,
CD132C1D152A48C200B4F5A8 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
CD6D72D4152B748200CF4285 /* Build configuration list for PBXNativeTarget "mpg123-mac" */ = {
isa = XCConfigurationList;
buildConfigurations = (
CD6D72D2152B748200CF4285 /* Debug */,
CD6D72D3152B748200CF4285 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = CD132C05152A48C100B4F5A8 /* Project object */;
}

478
node_modules/lame/deps/mpg123/ports/mpg123_.pas generated vendored Normal file
View File

@ -0,0 +1,478 @@
unit mpg123_;
interface
uses
Windows,
SysUtils;
// INITIAL CONVERSION BY ARTHUR 17/02/2008
// USE http://www.mpg123.de/api/ FOR DOCUMENTATION SINCE I STRIPED ALL THE COMMENTS FROM THE UNIT
type
PDWord = ^DWORD;
PPbyte = ^PByte;
PPchar = ^PChar;
Pdouble = ^double;
PPlongint = ^Plongint;
off_t = Longint;
Poff_t = ^off_t;
PPoff_T = ^Poff_t;
size_t = Cardinal;
Psize_t = ^size_t;
type
Pmpg123_handle_struct = ^Tmpg123_handle_struct;
Tmpg123_handle_struct = packed record
{undefined structure}
end;
Tmpg123_handle = Tmpg123_handle_struct;
Pmpg123_handle = ^Tmpg123_handle;
var
mpg123_init: function: Longint; cdecl;
mpg123_exit: procedure; cdecl;
mpg123_new: function(decoder: PChar; Error: Plongint): Pmpg123_handle; cdecl;
mpg123_delete: procedure(mh: Pmpg123_handle); cdecl;
type
Tmpg123_parms = Longint;
const
MPG123_VERBOSE = 0;
MPG123_FLAGS = 1;
MPG123_ADD_FLAGS = 2;
MPG123_FORCE_RATE = 3;
MPG123_DOWN_SAMPLE = 4;
MPG123_RVA = 5;
MPG123_DOWNSPEED = 6;
MPG123_UPSPEED = 7;
MPG123_START_FRAME = 8;
MPG123_DECODE_FRAMES = 9;
MPG123_ICY_INTERVAL = 10;
MPG123_OUTSCALE = 11;
MPG123_TIMEOUT = 12;
MPG123_REMOVE_FLAGS = 13;
MPG123_RESYNC_LIMIT = 14;
type
Tmpg123_param_flags = Longint;
const
MPG123_FORCE_MONO = $7;
MPG123_MONO_LEFT = $1;
MPG123_MONO_RIGHT = $2;
MPG123_MONO_MIX = $4;
MPG123_FORCE_STEREO = $8;
MPG123_FORCE_8BIT = $10;
MPG123_QUIET = $20;
MPG123_GAPLESS = $40;
MPG123_NO_RESYNC = $80;
type
Tmpg123_param_rva = Longint;
const
MPG123_RVA_OFF = 0;
MPG123_RVA_MIX = 1;
MPG123_RVA_ALBUM = 2;
MPG123_RVA_MAX = MPG123_RVA_ALBUM;
var
mpg123_param: function(mh: Pmpg123_handle; _type: Tmpg123_parms; value: Longint; fvalue: double): Longint; cdecl;
mpg123_getparam: function(mh: Pmpg123_handle; _type: Tmpg123_parms; val: Plongint; fval: Pdouble): Longint; cdecl;
type
Tmpg123_errors = Longint;
const
MPG123_DONE = -(12);
MPG123_NEW_FORMAT = -(11);
MPG123_NEED_MORE = -(10);
MPG123_ERR = -(1);
MPG123_OK = 0;
MPG123_BAD_OUTFORMAT = 1;
MPG123_BAD_CHANNEL = 2;
MPG123_BAD_RATE = 3;
MPG123_ERR_16TO8TABLE = 4;
MPG123_BAD_PARAM = 5;
MPG123_BAD_BUFFER = 6;
MPG123_OUT_OF_MEM = 7;
MPG123_NOT_INITIALIZED = 8;
MPG123_BAD_DECODER = 9;
MPG123_BAD_HANDLE = 10;
MPG123_NO_BUFFERS = 11;
MPG123_BAD_RVA = 12;
MPG123_NO_GAPLESS = 13;
MPG123_NO_SPACE = 14;
MPG123_BAD_TYPES = 15;
MPG123_BAD_BAND = 16;
MPG123_ERR_NULL = 17;
MPG123_ERR_READER = 18;
MPG123_NO_SEEK_FROM_END = 19;
MPG123_BAD_WHENCE = 20;
MPG123_NO_TIMEOUT = 21;
MPG123_BAD_FILE = 22;
MPG123_NO_SEEK = 23;
MPG123_NO_READER = 24;
MPG123_BAD_PARS = 25;
MPG123_BAD_INDEX_PAR = 26;
MPG123_OUT_OF_SYNC = 27;
MPG123_RESYNC_FAIL = 28;
var
mpg123_plain_strerror: function(errcode: Longint): PChar; cdecl;
mpg123_strerror: function(mh: Pmpg123_handle): PChar; cdecl;
mpg123_errcode: function(mh: Pmpg123_handle): Longint; cdecl;
mpg123_decoders: function: PPchar; cdecl;
mpg123_supported_decoders: function: PPchar; cdecl;
mpg123_decoder: function(mh: Pmpg123_handle; decoder_name: PChar): Longint; cdecl;
type
Tmpg123_enc_enum = Longint;
const
MPG123_ENC_16 = $40;
MPG123_ENC_SIGNED = $80;
MPG123_ENC_8 = $0F;
MPG123_ENC_SIGNED_16 = (MPG123_ENC_16 or MPG123_ENC_SIGNED) or $10;
MPG123_ENC_UNSIGNED_16 = MPG123_ENC_16 or $20;
MPG123_ENC_UNSIGNED_8 = $01;
MPG123_ENC_SIGNED_8 = MPG123_ENC_SIGNED or $02;
MPG123_ENC_ULAW_8 = $04;
MPG123_ENC_ALAW_8 = $08;
MPG123_ENC_ANY = ((((MPG123_ENC_SIGNED_16 or MPG123_ENC_UNSIGNED_16) or MPG123_ENC_UNSIGNED_8) or MPG123_ENC_SIGNED_8) or MPG123_ENC_ULAW_8) or MPG123_ENC_ALAW_8;
type
Tmpg123_channelcount = Longint;
const
MPG123_MONO = 1;
MPG123_STEREO = 2;
var
mpg123_rates: procedure(list: PPlongint; number: Psize_t); cdecl;
mpg123_encodings: procedure(list: PPlongint; number: Psize_t); cdecl;
mpg123_format_none: function(mh: Pmpg123_handle): Longint; cdecl;
mpg123_format_all: function(mh: Pmpg123_handle): Longint; cdecl;
mpg123_format: function(mh: Pmpg123_handle; rate: Longint; channels: Longint; encodings: Longint): Longint; cdecl;
mpg123_format_support: function(mh: Pmpg123_handle; rate: Longint; encoding: Longint): Longint; cdecl;
mpg123_getformat: function(mh: Pmpg123_handle; rate: Plongint; channels: Plongint; encoding: Plongint): Longint; cdecl;
mpg123_open: function(mh: Pmpg123_handle; path: PChar): Longint; cdecl;
mpg123_open_fd: function(mh: Pmpg123_handle; fd: Longint): Longint; cdecl;
mpg123_open_feed: function(mh: Pmpg123_handle): Longint; cdecl;
mpg123_close: function(mh: Pmpg123_handle): Longint; cdecl;
mpg123_read: function(mh: Pmpg123_handle; outmemory: PByte; outmemsize: size_t; done: Psize_t): Longint; cdecl;
mpg123_decode: function(mh: Pmpg123_handle; inmemory: PByte; inmemsize: size_t; outmemory: PByte; outmemsize: size_t;
done: Psize_t): Longint; cdecl;
mpg123_decode_frame: function(mh: Pmpg123_handle; num: Poff_t; audio: PPbyte; bytes: Psize_t): Longint; cdecl;
mpg123_tell: function(mh: Pmpg123_handle): off_t; cdecl;
mpg123_tellframe: function(mh: Pmpg123_handle): off_t; cdecl;
mpg123_seek: function(mh: Pmpg123_handle; sampleoff: off_t; whence: Longint): off_t; cdecl;
mpg123_feedseek: function(mh: Pmpg123_handle; sampleoff: off_t; whence: Longint; input_offset: Poff_t): off_t; cdecl;
mpg123_seek_frame: function(mh: Pmpg123_handle; frameoff: off_t; whence: Longint): off_t; cdecl;
mpg123_timeframe: function(mh: Pmpg123_handle; sec: double): off_t; cdecl;
mpg123_index: function(mh: Pmpg123_handle; offsets: PPoff_t; step: Poff_t; fill: Psize_t): Longint; cdecl;
mpg123_position: function(mh: Pmpg123_handle; frame_offset: off_t; buffered_bytes: off_t; current_frame: Poff_t; frames_left: Poff_t;
current_seconds: Pdouble; seconds_left: Pdouble): Longint; cdecl;
type
Tmpg123_channels = Longint;
const
MPG123_LEFT = $1;
MPG123_RIGHT = $2;
var
mpg123_eq: function(mh: Pmpg123_handle; channel: Tmpg123_channels; band: Longint; val: double): Longint; cdecl;
mpg123_reset_eq: function(mh: Pmpg123_handle): Longint; cdecl;
mpg123_volume: function(mh: Pmpg123_handle; vol: double): Longint; cdecl;
mpg123_volume_change: function(mh: Pmpg123_handle; change: double): Longint; cdecl;
mpg123_getvolume: function(mh: Pmpg123_handle; base: Pdouble; really: Pdouble; rva_db: Pdouble): Longint; cdecl;
type
Tmpg123_vbr = Longint;
const
MPG123_CBR = 0;
MPG123_VBR = 1;
MPG123_ABR = 2;
type
Tmpg123_version = Longint;
const
MPG123_1_0 = 0;
MPG123_2_0 = 1;
MPG123_2_5 = 2;
type
Tmpg123_mode = Longint;
const
MPG123_M_STEREO = 0;
MPG123_M_JOINT = 1;
MPG123_M_DUAL = 2;
MPG123_M_MONO = 3;
type
Tmpg123_flags = Longint;
const
MPG123_CRC = $1;
MPG123_COPYRIGHT = $2;
MPG123_PRIVATE = $4;
MPG123_ORIGINAL = $8;
type
Pmpg123_frameinfo = ^Tmpg123_frameinfo;
Tmpg123_frameinfo = packed record
version: Tmpg123_version;
layer: Longint;
rate: Longint;
mode: Tmpg123_mode;
mode_ext: Longint;
framesize: Longint;
Flags: Tmpg123_flags;
emphasis: Longint;
bitrate: Longint;
abr_rate: Longint;
vbr: Tmpg123_vbr;
end;
var
mpg123_info: function(mh: Pmpg123_handle; mi: Pmpg123_frameinfo): Longint; cdecl;
mpg123_safe_buffer: function: size_t; cdecl;
mpg123_scan: function(mh: Pmpg123_handle): Longint; cdecl;
mpg123_length: function(mh: Pmpg123_handle): off_t; cdecl;
mpg123_tpf: function(mh: Pmpg123_handle): double; cdecl;
mpg123_clip: function(mh: Pmpg123_handle): Longint; cdecl;
type
Pmpg123_string = ^Tmpg123_string;
Tmpg123_string = packed record
p: PChar;
Size: size_t;
fill: size_t;
end;
var
mpg123_init_string: procedure(sb: Pmpg123_string); cdecl;
mpg123_free_string: procedure(sb: Pmpg123_string); cdecl;
mpg123_resize_string: function(sb: Pmpg123_string; news: size_t): Longint; cdecl;
mpg123_copy_string: function(from: Pmpg123_string; _to: Pmpg123_string): Longint; cdecl;
mpg123_add_string: function(sb: Pmpg123_string; stuff: PChar): Longint; cdecl;
mpg123_set_string: function(sb: Pmpg123_string; stuff: PChar): Longint; cdecl;
type
Pmpg123_text = ^Tmpg123_text;
Tmpg123_text = packed record
lang: array[0..2] of Char;
id: array[0..3] of Char;
description: Tmpg123_string;
Text: Tmpg123_string;
end;
PPmpg123_id3v2 = ^Pmpg123_id3v2;
Pmpg123_id3v2 = ^Tmpg123_id3v2;
Tmpg123_id3v2 = packed record
version: Byte;
title: Pmpg123_string;
artist: Pmpg123_string;
album: Pmpg123_string;
year: Pmpg123_string;
genre: Pmpg123_string;
comment: Pmpg123_string;
comment_list: Pmpg123_text;
comments: size_t;
Text: Pmpg123_text;
texts: size_t;
extra: Pmpg123_text;
extras: size_t;
end;
PPmpg123_id3v1 = ^Pmpg123_id3v1;
Pmpg123_id3v1 = ^Tmpg123_id3v1;
Tmpg123_id3v1 = packed record
tag: array[0..2] of Char;
title: array[0..29] of Char;
artist: array[0..29] of Char;
album: array[0..29] of Char;
year: array[0..3] of Char;
comment: array[0..29] of Char;
genre: Byte;
end;
const
MPG123_ID3 = $3;
MPG123_NEW_ID3 = $1;
MPG123_ICY = $C;
MPG123_NEW_ICY = $4;
var
mpg123_meta_check: function(mh: Pmpg123_handle): Longint; cdecl;
mpg123_id3_: function(mh: Pmpg123_handle; var v1: Pmpg123_id3v1; var v2: Pmpg123_id3v2): Longint; cdecl;
mpg123_icy_: function(mh: Pmpg123_handle; icy_meta: PPchar): Longint; cdecl;
type
Pmpg123_pars_struct = ^Tmpg123_pars_struct;
Tmpg123_pars_struct = packed record
{undefined structure}
end;
Tmpg123_pars = Tmpg123_pars_struct;
Pmpg123_pars = ^Tmpg123_pars;
var
mpg123_parnew: function(mp: Pmpg123_pars; decoder: PChar; Error: Plongint): Pmpg123_handle; cdecl;
mpg123_new_pars: function(Error: Plongint): Pmpg123_pars; cdecl;
mpg123_delete_pars: procedure(mp: Pmpg123_pars); cdecl;
mpg123_fmt_none: function(mp: Pmpg123_pars): Longint; cdecl;
mpg123_fmt_all: function(mp: Pmpg123_pars): Longint; cdecl;
mpg123_fmt: function(mh: Pmpg123_pars; rate: Longint; channels: Longint; encodings: Longint): Longint; cdecl;
mpg123_fmt_support: function(mh: Pmpg123_pars; rate: Longint; encoding: Longint): Longint; cdecl;
mpg123_par: function(mp: Pmpg123_pars; _type: Tmpg123_parms; value: Longint; fvalue: double): Longint; cdecl;
mpg123_getpar: function(mp: Pmpg123_pars; _type: Tmpg123_parms; val: Plongint; fval: Pdouble): Longint; cdecl;
mpg123_replace_buffer: function(mh: Pmpg123_handle; data: PByte; Size: size_t): Longint; cdecl;
mpg123_outblock: function(mh: Pmpg123_handle): size_t; cdecl;
//mpg123_replace_reader : function(mh:Pmpg123_handle; r_read:function (_para1:longint; _para2:pointer; _para3:size_t):Tssize_t; r_lseek:function (_para1:longint; _para2:off_t; _para3:longint):off_t):longint;
implementation
var
hlib: THandle;
procedure Freempg123;
begin
FreeLibrary(hlib);
end;
procedure Loadmpg123(lib: PChar);
begin
hlib := LoadLibrary(lib);
mpg123_init := GetProcAddress(hlib, 'mpg123_init');
mpg123_exit := GetProcAddress(hlib, 'mpg123_exit');
mpg123_new := GetProcAddress(hlib, 'mpg123_new');
mpg123_delete := GetProcAddress(hlib, 'mpg123_delete');
mpg123_param := GetProcAddress(hlib, 'mpg123_param');
mpg123_getparam := GetProcAddress(hlib, 'mpg123_getparam');
mpg123_plain_strerror := GetProcAddress(hlib, 'mpg123_plain_strerror');
mpg123_strerror := GetProcAddress(hlib, 'mpg123_strerror');
mpg123_errcode := GetProcAddress(hlib, 'mpg123_errcode');
mpg123_decoders := GetProcAddress(hlib, 'mpg123_decoders');
mpg123_supported_decoders := GetProcAddress(hlib, 'mpg123_supported_decoders');
mpg123_decoder := GetProcAddress(hlib, 'mpg123_decoder');
mpg123_rates := GetProcAddress(hlib, 'mpg123_rates');
mpg123_encodings := GetProcAddress(hlib, 'mpg123_encodings');
mpg123_format_none := GetProcAddress(hlib, 'mpg123_format_none');
mpg123_format_all := GetProcAddress(hlib, 'mpg123_format_all');
mpg123_format := GetProcAddress(hlib, 'mpg123_format');
mpg123_format_support := GetProcAddress(hlib, 'mpg123_format_support');
mpg123_getformat := GetProcAddress(hlib, 'mpg123_getformat');
mpg123_open := GetProcAddress(hlib, 'mpg123_open');
mpg123_open_fd := GetProcAddress(hlib, 'mpg123_open_fd');
mpg123_open_feed := GetProcAddress(hlib, 'mpg123_open_feed');
mpg123_close := GetProcAddress(hlib, 'mpg123_close');
mpg123_read := GetProcAddress(hlib, 'mpg123_read');
mpg123_decode := GetProcAddress(hlib, 'mpg123_decode');
mpg123_decode_frame := GetProcAddress(hlib, 'mpg123_decode_frame');
mpg123_tell := GetProcAddress(hlib, 'mpg123_tell');
mpg123_tellframe := GetProcAddress(hlib, 'mpg123_tellframe');
mpg123_seek := GetProcAddress(hlib, 'mpg123_seek');
mpg123_feedseek := GetProcAddress(hlib, 'mpg123_feedseek');
mpg123_seek_frame := GetProcAddress(hlib, 'mpg123_seek_frame');
mpg123_timeframe := GetProcAddress(hlib, 'mpg123_timeframe');
mpg123_index := GetProcAddress(hlib, 'mpg123_index');
mpg123_position := GetProcAddress(hlib, 'mpg123_position');
mpg123_eq := GetProcAddress(hlib, 'mpg123_eq');
mpg123_reset_eq := GetProcAddress(hlib, 'mpg123_reset_eq');
mpg123_volume := GetProcAddress(hlib, 'mpg123_volume');
mpg123_volume_change := GetProcAddress(hlib, 'mpg123_volume_change');
mpg123_getvolume := GetProcAddress(hlib, 'mpg123_getvolume');
mpg123_info := GetProcAddress(hlib, 'mpg123_info');
mpg123_safe_buffer := GetProcAddress(hlib, 'mpg123_safe_buffer');
mpg123_scan := GetProcAddress(hlib, 'mpg123_scan');
mpg123_length := GetProcAddress(hlib, 'mpg123_length');
mpg123_tpf := GetProcAddress(hlib, 'mpg123_tpf');
mpg123_clip := GetProcAddress(hlib, 'mpg123_clip');
mpg123_init_string := GetProcAddress(hlib, 'mpg123_init_string');
mpg123_free_string := GetProcAddress(hlib, 'mpg123_free_string');
mpg123_resize_string := GetProcAddress(hlib, 'mpg123_resize_string');
mpg123_copy_string := GetProcAddress(hlib, 'mpg123_copy_string');
mpg123_add_string := GetProcAddress(hlib, 'mpg123_add_string');
mpg123_set_string := GetProcAddress(hlib, 'mpg123_set_string');
mpg123_meta_check := GetProcAddress(hlib, 'mpg123_meta_check');
mpg123_id3_ := GetProcAddress(hlib, 'mpg123_id3');
mpg123_icy_ := GetProcAddress(hlib, 'mpg123_icy');
mpg123_parnew := GetProcAddress(hlib, 'mpg123_parnew');
mpg123_new_pars := GetProcAddress(hlib, 'mpg123_new_pars');
mpg123_delete_pars := GetProcAddress(hlib, 'mpg123_delete_pars');
mpg123_fmt_none := GetProcAddress(hlib, 'mpg123_fmt_none');
mpg123_fmt_all := GetProcAddress(hlib, 'mpg123_fmt_all');
mpg123_fmt := GetProcAddress(hlib, 'mpg123_fmt');
mpg123_fmt_support := GetProcAddress(hlib, 'mpg123_fmt_support');
mpg123_par := GetProcAddress(hlib, 'mpg123_par');
mpg123_getpar := GetProcAddress(hlib, 'mpg123_getpar');
mpg123_replace_buffer := GetProcAddress(hlib, 'mpg123_replace_buffer');
mpg123_outblock := GetProcAddress(hlib, 'mpg123_outblock');
//mpg123_replace_reader := GetProcAddress(hlib,'mpg123_replace_reader');
end;
initialization
Loadmpg123('libmpg123-0.dll');
finalization
Freempg123;
end.