Add project files.
This commit is contained in:
commit
e3ca5ced79
63
.gitattributes
vendored
Normal file
63
.gitattributes
vendored
Normal file
@ -0,0 +1,63 @@
|
||||
###############################################################################
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
###############################################################################
|
||||
* text=auto
|
||||
|
||||
###############################################################################
|
||||
# Set default behavior for command prompt diff.
|
||||
#
|
||||
# This is need for earlier builds of msysgit that does not have it on by
|
||||
# default for csharp files.
|
||||
# Note: This is only used by command line
|
||||
###############################################################################
|
||||
#*.cs diff=csharp
|
||||
|
||||
###############################################################################
|
||||
# Set the merge driver for project and solution files
|
||||
#
|
||||
# Merging from the command prompt will add diff markers to the files if there
|
||||
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||
# the diff markers are never inserted). Diff markers may cause the following
|
||||
# file extensions to fail to load in VS. An alternative would be to treat
|
||||
# these files as binary and thus will always conflict and require user
|
||||
# intervention with every merge. To do so, just uncomment the entries below
|
||||
###############################################################################
|
||||
#*.sln merge=binary
|
||||
#*.csproj merge=binary
|
||||
#*.vbproj merge=binary
|
||||
#*.vcxproj merge=binary
|
||||
#*.vcproj merge=binary
|
||||
#*.dbproj merge=binary
|
||||
#*.fsproj merge=binary
|
||||
#*.lsproj merge=binary
|
||||
#*.wixproj merge=binary
|
||||
#*.modelproj merge=binary
|
||||
#*.sqlproj merge=binary
|
||||
#*.wwaproj merge=binary
|
||||
|
||||
###############################################################################
|
||||
# behavior for image files
|
||||
#
|
||||
# image files are treated as binary by default.
|
||||
###############################################################################
|
||||
#*.jpg binary
|
||||
#*.png binary
|
||||
#*.gif binary
|
||||
|
||||
###############################################################################
|
||||
# diff behavior for common document formats
|
||||
#
|
||||
# Convert binary document formats to text before diffing them. This feature
|
||||
# is only available from the command line. Turn it on by uncommenting the
|
||||
# entries below.
|
||||
###############################################################################
|
||||
#*.doc diff=astextplain
|
||||
#*.DOC diff=astextplain
|
||||
#*.docx diff=astextplain
|
||||
#*.DOCX diff=astextplain
|
||||
#*.dot diff=astextplain
|
||||
#*.DOT diff=astextplain
|
||||
#*.pdf diff=astextplain
|
||||
#*.PDF diff=astextplain
|
||||
#*.rtf diff=astextplain
|
||||
#*.RTF diff=astextplain
|
364
.gitignore
vendored
Normal file
364
.gitignore
vendored
Normal file
@ -0,0 +1,364 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
*.wav
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Oo]ut/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
31
SoundPGEXTest.sln
Normal file
31
SoundPGEXTest.sln
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.5.33516.290
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SoundPGEXTest", "SoundPGEXTest\SoundPGEXTest.vcxproj", "{BA59AD6C-D978-4841-8824-0C400F18BBD2}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{BA59AD6C-D978-4841-8824-0C400F18BBD2}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{BA59AD6C-D978-4841-8824-0C400F18BBD2}.Debug|x64.Build.0 = Debug|x64
|
||||
{BA59AD6C-D978-4841-8824-0C400F18BBD2}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{BA59AD6C-D978-4841-8824-0C400F18BBD2}.Debug|x86.Build.0 = Debug|Win32
|
||||
{BA59AD6C-D978-4841-8824-0C400F18BBD2}.Release|x64.ActiveCfg = Release|x64
|
||||
{BA59AD6C-D978-4841-8824-0C400F18BBD2}.Release|x64.Build.0 = Release|x64
|
||||
{BA59AD6C-D978-4841-8824-0C400F18BBD2}.Release|x86.ActiveCfg = Release|Win32
|
||||
{BA59AD6C-D978-4841-8824-0C400F18BBD2}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {F69CC4ED-D521-4977-84E2-9E2526C9C65F}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
BIN
SoundPGEXTest/SDL2.dll
Normal file
BIN
SoundPGEXTest/SDL2.dll
Normal file
Binary file not shown.
BIN
SoundPGEXTest/SDL2.lib
Normal file
BIN
SoundPGEXTest/SDL2.lib
Normal file
Binary file not shown.
BIN
SoundPGEXTest/SDL2main.lib
Normal file
BIN
SoundPGEXTest/SDL2main.lib
Normal file
Binary file not shown.
152
SoundPGEXTest/SoundPGEXTest.vcxproj
Normal file
152
SoundPGEXTest/SoundPGEXTest.vcxproj
Normal file
@ -0,0 +1,152 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" 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>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{ba59ad6c-d978-4841-8824-0c400f18bbd2}</ProjectGuid>
|
||||
<RootNamespace>SoundPGEXTest</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</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>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<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|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>C:\Users\sigon\Documents\soloud20200207\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>soloud_static.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>C:\Users\sigon\Documents\soloud20200207\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>soloud_static.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>C:\Users\sigon\Documents\soloud20200207\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>soloud_static.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>C:\Users\sigon\Documents\soloud20200207\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>soloud_static.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="olcPGEX_AudioListener.h" />
|
||||
<ClInclude Include="olcPGEX_AudioSource.h" />
|
||||
<ClInclude Include="olcPixelGameEngine.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="main.cpp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
33
SoundPGEXTest/SoundPGEXTest.vcxproj.filters
Normal file
33
SoundPGEXTest/SoundPGEXTest.vcxproj.filters
Normal file
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="olcPixelGameEngine.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="olcPGEX_AudioListener.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="olcPGEX_AudioSource.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="main.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
2
SoundPGEXTest/emscripten_build.ps1
Normal file
2
SoundPGEXTest/emscripten_build.ps1
Normal file
@ -0,0 +1,2 @@
|
||||
~\Documents\emsdk\emsdk_env.ps1 activate latest
|
||||
em++ -std=c++17 -O2 -s ALLOW_MEMORY_GROWTH=1 -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_LIBPNG=1 -s USE_SDL_MIXER=2 -sSTACK_SIZE=5MB $(Get-ChildItem *.cpp) soloud.o -o pge.html --preload-file assets
|
51
SoundPGEXTest/main.cpp
Normal file
51
SoundPGEXTest/main.cpp
Normal file
@ -0,0 +1,51 @@
|
||||
#define OLC_PGE_APPLICATION
|
||||
#include "olcPixelGameEngine.h"
|
||||
#define AUDIO_LISTENER_IMPLEMENTATION
|
||||
#include "olcPGEX_AudioListener.h"
|
||||
|
||||
#define AUDIO_SOURCE_IMPLEMENTATION
|
||||
#include "olcPGEX_AudioSource.h"
|
||||
|
||||
// Override base class with your custom functionality
|
||||
class Example : public olc::PixelGameEngine
|
||||
{
|
||||
public:
|
||||
Example()
|
||||
{
|
||||
// Name your application
|
||||
sAppName = "Example";
|
||||
}
|
||||
|
||||
olcPGEX_AudioListener AL;
|
||||
olcPGEX_AudioSource AS_Test;
|
||||
|
||||
public:
|
||||
bool OnUserCreate() override
|
||||
{
|
||||
// Called once at the start, so create things here
|
||||
AL.AudioSystemInit();
|
||||
AS_Test.AL = &AL;
|
||||
AS_Test.LoadAudioSample(0, "./assets/test.wav");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OnUserUpdate(float fElapsedTime) override
|
||||
{
|
||||
// Input
|
||||
if (GetKey(olc::Key::P).bPressed)
|
||||
AS_Test.Play();
|
||||
// Called once per frame, draws random coloured pixels
|
||||
for (int x = 0; x < ScreenWidth(); x++)
|
||||
for (int y = 0; y < ScreenHeight(); y++)
|
||||
Draw(x, y, olc::Pixel(rand() % 256, rand() % 256, rand() % 256));
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
Example demo;
|
||||
if (demo.Construct(256, 240, 4, 4))
|
||||
demo.Start();
|
||||
return 0;
|
||||
}
|
285
SoundPGEXTest/olcPGEX_AudioListener.h
Normal file
285
SoundPGEXTest/olcPGEX_AudioListener.h
Normal file
@ -0,0 +1,285 @@
|
||||
/*
|
||||
olcPGEX_AudioListener.h
|
||||
|
||||
+-------------------------------------------------------------+
|
||||
| OneLoneCoder Pixel Game Engine Extension |
|
||||
| AudioListener v1.0 |
|
||||
+-------------------------------------------------------------+
|
||||
|
||||
What is this?
|
||||
~~~~~~~~~~~~~
|
||||
This is an extension to the olcPixelGameEngine v2.16 and above.
|
||||
|
||||
Its purpose is to allow audio integration into PGE which is
|
||||
compatible with Emscripten for Web applications also.
|
||||
|
||||
Unlike my other extensions, this one requires some external
|
||||
libraries and additional setup (refer to github for instructions).
|
||||
|
||||
In addition to the libraries the following files are required:
|
||||
|
||||
olcPGEX_AudioListener.h (this file)
|
||||
olcPGEX_AudioSource.h
|
||||
|
||||
These can be found in the github repo as well...
|
||||
|
||||
|
||||
What it can do:
|
||||
~~~~~~~~~~~~~~~
|
||||
Play Audio!
|
||||
|
||||
Using SDL2 as a backend and SoLoud as a frontend, this extension allows you
|
||||
to easily load and manipulate sound in a way that is cross platform and also
|
||||
has web support (using emscripten for PGE).
|
||||
|
||||
In addition to the standard PLAY, PAUSE, and STOP controls you can also adjust
|
||||
VOLUME settings and MODULATION (playback speed).
|
||||
|
||||
WAV and OGG are supported on most backends, however MP3 is also supported by
|
||||
SoLoud and SDL2 (even inside the web browser!).
|
||||
|
||||
|
||||
Limitations:
|
||||
~~~~~~~~~~~~
|
||||
Requires SDL2, SDL2_Mixer, and SoLoud libraries be installed and linked
|
||||
successfully (detailed instructions on the github repo).
|
||||
|
||||
|
||||
How Does It Work?
|
||||
~~~~~~~~~~~~~~~~~
|
||||
Once you have followed the setup instructions on the github repo and
|
||||
successfully compiled the test program you are ready to follow these
|
||||
instructions...
|
||||
|
||||
Add the following defines / includes underneath your olcPixelGameEngine
|
||||
include:
|
||||
|
||||
#define AUDIO_LISTENER_IMPLEMENTATION
|
||||
#include "olcPGEX_AudioListener.h"
|
||||
#define AUDIO_SOURCE_IMPLEMENTATION
|
||||
#include "olcPGEX_AudioSource.h"
|
||||
|
||||
(Order matters here, they must be included exactly as above!)
|
||||
|
||||
In your declarations add exactly (1) AudioListener
|
||||
|
||||
olcPGEX_AudioListener AL{};
|
||||
|
||||
|
||||
(Note: Currently, only 1 instance of an AudioListener is permitted)
|
||||
|
||||
Now add at least (1) AudioSource (you will eventually add many of these)
|
||||
|
||||
olcPGEX_AudioSource AS_Test{};
|
||||
|
||||
|
||||
In the OnUserCreate function you must now initialise the AudioListener
|
||||
|
||||
AL.AudioSystemInit();
|
||||
|
||||
|
||||
Next we can assign our AudioListener to our AudioSource and load an audio file
|
||||
|
||||
AS_Test.AL = &game.AL;
|
||||
AS_Test.LoadAudioSample(1, "./assets/mus/Test.mp3");
|
||||
|
||||
|
||||
This assumes you have an MP3 file called "Test.mp3" in the listed folder in your
|
||||
project directory. Also note the ID is set to "1" in this example. It is recommended
|
||||
that you assign labels to your audio files as IDs instead so you can more easily
|
||||
keep track of them. For example
|
||||
|
||||
enum AUDIO
|
||||
{
|
||||
NULL_SND = 0, // used as a default case
|
||||
TEST_SND = 1,
|
||||
// add other sounds here
|
||||
};
|
||||
|
||||
AS_Test.LoadAudioSample(TEST_SND, "./assets/mus/Test.mp3");
|
||||
|
||||
This way you can easily refer to your sound without having to remember the integer
|
||||
value you assigned it in the beginning...
|
||||
|
||||
|
||||
Now all that is left to do is play the sound...
|
||||
|
||||
In OnUserUpdate we can play / stop the sound using the SPACEBAR like so
|
||||
|
||||
if (GetKey(olc::Key::SPACE).bPressed)
|
||||
{
|
||||
if (AS_Test.bIsPlaying)
|
||||
AS_Test.Stop();
|
||||
else
|
||||
AS_Test.Play();
|
||||
|
||||
}
|
||||
|
||||
|
||||
Those are the basics... other features can be accessed in much the same way.
|
||||
|
||||
Enjoy!
|
||||
|
||||
|
||||
|
||||
|
||||
License (OLC-3)
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Copyright 2018 - 2019 OneLoneCoder.com
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions or derivations of source code must retain the above
|
||||
copyright notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions or derivative works in binary form must reproduce
|
||||
the above copyright notice. This list of conditions and the following
|
||||
disclaimer must be reproduced in the documentation and/or other
|
||||
materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Author
|
||||
~~~~~~
|
||||
Justin Richards
|
||||
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef OLC_PGEX_AUDIO_LISTENER
|
||||
#define OLC_PGEX_AUDIO_LISTENER
|
||||
|
||||
#include "soloud.h"
|
||||
#include "soloud_wav.h"
|
||||
|
||||
class olcPGEX_AudioListener : public olc::PGEX
|
||||
{
|
||||
public:
|
||||
// Struct to keep the Audio Sample data together
|
||||
struct sAudioSample
|
||||
{
|
||||
sAudioSample(int ID, SoLoud::Wav* wavPtr)
|
||||
{
|
||||
nSampleID = ID;
|
||||
wav = wavPtr;
|
||||
}
|
||||
|
||||
int nSampleID;
|
||||
SoLoud::Wav* wav;
|
||||
};
|
||||
|
||||
// SoLoud Audio Engine Object
|
||||
SoLoud::Soloud soloud;
|
||||
|
||||
// Position used for volume calculations
|
||||
olc::vf2d vecPos = { 0.0f, 0.0f };
|
||||
|
||||
// Global volume settings
|
||||
float fMusicVolume = 0.2f;
|
||||
float fSoundFXVolume = 0.4f;
|
||||
|
||||
bool bMusicOn = true;
|
||||
bool bSoundOn = true;
|
||||
|
||||
// Vector of Audio Samples
|
||||
std::vector<sAudioSample> audioSamples;
|
||||
std::list<SoLoud::Wav> wavs;
|
||||
|
||||
|
||||
|
||||
// Initialise the Audio Engine, and Destroy it when done
|
||||
void AudioSystemInit();
|
||||
void AudioSystemDestroy();
|
||||
|
||||
// Load a file and store it in the list of wavs
|
||||
void LoadAudioSample(int ID, const char* fileName);
|
||||
|
||||
// Identify a particular Audio Sample based on its ID
|
||||
sAudioSample* GetAudioSampleByID(int ID);
|
||||
|
||||
// Update the spacial position of the Audio Listener
|
||||
void UpdatePosition(olc::vf2d pos);
|
||||
|
||||
// Calculate distance between listener and source
|
||||
float GetDistance(olc::vf2d sourcePos, bool returnRoot = true);
|
||||
};
|
||||
|
||||
#ifdef AUDIO_LISTENER_IMPLEMENTATION
|
||||
#undef AUDIO_LISTENER_IMPLEMENTATION
|
||||
|
||||
void olcPGEX_AudioListener::AudioSystemInit()
|
||||
{
|
||||
// Initialise the SoLoud backend
|
||||
soloud.init();
|
||||
}
|
||||
|
||||
void olcPGEX_AudioListener::AudioSystemDestroy()
|
||||
{
|
||||
// Clean up the SoLoud engine
|
||||
soloud.deinit();
|
||||
}
|
||||
|
||||
void olcPGEX_AudioListener::LoadAudioSample(int ID, const char* fileName)
|
||||
{
|
||||
// Search for any matching IDs
|
||||
for (auto& a : audioSamples)
|
||||
if (a.nSampleID == ID) return; // Audio Sample is already loaded, no need to load the same file twice!
|
||||
|
||||
// Add a new wav to the list of wavs and get a pointer to it
|
||||
wavs.push_back(SoLoud::Wav());
|
||||
SoLoud::Wav* wavPtr = &wavs.back();
|
||||
|
||||
// Use the pointer to load the file into the back of the wav list
|
||||
wavPtr->load(fileName);
|
||||
|
||||
// Create a new Audio sample object in the vector of samples that links both the ID and wav file itself, for convenience
|
||||
audioSamples.emplace_back(sAudioSample(ID, wavPtr));
|
||||
}
|
||||
|
||||
olcPGEX_AudioListener::sAudioSample* olcPGEX_AudioListener::GetAudioSampleByID(int ID)
|
||||
{
|
||||
// Look for matching IDs
|
||||
for (auto& a : audioSamples)
|
||||
if (ID == a.nSampleID) return &a; // Match found! Return it...
|
||||
|
||||
// No match found, need to return a reference so we return the first sample in the list
|
||||
return &audioSamples[0];
|
||||
}
|
||||
|
||||
void olcPGEX_AudioListener::UpdatePosition(olc::vf2d pos)
|
||||
{
|
||||
// Position
|
||||
vecPos = pos;
|
||||
}
|
||||
|
||||
float olcPGEX_AudioListener::GetDistance(olc::vf2d sourcePos, bool returnRoot)
|
||||
{
|
||||
// Return the distance via square root if needed, or the squared version when optimisation is possible
|
||||
if (returnRoot)
|
||||
return sqrtf(abs(sourcePos.x * sourcePos.x - vecPos.x * vecPos.x) + abs(sourcePos.y * sourcePos.y - vecPos.y * vecPos.y));
|
||||
else
|
||||
return abs(sourcePos.x * sourcePos.x - vecPos.x * vecPos.x) + abs(sourcePos.y * sourcePos.y - vecPos.y * vecPos.y);
|
||||
|
||||
}
|
||||
|
||||
#endif // AUDIO_LISTENER_IMPLEMENTATION
|
||||
|
||||
#endif
|
224
SoundPGEXTest/olcPGEX_AudioSource.h
Normal file
224
SoundPGEXTest/olcPGEX_AudioSource.h
Normal file
@ -0,0 +1,224 @@
|
||||
/*
|
||||
olcPGEX_AudioSource.h
|
||||
|
||||
+-------------------------------------------------------------+
|
||||
| OneLoneCoder Pixel Game Engine Extension |
|
||||
| AudioSource v1.0 |
|
||||
+-------------------------------------------------------------+
|
||||
|
||||
What is this?
|
||||
~~~~~~~~~~~~~
|
||||
This is an extension to the olcPixelGameEngine v2.16 and above.
|
||||
|
||||
It is to be used in conjunction with olcPGEX_AudioListener.h.
|
||||
|
||||
A detailed description and instructions can be found in that
|
||||
header file, please refer to it instead :-)
|
||||
|
||||
Enjoy!
|
||||
|
||||
|
||||
|
||||
License (OLC-3)
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Copyright 2018 - 2019 OneLoneCoder.com
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions or derivations of source code must retain the above
|
||||
copyright notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions or derivative works in binary form must reproduce
|
||||
the above copyright notice. This list of conditions and the following
|
||||
disclaimer must be reproduced in the documentation and/or other
|
||||
materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Author
|
||||
~~~~~~
|
||||
Justin Richards
|
||||
|
||||
*/
|
||||
|
||||
#ifndef OLC_PGEX_AUDIO_SOURCE
|
||||
#define OLC_PGEX_AUDIO_SOURCE
|
||||
|
||||
#pragma once
|
||||
#include "olcPGEX_AudioListener.h"
|
||||
|
||||
class olcPGEX_AudioSource : public olc::PGEX
|
||||
{
|
||||
public:
|
||||
// Pointer to the Audio Listener for this object
|
||||
olcPGEX_AudioListener* AL;
|
||||
|
||||
// Handle for this particular copy of the sound
|
||||
int handle = 255;
|
||||
|
||||
// Maximum copies of this sound allowed for this audio source
|
||||
//const int nMaxSamples = 4;
|
||||
//int nSampleHandles[4] = { 255, 255, 255, 255 };
|
||||
|
||||
// Audio Sample ID used to locate which sound to play
|
||||
int nID;
|
||||
|
||||
// Convenient BOOL to determine playback status
|
||||
bool bIsPlaying = false;
|
||||
|
||||
// Current Playback Speed
|
||||
float fPlaySpeed = 1.0f;
|
||||
|
||||
// Volume
|
||||
float fVolume = 1.0f;
|
||||
float fMinVolume = 0.0f;
|
||||
float fMaxVolume = 1.0f;
|
||||
|
||||
// Does the Audio Sample Loop?
|
||||
bool bLooping = false;
|
||||
|
||||
// Paused status
|
||||
bool bPaused = false;
|
||||
|
||||
// Object position, used for calculating volume
|
||||
olc::vf2d pos = { 0.0f, 0.0f };
|
||||
|
||||
|
||||
|
||||
// Instruct Audio Listener to load this sound (if not loaded already)
|
||||
void LoadAudioSample(int ID, const char* fileName);
|
||||
|
||||
// Play the Audio Sample, with given parameters
|
||||
void Play(float speed = 1.0f, float vol = 1.0f, bool looping = false, bool paused = false);
|
||||
|
||||
// Pause or Un-Pause - maintains the playback position and handle
|
||||
void Pause(bool pauseState = true);
|
||||
|
||||
// Stop - playback position and handle will be lost
|
||||
void Stop();
|
||||
|
||||
// Audio Modulation - control the speed of playback
|
||||
void ModulateAudio(float minPlaySpeed, float maxPlaySpeed, float modulation, bool precise = false, bool deferred = false);
|
||||
|
||||
// Adjust Volume
|
||||
void SetVolume(float vol, float minVol = 0.0f, float maxVol = 1.0f);
|
||||
|
||||
// Set Default Parameters
|
||||
void SetDefaults(float speed, float vol, float minVol, float maxVol, bool looping);
|
||||
};
|
||||
|
||||
#ifdef AUDIO_SOURCE_IMPLEMENTATION
|
||||
#undef AUDIO_SOURCE_IMPLEMENTATION
|
||||
|
||||
|
||||
void olcPGEX_AudioSource::LoadAudioSample(int ID, const char* fileName)
|
||||
{
|
||||
// Link the IDs together
|
||||
nID = ID;
|
||||
|
||||
// Call the Audio Listener to load the sample
|
||||
AL->LoadAudioSample(ID, fileName);
|
||||
}
|
||||
|
||||
void olcPGEX_AudioSource::Play(float speed, float vol, bool looping, bool paused)
|
||||
{
|
||||
// Set parameters
|
||||
fPlaySpeed = speed;
|
||||
fVolume = vol;
|
||||
bLooping = looping;
|
||||
bPaused = paused;
|
||||
|
||||
// Assign a handle to this instance of the sound we are about to play
|
||||
handle = AL->soloud.play(*AL->GetAudioSampleByID(nID)->wav, fVolume, 0.0f, bPaused);
|
||||
|
||||
// Set speed and looping
|
||||
AL->soloud.setRelativePlaySpeed(handle, fPlaySpeed);
|
||||
AL->soloud.setLooping(handle, looping);
|
||||
|
||||
// Update Play status
|
||||
bIsPlaying = true;
|
||||
}
|
||||
|
||||
void olcPGEX_AudioSource::Pause(bool pauseState)
|
||||
{
|
||||
// Use the Audio Listener to pause or un-pause the sound as neccessary
|
||||
AL->soloud.setPause(handle, pauseState);
|
||||
|
||||
// Update Play status
|
||||
bIsPlaying = !pauseState;
|
||||
}
|
||||
|
||||
void olcPGEX_AudioSource::Stop()
|
||||
{
|
||||
// Use the Audio Listener to stop the sound
|
||||
AL->soloud.stop(handle);
|
||||
|
||||
// The current handle will now point to nothing, so we set it to MAX so we can test for validity if need be
|
||||
handle = 255;
|
||||
|
||||
// Update Play status
|
||||
bIsPlaying = false;
|
||||
}
|
||||
|
||||
void olcPGEX_AudioSource::ModulateAudio(float minPlaySpeed, float maxPlaySpeed, float modulation, bool precise, bool deferred)
|
||||
{
|
||||
// Apply the modulation
|
||||
if (precise)
|
||||
fPlaySpeed = modulation;
|
||||
else
|
||||
fPlaySpeed += modulation;
|
||||
|
||||
// Adjust the play speed to keep it within range
|
||||
if (fPlaySpeed < minPlaySpeed) fPlaySpeed = minPlaySpeed;
|
||||
else if (fPlaySpeed > maxPlaySpeed) fPlaySpeed = maxPlaySpeed;
|
||||
|
||||
// If multiple adjustments to the playback speed are required, then the Audio Listener update itself can be
|
||||
// deferred until the very last adjustment is made... A small optimisation
|
||||
if (!deferred)
|
||||
AL->soloud.setRelativePlaySpeed(handle, fPlaySpeed);
|
||||
}
|
||||
|
||||
void olcPGEX_AudioSource::SetVolume(float vol, float minVol, float maxVol)
|
||||
{
|
||||
// Set volume
|
||||
fVolume = vol;
|
||||
|
||||
// Clamp volume withing set bounds
|
||||
if (fVolume < minVol)
|
||||
fVolume = minVol;
|
||||
else if (fVolume > maxVol)
|
||||
fVolume = maxVol;
|
||||
|
||||
// Instruct the Audio Listener to apply the volume change
|
||||
AL->soloud.setVolume(handle, fVolume);
|
||||
}
|
||||
|
||||
void olcPGEX_AudioSource::SetDefaults(float speed, float vol, float minVol, float maxVol, bool looping)
|
||||
{
|
||||
// Set defaults for this particular Audio Source
|
||||
fPlaySpeed = speed;
|
||||
fVolume = vol;
|
||||
fMinVolume = minVol;
|
||||
fMaxVolume = maxVol;
|
||||
bLooping = looping;
|
||||
}
|
||||
|
||||
#endif // AUDIO_SOURCE_IMPLEMENTATION
|
||||
#endif
|
6695
SoundPGEXTest/olcPixelGameEngine.h
Normal file
6695
SoundPGEXTest/olcPixelGameEngine.h
Normal file
File diff suppressed because it is too large
Load Diff
BIN
SoundPGEXTest/pge.data
Normal file
BIN
SoundPGEXTest/pge.data
Normal file
Binary file not shown.
1
SoundPGEXTest/pge.html
Normal file
1
SoundPGEXTest/pge.html
Normal file
File diff suppressed because one or more lines are too long
1
SoundPGEXTest/pge.js
Normal file
1
SoundPGEXTest/pge.js
Normal file
File diff suppressed because one or more lines are too long
BIN
SoundPGEXTest/pge.wasm
Normal file
BIN
SoundPGEXTest/pge.wasm
Normal file
Binary file not shown.
555
SoundPGEXTest/soloud.h
Normal file
555
SoundPGEXTest/soloud.h
Normal file
@ -0,0 +1,555 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2020 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_H
|
||||
#define SOLOUD_H
|
||||
|
||||
#include <stdlib.h> // rand
|
||||
#include <math.h> // sin
|
||||
|
||||
#ifdef SOLOUD_NO_ASSERTS
|
||||
#define SOLOUD_ASSERT(x)
|
||||
#else
|
||||
#ifdef _MSC_VER
|
||||
#include <stdio.h> // for sprintf in asserts
|
||||
#ifndef VC_EXTRALEAN
|
||||
#define VC_EXTRALEAN
|
||||
#endif
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#include <windows.h> // only needed for OutputDebugStringA, should be solved somehow.
|
||||
#define SOLOUD_ASSERT(x) if (!(x)) { char temp[200]; sprintf(temp, "%s(%d): assert(%s) failed.\n", __FILE__, __LINE__, #x); OutputDebugStringA(temp); __debugbreak(); }
|
||||
#else
|
||||
#include <assert.h> // assert
|
||||
#define SOLOUD_ASSERT(x) assert(x)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef WITH_SDL
|
||||
#undef WITH_SDL2
|
||||
#undef WITH_SDL1
|
||||
#define WITH_SDL1
|
||||
#define WITH_SDL2
|
||||
#endif
|
||||
|
||||
#ifdef WITH_SDL_STATIC
|
||||
#undef WITH_SDL1_STATIC
|
||||
#define WITH_SDL1_STATIC
|
||||
#endif
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265359
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32)||defined(_WIN64)
|
||||
#define WINDOWS_VERSION
|
||||
#endif
|
||||
|
||||
#if !defined(DISABLE_SIMD)
|
||||
#if defined(__x86_64__) || defined( _M_X64 ) || defined( __i386 ) || defined( _M_IX86 )
|
||||
#define SOLOUD_SSE_INTRINSICS
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define SOLOUD_VERSION 202002
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// Configuration defines
|
||||
|
||||
// Maximum number of filters per stream
|
||||
#define FILTERS_PER_STREAM 8
|
||||
|
||||
// Number of samples to process on one go
|
||||
#define SAMPLE_GRANULARITY 512
|
||||
|
||||
// Maximum number of concurrent voices (hard limit is 4095)
|
||||
#define VOICE_COUNT 1024
|
||||
|
||||
// Use linear resampler
|
||||
#define RESAMPLER_LINEAR
|
||||
|
||||
// 1)mono, 2)stereo 4)quad 6)5.1 8)7.1
|
||||
#define MAX_CHANNELS 8
|
||||
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Typedefs have to be made before the includes, as the
|
||||
// includes depend on them.
|
||||
namespace SoLoud
|
||||
{
|
||||
class Soloud;
|
||||
typedef void (*mutexCallFunction)(void *aMutexPtr);
|
||||
typedef void (*soloudCallFunction)(Soloud *aSoloud);
|
||||
typedef unsigned int result;
|
||||
typedef unsigned int handle;
|
||||
typedef double time;
|
||||
};
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
// Class that handles aligned allocations to support vectorized operations
|
||||
class AlignedFloatBuffer
|
||||
{
|
||||
public:
|
||||
float *mData; // aligned pointer
|
||||
unsigned char *mBasePtr; // raw allocated pointer (for delete)
|
||||
int mFloats; // size of buffer (w/out padding)
|
||||
|
||||
// ctor
|
||||
AlignedFloatBuffer();
|
||||
// Allocate and align buffer
|
||||
result init(unsigned int aFloats);
|
||||
// Clear data to zero.
|
||||
void clear();
|
||||
// dtor
|
||||
~AlignedFloatBuffer();
|
||||
};
|
||||
|
||||
// Lightweight class that handles small aligned buffer to support vectorized operations
|
||||
class TinyAlignedFloatBuffer
|
||||
{
|
||||
public:
|
||||
float *mData; // aligned pointer
|
||||
unsigned char mActualData[sizeof(float) * 16 + 16];
|
||||
|
||||
// ctor
|
||||
TinyAlignedFloatBuffer();
|
||||
};
|
||||
};
|
||||
|
||||
#include "soloud_filter.h"
|
||||
#include "soloud_fader.h"
|
||||
#include "soloud_audiosource.h"
|
||||
#include "soloud_bus.h"
|
||||
#include "soloud_queue.h"
|
||||
#include "soloud_error.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
|
||||
// Soloud core class.
|
||||
class Soloud
|
||||
{
|
||||
public:
|
||||
// Back-end data; content is up to the back-end implementation.
|
||||
void * mBackendData;
|
||||
// Pointer for the audio thread mutex.
|
||||
void * mAudioThreadMutex;
|
||||
// Flag for when we're inside the mutex, used for debugging.
|
||||
bool mInsideAudioThreadMutex;
|
||||
// Called by SoLoud to shut down the back-end. If NULL, not called. Should be set by back-end.
|
||||
soloudCallFunction mBackendCleanupFunc;
|
||||
|
||||
// CTor
|
||||
Soloud();
|
||||
// DTor
|
||||
~Soloud();
|
||||
|
||||
enum BACKENDS
|
||||
{
|
||||
AUTO = 0,
|
||||
SDL1,
|
||||
SDL2,
|
||||
PORTAUDIO,
|
||||
WINMM,
|
||||
XAUDIO2,
|
||||
WASAPI,
|
||||
ALSA,
|
||||
JACK,
|
||||
OSS,
|
||||
OPENAL,
|
||||
COREAUDIO,
|
||||
OPENSLES,
|
||||
VITA_HOMEBREW,
|
||||
MINIAUDIO,
|
||||
NOSOUND,
|
||||
NULLDRIVER,
|
||||
BACKEND_MAX,
|
||||
};
|
||||
|
||||
enum FLAGS
|
||||
{
|
||||
// Use round-off clipper
|
||||
CLIP_ROUNDOFF = 1,
|
||||
ENABLE_VISUALIZATION = 2,
|
||||
LEFT_HANDED_3D = 4,
|
||||
NO_FPU_REGISTER_CHANGE = 8
|
||||
};
|
||||
|
||||
// Initialize SoLoud. Must be called before SoLoud can be used.
|
||||
result init(unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aBackend = Soloud::AUTO, unsigned int aSamplerate = Soloud::AUTO, unsigned int aBufferSize = Soloud::AUTO, unsigned int aChannels = 2);
|
||||
|
||||
// Deinitialize SoLoud. Must be called before shutting down.
|
||||
void deinit();
|
||||
|
||||
// Query SoLoud version number (should equal to SOLOUD_VERSION macro)
|
||||
unsigned int getVersion() const;
|
||||
|
||||
// Translate error number to an asciiz string
|
||||
const char * getErrorString(result aErrorCode) const;
|
||||
|
||||
// Returns current backend ID (BACKENDS enum)
|
||||
unsigned int getBackendId();
|
||||
// Returns current backend string. May be NULL.
|
||||
const char * getBackendString();
|
||||
// Returns current backend channel count (1 mono, 2 stereo, etc)
|
||||
unsigned int getBackendChannels();
|
||||
// Returns current backend sample rate
|
||||
unsigned int getBackendSamplerate();
|
||||
// Returns current backend buffer size
|
||||
unsigned int getBackendBufferSize();
|
||||
|
||||
// Set speaker position in 3d space
|
||||
result setSpeakerPosition(unsigned int aChannel, float aX, float aY, float aZ);
|
||||
// Get speaker position in 3d space
|
||||
result getSpeakerPosition(unsigned int aChannel, float &aX, float &aY, float &aZ);
|
||||
|
||||
// Start playing a sound. Returns voice handle, which can be ignored or used to alter the playing sound's parameters. Negative volume means to use default.
|
||||
handle play(AudioSource &aSound, float aVolume = -1.0f, float aPan = 0.0f, bool aPaused = 0, unsigned int aBus = 0);
|
||||
// Start playing a sound delayed in relation to other sounds called via this function. Negative volume means to use default.
|
||||
handle playClocked(time aSoundTime, AudioSource &aSound, float aVolume = -1.0f, float aPan = 0.0f, unsigned int aBus = 0);
|
||||
// Start playing a 3d audio source
|
||||
handle play3d(AudioSource &aSound, float aPosX, float aPosY, float aPosZ, float aVelX = 0.0f, float aVelY = 0.0f, float aVelZ = 0.0f, float aVolume = 1.0f, bool aPaused = 0, unsigned int aBus = 0);
|
||||
// Start playing a 3d audio source, delayed in relation to other sounds called via this function.
|
||||
handle play3dClocked(time aSoundTime, AudioSource &aSound, float aPosX, float aPosY, float aPosZ, float aVelX = 0.0f, float aVelY = 0.0f, float aVelZ = 0.0f, float aVolume = 1.0f, unsigned int aBus = 0);
|
||||
// Start playing a sound without any panning. It will be played at full volume.
|
||||
handle playBackground(AudioSource &aSound, float aVolume = -1.0f, bool aPaused = 0, unsigned int aBus = 0);
|
||||
|
||||
// Seek the audio stream to certain point in time. Some streams can't seek backwards. Relative play speed affects time.
|
||||
result seek(handle aVoiceHandle, time aSeconds);
|
||||
// Stop the sound.
|
||||
void stop(handle aVoiceHandle);
|
||||
// Stop all voices.
|
||||
void stopAll();
|
||||
// Stop all voices that play this sound source
|
||||
void stopAudioSource(AudioSource &aSound);
|
||||
// Count voices that play this audio source
|
||||
int countAudioSource(AudioSource &aSound);
|
||||
|
||||
// Set a live filter parameter. Use 0 for the global filters.
|
||||
void setFilterParameter(handle aVoiceHandle, unsigned int aFilterId, unsigned int aAttributeId, float aValue);
|
||||
// Get a live filter parameter. Use 0 for the global filters.
|
||||
float getFilterParameter(handle aVoiceHandle, unsigned int aFilterId, unsigned int aAttributeId);
|
||||
// Fade a live filter parameter. Use 0 for the global filters.
|
||||
void fadeFilterParameter(handle aVoiceHandle, unsigned int aFilterId, unsigned int aAttributeId, float aTo, time aTime);
|
||||
// Oscillate a live filter parameter. Use 0 for the global filters.
|
||||
void oscillateFilterParameter(handle aVoiceHandle, unsigned int aFilterId, unsigned int aAttributeId, float aFrom, float aTo, time aTime);
|
||||
|
||||
// Get current play time, in seconds.
|
||||
time getStreamTime(handle aVoiceHandle);
|
||||
// Get current sample position, in seconds.
|
||||
time getStreamPosition(handle aVoiceHandle);
|
||||
// Get current pause state.
|
||||
bool getPause(handle aVoiceHandle);
|
||||
// Get current volume.
|
||||
float getVolume(handle aVoiceHandle);
|
||||
// Get current overall volume (set volume * 3d volume)
|
||||
float getOverallVolume(handle aVoiceHandle);
|
||||
// Get current pan.
|
||||
float getPan(handle aVoiceHandle);
|
||||
// Get current sample rate.
|
||||
float getSamplerate(handle aVoiceHandle);
|
||||
// Get current voice protection state.
|
||||
bool getProtectVoice(handle aVoiceHandle);
|
||||
// Get the current number of busy voices.
|
||||
unsigned int getActiveVoiceCount();
|
||||
// Get the current number of voices in SoLoud
|
||||
unsigned int getVoiceCount();
|
||||
// Check if the handle is still valid, or if the sound has stopped.
|
||||
bool isValidVoiceHandle(handle aVoiceHandle);
|
||||
// Get current relative play speed.
|
||||
float getRelativePlaySpeed(handle aVoiceHandle);
|
||||
// Get current post-clip scaler value.
|
||||
float getPostClipScaler() const;
|
||||
// Get current global volume
|
||||
float getGlobalVolume() const;
|
||||
// Get current maximum active voice setting
|
||||
unsigned int getMaxActiveVoiceCount() const;
|
||||
// Query whether a voice is set to loop.
|
||||
bool getLooping(handle aVoiceHandle);
|
||||
// Get voice loop point value
|
||||
time getLoopPoint(handle aVoiceHandle);
|
||||
|
||||
// Set voice loop point value
|
||||
void setLoopPoint(handle aVoiceHandle, time aLoopPoint);
|
||||
// Set voice's loop state
|
||||
void setLooping(handle aVoiceHandle, bool aLooping);
|
||||
// Set current maximum active voice setting
|
||||
result setMaxActiveVoiceCount(unsigned int aVoiceCount);
|
||||
// Set behavior for inaudible sounds
|
||||
void setInaudibleBehavior(handle aVoiceHandle, bool aMustTick, bool aKill);
|
||||
// Set the global volume
|
||||
void setGlobalVolume(float aVolume);
|
||||
// Set the post clip scaler value
|
||||
void setPostClipScaler(float aScaler);
|
||||
// Set the pause state
|
||||
void setPause(handle aVoiceHandle, bool aPause);
|
||||
// Pause all voices
|
||||
void setPauseAll(bool aPause);
|
||||
// Set the relative play speed
|
||||
result setRelativePlaySpeed(handle aVoiceHandle, float aSpeed);
|
||||
// Set the voice protection state
|
||||
void setProtectVoice(handle aVoiceHandle, bool aProtect);
|
||||
// Set the sample rate
|
||||
void setSamplerate(handle aVoiceHandle, float aSamplerate);
|
||||
// Set panning value; -1 is left, 0 is center, 1 is right
|
||||
void setPan(handle aVoiceHandle, float aPan);
|
||||
// Set absolute left/right volumes
|
||||
void setPanAbsolute(handle aVoiceHandle, float aLVolume, float aRVolume, float aLBVolume = 0, float aRBVolume = 0, float aCVolume = 0, float aSVolume = 0);
|
||||
// Set overall volume
|
||||
void setVolume(handle aVoiceHandle, float aVolume);
|
||||
// Set delay, in samples, before starting to play samples. Calling this on a live sound will cause glitches.
|
||||
void setDelaySamples(handle aVoiceHandle, unsigned int aSamples);
|
||||
|
||||
// Set up volume fader
|
||||
void fadeVolume(handle aVoiceHandle, float aTo, time aTime);
|
||||
// Set up panning fader
|
||||
void fadePan(handle aVoiceHandle, float aTo, time aTime);
|
||||
// Set up relative play speed fader
|
||||
void fadeRelativePlaySpeed(handle aVoiceHandle, float aTo, time aTime);
|
||||
// Set up global volume fader
|
||||
void fadeGlobalVolume(float aTo, time aTime);
|
||||
// Schedule a stream to pause
|
||||
void schedulePause(handle aVoiceHandle, time aTime);
|
||||
// Schedule a stream to stop
|
||||
void scheduleStop(handle aVoiceHandle, time aTime);
|
||||
|
||||
// Set up volume oscillator
|
||||
void oscillateVolume(handle aVoiceHandle, float aFrom, float aTo, time aTime);
|
||||
// Set up panning oscillator
|
||||
void oscillatePan(handle aVoiceHandle, float aFrom, float aTo, time aTime);
|
||||
// Set up relative play speed oscillator
|
||||
void oscillateRelativePlaySpeed(handle aVoiceHandle, float aFrom, float aTo, time aTime);
|
||||
// Set up global volume oscillator
|
||||
void oscillateGlobalVolume(float aFrom, float aTo, time aTime);
|
||||
|
||||
// Set global filters. Set to NULL to clear the filter.
|
||||
void setGlobalFilter(unsigned int aFilterId, Filter *aFilter);
|
||||
|
||||
// Enable or disable visualization data gathering
|
||||
void setVisualizationEnable(bool aEnable);
|
||||
|
||||
// Calculate and get 256 floats of FFT data for visualization. Visualization has to be enabled before use.
|
||||
float *calcFFT();
|
||||
|
||||
// Get 256 floats of wave data for visualization. Visualization has to be enabled before use.
|
||||
float *getWave();
|
||||
|
||||
// Get approximate output volume for a channel for visualization. Visualization has to be enabled before use.
|
||||
float getApproximateVolume(unsigned int aChannel);
|
||||
|
||||
// Get current loop count. Returns 0 if handle is not valid. (All audio sources may not update loop count)
|
||||
unsigned int getLoopCount(handle aVoiceHandle);
|
||||
|
||||
// Get audiosource-specific information from a voice.
|
||||
float getInfo(handle aVoiceHandle, unsigned int aInfoKey);
|
||||
|
||||
// Create a voice group. Returns 0 if unable (out of voice groups / out of memory)
|
||||
handle createVoiceGroup();
|
||||
// Destroy a voice group.
|
||||
result destroyVoiceGroup(handle aVoiceGroupHandle);
|
||||
// Add a voice handle to a voice group
|
||||
result addVoiceToGroup(handle aVoiceGroupHandle, handle aVoiceHandle);
|
||||
// Is this handle a valid voice group?
|
||||
bool isVoiceGroup(handle aVoiceGroupHandle);
|
||||
// Is this voice group empty?
|
||||
bool isVoiceGroupEmpty(handle aVoiceGroupHandle);
|
||||
|
||||
// Perform 3d audio parameter update
|
||||
void update3dAudio();
|
||||
|
||||
// Set the speed of sound constant for doppler
|
||||
result set3dSoundSpeed(float aSpeed);
|
||||
// Get the current speed of sound constant for doppler
|
||||
float get3dSoundSpeed();
|
||||
// Set 3d listener parameters
|
||||
void set3dListenerParameters(float aPosX, float aPosY, float aPosZ, float aAtX, float aAtY, float aAtZ, float aUpX, float aUpY, float aUpZ, float aVelocityX = 0.0f, float aVelocityY = 0.0f, float aVelocityZ = 0.0f);
|
||||
// Set 3d listener position
|
||||
void set3dListenerPosition(float aPosX, float aPosY, float aPosZ);
|
||||
// Set 3d listener "at" vector
|
||||
void set3dListenerAt(float aAtX, float aAtY, float aAtZ);
|
||||
// set 3d listener "up" vector
|
||||
void set3dListenerUp(float aUpX, float aUpY, float aUpZ);
|
||||
// Set 3d listener velocity
|
||||
void set3dListenerVelocity(float aVelocityX, float aVelocityY, float aVelocityZ);
|
||||
|
||||
// Set 3d audio source parameters
|
||||
void set3dSourceParameters(handle aVoiceHandle, float aPosX, float aPosY, float aPosZ, float aVelocityX = 0.0f, float aVelocityY = 0.0f, float aVelocityZ = 0.0f);
|
||||
// Set 3d audio source position
|
||||
void set3dSourcePosition(handle aVoiceHandle, float aPosX, float aPosY, float aPosZ);
|
||||
// Set 3d audio source velocity
|
||||
void set3dSourceVelocity(handle aVoiceHandle, float aVelocityX, float aVelocityY, float aVelocityZ);
|
||||
// Set 3d audio source min/max distance (distance < min means max volume)
|
||||
void set3dSourceMinMaxDistance(handle aVoiceHandle, float aMinDistance, float aMaxDistance);
|
||||
// Set 3d audio source attenuation parameters
|
||||
void set3dSourceAttenuation(handle aVoiceHandle, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
// Set 3d audio source doppler factor to reduce or enhance doppler effect. Default = 1.0
|
||||
void set3dSourceDopplerFactor(handle aVoiceHandle, float aDopplerFactor);
|
||||
|
||||
// Rest of the stuff is used internally.
|
||||
|
||||
// Returns mixed float samples in buffer. Called by the back-end, or user with null driver.
|
||||
void mix(float *aBuffer, unsigned int aSamples);
|
||||
// Returns mixed 16-bit signed integer samples in buffer. Called by the back-end, or user with null driver.
|
||||
void mixSigned16(short *aBuffer, unsigned int aSamples);
|
||||
public:
|
||||
// Mix N samples * M channels. Called by other mix_ functions.
|
||||
void mix_internal(unsigned int aSamples);
|
||||
|
||||
// Handle rest of initialization (called from backend)
|
||||
void postinit_internal(unsigned int aSamplerate, unsigned int aBufferSize, unsigned int aFlags, unsigned int aChannels);
|
||||
|
||||
// Update list of active voices
|
||||
void calcActiveVoices_internal();
|
||||
// Map resample buffers to active voices
|
||||
void mapResampleBuffers_internal();
|
||||
// Perform mixing for a specific bus
|
||||
void mixBus_internal(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize, float *aScratch, unsigned int aBus, float aSamplerate, unsigned int aChannels);
|
||||
// Find a free voice, stopping the oldest if no free voice is found.
|
||||
int findFreeVoice_internal();
|
||||
// Converts handle to voice, if the handle is valid. Returns -1 if not.
|
||||
int getVoiceFromHandle_internal(handle aVoiceHandle) const;
|
||||
// Converts voice + playindex into handle
|
||||
handle getHandleFromVoice_internal(unsigned int aVoice) const;
|
||||
// Stop voice (not handle).
|
||||
void stopVoice_internal(unsigned int aVoice);
|
||||
// Set voice (not handle) pan.
|
||||
void setVoicePan_internal(unsigned int aVoice, float aPan);
|
||||
// Set voice (not handle) relative play speed.
|
||||
result setVoiceRelativePlaySpeed_internal(unsigned int aVoice, float aSpeed);
|
||||
// Set voice (not handle) volume.
|
||||
void setVoiceVolume_internal(unsigned int aVoice, float aVolume);
|
||||
// Set voice (not handle) pause state.
|
||||
void setVoicePause_internal(unsigned int aVoice, int aPause);
|
||||
// Update overall volume from set and 3d volumes
|
||||
void updateVoiceVolume_internal(unsigned int aVoice);
|
||||
// Update overall relative play speed from set and 3d speeds
|
||||
void updateVoiceRelativePlaySpeed_internal(unsigned int aVoice);
|
||||
// Perform 3d audio calculation for array of voices
|
||||
void update3dVoices_internal(unsigned int *aVoiceList, unsigned int aVoiceCount);
|
||||
// Clip the samples in the buffer
|
||||
void clip_internal(AlignedFloatBuffer &aBuffer, AlignedFloatBuffer &aDestBuffer, unsigned int aSamples, float aVolume0, float aVolume1);
|
||||
// Remove all non-active voices from group
|
||||
void trimVoiceGroup_internal(handle aVoiceGroupHandle);
|
||||
// Get pointer to the zero-terminated array of voice handles in a voice group
|
||||
handle * voiceGroupHandleToArray_internal(handle aVoiceGroupHandle) const;
|
||||
|
||||
// Lock audio thread mutex.
|
||||
void lockAudioMutex_internal();
|
||||
// Unlock audio thread mutex.
|
||||
void unlockAudioMutex_internal();
|
||||
|
||||
// Max. number of active voices. Busses and tickable inaudibles also count against this.
|
||||
unsigned int mMaxActiveVoices;
|
||||
// Highest voice in use so far
|
||||
unsigned int mHighestVoice;
|
||||
// Scratch buffer, used for resampling.
|
||||
AlignedFloatBuffer mScratch;
|
||||
// Current size of the scratch, in samples.
|
||||
unsigned int mScratchSize;
|
||||
// Amount of scratch needed.
|
||||
unsigned int mScratchNeeded;
|
||||
// Output scratch buffer, used in mix_().
|
||||
AlignedFloatBuffer mOutputScratch;
|
||||
// Resampler buffers, two per active voice.
|
||||
AlignedFloatBuffer *mResampleData;
|
||||
// Owners of the resample data
|
||||
AudioSourceInstance **mResampleDataOwner;
|
||||
// Audio voices.
|
||||
AudioSourceInstance *mVoice[VOICE_COUNT];
|
||||
// Output sample rate (not float)
|
||||
unsigned int mSamplerate;
|
||||
// Output channel count
|
||||
unsigned int mChannels;
|
||||
// Current backend ID
|
||||
unsigned int mBackendID;
|
||||
// Current backend string
|
||||
const char * mBackendString;
|
||||
// Maximum size of output buffer; used to calculate needed scratch.
|
||||
unsigned int mBufferSize;
|
||||
// Flags; see Soloud::FLAGS
|
||||
unsigned int mFlags;
|
||||
// Global volume. Applied before clipping.
|
||||
float mGlobalVolume;
|
||||
// Post-clip scaler. Applied after clipping.
|
||||
float mPostClipScaler;
|
||||
// Current play index. Used to create audio handles.
|
||||
unsigned int mPlayIndex;
|
||||
// Current sound source index. Used to create sound source IDs.
|
||||
unsigned int mAudioSourceID;
|
||||
// Fader for the global volume.
|
||||
Fader mGlobalVolumeFader;
|
||||
// Global stream time, for the global volume fader.
|
||||
time mStreamTime;
|
||||
// Last time seen by the playClocked call
|
||||
time mLastClockedTime;
|
||||
// Global filter
|
||||
Filter *mFilter[FILTERS_PER_STREAM];
|
||||
// Global filter instance
|
||||
FilterInstance *mFilterInstance[FILTERS_PER_STREAM];
|
||||
|
||||
// Approximate volume for channels.
|
||||
float mVisualizationChannelVolume[MAX_CHANNELS];
|
||||
// Mono-mixed wave data for visualization and for visualization FFT input
|
||||
float mVisualizationWaveData[256];
|
||||
// FFT output data
|
||||
float mFFTData[256];
|
||||
// Snapshot of wave data for visualization
|
||||
float mWaveData[256];
|
||||
|
||||
// 3d listener position
|
||||
float m3dPosition[3];
|
||||
// 3d listener look-at
|
||||
float m3dAt[3];
|
||||
// 3d listener up
|
||||
float m3dUp[3];
|
||||
// 3d listener velocity
|
||||
float m3dVelocity[3];
|
||||
// 3d speed of sound (for doppler)
|
||||
float m3dSoundSpeed;
|
||||
|
||||
// 3d position of speakers
|
||||
float m3dSpeakerPosition[3 * MAX_CHANNELS];
|
||||
|
||||
// Data related to 3d processing, separate from AudioSource so we can do 3d calculations without audio mutex.
|
||||
AudioSourceInstance3dData m3dData[VOICE_COUNT];
|
||||
|
||||
// For each voice group, first int is number of ints alocated.
|
||||
unsigned int **mVoiceGroup;
|
||||
unsigned int mVoiceGroupCount;
|
||||
|
||||
// List of currently active voices
|
||||
unsigned int mActiveVoice[VOICE_COUNT];
|
||||
// Number of currently active voices
|
||||
unsigned int mActiveVoiceCount;
|
||||
// Active voices list needs to be recalculated
|
||||
bool mActiveVoiceDirty;
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
BIN
SoundPGEXTest/soloud.o
Normal file
BIN
SoundPGEXTest/soloud.o
Normal file
Binary file not shown.
315
SoundPGEXTest/soloud_audiosource.h
Normal file
315
SoundPGEXTest/soloud_audiosource.h
Normal file
@ -0,0 +1,315 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2015 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_AUDIOSOURCE_H
|
||||
#define SOLOUD_AUDIOSOURCE_H
|
||||
|
||||
#include "soloud.h"
|
||||
#include "soloud_fader.h"
|
||||
#include "soloud_filter.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class AudioSource;
|
||||
class AudioSourceInstance;
|
||||
class AudioSourceInstance3dData;
|
||||
|
||||
class AudioCollider
|
||||
{
|
||||
public:
|
||||
// Calculate volume multiplier. Assumed to return value between 0 and 1.
|
||||
virtual float collide(Soloud *aSoloud, AudioSourceInstance3dData *aAudioInstance3dData, int aUserData) = 0;
|
||||
};
|
||||
|
||||
class AudioAttenuator
|
||||
{
|
||||
public:
|
||||
virtual float attenuate(float aDistance, float aMinDistance, float aMaxDistance, float aRolloffFactor) = 0;
|
||||
};
|
||||
|
||||
class AudioSourceInstance3dData
|
||||
{
|
||||
public:
|
||||
// ctor
|
||||
AudioSourceInstance3dData();
|
||||
// Set settings from audiosource
|
||||
void init(AudioSource &aSource);
|
||||
// 3d position
|
||||
float m3dPosition[3];
|
||||
// 3d velocity
|
||||
float m3dVelocity[3];
|
||||
// 3d cone direction
|
||||
/*
|
||||
float m3dConeDirection[3];
|
||||
// 3d cone inner angle
|
||||
float m3dConeInnerAngle;
|
||||
// 3d cone outer angle
|
||||
float m3dConeOuterAngle;
|
||||
// 3d cone outer volume multiplier
|
||||
float m3dConeOuterVolume;
|
||||
*/
|
||||
// 3d min distance
|
||||
float m3dMinDistance;
|
||||
// 3d max distance
|
||||
float m3dMaxDistance;
|
||||
// 3d attenuation rolloff factor
|
||||
float m3dAttenuationRolloff;
|
||||
// 3d attenuation model
|
||||
unsigned int m3dAttenuationModel;
|
||||
// 3d doppler factor
|
||||
float m3dDopplerFactor;
|
||||
// Pointer to a custom audio collider object
|
||||
AudioCollider *mCollider;
|
||||
// Pointer to a custom audio attenuator object
|
||||
AudioAttenuator *mAttenuator;
|
||||
// User data related to audio collider
|
||||
int mColliderData;
|
||||
|
||||
// Doppler sample rate multiplier
|
||||
float mDopplerValue;
|
||||
// Overall 3d volume
|
||||
float m3dVolume;
|
||||
// Channel volume
|
||||
float mChannelVolume[MAX_CHANNELS];
|
||||
// Copy of flags
|
||||
unsigned int mFlags;
|
||||
// Latest handle for this voice
|
||||
handle mHandle;
|
||||
};
|
||||
|
||||
// Base class for audio instances
|
||||
class AudioSourceInstance
|
||||
{
|
||||
public:
|
||||
enum FLAGS
|
||||
{
|
||||
// This audio instance loops (if supported)
|
||||
LOOPING = 1,
|
||||
// This audio instance is protected - won't get stopped if we run out of voices
|
||||
PROTECTED = 2,
|
||||
// This audio instance is paused
|
||||
PAUSED = 4,
|
||||
// This audio instance is affected by 3d processing
|
||||
PROCESS_3D = 8,
|
||||
// This audio instance has listener-relative 3d coordinates
|
||||
LISTENER_RELATIVE = 16,
|
||||
// Currently inaudible
|
||||
INAUDIBLE = 32,
|
||||
// If inaudible, should be killed (default = don't kill kill)
|
||||
INAUDIBLE_KILL = 64,
|
||||
// If inaudible, should still be ticked (default = pause)
|
||||
INAUDIBLE_TICK = 128
|
||||
};
|
||||
// Ctor
|
||||
AudioSourceInstance();
|
||||
// Dtor
|
||||
virtual ~AudioSourceInstance();
|
||||
// Play index; used to identify instances from handles
|
||||
unsigned int mPlayIndex;
|
||||
// Loop count
|
||||
unsigned int mLoopCount;
|
||||
// Flags; see AudioSourceInstance::FLAGS
|
||||
unsigned int mFlags;
|
||||
// Pan value, for getPan()
|
||||
float mPan;
|
||||
// Volume for each channel (panning)
|
||||
float mChannelVolume[MAX_CHANNELS];
|
||||
// Set volume
|
||||
float mSetVolume;
|
||||
// Overall volume overall = set * 3d
|
||||
float mOverallVolume;
|
||||
// Base samplerate; samplerate = base samplerate * relative play speed
|
||||
float mBaseSamplerate;
|
||||
// Samplerate; samplerate = base samplerate * relative play speed
|
||||
float mSamplerate;
|
||||
// Number of channels this audio source produces
|
||||
unsigned int mChannels;
|
||||
// Relative play speed; samplerate = base samplerate * relative play speed
|
||||
float mSetRelativePlaySpeed;
|
||||
// Overall relative plays peed; overall = set * 3d
|
||||
float mOverallRelativePlaySpeed;
|
||||
// How long this stream has played, in seconds.
|
||||
time mStreamTime;
|
||||
// Position of this stream, in seconds.
|
||||
time mStreamPosition;
|
||||
// Fader for the audio panning
|
||||
Fader mPanFader;
|
||||
// Fader for the audio volume
|
||||
Fader mVolumeFader;
|
||||
// Fader for the relative play speed
|
||||
Fader mRelativePlaySpeedFader;
|
||||
// Fader used to schedule pausing of the stream
|
||||
Fader mPauseScheduler;
|
||||
// Fader used to schedule stopping of the stream
|
||||
Fader mStopScheduler;
|
||||
// Affected by some fader
|
||||
int mActiveFader;
|
||||
// Current channel volumes, used to ramp the volume changes to avoid clicks
|
||||
float mCurrentChannelVolume[MAX_CHANNELS];
|
||||
// ID of the sound source that generated this instance
|
||||
unsigned int mAudioSourceID;
|
||||
// Handle of the bus this audio instance is playing on. 0 for root.
|
||||
unsigned int mBusHandle;
|
||||
// Filter pointer
|
||||
FilterInstance *mFilter[FILTERS_PER_STREAM];
|
||||
// Initialize instance. Mostly internal use.
|
||||
void init(AudioSource &aSource, int aPlayIndex);
|
||||
// Buffers for the resampler
|
||||
AlignedFloatBuffer *mResampleData[2];
|
||||
// Sub-sample playhead; 16.16 fixed point
|
||||
unsigned int mSrcOffset;
|
||||
// Samples left over from earlier pass
|
||||
unsigned int mLeftoverSamples;
|
||||
// Number of samples to delay streaming
|
||||
unsigned int mDelaySamples;
|
||||
// When looping, start playing from this time
|
||||
time mLoopPoint;
|
||||
|
||||
// Get N samples from the stream to the buffer. Report samples written.
|
||||
virtual unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize) = 0;
|
||||
// Has the stream ended?
|
||||
virtual bool hasEnded() = 0;
|
||||
// Seek to certain place in the stream. Base implementation is generic "tape" seek (and slow).
|
||||
virtual result seek(time aSeconds, float *mScratch, unsigned int mScratchSize);
|
||||
// Rewind stream. Base implementation returns NOT_IMPLEMENTED, meaning it can't rewind.
|
||||
virtual result rewind();
|
||||
// Get information. Returns 0 by default.
|
||||
virtual float getInfo(unsigned int aInfoKey);
|
||||
};
|
||||
|
||||
class Soloud;
|
||||
|
||||
// Base class for audio sources
|
||||
class AudioSource
|
||||
{
|
||||
public:
|
||||
enum FLAGS
|
||||
{
|
||||
// The instances from this audio source should loop
|
||||
SHOULD_LOOP = 1,
|
||||
// Only one instance of this audio source should play at the same time
|
||||
SINGLE_INSTANCE = 2,
|
||||
// Visualization data gathering enabled. Only for busses.
|
||||
VISUALIZATION_DATA = 4,
|
||||
// Audio instances created from this source are affected by 3d processing
|
||||
PROCESS_3D = 8,
|
||||
// Audio instances created from this source have listener-relative 3d coordinates
|
||||
LISTENER_RELATIVE = 16,
|
||||
// Delay start of sound by the distance from listener
|
||||
DISTANCE_DELAY = 32,
|
||||
// If inaudible, should be killed (default)
|
||||
INAUDIBLE_KILL = 64,
|
||||
// If inaudible, should still be ticked (default = pause)
|
||||
INAUDIBLE_TICK = 128
|
||||
};
|
||||
enum ATTENUATION_MODELS
|
||||
{
|
||||
// No attenuation
|
||||
NO_ATTENUATION = 0,
|
||||
// Inverse distance attenuation model
|
||||
INVERSE_DISTANCE = 1,
|
||||
// Linear distance attenuation model
|
||||
LINEAR_DISTANCE = 2,
|
||||
// Exponential distance attenuation model
|
||||
EXPONENTIAL_DISTANCE = 3
|
||||
};
|
||||
|
||||
// Flags. See AudioSource::FLAGS
|
||||
unsigned int mFlags;
|
||||
// Base sample rate, used to initialize instances
|
||||
float mBaseSamplerate;
|
||||
// Default volume for created instances
|
||||
float mVolume;
|
||||
// Number of channels this audio source produces
|
||||
unsigned int mChannels;
|
||||
// Sound source ID. Assigned by SoLoud the first time it's played.
|
||||
unsigned int mAudioSourceID;
|
||||
// 3d min distance
|
||||
float m3dMinDistance;
|
||||
// 3d max distance
|
||||
float m3dMaxDistance;
|
||||
// 3d attenuation rolloff factor
|
||||
float m3dAttenuationRolloff;
|
||||
// 3d attenuation model
|
||||
unsigned int m3dAttenuationModel;
|
||||
// 3d doppler factor
|
||||
float m3dDopplerFactor;
|
||||
// Filter pointer
|
||||
Filter *mFilter[FILTERS_PER_STREAM];
|
||||
// Pointer to the Soloud object. Needed to stop all instances in dtor.
|
||||
Soloud *mSoloud;
|
||||
// Pointer to a custom audio collider object
|
||||
AudioCollider *mCollider;
|
||||
// Pointer to custom attenuator object
|
||||
AudioAttenuator *mAttenuator;
|
||||
// User data related to audio collider
|
||||
int mColliderData;
|
||||
// When looping, start playing from this time
|
||||
time mLoopPoint;
|
||||
|
||||
// CTor
|
||||
AudioSource();
|
||||
// Set default volume for instances
|
||||
void setVolume(float aVolume);
|
||||
// Set the looping of the instances created from this audio source
|
||||
void setLooping(bool aLoop);
|
||||
// Set whether only one instance of this sound should ever be playing at the same time
|
||||
void setSingleInstance(bool aSingleInstance);
|
||||
|
||||
// Set the minimum and maximum distances for 3d audio source (closer to min distance = max vol)
|
||||
void set3dMinMaxDistance(float aMinDistance, float aMaxDistance);
|
||||
// Set attenuation model and rolloff factor for 3d audio source
|
||||
void set3dAttenuation(unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
// Set doppler factor to reduce or enhance doppler effect, default = 1.0
|
||||
void set3dDopplerFactor(float aDopplerFactor);
|
||||
// Set the coordinates for this audio source to be relative to listener's coordinates.
|
||||
void set3dListenerRelative(bool aListenerRelative);
|
||||
// Enable delaying the start of the sound based on the distance.
|
||||
void set3dDistanceDelay(bool aDistanceDelay);
|
||||
|
||||
// Set a custom 3d audio collider. Set to NULL to disable.
|
||||
void set3dCollider(AudioCollider *aCollider, int aUserData = 0);
|
||||
// Set a custom attenuator. Set to NULL to disable.
|
||||
void set3dAttenuator(AudioAttenuator *aAttenuator);
|
||||
|
||||
// Set behavior for inaudible sounds
|
||||
void setInaudibleBehavior(bool aMustTick, bool aKill);
|
||||
|
||||
// Set time to jump to when looping
|
||||
void setLoopPoint(time aLoopPoint);
|
||||
// Get current loop point value
|
||||
time getLoopPoint();
|
||||
|
||||
// Set filter. Set to NULL to clear the filter.
|
||||
virtual void setFilter(unsigned int aFilterId, Filter *aFilter);
|
||||
// DTor
|
||||
virtual ~AudioSource();
|
||||
// Create instance from the audio source. Called from within Soloud class.
|
||||
virtual AudioSourceInstance *createInstance() = 0;
|
||||
// Stop all instances of this audio source
|
||||
void stop();
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
68
SoundPGEXTest/soloud_bassboostfilter.h
Normal file
68
SoundPGEXTest/soloud_bassboostfilter.h
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2015 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_BASSBOOSTFILTER_H
|
||||
#define SOLOUD_BASSBOOSTFILTER_H
|
||||
|
||||
#include "soloud.h"
|
||||
#include "soloud_fftfilter.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class BassboostFilter;
|
||||
|
||||
class BassboostFilterInstance : public FFTFilterInstance
|
||||
{
|
||||
enum FILTERATTRIBUTE
|
||||
{
|
||||
WET = 0,
|
||||
BOOST = 1
|
||||
};
|
||||
BassboostFilter *mParent;
|
||||
public:
|
||||
virtual void fftFilterChannel(float *aFFTBuffer, unsigned int aSamples, float aSamplerate, time aTime, unsigned int aChannel, unsigned int aChannels);
|
||||
BassboostFilterInstance(BassboostFilter *aParent);
|
||||
};
|
||||
|
||||
class BassboostFilter : public FFTFilter
|
||||
{
|
||||
public:
|
||||
enum FILTERATTRIBUTE
|
||||
{
|
||||
WET = 0,
|
||||
BOOST = 1
|
||||
};
|
||||
virtual int getParamCount();
|
||||
virtual const char* getParamName(unsigned int aParamIndex);
|
||||
virtual unsigned int getParamType(unsigned int aParamIndex);
|
||||
virtual float getParamMax(unsigned int aParamIndex);
|
||||
virtual float getParamMin(unsigned int aParamIndex);
|
||||
float mBoost;
|
||||
result setParams(float aBoost);
|
||||
virtual FilterInstance *createInstance();
|
||||
BassboostFilter();
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
94
SoundPGEXTest/soloud_biquadresonantfilter.h
Normal file
94
SoundPGEXTest/soloud_biquadresonantfilter.h
Normal file
@ -0,0 +1,94 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2014 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_BQRFILTER_H
|
||||
#define SOLOUD_BQRFILTER_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class BiquadResonantFilter;
|
||||
|
||||
struct BQRStateData
|
||||
{
|
||||
float mY1, mY2, mX1, mX2;
|
||||
};
|
||||
|
||||
class BiquadResonantFilterInstance : public FilterInstance
|
||||
{
|
||||
enum FILTERATTRIBUTE
|
||||
{
|
||||
WET = 0,
|
||||
TYPE,
|
||||
FREQUENCY,
|
||||
RESONANCE
|
||||
};
|
||||
|
||||
BQRStateData mState[8];
|
||||
float mA0, mA1, mA2, mB1, mB2;
|
||||
int mDirty;
|
||||
float mSamplerate;
|
||||
|
||||
BiquadResonantFilter *mParent;
|
||||
void calcBQRParams();
|
||||
public:
|
||||
virtual void filterChannel(float *aBuffer, unsigned int aSamples, float aSamplerate, time aTime, unsigned int aChannel, unsigned int aChannels);
|
||||
virtual ~BiquadResonantFilterInstance();
|
||||
BiquadResonantFilterInstance(BiquadResonantFilter *aParent);
|
||||
};
|
||||
|
||||
class BiquadResonantFilter : public Filter
|
||||
{
|
||||
public:
|
||||
enum FILTERTYPE
|
||||
{
|
||||
LOWPASS = 0,
|
||||
HIGHPASS = 1,
|
||||
BANDPASS = 2
|
||||
};
|
||||
enum FILTERATTRIBUTE
|
||||
{
|
||||
WET = 0,
|
||||
TYPE,
|
||||
FREQUENCY,
|
||||
RESONANCE
|
||||
};
|
||||
int mFilterType;
|
||||
float mFrequency;
|
||||
float mResonance;
|
||||
virtual int getParamCount();
|
||||
virtual const char* getParamName(unsigned int aParamIndex);
|
||||
virtual unsigned int getParamType(unsigned int aParamIndex);
|
||||
virtual float getParamMax(unsigned int aParamIndex);
|
||||
virtual float getParamMin(unsigned int aParamIndex);
|
||||
|
||||
virtual BiquadResonantFilterInstance *createInstance();
|
||||
BiquadResonantFilter();
|
||||
result setParams(int aType, float aFrequency, float aResonance);
|
||||
virtual ~BiquadResonantFilter();
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
96
SoundPGEXTest/soloud_bus.h
Normal file
96
SoundPGEXTest/soloud_bus.h
Normal file
@ -0,0 +1,96 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2020 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_BUS_H
|
||||
#define SOLOUD_BUS_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class Bus;
|
||||
|
||||
class BusInstance : public AudioSourceInstance
|
||||
{
|
||||
Bus *mParent;
|
||||
unsigned int mScratchSize;
|
||||
AlignedFloatBuffer mScratch;
|
||||
public:
|
||||
// Approximate volume for channels.
|
||||
float mVisualizationChannelVolume[MAX_CHANNELS];
|
||||
// Mono-mixed wave data for visualization and for visualization FFT input
|
||||
float mVisualizationWaveData[256];
|
||||
|
||||
BusInstance(Bus *aParent);
|
||||
virtual unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize);
|
||||
virtual bool hasEnded();
|
||||
virtual ~BusInstance();
|
||||
};
|
||||
|
||||
class Bus : public AudioSource
|
||||
{
|
||||
public:
|
||||
Bus();
|
||||
virtual BusInstance *createInstance();
|
||||
// Set filter. Set to NULL to clear the filter.
|
||||
virtual void setFilter(unsigned int aFilterId, Filter *aFilter);
|
||||
// Play sound through the bus
|
||||
handle play(AudioSource &aSound, float aVolume = 1.0f, float aPan = 0.0f, bool aPaused = 0);
|
||||
// Play sound through the bus, delayed in relation to other sounds called via this function.
|
||||
handle playClocked(time aSoundTime, AudioSource &aSound, float aVolume = 1.0f, float aPan = 0.0f);
|
||||
// Start playing a 3d audio source through the bus
|
||||
handle play3d(AudioSource &aSound, float aPosX, float aPosY, float aPosZ, float aVelX = 0.0f, float aVelY = 0.0f, float aVelZ = 0.0f, float aVolume = 1.0f, bool aPaused = 0);
|
||||
// Start playing a 3d audio source through the bus, delayed in relation to other sounds called via this function.
|
||||
handle play3dClocked(time aSoundTime, AudioSource &aSound, float aPosX, float aPosY, float aPosZ, float aVelX = 0.0f, float aVelY = 0.0f, float aVelZ = 0.0f, float aVolume = 1.0f);
|
||||
// Set number of channels for the bus (default 2)
|
||||
result setChannels(unsigned int aChannels);
|
||||
// Enable or disable visualization data gathering
|
||||
void setVisualizationEnable(bool aEnable);
|
||||
// Move a live sound to this bus
|
||||
void annexSound(handle aVoiceHandle);
|
||||
|
||||
// Calculate and get 256 floats of FFT data for visualization. Visualization has to be enabled before use.
|
||||
float *calcFFT();
|
||||
|
||||
// Get 256 floats of wave data for visualization. Visualization has to be enabled before use.
|
||||
float *getWave();
|
||||
|
||||
// Get approximate volume for output channel for visualization. Visualization has to be enabled before use.
|
||||
float getApproximateVolume(unsigned int aChannel);
|
||||
|
||||
// Get number of immediate child voices to this bus
|
||||
unsigned int getActiveVoiceCount();
|
||||
public:
|
||||
BusInstance *mInstance;
|
||||
unsigned int mChannelHandle;
|
||||
// FFT output data
|
||||
float mFFTData[256];
|
||||
// Snapshot of wave data for visualization
|
||||
float mWaveData[256];
|
||||
// Internal: find the bus' channel
|
||||
void findBusHandle();
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
710
SoundPGEXTest/soloud_c.h
Normal file
710
SoundPGEXTest/soloud_c.h
Normal file
@ -0,0 +1,710 @@
|
||||
/* **************************************************
|
||||
* WARNING: this is a generated file. Do not edit. *
|
||||
* Any edits will be overwritten by the generator. *
|
||||
************************************************** */
|
||||
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2020 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
/* SoLoud C-Api Code Generator (c)2013-2020 Jari Komppa http://iki.fi/sol/ */
|
||||
|
||||
#ifndef SOLOUD_C_H_INCLUDED
|
||||
#define SOLOUD_C_H_INCLUDED
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
// Collected enumerations
|
||||
enum SOLOUD_ENUMS
|
||||
{
|
||||
SOLOUD_AUTO = 0,
|
||||
SOLOUD_SDL1 = 1,
|
||||
SOLOUD_SDL2 = 2,
|
||||
SOLOUD_PORTAUDIO = 3,
|
||||
SOLOUD_WINMM = 4,
|
||||
SOLOUD_XAUDIO2 = 5,
|
||||
SOLOUD_WASAPI = 6,
|
||||
SOLOUD_ALSA = 7,
|
||||
SOLOUD_JACK = 8,
|
||||
SOLOUD_OSS = 9,
|
||||
SOLOUD_OPENAL = 10,
|
||||
SOLOUD_COREAUDIO = 11,
|
||||
SOLOUD_OPENSLES = 12,
|
||||
SOLOUD_VITA_HOMEBREW = 13,
|
||||
SOLOUD_MINIAUDIO = 14,
|
||||
SOLOUD_NOSOUND = 15,
|
||||
SOLOUD_NULLDRIVER = 16,
|
||||
SOLOUD_BACKEND_MAX = 17,
|
||||
SOLOUD_CLIP_ROUNDOFF = 1,
|
||||
SOLOUD_ENABLE_VISUALIZATION = 2,
|
||||
SOLOUD_LEFT_HANDED_3D = 4,
|
||||
SOLOUD_NO_FPU_REGISTER_CHANGE = 8,
|
||||
BASSBOOSTFILTER_WET = 0,
|
||||
BASSBOOSTFILTER_BOOST = 1,
|
||||
BIQUADRESONANTFILTER_LOWPASS = 0,
|
||||
BIQUADRESONANTFILTER_HIGHPASS = 1,
|
||||
BIQUADRESONANTFILTER_BANDPASS = 2,
|
||||
BIQUADRESONANTFILTER_WET = 0,
|
||||
BIQUADRESONANTFILTER_TYPE = 1,
|
||||
BIQUADRESONANTFILTER_FREQUENCY = 2,
|
||||
BIQUADRESONANTFILTER_RESONANCE = 3,
|
||||
ECHOFILTER_WET = 0,
|
||||
ECHOFILTER_DELAY = 1,
|
||||
ECHOFILTER_DECAY = 2,
|
||||
ECHOFILTER_FILTER = 3,
|
||||
FLANGERFILTER_WET = 0,
|
||||
FLANGERFILTER_DELAY = 1,
|
||||
FLANGERFILTER_FREQ = 2,
|
||||
FREEVERBFILTER_WET = 0,
|
||||
FREEVERBFILTER_FREEZE = 1,
|
||||
FREEVERBFILTER_ROOMSIZE = 2,
|
||||
FREEVERBFILTER_DAMP = 3,
|
||||
FREEVERBFILTER_WIDTH = 4,
|
||||
LOFIFILTER_WET = 0,
|
||||
LOFIFILTER_SAMPLERATE = 1,
|
||||
LOFIFILTER_BITDEPTH = 2,
|
||||
NOISE_WHITE = 0,
|
||||
NOISE_PINK = 1,
|
||||
NOISE_BROWNISH = 2,
|
||||
NOISE_BLUEISH = 3,
|
||||
ROBOTIZEFILTER_WET = 0,
|
||||
ROBOTIZEFILTER_FREQ = 1,
|
||||
ROBOTIZEFILTER_WAVE = 2,
|
||||
SFXR_COIN = 0,
|
||||
SFXR_LASER = 1,
|
||||
SFXR_EXPLOSION = 2,
|
||||
SFXR_POWERUP = 3,
|
||||
SFXR_HURT = 4,
|
||||
SFXR_JUMP = 5,
|
||||
SFXR_BLIP = 6,
|
||||
SPEECH_KW_SAW = 0,
|
||||
SPEECH_KW_TRIANGLE = 1,
|
||||
SPEECH_KW_SIN = 2,
|
||||
SPEECH_KW_SQUARE = 3,
|
||||
SPEECH_KW_PULSE = 4,
|
||||
SPEECH_KW_NOISE = 5,
|
||||
SPEECH_KW_WARBLE = 6,
|
||||
VIC_PAL = 0,
|
||||
VIC_NTSC = 1,
|
||||
VIC_BASS = 0,
|
||||
VIC_ALTO = 1,
|
||||
VIC_SOPRANO = 2,
|
||||
VIC_NOISE = 3,
|
||||
VIC_MAX_REGS = 4,
|
||||
WAVESHAPERFILTER_WET = 0,
|
||||
WAVESHAPERFILTER_AMOUNT = 1
|
||||
};
|
||||
|
||||
// Object handle typedefs
|
||||
typedef void * AlignedFloatBuffer;
|
||||
typedef void * TinyAlignedFloatBuffer;
|
||||
typedef void * Soloud;
|
||||
typedef void * AudioCollider;
|
||||
typedef void * AudioAttenuator;
|
||||
typedef void * AudioSource;
|
||||
typedef void * BassboostFilter;
|
||||
typedef void * BiquadResonantFilter;
|
||||
typedef void * Bus;
|
||||
typedef void * DCRemovalFilter;
|
||||
typedef void * EchoFilter;
|
||||
typedef void * Fader;
|
||||
typedef void * FFTFilter;
|
||||
typedef void * Filter;
|
||||
typedef void * FlangerFilter;
|
||||
typedef void * FreeverbFilter;
|
||||
typedef void * LofiFilter;
|
||||
typedef void * Monotone;
|
||||
typedef void * Noise;
|
||||
typedef void * Openmpt;
|
||||
typedef void * Queue;
|
||||
typedef void * RobotizeFilter;
|
||||
typedef void * Sfxr;
|
||||
typedef void * Speech;
|
||||
typedef void * TedSid;
|
||||
typedef void * Vic;
|
||||
typedef void * Vizsn;
|
||||
typedef void * Wav;
|
||||
typedef void * WaveShaperFilter;
|
||||
typedef void * WavStream;
|
||||
typedef void * File;
|
||||
|
||||
/*
|
||||
* Soloud
|
||||
*/
|
||||
void Soloud_destroy(Soloud * aSoloud);
|
||||
Soloud * Soloud_create();
|
||||
int Soloud_init(Soloud * aSoloud);
|
||||
int Soloud_initEx(Soloud * aSoloud, unsigned int aFlags /* = Soloud::CLIP_ROUNDOFF */, unsigned int aBackend /* = Soloud::AUTO */, unsigned int aSamplerate /* = Soloud::AUTO */, unsigned int aBufferSize /* = Soloud::AUTO */, unsigned int aChannels /* = 2 */);
|
||||
void Soloud_deinit(Soloud * aSoloud);
|
||||
unsigned int Soloud_getVersion(Soloud * aSoloud);
|
||||
const char * Soloud_getErrorString(Soloud * aSoloud, int aErrorCode);
|
||||
unsigned int Soloud_getBackendId(Soloud * aSoloud);
|
||||
const char * Soloud_getBackendString(Soloud * aSoloud);
|
||||
unsigned int Soloud_getBackendChannels(Soloud * aSoloud);
|
||||
unsigned int Soloud_getBackendSamplerate(Soloud * aSoloud);
|
||||
unsigned int Soloud_getBackendBufferSize(Soloud * aSoloud);
|
||||
int Soloud_setSpeakerPosition(Soloud * aSoloud, unsigned int aChannel, float aX, float aY, float aZ);
|
||||
int Soloud_getSpeakerPosition(Soloud * aSoloud, unsigned int aChannel, float * aX, float * aY, float * aZ);
|
||||
unsigned int Soloud_play(Soloud * aSoloud, AudioSource * aSound);
|
||||
unsigned int Soloud_playEx(Soloud * aSoloud, AudioSource * aSound, float aVolume /* = -1.0f */, float aPan /* = 0.0f */, int aPaused /* = 0 */, unsigned int aBus /* = 0 */);
|
||||
unsigned int Soloud_playClocked(Soloud * aSoloud, double aSoundTime, AudioSource * aSound);
|
||||
unsigned int Soloud_playClockedEx(Soloud * aSoloud, double aSoundTime, AudioSource * aSound, float aVolume /* = -1.0f */, float aPan /* = 0.0f */, unsigned int aBus /* = 0 */);
|
||||
unsigned int Soloud_play3d(Soloud * aSoloud, AudioSource * aSound, float aPosX, float aPosY, float aPosZ);
|
||||
unsigned int Soloud_play3dEx(Soloud * aSoloud, AudioSource * aSound, float aPosX, float aPosY, float aPosZ, float aVelX /* = 0.0f */, float aVelY /* = 0.0f */, float aVelZ /* = 0.0f */, float aVolume /* = 1.0f */, int aPaused /* = 0 */, unsigned int aBus /* = 0 */);
|
||||
unsigned int Soloud_play3dClocked(Soloud * aSoloud, double aSoundTime, AudioSource * aSound, float aPosX, float aPosY, float aPosZ);
|
||||
unsigned int Soloud_play3dClockedEx(Soloud * aSoloud, double aSoundTime, AudioSource * aSound, float aPosX, float aPosY, float aPosZ, float aVelX /* = 0.0f */, float aVelY /* = 0.0f */, float aVelZ /* = 0.0f */, float aVolume /* = 1.0f */, unsigned int aBus /* = 0 */);
|
||||
unsigned int Soloud_playBackground(Soloud * aSoloud, AudioSource * aSound);
|
||||
unsigned int Soloud_playBackgroundEx(Soloud * aSoloud, AudioSource * aSound, float aVolume /* = -1.0f */, int aPaused /* = 0 */, unsigned int aBus /* = 0 */);
|
||||
int Soloud_seek(Soloud * aSoloud, unsigned int aVoiceHandle, double aSeconds);
|
||||
void Soloud_stop(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
void Soloud_stopAll(Soloud * aSoloud);
|
||||
void Soloud_stopAudioSource(Soloud * aSoloud, AudioSource * aSound);
|
||||
int Soloud_countAudioSource(Soloud * aSoloud, AudioSource * aSound);
|
||||
void Soloud_setFilterParameter(Soloud * aSoloud, unsigned int aVoiceHandle, unsigned int aFilterId, unsigned int aAttributeId, float aValue);
|
||||
float Soloud_getFilterParameter(Soloud * aSoloud, unsigned int aVoiceHandle, unsigned int aFilterId, unsigned int aAttributeId);
|
||||
void Soloud_fadeFilterParameter(Soloud * aSoloud, unsigned int aVoiceHandle, unsigned int aFilterId, unsigned int aAttributeId, float aTo, double aTime);
|
||||
void Soloud_oscillateFilterParameter(Soloud * aSoloud, unsigned int aVoiceHandle, unsigned int aFilterId, unsigned int aAttributeId, float aFrom, float aTo, double aTime);
|
||||
double Soloud_getStreamTime(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
double Soloud_getStreamPosition(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
int Soloud_getPause(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
float Soloud_getVolume(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
float Soloud_getOverallVolume(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
float Soloud_getPan(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
float Soloud_getSamplerate(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
int Soloud_getProtectVoice(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
unsigned int Soloud_getActiveVoiceCount(Soloud * aSoloud);
|
||||
unsigned int Soloud_getVoiceCount(Soloud * aSoloud);
|
||||
int Soloud_isValidVoiceHandle(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
float Soloud_getRelativePlaySpeed(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
float Soloud_getPostClipScaler(Soloud * aSoloud);
|
||||
float Soloud_getGlobalVolume(Soloud * aSoloud);
|
||||
unsigned int Soloud_getMaxActiveVoiceCount(Soloud * aSoloud);
|
||||
int Soloud_getLooping(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
double Soloud_getLoopPoint(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
void Soloud_setLoopPoint(Soloud * aSoloud, unsigned int aVoiceHandle, double aLoopPoint);
|
||||
void Soloud_setLooping(Soloud * aSoloud, unsigned int aVoiceHandle, int aLooping);
|
||||
int Soloud_setMaxActiveVoiceCount(Soloud * aSoloud, unsigned int aVoiceCount);
|
||||
void Soloud_setInaudibleBehavior(Soloud * aSoloud, unsigned int aVoiceHandle, int aMustTick, int aKill);
|
||||
void Soloud_setGlobalVolume(Soloud * aSoloud, float aVolume);
|
||||
void Soloud_setPostClipScaler(Soloud * aSoloud, float aScaler);
|
||||
void Soloud_setPause(Soloud * aSoloud, unsigned int aVoiceHandle, int aPause);
|
||||
void Soloud_setPauseAll(Soloud * aSoloud, int aPause);
|
||||
int Soloud_setRelativePlaySpeed(Soloud * aSoloud, unsigned int aVoiceHandle, float aSpeed);
|
||||
void Soloud_setProtectVoice(Soloud * aSoloud, unsigned int aVoiceHandle, int aProtect);
|
||||
void Soloud_setSamplerate(Soloud * aSoloud, unsigned int aVoiceHandle, float aSamplerate);
|
||||
void Soloud_setPan(Soloud * aSoloud, unsigned int aVoiceHandle, float aPan);
|
||||
void Soloud_setPanAbsolute(Soloud * aSoloud, unsigned int aVoiceHandle, float aLVolume, float aRVolume);
|
||||
void Soloud_setPanAbsoluteEx(Soloud * aSoloud, unsigned int aVoiceHandle, float aLVolume, float aRVolume, float aLBVolume /* = 0 */, float aRBVolume /* = 0 */, float aCVolume /* = 0 */, float aSVolume /* = 0 */);
|
||||
void Soloud_setVolume(Soloud * aSoloud, unsigned int aVoiceHandle, float aVolume);
|
||||
void Soloud_setDelaySamples(Soloud * aSoloud, unsigned int aVoiceHandle, unsigned int aSamples);
|
||||
void Soloud_fadeVolume(Soloud * aSoloud, unsigned int aVoiceHandle, float aTo, double aTime);
|
||||
void Soloud_fadePan(Soloud * aSoloud, unsigned int aVoiceHandle, float aTo, double aTime);
|
||||
void Soloud_fadeRelativePlaySpeed(Soloud * aSoloud, unsigned int aVoiceHandle, float aTo, double aTime);
|
||||
void Soloud_fadeGlobalVolume(Soloud * aSoloud, float aTo, double aTime);
|
||||
void Soloud_schedulePause(Soloud * aSoloud, unsigned int aVoiceHandle, double aTime);
|
||||
void Soloud_scheduleStop(Soloud * aSoloud, unsigned int aVoiceHandle, double aTime);
|
||||
void Soloud_oscillateVolume(Soloud * aSoloud, unsigned int aVoiceHandle, float aFrom, float aTo, double aTime);
|
||||
void Soloud_oscillatePan(Soloud * aSoloud, unsigned int aVoiceHandle, float aFrom, float aTo, double aTime);
|
||||
void Soloud_oscillateRelativePlaySpeed(Soloud * aSoloud, unsigned int aVoiceHandle, float aFrom, float aTo, double aTime);
|
||||
void Soloud_oscillateGlobalVolume(Soloud * aSoloud, float aFrom, float aTo, double aTime);
|
||||
void Soloud_setGlobalFilter(Soloud * aSoloud, unsigned int aFilterId, Filter * aFilter);
|
||||
void Soloud_setVisualizationEnable(Soloud * aSoloud, int aEnable);
|
||||
float * Soloud_calcFFT(Soloud * aSoloud);
|
||||
float * Soloud_getWave(Soloud * aSoloud);
|
||||
float Soloud_getApproximateVolume(Soloud * aSoloud, unsigned int aChannel);
|
||||
unsigned int Soloud_getLoopCount(Soloud * aSoloud, unsigned int aVoiceHandle);
|
||||
float Soloud_getInfo(Soloud * aSoloud, unsigned int aVoiceHandle, unsigned int aInfoKey);
|
||||
unsigned int Soloud_createVoiceGroup(Soloud * aSoloud);
|
||||
int Soloud_destroyVoiceGroup(Soloud * aSoloud, unsigned int aVoiceGroupHandle);
|
||||
int Soloud_addVoiceToGroup(Soloud * aSoloud, unsigned int aVoiceGroupHandle, unsigned int aVoiceHandle);
|
||||
int Soloud_isVoiceGroup(Soloud * aSoloud, unsigned int aVoiceGroupHandle);
|
||||
int Soloud_isVoiceGroupEmpty(Soloud * aSoloud, unsigned int aVoiceGroupHandle);
|
||||
void Soloud_update3dAudio(Soloud * aSoloud);
|
||||
int Soloud_set3dSoundSpeed(Soloud * aSoloud, float aSpeed);
|
||||
float Soloud_get3dSoundSpeed(Soloud * aSoloud);
|
||||
void Soloud_set3dListenerParameters(Soloud * aSoloud, float aPosX, float aPosY, float aPosZ, float aAtX, float aAtY, float aAtZ, float aUpX, float aUpY, float aUpZ);
|
||||
void Soloud_set3dListenerParametersEx(Soloud * aSoloud, float aPosX, float aPosY, float aPosZ, float aAtX, float aAtY, float aAtZ, float aUpX, float aUpY, float aUpZ, float aVelocityX /* = 0.0f */, float aVelocityY /* = 0.0f */, float aVelocityZ /* = 0.0f */);
|
||||
void Soloud_set3dListenerPosition(Soloud * aSoloud, float aPosX, float aPosY, float aPosZ);
|
||||
void Soloud_set3dListenerAt(Soloud * aSoloud, float aAtX, float aAtY, float aAtZ);
|
||||
void Soloud_set3dListenerUp(Soloud * aSoloud, float aUpX, float aUpY, float aUpZ);
|
||||
void Soloud_set3dListenerVelocity(Soloud * aSoloud, float aVelocityX, float aVelocityY, float aVelocityZ);
|
||||
void Soloud_set3dSourceParameters(Soloud * aSoloud, unsigned int aVoiceHandle, float aPosX, float aPosY, float aPosZ);
|
||||
void Soloud_set3dSourceParametersEx(Soloud * aSoloud, unsigned int aVoiceHandle, float aPosX, float aPosY, float aPosZ, float aVelocityX /* = 0.0f */, float aVelocityY /* = 0.0f */, float aVelocityZ /* = 0.0f */);
|
||||
void Soloud_set3dSourcePosition(Soloud * aSoloud, unsigned int aVoiceHandle, float aPosX, float aPosY, float aPosZ);
|
||||
void Soloud_set3dSourceVelocity(Soloud * aSoloud, unsigned int aVoiceHandle, float aVelocityX, float aVelocityY, float aVelocityZ);
|
||||
void Soloud_set3dSourceMinMaxDistance(Soloud * aSoloud, unsigned int aVoiceHandle, float aMinDistance, float aMaxDistance);
|
||||
void Soloud_set3dSourceAttenuation(Soloud * aSoloud, unsigned int aVoiceHandle, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
void Soloud_set3dSourceDopplerFactor(Soloud * aSoloud, unsigned int aVoiceHandle, float aDopplerFactor);
|
||||
void Soloud_mix(Soloud * aSoloud, float * aBuffer, unsigned int aSamples);
|
||||
void Soloud_mixSigned16(Soloud * aSoloud, short * aBuffer, unsigned int aSamples);
|
||||
|
||||
/*
|
||||
* BassboostFilter
|
||||
*/
|
||||
void BassboostFilter_destroy(BassboostFilter * aBassboostFilter);
|
||||
int BassboostFilter_getParamCount(BassboostFilter * aBassboostFilter);
|
||||
const char * BassboostFilter_getParamName(BassboostFilter * aBassboostFilter, unsigned int aParamIndex);
|
||||
unsigned int BassboostFilter_getParamType(BassboostFilter * aBassboostFilter, unsigned int aParamIndex);
|
||||
float BassboostFilter_getParamMax(BassboostFilter * aBassboostFilter, unsigned int aParamIndex);
|
||||
float BassboostFilter_getParamMin(BassboostFilter * aBassboostFilter, unsigned int aParamIndex);
|
||||
int BassboostFilter_setParams(BassboostFilter * aBassboostFilter, float aBoost);
|
||||
BassboostFilter * BassboostFilter_create();
|
||||
|
||||
/*
|
||||
* BiquadResonantFilter
|
||||
*/
|
||||
void BiquadResonantFilter_destroy(BiquadResonantFilter * aBiquadResonantFilter);
|
||||
int BiquadResonantFilter_getParamCount(BiquadResonantFilter * aBiquadResonantFilter);
|
||||
const char * BiquadResonantFilter_getParamName(BiquadResonantFilter * aBiquadResonantFilter, unsigned int aParamIndex);
|
||||
unsigned int BiquadResonantFilter_getParamType(BiquadResonantFilter * aBiquadResonantFilter, unsigned int aParamIndex);
|
||||
float BiquadResonantFilter_getParamMax(BiquadResonantFilter * aBiquadResonantFilter, unsigned int aParamIndex);
|
||||
float BiquadResonantFilter_getParamMin(BiquadResonantFilter * aBiquadResonantFilter, unsigned int aParamIndex);
|
||||
BiquadResonantFilter * BiquadResonantFilter_create();
|
||||
int BiquadResonantFilter_setParams(BiquadResonantFilter * aBiquadResonantFilter, int aType, float aFrequency, float aResonance);
|
||||
|
||||
/*
|
||||
* Bus
|
||||
*/
|
||||
void Bus_destroy(Bus * aBus);
|
||||
Bus * Bus_create();
|
||||
void Bus_setFilter(Bus * aBus, unsigned int aFilterId, Filter * aFilter);
|
||||
unsigned int Bus_play(Bus * aBus, AudioSource * aSound);
|
||||
unsigned int Bus_playEx(Bus * aBus, AudioSource * aSound, float aVolume /* = 1.0f */, float aPan /* = 0.0f */, int aPaused /* = 0 */);
|
||||
unsigned int Bus_playClocked(Bus * aBus, double aSoundTime, AudioSource * aSound);
|
||||
unsigned int Bus_playClockedEx(Bus * aBus, double aSoundTime, AudioSource * aSound, float aVolume /* = 1.0f */, float aPan /* = 0.0f */);
|
||||
unsigned int Bus_play3d(Bus * aBus, AudioSource * aSound, float aPosX, float aPosY, float aPosZ);
|
||||
unsigned int Bus_play3dEx(Bus * aBus, AudioSource * aSound, float aPosX, float aPosY, float aPosZ, float aVelX /* = 0.0f */, float aVelY /* = 0.0f */, float aVelZ /* = 0.0f */, float aVolume /* = 1.0f */, int aPaused /* = 0 */);
|
||||
unsigned int Bus_play3dClocked(Bus * aBus, double aSoundTime, AudioSource * aSound, float aPosX, float aPosY, float aPosZ);
|
||||
unsigned int Bus_play3dClockedEx(Bus * aBus, double aSoundTime, AudioSource * aSound, float aPosX, float aPosY, float aPosZ, float aVelX /* = 0.0f */, float aVelY /* = 0.0f */, float aVelZ /* = 0.0f */, float aVolume /* = 1.0f */);
|
||||
int Bus_setChannels(Bus * aBus, unsigned int aChannels);
|
||||
void Bus_setVisualizationEnable(Bus * aBus, int aEnable);
|
||||
void Bus_annexSound(Bus * aBus, unsigned int aVoiceHandle);
|
||||
float * Bus_calcFFT(Bus * aBus);
|
||||
float * Bus_getWave(Bus * aBus);
|
||||
float Bus_getApproximateVolume(Bus * aBus, unsigned int aChannel);
|
||||
unsigned int Bus_getActiveVoiceCount(Bus * aBus);
|
||||
void Bus_setVolume(Bus * aBus, float aVolume);
|
||||
void Bus_setLooping(Bus * aBus, int aLoop);
|
||||
void Bus_set3dMinMaxDistance(Bus * aBus, float aMinDistance, float aMaxDistance);
|
||||
void Bus_set3dAttenuation(Bus * aBus, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
void Bus_set3dDopplerFactor(Bus * aBus, float aDopplerFactor);
|
||||
void Bus_set3dListenerRelative(Bus * aBus, int aListenerRelative);
|
||||
void Bus_set3dDistanceDelay(Bus * aBus, int aDistanceDelay);
|
||||
void Bus_set3dCollider(Bus * aBus, AudioCollider * aCollider);
|
||||
void Bus_set3dColliderEx(Bus * aBus, AudioCollider * aCollider, int aUserData /* = 0 */);
|
||||
void Bus_set3dAttenuator(Bus * aBus, AudioAttenuator * aAttenuator);
|
||||
void Bus_setInaudibleBehavior(Bus * aBus, int aMustTick, int aKill);
|
||||
void Bus_setLoopPoint(Bus * aBus, double aLoopPoint);
|
||||
double Bus_getLoopPoint(Bus * aBus);
|
||||
void Bus_stop(Bus * aBus);
|
||||
|
||||
/*
|
||||
* DCRemovalFilter
|
||||
*/
|
||||
void DCRemovalFilter_destroy(DCRemovalFilter * aDCRemovalFilter);
|
||||
DCRemovalFilter * DCRemovalFilter_create();
|
||||
int DCRemovalFilter_setParams(DCRemovalFilter * aDCRemovalFilter);
|
||||
int DCRemovalFilter_setParamsEx(DCRemovalFilter * aDCRemovalFilter, float aLength /* = 0.1f */);
|
||||
int DCRemovalFilter_getParamCount(DCRemovalFilter * aDCRemovalFilter);
|
||||
const char * DCRemovalFilter_getParamName(DCRemovalFilter * aDCRemovalFilter, unsigned int aParamIndex);
|
||||
unsigned int DCRemovalFilter_getParamType(DCRemovalFilter * aDCRemovalFilter, unsigned int aParamIndex);
|
||||
float DCRemovalFilter_getParamMax(DCRemovalFilter * aDCRemovalFilter, unsigned int aParamIndex);
|
||||
float DCRemovalFilter_getParamMin(DCRemovalFilter * aDCRemovalFilter, unsigned int aParamIndex);
|
||||
|
||||
/*
|
||||
* EchoFilter
|
||||
*/
|
||||
void EchoFilter_destroy(EchoFilter * aEchoFilter);
|
||||
int EchoFilter_getParamCount(EchoFilter * aEchoFilter);
|
||||
const char * EchoFilter_getParamName(EchoFilter * aEchoFilter, unsigned int aParamIndex);
|
||||
unsigned int EchoFilter_getParamType(EchoFilter * aEchoFilter, unsigned int aParamIndex);
|
||||
float EchoFilter_getParamMax(EchoFilter * aEchoFilter, unsigned int aParamIndex);
|
||||
float EchoFilter_getParamMin(EchoFilter * aEchoFilter, unsigned int aParamIndex);
|
||||
EchoFilter * EchoFilter_create();
|
||||
int EchoFilter_setParams(EchoFilter * aEchoFilter, float aDelay);
|
||||
int EchoFilter_setParamsEx(EchoFilter * aEchoFilter, float aDelay, float aDecay /* = 0.7f */, float aFilter /* = 0.0f */);
|
||||
|
||||
/*
|
||||
* FFTFilter
|
||||
*/
|
||||
void FFTFilter_destroy(FFTFilter * aFFTFilter);
|
||||
FFTFilter * FFTFilter_create();
|
||||
int FFTFilter_getParamCount(FFTFilter * aFFTFilter);
|
||||
const char * FFTFilter_getParamName(FFTFilter * aFFTFilter, unsigned int aParamIndex);
|
||||
unsigned int FFTFilter_getParamType(FFTFilter * aFFTFilter, unsigned int aParamIndex);
|
||||
float FFTFilter_getParamMax(FFTFilter * aFFTFilter, unsigned int aParamIndex);
|
||||
float FFTFilter_getParamMin(FFTFilter * aFFTFilter, unsigned int aParamIndex);
|
||||
|
||||
/*
|
||||
* FlangerFilter
|
||||
*/
|
||||
void FlangerFilter_destroy(FlangerFilter * aFlangerFilter);
|
||||
int FlangerFilter_getParamCount(FlangerFilter * aFlangerFilter);
|
||||
const char * FlangerFilter_getParamName(FlangerFilter * aFlangerFilter, unsigned int aParamIndex);
|
||||
unsigned int FlangerFilter_getParamType(FlangerFilter * aFlangerFilter, unsigned int aParamIndex);
|
||||
float FlangerFilter_getParamMax(FlangerFilter * aFlangerFilter, unsigned int aParamIndex);
|
||||
float FlangerFilter_getParamMin(FlangerFilter * aFlangerFilter, unsigned int aParamIndex);
|
||||
FlangerFilter * FlangerFilter_create();
|
||||
int FlangerFilter_setParams(FlangerFilter * aFlangerFilter, float aDelay, float aFreq);
|
||||
|
||||
/*
|
||||
* FreeverbFilter
|
||||
*/
|
||||
void FreeverbFilter_destroy(FreeverbFilter * aFreeverbFilter);
|
||||
int FreeverbFilter_getParamCount(FreeverbFilter * aFreeverbFilter);
|
||||
const char * FreeverbFilter_getParamName(FreeverbFilter * aFreeverbFilter, unsigned int aParamIndex);
|
||||
unsigned int FreeverbFilter_getParamType(FreeverbFilter * aFreeverbFilter, unsigned int aParamIndex);
|
||||
float FreeverbFilter_getParamMax(FreeverbFilter * aFreeverbFilter, unsigned int aParamIndex);
|
||||
float FreeverbFilter_getParamMin(FreeverbFilter * aFreeverbFilter, unsigned int aParamIndex);
|
||||
FreeverbFilter * FreeverbFilter_create();
|
||||
int FreeverbFilter_setParams(FreeverbFilter * aFreeverbFilter, float aMode, float aRoomSize, float aDamp, float aWidth);
|
||||
|
||||
/*
|
||||
* LofiFilter
|
||||
*/
|
||||
void LofiFilter_destroy(LofiFilter * aLofiFilter);
|
||||
int LofiFilter_getParamCount(LofiFilter * aLofiFilter);
|
||||
const char * LofiFilter_getParamName(LofiFilter * aLofiFilter, unsigned int aParamIndex);
|
||||
unsigned int LofiFilter_getParamType(LofiFilter * aLofiFilter, unsigned int aParamIndex);
|
||||
float LofiFilter_getParamMax(LofiFilter * aLofiFilter, unsigned int aParamIndex);
|
||||
float LofiFilter_getParamMin(LofiFilter * aLofiFilter, unsigned int aParamIndex);
|
||||
LofiFilter * LofiFilter_create();
|
||||
int LofiFilter_setParams(LofiFilter * aLofiFilter, float aSampleRate, float aBitdepth);
|
||||
|
||||
/*
|
||||
* Monotone
|
||||
*/
|
||||
void Monotone_destroy(Monotone * aMonotone);
|
||||
Monotone * Monotone_create();
|
||||
int Monotone_setParams(Monotone * aMonotone, int aHardwareChannels);
|
||||
int Monotone_setParamsEx(Monotone * aMonotone, int aHardwareChannels, int aWaveform /* = SoLoud::Misc::WAVE_SQUARE */);
|
||||
int Monotone_load(Monotone * aMonotone, const char * aFilename);
|
||||
int Monotone_loadMem(Monotone * aMonotone, const unsigned char * aMem, unsigned int aLength);
|
||||
int Monotone_loadMemEx(Monotone * aMonotone, const unsigned char * aMem, unsigned int aLength, int aCopy /* = false */, int aTakeOwnership /* = true */);
|
||||
int Monotone_loadFile(Monotone * aMonotone, File * aFile);
|
||||
void Monotone_setVolume(Monotone * aMonotone, float aVolume);
|
||||
void Monotone_setLooping(Monotone * aMonotone, int aLoop);
|
||||
void Monotone_set3dMinMaxDistance(Monotone * aMonotone, float aMinDistance, float aMaxDistance);
|
||||
void Monotone_set3dAttenuation(Monotone * aMonotone, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
void Monotone_set3dDopplerFactor(Monotone * aMonotone, float aDopplerFactor);
|
||||
void Monotone_set3dListenerRelative(Monotone * aMonotone, int aListenerRelative);
|
||||
void Monotone_set3dDistanceDelay(Monotone * aMonotone, int aDistanceDelay);
|
||||
void Monotone_set3dCollider(Monotone * aMonotone, AudioCollider * aCollider);
|
||||
void Monotone_set3dColliderEx(Monotone * aMonotone, AudioCollider * aCollider, int aUserData /* = 0 */);
|
||||
void Monotone_set3dAttenuator(Monotone * aMonotone, AudioAttenuator * aAttenuator);
|
||||
void Monotone_setInaudibleBehavior(Monotone * aMonotone, int aMustTick, int aKill);
|
||||
void Monotone_setLoopPoint(Monotone * aMonotone, double aLoopPoint);
|
||||
double Monotone_getLoopPoint(Monotone * aMonotone);
|
||||
void Monotone_setFilter(Monotone * aMonotone, unsigned int aFilterId, Filter * aFilter);
|
||||
void Monotone_stop(Monotone * aMonotone);
|
||||
|
||||
/*
|
||||
* Noise
|
||||
*/
|
||||
void Noise_destroy(Noise * aNoise);
|
||||
Noise * Noise_create();
|
||||
void Noise_setOctaveScale(Noise * aNoise, float aOct0, float aOct1, float aOct2, float aOct3, float aOct4, float aOct5, float aOct6, float aOct7, float aOct8, float aOct9);
|
||||
void Noise_setType(Noise * aNoise, int aType);
|
||||
void Noise_setVolume(Noise * aNoise, float aVolume);
|
||||
void Noise_setLooping(Noise * aNoise, int aLoop);
|
||||
void Noise_set3dMinMaxDistance(Noise * aNoise, float aMinDistance, float aMaxDistance);
|
||||
void Noise_set3dAttenuation(Noise * aNoise, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
void Noise_set3dDopplerFactor(Noise * aNoise, float aDopplerFactor);
|
||||
void Noise_set3dListenerRelative(Noise * aNoise, int aListenerRelative);
|
||||
void Noise_set3dDistanceDelay(Noise * aNoise, int aDistanceDelay);
|
||||
void Noise_set3dCollider(Noise * aNoise, AudioCollider * aCollider);
|
||||
void Noise_set3dColliderEx(Noise * aNoise, AudioCollider * aCollider, int aUserData /* = 0 */);
|
||||
void Noise_set3dAttenuator(Noise * aNoise, AudioAttenuator * aAttenuator);
|
||||
void Noise_setInaudibleBehavior(Noise * aNoise, int aMustTick, int aKill);
|
||||
void Noise_setLoopPoint(Noise * aNoise, double aLoopPoint);
|
||||
double Noise_getLoopPoint(Noise * aNoise);
|
||||
void Noise_setFilter(Noise * aNoise, unsigned int aFilterId, Filter * aFilter);
|
||||
void Noise_stop(Noise * aNoise);
|
||||
|
||||
/*
|
||||
* Openmpt
|
||||
*/
|
||||
void Openmpt_destroy(Openmpt * aOpenmpt);
|
||||
Openmpt * Openmpt_create();
|
||||
int Openmpt_load(Openmpt * aOpenmpt, const char * aFilename);
|
||||
int Openmpt_loadMem(Openmpt * aOpenmpt, const unsigned char * aMem, unsigned int aLength);
|
||||
int Openmpt_loadMemEx(Openmpt * aOpenmpt, const unsigned char * aMem, unsigned int aLength, int aCopy /* = false */, int aTakeOwnership /* = true */);
|
||||
int Openmpt_loadFile(Openmpt * aOpenmpt, File * aFile);
|
||||
void Openmpt_setVolume(Openmpt * aOpenmpt, float aVolume);
|
||||
void Openmpt_setLooping(Openmpt * aOpenmpt, int aLoop);
|
||||
void Openmpt_set3dMinMaxDistance(Openmpt * aOpenmpt, float aMinDistance, float aMaxDistance);
|
||||
void Openmpt_set3dAttenuation(Openmpt * aOpenmpt, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
void Openmpt_set3dDopplerFactor(Openmpt * aOpenmpt, float aDopplerFactor);
|
||||
void Openmpt_set3dListenerRelative(Openmpt * aOpenmpt, int aListenerRelative);
|
||||
void Openmpt_set3dDistanceDelay(Openmpt * aOpenmpt, int aDistanceDelay);
|
||||
void Openmpt_set3dCollider(Openmpt * aOpenmpt, AudioCollider * aCollider);
|
||||
void Openmpt_set3dColliderEx(Openmpt * aOpenmpt, AudioCollider * aCollider, int aUserData /* = 0 */);
|
||||
void Openmpt_set3dAttenuator(Openmpt * aOpenmpt, AudioAttenuator * aAttenuator);
|
||||
void Openmpt_setInaudibleBehavior(Openmpt * aOpenmpt, int aMustTick, int aKill);
|
||||
void Openmpt_setLoopPoint(Openmpt * aOpenmpt, double aLoopPoint);
|
||||
double Openmpt_getLoopPoint(Openmpt * aOpenmpt);
|
||||
void Openmpt_setFilter(Openmpt * aOpenmpt, unsigned int aFilterId, Filter * aFilter);
|
||||
void Openmpt_stop(Openmpt * aOpenmpt);
|
||||
|
||||
/*
|
||||
* Queue
|
||||
*/
|
||||
void Queue_destroy(Queue * aQueue);
|
||||
Queue * Queue_create();
|
||||
int Queue_play(Queue * aQueue, AudioSource * aSound);
|
||||
unsigned int Queue_getQueueCount(Queue * aQueue);
|
||||
int Queue_isCurrentlyPlaying(Queue * aQueue, AudioSource * aSound);
|
||||
int Queue_setParamsFromAudioSource(Queue * aQueue, AudioSource * aSound);
|
||||
int Queue_setParams(Queue * aQueue, float aSamplerate);
|
||||
int Queue_setParamsEx(Queue * aQueue, float aSamplerate, unsigned int aChannels /* = 2 */);
|
||||
void Queue_setVolume(Queue * aQueue, float aVolume);
|
||||
void Queue_setLooping(Queue * aQueue, int aLoop);
|
||||
void Queue_set3dMinMaxDistance(Queue * aQueue, float aMinDistance, float aMaxDistance);
|
||||
void Queue_set3dAttenuation(Queue * aQueue, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
void Queue_set3dDopplerFactor(Queue * aQueue, float aDopplerFactor);
|
||||
void Queue_set3dListenerRelative(Queue * aQueue, int aListenerRelative);
|
||||
void Queue_set3dDistanceDelay(Queue * aQueue, int aDistanceDelay);
|
||||
void Queue_set3dCollider(Queue * aQueue, AudioCollider * aCollider);
|
||||
void Queue_set3dColliderEx(Queue * aQueue, AudioCollider * aCollider, int aUserData /* = 0 */);
|
||||
void Queue_set3dAttenuator(Queue * aQueue, AudioAttenuator * aAttenuator);
|
||||
void Queue_setInaudibleBehavior(Queue * aQueue, int aMustTick, int aKill);
|
||||
void Queue_setLoopPoint(Queue * aQueue, double aLoopPoint);
|
||||
double Queue_getLoopPoint(Queue * aQueue);
|
||||
void Queue_setFilter(Queue * aQueue, unsigned int aFilterId, Filter * aFilter);
|
||||
void Queue_stop(Queue * aQueue);
|
||||
|
||||
/*
|
||||
* RobotizeFilter
|
||||
*/
|
||||
void RobotizeFilter_destroy(RobotizeFilter * aRobotizeFilter);
|
||||
int RobotizeFilter_getParamCount(RobotizeFilter * aRobotizeFilter);
|
||||
const char * RobotizeFilter_getParamName(RobotizeFilter * aRobotizeFilter, unsigned int aParamIndex);
|
||||
unsigned int RobotizeFilter_getParamType(RobotizeFilter * aRobotizeFilter, unsigned int aParamIndex);
|
||||
float RobotizeFilter_getParamMax(RobotizeFilter * aRobotizeFilter, unsigned int aParamIndex);
|
||||
float RobotizeFilter_getParamMin(RobotizeFilter * aRobotizeFilter, unsigned int aParamIndex);
|
||||
void RobotizeFilter_setParams(RobotizeFilter * aRobotizeFilter, float aFreq, int aWaveform);
|
||||
RobotizeFilter * RobotizeFilter_create();
|
||||
|
||||
/*
|
||||
* Sfxr
|
||||
*/
|
||||
void Sfxr_destroy(Sfxr * aSfxr);
|
||||
Sfxr * Sfxr_create();
|
||||
void Sfxr_resetParams(Sfxr * aSfxr);
|
||||
int Sfxr_loadParams(Sfxr * aSfxr, const char * aFilename);
|
||||
int Sfxr_loadParamsMem(Sfxr * aSfxr, unsigned char * aMem, unsigned int aLength);
|
||||
int Sfxr_loadParamsMemEx(Sfxr * aSfxr, unsigned char * aMem, unsigned int aLength, int aCopy /* = false */, int aTakeOwnership /* = true */);
|
||||
int Sfxr_loadParamsFile(Sfxr * aSfxr, File * aFile);
|
||||
int Sfxr_loadPreset(Sfxr * aSfxr, int aPresetNo, int aRandSeed);
|
||||
void Sfxr_setVolume(Sfxr * aSfxr, float aVolume);
|
||||
void Sfxr_setLooping(Sfxr * aSfxr, int aLoop);
|
||||
void Sfxr_set3dMinMaxDistance(Sfxr * aSfxr, float aMinDistance, float aMaxDistance);
|
||||
void Sfxr_set3dAttenuation(Sfxr * aSfxr, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
void Sfxr_set3dDopplerFactor(Sfxr * aSfxr, float aDopplerFactor);
|
||||
void Sfxr_set3dListenerRelative(Sfxr * aSfxr, int aListenerRelative);
|
||||
void Sfxr_set3dDistanceDelay(Sfxr * aSfxr, int aDistanceDelay);
|
||||
void Sfxr_set3dCollider(Sfxr * aSfxr, AudioCollider * aCollider);
|
||||
void Sfxr_set3dColliderEx(Sfxr * aSfxr, AudioCollider * aCollider, int aUserData /* = 0 */);
|
||||
void Sfxr_set3dAttenuator(Sfxr * aSfxr, AudioAttenuator * aAttenuator);
|
||||
void Sfxr_setInaudibleBehavior(Sfxr * aSfxr, int aMustTick, int aKill);
|
||||
void Sfxr_setLoopPoint(Sfxr * aSfxr, double aLoopPoint);
|
||||
double Sfxr_getLoopPoint(Sfxr * aSfxr);
|
||||
void Sfxr_setFilter(Sfxr * aSfxr, unsigned int aFilterId, Filter * aFilter);
|
||||
void Sfxr_stop(Sfxr * aSfxr);
|
||||
|
||||
/*
|
||||
* Speech
|
||||
*/
|
||||
void Speech_destroy(Speech * aSpeech);
|
||||
Speech * Speech_create();
|
||||
int Speech_setText(Speech * aSpeech, const char * aText);
|
||||
int Speech_setParams(Speech * aSpeech);
|
||||
int Speech_setParamsEx(Speech * aSpeech, unsigned int aBaseFrequency /* = 1330 */, float aBaseSpeed /* = 10.0f */, float aBaseDeclination /* = 0.5f */, int aBaseWaveform /* = KW_TRIANGLE */);
|
||||
void Speech_setVolume(Speech * aSpeech, float aVolume);
|
||||
void Speech_setLooping(Speech * aSpeech, int aLoop);
|
||||
void Speech_set3dMinMaxDistance(Speech * aSpeech, float aMinDistance, float aMaxDistance);
|
||||
void Speech_set3dAttenuation(Speech * aSpeech, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
void Speech_set3dDopplerFactor(Speech * aSpeech, float aDopplerFactor);
|
||||
void Speech_set3dListenerRelative(Speech * aSpeech, int aListenerRelative);
|
||||
void Speech_set3dDistanceDelay(Speech * aSpeech, int aDistanceDelay);
|
||||
void Speech_set3dCollider(Speech * aSpeech, AudioCollider * aCollider);
|
||||
void Speech_set3dColliderEx(Speech * aSpeech, AudioCollider * aCollider, int aUserData /* = 0 */);
|
||||
void Speech_set3dAttenuator(Speech * aSpeech, AudioAttenuator * aAttenuator);
|
||||
void Speech_setInaudibleBehavior(Speech * aSpeech, int aMustTick, int aKill);
|
||||
void Speech_setLoopPoint(Speech * aSpeech, double aLoopPoint);
|
||||
double Speech_getLoopPoint(Speech * aSpeech);
|
||||
void Speech_setFilter(Speech * aSpeech, unsigned int aFilterId, Filter * aFilter);
|
||||
void Speech_stop(Speech * aSpeech);
|
||||
|
||||
/*
|
||||
* TedSid
|
||||
*/
|
||||
void TedSid_destroy(TedSid * aTedSid);
|
||||
TedSid * TedSid_create();
|
||||
int TedSid_load(TedSid * aTedSid, const char * aFilename);
|
||||
int TedSid_loadToMem(TedSid * aTedSid, const char * aFilename);
|
||||
int TedSid_loadMem(TedSid * aTedSid, const unsigned char * aMem, unsigned int aLength);
|
||||
int TedSid_loadMemEx(TedSid * aTedSid, const unsigned char * aMem, unsigned int aLength, int aCopy /* = false */, int aTakeOwnership /* = true */);
|
||||
int TedSid_loadFileToMem(TedSid * aTedSid, File * aFile);
|
||||
int TedSid_loadFile(TedSid * aTedSid, File * aFile);
|
||||
void TedSid_setVolume(TedSid * aTedSid, float aVolume);
|
||||
void TedSid_setLooping(TedSid * aTedSid, int aLoop);
|
||||
void TedSid_set3dMinMaxDistance(TedSid * aTedSid, float aMinDistance, float aMaxDistance);
|
||||
void TedSid_set3dAttenuation(TedSid * aTedSid, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
void TedSid_set3dDopplerFactor(TedSid * aTedSid, float aDopplerFactor);
|
||||
void TedSid_set3dListenerRelative(TedSid * aTedSid, int aListenerRelative);
|
||||
void TedSid_set3dDistanceDelay(TedSid * aTedSid, int aDistanceDelay);
|
||||
void TedSid_set3dCollider(TedSid * aTedSid, AudioCollider * aCollider);
|
||||
void TedSid_set3dColliderEx(TedSid * aTedSid, AudioCollider * aCollider, int aUserData /* = 0 */);
|
||||
void TedSid_set3dAttenuator(TedSid * aTedSid, AudioAttenuator * aAttenuator);
|
||||
void TedSid_setInaudibleBehavior(TedSid * aTedSid, int aMustTick, int aKill);
|
||||
void TedSid_setLoopPoint(TedSid * aTedSid, double aLoopPoint);
|
||||
double TedSid_getLoopPoint(TedSid * aTedSid);
|
||||
void TedSid_setFilter(TedSid * aTedSid, unsigned int aFilterId, Filter * aFilter);
|
||||
void TedSid_stop(TedSid * aTedSid);
|
||||
|
||||
/*
|
||||
* Vic
|
||||
*/
|
||||
void Vic_destroy(Vic * aVic);
|
||||
Vic * Vic_create();
|
||||
void Vic_setModel(Vic * aVic, int model);
|
||||
int Vic_getModel(Vic * aVic);
|
||||
void Vic_setRegister(Vic * aVic, int reg, unsigned char value);
|
||||
unsigned char Vic_getRegister(Vic * aVic, int reg);
|
||||
void Vic_setVolume(Vic * aVic, float aVolume);
|
||||
void Vic_setLooping(Vic * aVic, int aLoop);
|
||||
void Vic_set3dMinMaxDistance(Vic * aVic, float aMinDistance, float aMaxDistance);
|
||||
void Vic_set3dAttenuation(Vic * aVic, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
void Vic_set3dDopplerFactor(Vic * aVic, float aDopplerFactor);
|
||||
void Vic_set3dListenerRelative(Vic * aVic, int aListenerRelative);
|
||||
void Vic_set3dDistanceDelay(Vic * aVic, int aDistanceDelay);
|
||||
void Vic_set3dCollider(Vic * aVic, AudioCollider * aCollider);
|
||||
void Vic_set3dColliderEx(Vic * aVic, AudioCollider * aCollider, int aUserData /* = 0 */);
|
||||
void Vic_set3dAttenuator(Vic * aVic, AudioAttenuator * aAttenuator);
|
||||
void Vic_setInaudibleBehavior(Vic * aVic, int aMustTick, int aKill);
|
||||
void Vic_setLoopPoint(Vic * aVic, double aLoopPoint);
|
||||
double Vic_getLoopPoint(Vic * aVic);
|
||||
void Vic_setFilter(Vic * aVic, unsigned int aFilterId, Filter * aFilter);
|
||||
void Vic_stop(Vic * aVic);
|
||||
|
||||
/*
|
||||
* Vizsn
|
||||
*/
|
||||
void Vizsn_destroy(Vizsn * aVizsn);
|
||||
Vizsn * Vizsn_create();
|
||||
void Vizsn_setText(Vizsn * aVizsn, char * aText);
|
||||
void Vizsn_setVolume(Vizsn * aVizsn, float aVolume);
|
||||
void Vizsn_setLooping(Vizsn * aVizsn, int aLoop);
|
||||
void Vizsn_set3dMinMaxDistance(Vizsn * aVizsn, float aMinDistance, float aMaxDistance);
|
||||
void Vizsn_set3dAttenuation(Vizsn * aVizsn, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
void Vizsn_set3dDopplerFactor(Vizsn * aVizsn, float aDopplerFactor);
|
||||
void Vizsn_set3dListenerRelative(Vizsn * aVizsn, int aListenerRelative);
|
||||
void Vizsn_set3dDistanceDelay(Vizsn * aVizsn, int aDistanceDelay);
|
||||
void Vizsn_set3dCollider(Vizsn * aVizsn, AudioCollider * aCollider);
|
||||
void Vizsn_set3dColliderEx(Vizsn * aVizsn, AudioCollider * aCollider, int aUserData /* = 0 */);
|
||||
void Vizsn_set3dAttenuator(Vizsn * aVizsn, AudioAttenuator * aAttenuator);
|
||||
void Vizsn_setInaudibleBehavior(Vizsn * aVizsn, int aMustTick, int aKill);
|
||||
void Vizsn_setLoopPoint(Vizsn * aVizsn, double aLoopPoint);
|
||||
double Vizsn_getLoopPoint(Vizsn * aVizsn);
|
||||
void Vizsn_setFilter(Vizsn * aVizsn, unsigned int aFilterId, Filter * aFilter);
|
||||
void Vizsn_stop(Vizsn * aVizsn);
|
||||
|
||||
/*
|
||||
* Wav
|
||||
*/
|
||||
void Wav_destroy(Wav * aWav);
|
||||
Wav * Wav_create();
|
||||
int Wav_load(Wav * aWav, const char * aFilename);
|
||||
int Wav_loadMem(Wav * aWav, const unsigned char * aMem, unsigned int aLength);
|
||||
int Wav_loadMemEx(Wav * aWav, const unsigned char * aMem, unsigned int aLength, int aCopy /* = false */, int aTakeOwnership /* = true */);
|
||||
int Wav_loadFile(Wav * aWav, File * aFile);
|
||||
int Wav_loadRawWave8(Wav * aWav, unsigned char * aMem, unsigned int aLength);
|
||||
int Wav_loadRawWave8Ex(Wav * aWav, unsigned char * aMem, unsigned int aLength, float aSamplerate /* = 44100.0f */, unsigned int aChannels /* = 1 */);
|
||||
int Wav_loadRawWave16(Wav * aWav, short * aMem, unsigned int aLength);
|
||||
int Wav_loadRawWave16Ex(Wav * aWav, short * aMem, unsigned int aLength, float aSamplerate /* = 44100.0f */, unsigned int aChannels /* = 1 */);
|
||||
int Wav_loadRawWave(Wav * aWav, float * aMem, unsigned int aLength);
|
||||
int Wav_loadRawWaveEx(Wav * aWav, float * aMem, unsigned int aLength, float aSamplerate /* = 44100.0f */, unsigned int aChannels /* = 1 */, int aCopy /* = false */, int aTakeOwnership /* = true */);
|
||||
double Wav_getLength(Wav * aWav);
|
||||
void Wav_setVolume(Wav * aWav, float aVolume);
|
||||
void Wav_setLooping(Wav * aWav, int aLoop);
|
||||
void Wav_set3dMinMaxDistance(Wav * aWav, float aMinDistance, float aMaxDistance);
|
||||
void Wav_set3dAttenuation(Wav * aWav, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
void Wav_set3dDopplerFactor(Wav * aWav, float aDopplerFactor);
|
||||
void Wav_set3dListenerRelative(Wav * aWav, int aListenerRelative);
|
||||
void Wav_set3dDistanceDelay(Wav * aWav, int aDistanceDelay);
|
||||
void Wav_set3dCollider(Wav * aWav, AudioCollider * aCollider);
|
||||
void Wav_set3dColliderEx(Wav * aWav, AudioCollider * aCollider, int aUserData /* = 0 */);
|
||||
void Wav_set3dAttenuator(Wav * aWav, AudioAttenuator * aAttenuator);
|
||||
void Wav_setInaudibleBehavior(Wav * aWav, int aMustTick, int aKill);
|
||||
void Wav_setLoopPoint(Wav * aWav, double aLoopPoint);
|
||||
double Wav_getLoopPoint(Wav * aWav);
|
||||
void Wav_setFilter(Wav * aWav, unsigned int aFilterId, Filter * aFilter);
|
||||
void Wav_stop(Wav * aWav);
|
||||
|
||||
/*
|
||||
* WaveShaperFilter
|
||||
*/
|
||||
void WaveShaperFilter_destroy(WaveShaperFilter * aWaveShaperFilter);
|
||||
int WaveShaperFilter_setParams(WaveShaperFilter * aWaveShaperFilter, float aAmount);
|
||||
WaveShaperFilter * WaveShaperFilter_create();
|
||||
int WaveShaperFilter_getParamCount(WaveShaperFilter * aWaveShaperFilter);
|
||||
const char * WaveShaperFilter_getParamName(WaveShaperFilter * aWaveShaperFilter, unsigned int aParamIndex);
|
||||
unsigned int WaveShaperFilter_getParamType(WaveShaperFilter * aWaveShaperFilter, unsigned int aParamIndex);
|
||||
float WaveShaperFilter_getParamMax(WaveShaperFilter * aWaveShaperFilter, unsigned int aParamIndex);
|
||||
float WaveShaperFilter_getParamMin(WaveShaperFilter * aWaveShaperFilter, unsigned int aParamIndex);
|
||||
|
||||
/*
|
||||
* WavStream
|
||||
*/
|
||||
void WavStream_destroy(WavStream * aWavStream);
|
||||
WavStream * WavStream_create();
|
||||
int WavStream_load(WavStream * aWavStream, const char * aFilename);
|
||||
int WavStream_loadMem(WavStream * aWavStream, const unsigned char * aData, unsigned int aDataLen);
|
||||
int WavStream_loadMemEx(WavStream * aWavStream, const unsigned char * aData, unsigned int aDataLen, int aCopy /* = false */, int aTakeOwnership /* = true */);
|
||||
int WavStream_loadToMem(WavStream * aWavStream, const char * aFilename);
|
||||
int WavStream_loadFile(WavStream * aWavStream, File * aFile);
|
||||
int WavStream_loadFileToMem(WavStream * aWavStream, File * aFile);
|
||||
double WavStream_getLength(WavStream * aWavStream);
|
||||
void WavStream_setVolume(WavStream * aWavStream, float aVolume);
|
||||
void WavStream_setLooping(WavStream * aWavStream, int aLoop);
|
||||
void WavStream_set3dMinMaxDistance(WavStream * aWavStream, float aMinDistance, float aMaxDistance);
|
||||
void WavStream_set3dAttenuation(WavStream * aWavStream, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
|
||||
void WavStream_set3dDopplerFactor(WavStream * aWavStream, float aDopplerFactor);
|
||||
void WavStream_set3dListenerRelative(WavStream * aWavStream, int aListenerRelative);
|
||||
void WavStream_set3dDistanceDelay(WavStream * aWavStream, int aDistanceDelay);
|
||||
void WavStream_set3dCollider(WavStream * aWavStream, AudioCollider * aCollider);
|
||||
void WavStream_set3dColliderEx(WavStream * aWavStream, AudioCollider * aCollider, int aUserData /* = 0 */);
|
||||
void WavStream_set3dAttenuator(WavStream * aWavStream, AudioAttenuator * aAttenuator);
|
||||
void WavStream_setInaudibleBehavior(WavStream * aWavStream, int aMustTick, int aKill);
|
||||
void WavStream_setLoopPoint(WavStream * aWavStream, double aLoopPoint);
|
||||
double WavStream_getLoopPoint(WavStream * aWavStream);
|
||||
void WavStream_setFilter(WavStream * aWavStream, unsigned int aFilterId, Filter * aFilter);
|
||||
void WavStream_stop(WavStream * aWavStream);
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // SOLOUD_C_H_INCLUDED
|
||||
|
58
SoundPGEXTest/soloud_dcremovalfilter.h
Normal file
58
SoundPGEXTest/soloud_dcremovalfilter.h
Normal file
@ -0,0 +1,58 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2015 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_DCREMOVAL_H
|
||||
#define SOLOUD_DCREMOVAL_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class DCRemovalFilter;
|
||||
|
||||
class DCRemovalFilterInstance : public FilterInstance
|
||||
{
|
||||
float *mBuffer;
|
||||
float *mTotals;
|
||||
int mBufferLength;
|
||||
DCRemovalFilter *mParent;
|
||||
int mOffset;
|
||||
|
||||
public:
|
||||
virtual void filter(float *aBuffer, unsigned int aSamples, unsigned int aChannels, float aSamplerate, time aTime);
|
||||
virtual ~DCRemovalFilterInstance();
|
||||
DCRemovalFilterInstance(DCRemovalFilter *aParent);
|
||||
};
|
||||
|
||||
class DCRemovalFilter : public Filter
|
||||
{
|
||||
public:
|
||||
float mLength;
|
||||
virtual FilterInstance *createInstance();
|
||||
DCRemovalFilter();
|
||||
result setParams(float aLength = 0.1f);
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
71
SoundPGEXTest/soloud_echofilter.h
Normal file
71
SoundPGEXTest/soloud_echofilter.h
Normal file
@ -0,0 +1,71 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2020 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_ECHOFILTER_H
|
||||
#define SOLOUD_ECHOFILTER_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class EchoFilter;
|
||||
|
||||
class EchoFilterInstance : public FilterInstance
|
||||
{
|
||||
float *mBuffer;
|
||||
int mBufferLength;
|
||||
int mBufferMaxLength;
|
||||
int mOffset;
|
||||
|
||||
public:
|
||||
virtual void filter(float *aBuffer, unsigned int aSamples, unsigned int aChannels, float aSamplerate, time aTime);
|
||||
virtual ~EchoFilterInstance();
|
||||
EchoFilterInstance(EchoFilter *aParent);
|
||||
};
|
||||
|
||||
class EchoFilter : public Filter
|
||||
{
|
||||
public:
|
||||
enum FILTERATTRIBUTE
|
||||
{
|
||||
WET = 0,
|
||||
DELAY,
|
||||
DECAY,
|
||||
FILTER
|
||||
};
|
||||
float mDelay;
|
||||
float mDecay;
|
||||
float mFilter;
|
||||
virtual int getParamCount();
|
||||
virtual const char* getParamName(unsigned int aParamIndex);
|
||||
virtual unsigned int getParamType(unsigned int aParamIndex);
|
||||
virtual float getParamMax(unsigned int aParamIndex);
|
||||
virtual float getParamMin(unsigned int aParamIndex);
|
||||
virtual FilterInstance *createInstance();
|
||||
EchoFilter();
|
||||
result setParams(float aDelay, float aDecay = 0.7f, float aFilter = 0.0f);
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
41
SoundPGEXTest/soloud_error.h
Normal file
41
SoundPGEXTest/soloud_error.h
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2014 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
#ifndef SOLOUD_ERROR_H
|
||||
#define SOLOUD_ERROR_H
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
enum SOLOUD_ERRORS
|
||||
{
|
||||
SO_NO_ERROR = 0, // No error
|
||||
INVALID_PARAMETER = 1, // Some parameter is invalid
|
||||
FILE_NOT_FOUND = 2, // File not found
|
||||
FILE_LOAD_FAILED = 3, // File found, but could not be loaded
|
||||
DLL_NOT_FOUND = 4, // DLL not found, or wrong DLL
|
||||
OUT_OF_MEMORY = 5, // Out of memory
|
||||
NOT_IMPLEMENTED = 6, // Feature not implemented
|
||||
UNKNOWN_ERROR = 7 // Other error
|
||||
};
|
||||
};
|
||||
#endif
|
63
SoundPGEXTest/soloud_fader.h
Normal file
63
SoundPGEXTest/soloud_fader.h
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2014 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_FADER_H
|
||||
#define SOLOUD_FADER_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
// Helper class to process faders
|
||||
class Fader
|
||||
{
|
||||
public:
|
||||
// Value to fade from
|
||||
float mFrom;
|
||||
// Value to fade to
|
||||
float mTo;
|
||||
// Delta between from and to
|
||||
float mDelta;
|
||||
// Total time to fade
|
||||
time mTime;
|
||||
// Time fading started
|
||||
time mStartTime;
|
||||
// Time fading will end
|
||||
time mEndTime;
|
||||
// Current value. Used in case time rolls over.
|
||||
float mCurrent;
|
||||
// Active flag; 0 means disabled, 1 is active, 2 is LFO, -1 means was active, but stopped
|
||||
int mActive;
|
||||
// Ctor
|
||||
Fader();
|
||||
// Set up LFO
|
||||
void setLFO(float aFrom, float aTo, time aTime, time aStartTime);
|
||||
// Set up fader
|
||||
void set(float aFrom, float aTo, time aTime, time aStartTime);
|
||||
// Get the current fading value
|
||||
float get(time aCurrentTime);
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
51
SoundPGEXTest/soloud_fft.h
Normal file
51
SoundPGEXTest/soloud_fft.h
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2015 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_FFT_H
|
||||
#define SOLOUD_FFT_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
namespace FFT
|
||||
{
|
||||
// Perform 1024 unit FFT. Buffer must have 1024 floats, and will be overwritten
|
||||
void fft1024(float *aBuffer);
|
||||
|
||||
// Perform 256 unit FFT. Buffer must have 256 floats, and will be overwritten
|
||||
void fft256(float *aBuffer);
|
||||
|
||||
// Perform 256 unit IFFT. Buffer must have 256 floats, and will be overwritten
|
||||
void ifft256(float *aBuffer);
|
||||
|
||||
// Generic (slower) power of two FFT. Buffer is overwritten.
|
||||
void fft(float *aBuffer, unsigned int aBufferLength);
|
||||
|
||||
// Generic (slower) power of two IFFT. Buffer is overwritten.
|
||||
void ifft(float *aBuffer, unsigned int aBufferLength);
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
57
SoundPGEXTest/soloud_fftfilter.h
Normal file
57
SoundPGEXTest/soloud_fftfilter.h
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2015 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_FFTFILTER_H
|
||||
#define SOLOUD_FFTFILTER_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class FFTFilter;
|
||||
|
||||
class FFTFilterInstance : public FilterInstance
|
||||
{
|
||||
float *mTemp;
|
||||
float *mInputBuffer;
|
||||
float *mMixBuffer;
|
||||
unsigned int mOffset[MAX_CHANNELS];
|
||||
FFTFilter *mParent;
|
||||
public:
|
||||
virtual void fftFilterChannel(float *aFFTBuffer, unsigned int aSamples, float aSamplerate, time aTime, unsigned int aChannel, unsigned int aChannels);
|
||||
virtual void filterChannel(float *aBuffer, unsigned int aSamples, float aSamplerate, time aTime, unsigned int aChannel, unsigned int aChannels);
|
||||
virtual ~FFTFilterInstance();
|
||||
FFTFilterInstance(FFTFilter *aParent);
|
||||
FFTFilterInstance();
|
||||
};
|
||||
|
||||
class FFTFilter : public Filter
|
||||
{
|
||||
public:
|
||||
virtual FilterInstance *createInstance();
|
||||
FFTFilter();
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
90
SoundPGEXTest/soloud_file.h
Normal file
90
SoundPGEXTest/soloud_file.h
Normal file
@ -0,0 +1,90 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2015 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_FILE_H
|
||||
#define SOLOUD_FILE_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include "soloud.h"
|
||||
|
||||
typedef void* Soloud_Filehack;
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class File
|
||||
{
|
||||
public:
|
||||
virtual ~File() {}
|
||||
unsigned int read8();
|
||||
unsigned int read16();
|
||||
unsigned int read32();
|
||||
virtual int eof() = 0;
|
||||
virtual unsigned int read(unsigned char *aDst, unsigned int aBytes) = 0;
|
||||
virtual unsigned int length() = 0;
|
||||
virtual void seek(int aOffset) = 0;
|
||||
virtual unsigned int pos() = 0;
|
||||
virtual FILE * getFilePtr() { return 0; }
|
||||
virtual const unsigned char * getMemPtr() { return 0; }
|
||||
};
|
||||
|
||||
class DiskFile : public File
|
||||
{
|
||||
public:
|
||||
FILE *mFileHandle;
|
||||
|
||||
virtual int eof();
|
||||
virtual unsigned int read(unsigned char *aDst, unsigned int aBytes);
|
||||
virtual unsigned int length();
|
||||
virtual void seek(int aOffset);
|
||||
virtual unsigned int pos();
|
||||
virtual ~DiskFile();
|
||||
DiskFile();
|
||||
DiskFile(FILE *fp);
|
||||
result open(const char *aFilename);
|
||||
virtual FILE * getFilePtr();
|
||||
};
|
||||
|
||||
class MemoryFile : public File
|
||||
{
|
||||
public:
|
||||
const unsigned char *mDataPtr;
|
||||
unsigned int mDataLength;
|
||||
unsigned int mOffset;
|
||||
bool mDataOwned;
|
||||
|
||||
virtual int eof();
|
||||
virtual unsigned int read(unsigned char *aDst, unsigned int aBytes);
|
||||
virtual unsigned int length();
|
||||
virtual void seek(int aOffset);
|
||||
virtual unsigned int pos();
|
||||
virtual const unsigned char * getMemPtr();
|
||||
virtual ~MemoryFile();
|
||||
MemoryFile();
|
||||
result openMem(const unsigned char *aData, unsigned int aDataLength, bool aCopy=false, bool aTakeOwnership=true);
|
||||
result openToMem(const char *aFilename);
|
||||
result openFileToMem(File *aFile);
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
36
SoundPGEXTest/soloud_file_hack_off.h
Normal file
36
SoundPGEXTest/soloud_file_hack_off.h
Normal file
@ -0,0 +1,36 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2020 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
/*
|
||||
See soloud_file_hack_on.h
|
||||
*/
|
||||
|
||||
#undef FILE
|
||||
#undef fgetc
|
||||
#undef fread
|
||||
#undef fseek
|
||||
#undef ftell
|
||||
#undef fclose
|
||||
#undef fopen
|
||||
#undef fopen_s
|
60
SoundPGEXTest/soloud_file_hack_on.h
Normal file
60
SoundPGEXTest/soloud_file_hack_on.h
Normal file
@ -0,0 +1,60 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2020 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
/*
|
||||
This is a "hack" header to fool third party code to use our File stuff instead
|
||||
of stdio FILE* stuff.
|
||||
You can use soloud_file_hack_off.h to undef the stuff defined here.
|
||||
*/
|
||||
|
||||
#ifndef SEEK_SET
|
||||
#error soloud_file_hack_on must be included after stdio, otherwise the #define hacks will break stdio.
|
||||
#endif
|
||||
|
||||
typedef void* Soloud_Filehack;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern int Soloud_Filehack_fgetc(Soloud_Filehack *f);
|
||||
extern int Soloud_Filehack_fread(void *dst, int s, int c, Soloud_Filehack *f);
|
||||
extern int Soloud_Filehack_fseek(Soloud_Filehack *f, int idx, int base);
|
||||
extern int Soloud_Filehack_ftell(Soloud_Filehack *f);
|
||||
extern int Soloud_Filehack_fclose(Soloud_Filehack *f);
|
||||
extern Soloud_Filehack * Soloud_Filehack_fopen(const char *aFilename, char *aMode);
|
||||
extern int Soloud_Filehack_fopen_s(Soloud_Filehack **f, const char* aFilename, char* aMode);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#define FILE Soloud_Filehack
|
||||
#define fgetc Soloud_Filehack_fgetc
|
||||
#define fread Soloud_Filehack_fread
|
||||
#define fseek Soloud_Filehack_fseek
|
||||
#define ftell Soloud_Filehack_ftell
|
||||
#define fclose Soloud_Filehack_fclose
|
||||
#define fopen Soloud_Filehack_fopen
|
||||
#define fopen_s Soloud_Filehack_fopen_s
|
76
SoundPGEXTest/soloud_filter.h
Normal file
76
SoundPGEXTest/soloud_filter.h
Normal file
@ -0,0 +1,76 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2014 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_FILTER_H
|
||||
#define SOLOUD_FILTER_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class Fader;
|
||||
|
||||
class FilterInstance
|
||||
{
|
||||
public:
|
||||
unsigned int mNumParams;
|
||||
unsigned int mParamChanged;
|
||||
float *mParam;
|
||||
Fader *mParamFader;
|
||||
|
||||
|
||||
FilterInstance();
|
||||
virtual result initParams(int aNumParams);
|
||||
virtual void updateParams(time aTime);
|
||||
virtual void filter(float *aBuffer, unsigned int aSamples, unsigned int aChannels, float aSamplerate, time aTime);
|
||||
virtual void filterChannel(float *aBuffer, unsigned int aSamples, float aSamplerate, time aTime, unsigned int aChannel, unsigned int aChannels);
|
||||
virtual float getFilterParameter(unsigned int aAttributeId);
|
||||
virtual void setFilterParameter(unsigned int aAttributeId, float aValue);
|
||||
virtual void fadeFilterParameter(unsigned int aAttributeId, float aTo, time aTime, time aStartTime);
|
||||
virtual void oscillateFilterParameter(unsigned int aAttributeId, float aFrom, float aTo, time aTime, time aStartTime);
|
||||
virtual ~FilterInstance();
|
||||
};
|
||||
|
||||
class Filter
|
||||
{
|
||||
public:
|
||||
enum PARAMTYPE
|
||||
{
|
||||
FLOAT_PARAM = 0,
|
||||
INT_PARAM,
|
||||
BOOL_PARAM
|
||||
};
|
||||
Filter();
|
||||
virtual int getParamCount();
|
||||
virtual const char* getParamName(unsigned int aParamIndex);
|
||||
virtual unsigned int getParamType(unsigned int aParamIndex);
|
||||
virtual float getParamMax(unsigned int aParamIndex);
|
||||
virtual float getParamMin(unsigned int aParamIndex);
|
||||
|
||||
virtual FilterInstance *createInstance() = 0;
|
||||
virtual ~Filter();
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
70
SoundPGEXTest/soloud_flangerfilter.h
Normal file
70
SoundPGEXTest/soloud_flangerfilter.h
Normal file
@ -0,0 +1,70 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2020 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_FLANGERFILTER_H
|
||||
#define SOLOUD_FLANGERFILTER_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class FlangerFilter;
|
||||
|
||||
class FlangerFilterInstance : public FilterInstance
|
||||
{
|
||||
float *mBuffer;
|
||||
unsigned int mBufferLength;
|
||||
FlangerFilter *mParent;
|
||||
unsigned int mOffset;
|
||||
double mIndex;
|
||||
|
||||
public:
|
||||
virtual void filter(float *aBuffer, unsigned int aSamples, unsigned int aChannels, float aSamplerate, time aTime);
|
||||
virtual ~FlangerFilterInstance();
|
||||
FlangerFilterInstance(FlangerFilter *aParent);
|
||||
};
|
||||
|
||||
class FlangerFilter : public Filter
|
||||
{
|
||||
public:
|
||||
enum FILTERPARAMS
|
||||
{
|
||||
WET,
|
||||
DELAY,
|
||||
FREQ
|
||||
};
|
||||
float mDelay;
|
||||
float mFreq;
|
||||
virtual int getParamCount();
|
||||
virtual const char* getParamName(unsigned int aParamIndex);
|
||||
virtual unsigned int getParamType(unsigned int aParamIndex);
|
||||
virtual float getParamMax(unsigned int aParamIndex);
|
||||
virtual float getParamMin(unsigned int aParamIndex);
|
||||
virtual FilterInstance *createInstance();
|
||||
FlangerFilter();
|
||||
result setParams(float aDelay, float aFreq);
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
83
SoundPGEXTest/soloud_freeverbfilter.h
Normal file
83
SoundPGEXTest/soloud_freeverbfilter.h
Normal file
@ -0,0 +1,83 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2020 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_FREEVERBFILTER_H
|
||||
#define SOLOUD_FREEVERBFILTER_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class FreeverbFilter;
|
||||
namespace FreeverbImpl
|
||||
{
|
||||
class Revmodel;
|
||||
}
|
||||
|
||||
class FreeverbFilterInstance : public FilterInstance
|
||||
{
|
||||
enum FILTERPARAM {
|
||||
WET = 0,
|
||||
FREEZE,
|
||||
ROOMSIZE,
|
||||
DAMP,
|
||||
WIDTH
|
||||
};
|
||||
|
||||
FreeverbFilter *mParent;
|
||||
FreeverbImpl::Revmodel *mModel;
|
||||
public:
|
||||
virtual void filter(float* aBuffer, unsigned int aSamples, unsigned int aChannels, float aSamplerate, time aTime);
|
||||
virtual ~FreeverbFilterInstance();
|
||||
FreeverbFilterInstance(FreeverbFilter *aParent);
|
||||
};
|
||||
|
||||
class FreeverbFilter : public Filter
|
||||
{
|
||||
public:
|
||||
enum FILTERPARAM {
|
||||
WET = 0,
|
||||
FREEZE,
|
||||
ROOMSIZE,
|
||||
DAMP,
|
||||
WIDTH
|
||||
};
|
||||
virtual int getParamCount();
|
||||
virtual const char* getParamName(unsigned int aParamIndex);
|
||||
virtual unsigned int getParamType(unsigned int aParamIndex);
|
||||
virtual float getParamMax(unsigned int aParamIndex);
|
||||
virtual float getParamMin(unsigned int aParamIndex);
|
||||
|
||||
float mMode;
|
||||
float mRoomSize;
|
||||
float mDamp;
|
||||
float mWidth;
|
||||
virtual FreeverbFilterInstance *createInstance();
|
||||
FreeverbFilter();
|
||||
result setParams(float aMode, float aRoomSize, float aDamp, float aWidth);
|
||||
virtual ~FreeverbFilter();
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
164
SoundPGEXTest/soloud_internal.h
Normal file
164
SoundPGEXTest/soloud_internal.h
Normal file
@ -0,0 +1,164 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2015 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_INTERNAL_H
|
||||
#define SOLOUD_INTERNAL_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
// SDL1 back-end initialization call
|
||||
result sdl1_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// SDL2 back-end initialization call
|
||||
result sdl2_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// SDL1 "non-dynamic" back-end initialization call
|
||||
result sdl1static_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// SDL2 "non-dynamic" back-end initialization call
|
||||
result sdl2static_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// OpenAL back-end initialization call
|
||||
result openal_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// Core Audio driver back-end initialization call
|
||||
result coreaudio_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// OpenSL ES back-end initialization call
|
||||
result opensles_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// PortAudio back-end initialization call
|
||||
result portaudio_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// WinMM back-end initialization call
|
||||
result winmm_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 4096, unsigned int aChannels = 2);
|
||||
|
||||
// XAudio2 back-end initialization call
|
||||
result xaudio2_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// WASAPI back-end initialization call
|
||||
result wasapi_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 4096, unsigned int aChannels = 2);
|
||||
|
||||
// OSS back-end initialization call
|
||||
result oss_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// PS Vita homebrew back-end initialization call
|
||||
result vita_homebrew_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// ALSA back-end initialization call
|
||||
result alsa_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// JACK back-end initialization call
|
||||
result jack_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// MiniAudio back-end initialization call
|
||||
result miniaudio_init(SoLoud::Soloud* aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// nosound back-end initialization call
|
||||
result nosound_init(SoLoud::Soloud* aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// null driver back-end initialization call
|
||||
result null_init(SoLoud::Soloud *aSoloud, unsigned int aFlags = Soloud::CLIP_ROUNDOFF, unsigned int aSamplerate = 44100, unsigned int aBuffer = 2048, unsigned int aChannels = 2);
|
||||
|
||||
// Deinterlace samples in a buffer. From 12121212 to 11112222
|
||||
void deinterlace_samples_float(const float *aSourceBuffer, float *aDestBuffer, unsigned int aSamples, unsigned int aChannels);
|
||||
|
||||
// Interlace samples in a buffer. From 11112222 to 12121212
|
||||
void interlace_samples_float(const float *aSourceBuffer, float *aDestBuffer, unsigned int aSamples, unsigned int aChannels);
|
||||
|
||||
// Convert to 16-bit and interlace samples in a buffer. From 11112222 to 12121212
|
||||
void interlace_samples_s16(const float *aSourceBuffer, short *aDestBuffer, unsigned int aSamples, unsigned int aChannels);
|
||||
};
|
||||
|
||||
#define FOR_ALL_VOICES_PRE \
|
||||
handle *h_ = NULL; \
|
||||
handle th_[2] = { aVoiceHandle, 0 }; \
|
||||
lockAudioMutex_internal(); \
|
||||
h_ = voiceGroupHandleToArray_internal(aVoiceHandle); \
|
||||
if (h_ == NULL) h_ = th_; \
|
||||
while (*h_) \
|
||||
{ \
|
||||
int ch = getVoiceFromHandle_internal(*h_); \
|
||||
if (ch != -1) \
|
||||
{
|
||||
|
||||
#define FOR_ALL_VOICES_POST \
|
||||
} \
|
||||
h_++; \
|
||||
} \
|
||||
unlockAudioMutex_internal();
|
||||
|
||||
#define FOR_ALL_VOICES_PRE_3D \
|
||||
handle *h_ = NULL; \
|
||||
handle th_[2] = { aVoiceHandle, 0 }; \
|
||||
h_ = voiceGroupHandleToArray_internal(aVoiceHandle); \
|
||||
if (h_ == NULL) h_ = th_; \
|
||||
while (*h_) \
|
||||
{ \
|
||||
int ch = (*h_ & 0xfff) - 1; \
|
||||
if (ch != -1 && m3dData[ch].mHandle == *h_) \
|
||||
{
|
||||
|
||||
#define FOR_ALL_VOICES_POST_3D \
|
||||
} \
|
||||
h_++; \
|
||||
}
|
||||
|
||||
#define FOR_ALL_VOICES_PRE_EXT \
|
||||
handle *h_ = NULL; \
|
||||
handle th_[2] = { aVoiceHandle, 0 }; \
|
||||
mSoloud->lockAudioMutex_internal(); \
|
||||
h_ = mSoloud->voiceGroupHandleToArray_internal(aVoiceHandle); \
|
||||
if (h_ == NULL) h_ = th_; \
|
||||
while (*h_) \
|
||||
{ \
|
||||
int ch = mSoloud->getVoiceFromHandle_internal(*h_); \
|
||||
if (ch != -1) \
|
||||
{
|
||||
|
||||
#define FOR_ALL_VOICES_POST_EXT \
|
||||
} \
|
||||
h_++; \
|
||||
} \
|
||||
mSoloud->unlockAudioMutex_internal();
|
||||
|
||||
#define FOR_ALL_VOICES_PRE_3D_EXT \
|
||||
handle *h_ = NULL; \
|
||||
handle th_[2] = { aVoiceHandle, 0 }; \
|
||||
h_ = mSoloud->voiceGroupHandleToArray(aVoiceHandle); \
|
||||
if (h_ == NULL) h_ = th_; \
|
||||
while (*h_) \
|
||||
{ \
|
||||
int ch = (*h_ & 0xfff) - 1; \
|
||||
if (ch != -1 && mSoloud->m3dData[ch].mHandle == *h_) \
|
||||
{
|
||||
|
||||
#define FOR_ALL_VOICES_POST_3D_EXT \
|
||||
} \
|
||||
h_++; \
|
||||
}
|
||||
|
||||
#endif
|
80
SoundPGEXTest/soloud_lofifilter.h
Normal file
80
SoundPGEXTest/soloud_lofifilter.h
Normal file
@ -0,0 +1,80 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2020 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_LOFIFILTER_H
|
||||
#define SOLOUD_LOFIFILTER_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class LofiFilter;
|
||||
|
||||
struct LofiChannelData
|
||||
{
|
||||
float mSample;
|
||||
float mSamplesToSkip;
|
||||
};
|
||||
|
||||
class LofiFilterInstance : public FilterInstance
|
||||
{
|
||||
enum FILTERPARAMS
|
||||
{
|
||||
WET,
|
||||
SAMPLERATE,
|
||||
BITDEPTH
|
||||
};
|
||||
LofiChannelData mChannelData[2];
|
||||
|
||||
LofiFilter *mParent;
|
||||
public:
|
||||
virtual void filterChannel(float *aBuffer, unsigned int aSamples, float aSamplerate, time aTime, unsigned int aChannel, unsigned int aChannels);
|
||||
virtual ~LofiFilterInstance();
|
||||
LofiFilterInstance(LofiFilter *aParent);
|
||||
};
|
||||
|
||||
class LofiFilter : public Filter
|
||||
{
|
||||
public:
|
||||
enum FILTERPARAMS
|
||||
{
|
||||
WET,
|
||||
SAMPLERATE,
|
||||
BITDEPTH
|
||||
};
|
||||
float mSampleRate;
|
||||
float mBitdepth;
|
||||
virtual LofiFilterInstance *createInstance();
|
||||
virtual int getParamCount();
|
||||
virtual const char* getParamName(unsigned int aParamIndex);
|
||||
virtual unsigned int getParamType(unsigned int aParamIndex);
|
||||
virtual float getParamMax(unsigned int aParamIndex);
|
||||
virtual float getParamMin(unsigned int aParamIndex);
|
||||
LofiFilter();
|
||||
result setParams(float aSampleRate, float aBitdepth);
|
||||
virtual ~LofiFilter();
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
65
SoundPGEXTest/soloud_misc.h
Normal file
65
SoundPGEXTest/soloud_misc.h
Normal file
@ -0,0 +1,65 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2020 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_MISC_H
|
||||
#define SOLOUD_MISC_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
namespace Misc
|
||||
{
|
||||
enum WAVEFORM
|
||||
{
|
||||
WAVE_SQUARE = 0,
|
||||
WAVE_SAW,
|
||||
WAVE_SIN,
|
||||
WAVE_TRIANGLE,
|
||||
WAVE_BOUNCE,
|
||||
WAVE_JAWS,
|
||||
WAVE_HUMPS,
|
||||
WAVE_FSQUARE,
|
||||
WAVE_FSAW
|
||||
};
|
||||
// Generate a waveform.
|
||||
float generateWaveform(int aWaveform, float p);
|
||||
|
||||
// WELL512 random
|
||||
class Prg
|
||||
{
|
||||
public:
|
||||
// random generator
|
||||
Prg();
|
||||
unsigned int mState[16];
|
||||
unsigned int mIndex;
|
||||
unsigned int rand();
|
||||
float rand_float();
|
||||
void srand(int aSeed);
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
110
SoundPGEXTest/soloud_monotone.h
Normal file
110
SoundPGEXTest/soloud_monotone.h
Normal file
@ -0,0 +1,110 @@
|
||||
/*
|
||||
MONOTONE module for SoLoud audio engine
|
||||
Copyright (c) 2013-2020 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef MONOTONE_H
|
||||
#define MONOTONE_H
|
||||
|
||||
#include "soloud.h"
|
||||
#include "soloud_misc.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class Monotone;
|
||||
class File;
|
||||
|
||||
struct MonotoneSong
|
||||
{
|
||||
char *mTitle;
|
||||
char *mComment;
|
||||
unsigned char mVersion; // must be 1
|
||||
unsigned char mTotalPatterns;
|
||||
unsigned char mTotalTracks;
|
||||
unsigned char mCellSize; // must be 2 for version 1
|
||||
unsigned char mOrder[256];
|
||||
unsigned int *mPatternData; // 64 rows * mTotalPatterns * mTotalTracks
|
||||
};
|
||||
|
||||
struct MonotoneChannel
|
||||
{
|
||||
int mEnabled;
|
||||
int mActive;
|
||||
int mFreq[3];
|
||||
int mPortamento;
|
||||
int mArpCounter;
|
||||
int mArp;
|
||||
int mLastNote;
|
||||
int mPortamentoToNote;
|
||||
int mVibrato;
|
||||
int mVibratoIndex;
|
||||
int mVibratoDepth;
|
||||
int mVibratoSpeed;
|
||||
};
|
||||
|
||||
struct MonotoneHardwareChannel
|
||||
{
|
||||
int mEnabled;
|
||||
float mSamplePos;
|
||||
float mSamplePosInc;
|
||||
};
|
||||
|
||||
class MonotoneInstance : public AudioSourceInstance
|
||||
{
|
||||
Monotone *mParent;
|
||||
public:
|
||||
MonotoneChannel mChannel[12];
|
||||
MonotoneHardwareChannel mOutput[12];
|
||||
int mNextChannel;
|
||||
int mTempo; // ticks / row. Tick = 60hz. Default 4.
|
||||
int mOrder;
|
||||
int mRow;
|
||||
int mSampleCount;
|
||||
int mRowTick;
|
||||
|
||||
MonotoneInstance(Monotone *aParent);
|
||||
virtual unsigned int getAudio(float *aBuffer, unsigned int aSamples, unsigned int aBufferSize);
|
||||
virtual bool hasEnded();
|
||||
};
|
||||
|
||||
class Monotone : public AudioSource
|
||||
{
|
||||
public:
|
||||
|
||||
int mNotesHz[800];
|
||||
int mVibTable[32];
|
||||
int mHardwareChannels;
|
||||
int mWaveform;
|
||||
MonotoneSong mSong;
|
||||
Monotone();
|
||||
~Monotone();
|
||||
result setParams(int aHardwareChannels, int aWaveform = SoLoud::Misc::WAVE_SQUARE);
|
||||
result load(const char *aFilename);
|
||||
result loadMem(const unsigned char *aMem, unsigned int aLength, bool aCopy = false, bool aTakeOwnership = true);
|
||||
result loadFile(File *aFile);
|
||||
virtual AudioSourceInstance *createInstance();
|
||||
public:
|
||||
void clear();
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
74
SoundPGEXTest/soloud_noise.h
Normal file
74
SoundPGEXTest/soloud_noise.h
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2020 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_NOISE_H
|
||||
#define SOLOUD_NOISE_H
|
||||
|
||||
#include "soloud.h"
|
||||
#include "soloud_misc.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class Noise;
|
||||
|
||||
class NoiseInstance : public AudioSourceInstance
|
||||
{
|
||||
public:
|
||||
NoiseInstance(Noise *aParent);
|
||||
~NoiseInstance();
|
||||
|
||||
virtual unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize);
|
||||
virtual bool hasEnded();
|
||||
|
||||
public:
|
||||
float mOctaveScale[10];
|
||||
Misc::Prg mPrg;
|
||||
};
|
||||
|
||||
class Noise : public AudioSource
|
||||
{
|
||||
public:
|
||||
|
||||
enum NOISETYPES
|
||||
{
|
||||
WHITE = 0,
|
||||
PINK,
|
||||
BROWNISH,
|
||||
BLUEISH
|
||||
};
|
||||
|
||||
Noise();
|
||||
|
||||
void setOctaveScale(float aOct0, float aOct1, float aOct2, float aOct3, float aOct4, float aOct5, float aOct6, float aOct7, float aOct8, float aOct9);
|
||||
void setType(int aType);
|
||||
|
||||
virtual ~Noise();
|
||||
|
||||
public:
|
||||
virtual AudioSourceInstance *createInstance();
|
||||
float mOctaveScale[10];
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
62
SoundPGEXTest/soloud_openmpt.h
Normal file
62
SoundPGEXTest/soloud_openmpt.h
Normal file
@ -0,0 +1,62 @@
|
||||
/*
|
||||
Openmpt module for SoLoud audio engine
|
||||
Copyright (c) 2016 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef OPENMPT_H
|
||||
#define OPENMPT_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class Openmpt;
|
||||
class File;
|
||||
|
||||
class OpenmptInstance : public AudioSourceInstance
|
||||
{
|
||||
Openmpt *mParent;
|
||||
void *mModfile;
|
||||
int mPlaying;
|
||||
|
||||
public:
|
||||
OpenmptInstance(Openmpt *aParent);
|
||||
virtual ~OpenmptInstance();
|
||||
virtual unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize);
|
||||
virtual bool hasEnded();
|
||||
};
|
||||
|
||||
class Openmpt : public AudioSource
|
||||
{
|
||||
public:
|
||||
char *mData;
|
||||
unsigned int mDataLen;
|
||||
Openmpt();
|
||||
virtual ~Openmpt();
|
||||
result load(const char* aFilename);
|
||||
result loadMem(const unsigned char *aMem, unsigned int aLength, bool aCopy = false, bool aTakeOwnership = true);
|
||||
result loadFile(File *aFile);
|
||||
virtual AudioSourceInstance *createInstance();
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
72
SoundPGEXTest/soloud_queue.h
Normal file
72
SoundPGEXTest/soloud_queue.h
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2018 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_QUEUE_H
|
||||
#define SOLOUD_QUEUE_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
#define SOLOUD_QUEUE_MAX 32
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class Queue;
|
||||
|
||||
class QueueInstance : public AudioSourceInstance
|
||||
{
|
||||
Queue *mParent;
|
||||
public:
|
||||
QueueInstance(Queue *aParent);
|
||||
virtual unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize);
|
||||
virtual bool hasEnded();
|
||||
virtual ~QueueInstance();
|
||||
};
|
||||
|
||||
class Queue : public AudioSource
|
||||
{
|
||||
public:
|
||||
Queue();
|
||||
virtual QueueInstance *createInstance();
|
||||
// Play sound through the queue
|
||||
result play(AudioSource &aSound);
|
||||
// Number of audio sources queued for replay
|
||||
unsigned int getQueueCount();
|
||||
// Is this audio source currently playing?
|
||||
bool isCurrentlyPlaying(AudioSource &aSound);
|
||||
// Set params by reading them from an audio source
|
||||
result setParamsFromAudioSource(AudioSource &aSound);
|
||||
// Set params manually
|
||||
result setParams(float aSamplerate, unsigned int aChannels = 2);
|
||||
|
||||
public:
|
||||
unsigned int mReadIndex, mWriteIndex, mCount;
|
||||
AudioSourceInstance *mSource[SOLOUD_QUEUE_MAX];
|
||||
QueueInstance *mInstance;
|
||||
handle mQueueHandle;
|
||||
void findQueueHandle();
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
72
SoundPGEXTest/soloud_robotizefilter.h
Normal file
72
SoundPGEXTest/soloud_robotizefilter.h
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2020 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_ROBOTIZEFILTER_H
|
||||
#define SOLOUD_ROBOTIZEFILTER_H
|
||||
|
||||
#include "soloud.h"
|
||||
#include "soloud_filter.h"
|
||||
#include "soloud_misc.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class RobotizeFilter;
|
||||
|
||||
class RobotizeFilterInstance : public FilterInstance
|
||||
{
|
||||
enum FILTERATTRIBUTE
|
||||
{
|
||||
WET = 0,
|
||||
FREQ,
|
||||
WAVE
|
||||
};
|
||||
RobotizeFilter *mParent;
|
||||
public:
|
||||
virtual void filterChannel(float *aBuffer, unsigned int aSamples, float aSamplerate, time aTime, unsigned int aChannel, unsigned int aChannels);
|
||||
RobotizeFilterInstance(RobotizeFilter *aParent);
|
||||
};
|
||||
|
||||
class RobotizeFilter : public Filter
|
||||
{
|
||||
public:
|
||||
enum FILTERATTRIBUTE
|
||||
{
|
||||
WET = 0,
|
||||
FREQ,
|
||||
WAVE
|
||||
};
|
||||
float mFreq;
|
||||
int mWave;
|
||||
virtual int getParamCount();
|
||||
virtual const char* getParamName(unsigned int aParamIndex);
|
||||
virtual unsigned int getParamType(unsigned int aParamIndex);
|
||||
virtual float getParamMax(unsigned int aParamIndex);
|
||||
virtual float getParamMin(unsigned int aParamIndex);
|
||||
void setParams(float aFreq, int aWaveform);
|
||||
virtual FilterInstance *createInstance();
|
||||
RobotizeFilter();
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
159
SoundPGEXTest/soloud_sfxr.h
Normal file
159
SoundPGEXTest/soloud_sfxr.h
Normal file
@ -0,0 +1,159 @@
|
||||
/*
|
||||
SFXR module for SoLoud audio engine
|
||||
Copyright (c) 2014 Jari Komppa
|
||||
Based on code (c) by Tomas Pettersson, re-licensed under zlib by permission
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SFXR_H
|
||||
#define SFXR_H
|
||||
|
||||
#include "soloud.h"
|
||||
#include "soloud_misc.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class File;
|
||||
|
||||
struct SfxrParams
|
||||
{
|
||||
int wave_type;
|
||||
|
||||
float p_base_freq;
|
||||
float p_freq_limit;
|
||||
float p_freq_ramp;
|
||||
float p_freq_dramp;
|
||||
float p_duty;
|
||||
float p_duty_ramp;
|
||||
|
||||
float p_vib_strength;
|
||||
float p_vib_speed;
|
||||
float p_vib_delay;
|
||||
|
||||
float p_env_attack;
|
||||
float p_env_sustain;
|
||||
float p_env_decay;
|
||||
float p_env_punch;
|
||||
|
||||
bool filter_on;
|
||||
float p_lpf_resonance;
|
||||
float p_lpf_freq;
|
||||
float p_lpf_ramp;
|
||||
float p_hpf_freq;
|
||||
float p_hpf_ramp;
|
||||
|
||||
float p_pha_offset;
|
||||
float p_pha_ramp;
|
||||
|
||||
float p_repeat_speed;
|
||||
|
||||
float p_arp_speed;
|
||||
float p_arp_mod;
|
||||
|
||||
float master_vol;
|
||||
|
||||
float sound_vol;
|
||||
};
|
||||
|
||||
class Sfxr;
|
||||
|
||||
class SfxrInstance : public AudioSourceInstance
|
||||
{
|
||||
Sfxr *mParent;
|
||||
|
||||
Misc::Prg mRand;
|
||||
SfxrParams mParams;
|
||||
|
||||
bool playing_sample;
|
||||
int phase;
|
||||
double fperiod;
|
||||
double fmaxperiod;
|
||||
double fslide;
|
||||
double fdslide;
|
||||
int period;
|
||||
float square_duty;
|
||||
float square_slide;
|
||||
int env_stage;
|
||||
int env_time;
|
||||
int env_length[3];
|
||||
float env_vol;
|
||||
float fphase;
|
||||
float fdphase;
|
||||
int iphase;
|
||||
float phaser_buffer[1024];
|
||||
int ipp;
|
||||
float noise_buffer[32];
|
||||
float fltp;
|
||||
float fltdp;
|
||||
float fltw;
|
||||
float fltw_d;
|
||||
float fltdmp;
|
||||
float fltphp;
|
||||
float flthp;
|
||||
float flthp_d;
|
||||
float vib_phase;
|
||||
float vib_speed;
|
||||
float vib_amp;
|
||||
int rep_time;
|
||||
int rep_limit;
|
||||
int arp_time;
|
||||
int arp_limit;
|
||||
double arp_mod;
|
||||
|
||||
void resetSample(bool aRestart);
|
||||
|
||||
public:
|
||||
SfxrInstance(Sfxr *aParent);
|
||||
virtual unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize);
|
||||
virtual bool hasEnded();
|
||||
};
|
||||
|
||||
class Sfxr : public AudioSource
|
||||
{
|
||||
public:
|
||||
SfxrParams mParams;
|
||||
|
||||
enum SFXR_PRESETS
|
||||
{
|
||||
COIN,
|
||||
LASER,
|
||||
EXPLOSION,
|
||||
POWERUP,
|
||||
HURT,
|
||||
JUMP,
|
||||
BLIP
|
||||
};
|
||||
|
||||
Misc::Prg mRand;
|
||||
|
||||
Sfxr();
|
||||
virtual ~Sfxr();
|
||||
void resetParams();
|
||||
result loadParams(const char* aFilename);
|
||||
result loadParamsMem(unsigned char *aMem, unsigned int aLength, bool aCopy = false, bool aTakeOwnership = true);
|
||||
result loadParamsFile(File *aFile);
|
||||
|
||||
result loadPreset(int aPresetNo, int aRandSeed);
|
||||
virtual AudioSourceInstance *createInstance();
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
79
SoundPGEXTest/soloud_speech.h
Normal file
79
SoundPGEXTest/soloud_speech.h
Normal file
@ -0,0 +1,79 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2015 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
#ifndef SOLOUD_SPEECH_H
|
||||
#define SOLOUD_SPEECH_H
|
||||
|
||||
#include "soloud.h"
|
||||
#include "../src/audiosource/speech/darray.h"
|
||||
#include "../src/audiosource/speech/klatt.h"
|
||||
#include "../src/audiosource/speech/tts.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class Speech;
|
||||
|
||||
class Speech : public AudioSource
|
||||
{
|
||||
// copy of the enum in klatt.h for codegen purposes
|
||||
enum KLATT_WAVEFORM
|
||||
{
|
||||
KW_SAW,
|
||||
KW_TRIANGLE,
|
||||
KW_SIN,
|
||||
KW_SQUARE,
|
||||
KW_PULSE,
|
||||
KW_NOISE,
|
||||
KW_WARBLE
|
||||
};
|
||||
public:
|
||||
int mBaseFrequency;
|
||||
float mBaseSpeed;
|
||||
float mBaseDeclination;
|
||||
int mBaseWaveform;
|
||||
int mFrames;
|
||||
darray mElement;
|
||||
Speech();
|
||||
result setText(const char *aText);
|
||||
result setParams(unsigned int aBaseFrequency = 1330, float aBaseSpeed = 10.0f, float aBaseDeclination = 0.5f, int aBaseWaveform = KW_TRIANGLE);
|
||||
virtual ~Speech();
|
||||
virtual AudioSourceInstance *createInstance();
|
||||
};
|
||||
|
||||
class SpeechInstance : public AudioSourceInstance
|
||||
{
|
||||
klatt mSynth;
|
||||
Speech *mParent;
|
||||
short *mSample;
|
||||
int mSampleCount;
|
||||
int mOffset;
|
||||
public:
|
||||
SpeechInstance(Speech *aParent);
|
||||
virtual ~SpeechInstance();
|
||||
virtual unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize);
|
||||
virtual result rewind();
|
||||
virtual bool hasEnded();
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
BIN
SoundPGEXTest/soloud_static.lib
Normal file
BIN
SoundPGEXTest/soloud_static.lib
Normal file
Binary file not shown.
74
SoundPGEXTest/soloud_tedsid.h
Normal file
74
SoundPGEXTest/soloud_tedsid.h
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
TED/SID module for SoLoud audio engine
|
||||
Copyright (c) 2013-2015 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef TEDSID_H
|
||||
#define TEDSID_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
class SIDsound;
|
||||
class TED;
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class TedSid;
|
||||
class File;
|
||||
|
||||
class TedSidInstance : public AudioSourceInstance
|
||||
{
|
||||
TedSid *mParent;
|
||||
SIDsound *mSID;
|
||||
TED *mTED;
|
||||
unsigned int mSampleCount;
|
||||
int mNextReg;
|
||||
int mNextVal;
|
||||
int mRegValues[128];
|
||||
public:
|
||||
|
||||
TedSidInstance(TedSid *aParent);
|
||||
~TedSidInstance();
|
||||
virtual unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize);
|
||||
virtual void tick();
|
||||
virtual bool hasEnded();
|
||||
virtual float getInfo(unsigned int aInfoKey);
|
||||
};
|
||||
|
||||
class TedSid : public AudioSource
|
||||
{
|
||||
public:
|
||||
File *mFile;
|
||||
int mModel;
|
||||
bool mFileOwned;
|
||||
TedSid();
|
||||
~TedSid();
|
||||
result load(const char *aFilename);
|
||||
result loadToMem(const char *aFilename);
|
||||
result loadMem(const unsigned char *aMem, unsigned int aLength, bool aCopy = false, bool aTakeOwnership = true);
|
||||
result loadFileToMem(File *aFile);
|
||||
result loadFile(File *aFile);
|
||||
virtual AudioSourceInstance *createInstance();
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
84
SoundPGEXTest/soloud_thread.h
Normal file
84
SoundPGEXTest/soloud_thread.h
Normal file
@ -0,0 +1,84 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2014 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_THREAD_H
|
||||
#define SOLOUD_THREAD_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
namespace Thread
|
||||
{
|
||||
typedef void (*threadFunction)(void *aParam);
|
||||
|
||||
struct ThreadHandleData;
|
||||
typedef ThreadHandleData* ThreadHandle;
|
||||
|
||||
void * createMutex();
|
||||
void destroyMutex(void *aHandle);
|
||||
void lockMutex(void *aHandle);
|
||||
void unlockMutex(void *aHandle);
|
||||
|
||||
ThreadHandle createThread(threadFunction aThreadFunction, void *aParameter);
|
||||
|
||||
void sleep(int aMSec);
|
||||
void wait(ThreadHandle aThreadHandle);
|
||||
void release(ThreadHandle aThreadHandle);
|
||||
int getTimeMillis();
|
||||
|
||||
#define MAX_THREADPOOL_TASKS 1024
|
||||
|
||||
class PoolTask
|
||||
{
|
||||
public:
|
||||
virtual void work() = 0;
|
||||
};
|
||||
|
||||
class Pool
|
||||
{
|
||||
public:
|
||||
// Initialize and run thread pool. For thread count 0, work is done at addWork call.
|
||||
void init(int aThreadCount);
|
||||
// Ctor, sets known state
|
||||
Pool();
|
||||
// Dtor. Waits for the threads to finish. Work may be unfinished.
|
||||
~Pool();
|
||||
// Add work to work list. Object is not automatically deleted when work is done.
|
||||
void addWork(PoolTask *aTask);
|
||||
// Called from worker thread to get a new task. Returns null if no work available.
|
||||
PoolTask *getWork();
|
||||
public:
|
||||
int mThreadCount; // number of threads
|
||||
ThreadHandle *mThread; // array of thread handles
|
||||
void *mWorkMutex; // mutex to protect task array/maxtask
|
||||
PoolTask *mTaskArray[MAX_THREADPOOL_TASKS]; // pointers to tasks
|
||||
int mMaxTask; // how many tasks are pending
|
||||
int mRobin; // cyclic counter, used to pick jobs for threads
|
||||
volatile int mRunning; // running flag, used to flag threads to stop
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
108
SoundPGEXTest/soloud_vic.h
Normal file
108
SoundPGEXTest/soloud_vic.h
Normal file
@ -0,0 +1,108 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2015 Jari Komppa
|
||||
|
||||
VIC 6560/6561 sound chip emulator
|
||||
Copyright (c) 2015 Petri Hakkinen
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_VIC_H
|
||||
#define SOLOUD_VIC_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
/*
|
||||
A very bare bones emulator for Commodore VIC-20 sound chip. Supports both PAL and NTSC models.
|
||||
Bass, alto and soprano should be quite close to original vic, noise probably not so.
|
||||
|
||||
The first three channels (bass, alto and soprano) are square waveform generators with 7-bit frequency.
|
||||
The highest bit of each oscillator register switches the oscillator on/off.
|
||||
The fourth oscillator generates a noise waveform.
|
||||
|
||||
VIC-20 does not have per channel volume control, only global volume,
|
||||
which you can change by setting audio source's volume.
|
||||
|
||||
To get that authentic moldy VIC-20 sound, the audio source should be coupled with a biquad resonant filter
|
||||
with the following params: type = LOWPASS, sample rate = 44100, frequency = 1500, resonance = 2.0.
|
||||
*/
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class Vic;
|
||||
|
||||
class VicInstance : public AudioSourceInstance
|
||||
{
|
||||
public:
|
||||
VicInstance(Vic *aParent);
|
||||
~VicInstance();
|
||||
|
||||
virtual unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize);
|
||||
virtual bool hasEnded();
|
||||
|
||||
public:
|
||||
Vic* m_parent;
|
||||
unsigned int m_phase[4];
|
||||
unsigned int m_noisePos;
|
||||
};
|
||||
|
||||
class Vic : public AudioSource
|
||||
{
|
||||
public:
|
||||
// VIC model
|
||||
enum
|
||||
{
|
||||
PAL = 0,
|
||||
NTSC
|
||||
};
|
||||
|
||||
// VIC sound registers
|
||||
enum
|
||||
{
|
||||
BASS = 0,
|
||||
ALTO,
|
||||
SOPRANO,
|
||||
NOISE,
|
||||
MAX_REGS
|
||||
};
|
||||
|
||||
Vic();
|
||||
|
||||
virtual ~Vic();
|
||||
|
||||
void setModel(int model);
|
||||
|
||||
int getModel() const;
|
||||
|
||||
void setRegister(int reg, unsigned char value);
|
||||
|
||||
unsigned char getRegister(int reg);
|
||||
|
||||
public:
|
||||
virtual AudioSourceInstance *createInstance();
|
||||
int m_model;
|
||||
float m_clocks[4]; // base clock frequencies for oscillators, dependent on VIC model
|
||||
unsigned char m_regs[MAX_REGS];
|
||||
unsigned char m_noise[8192];
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
82
SoundPGEXTest/soloud_vizsn.h
Normal file
82
SoundPGEXTest/soloud_vizsn.h
Normal file
@ -0,0 +1,82 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2018 Jari Komppa
|
||||
|
||||
vizsn speech synthesizer (c) by Ville-Matias Heikkilä,
|
||||
released under WTFPL, http://www.wtfpl.net/txt/copying/
|
||||
(in short, "do whatever you want to")
|
||||
|
||||
Integration and changes to work with SoLoud by Jari Komppa,
|
||||
released under same license.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_VIZSN_H
|
||||
#define SOLOUD_VIZSN_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class Vizsn;
|
||||
|
||||
struct VizsnResonator
|
||||
{
|
||||
public:
|
||||
float a, b, c, p1, p2;
|
||||
|
||||
float resonate(float i);
|
||||
float antiresonate(float i);
|
||||
};
|
||||
|
||||
struct VizsnBank
|
||||
{
|
||||
VizsnResonator r[10];
|
||||
float pitch;
|
||||
float frica, voice, aspir, bypas, breth;
|
||||
};
|
||||
|
||||
class VizsnInstance : public AudioSourceInstance
|
||||
{
|
||||
public:
|
||||
VizsnInstance(Vizsn *aParent);
|
||||
~VizsnInstance();
|
||||
|
||||
virtual unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize);
|
||||
virtual bool hasEnded();
|
||||
|
||||
public:
|
||||
Vizsn *mParent;
|
||||
VizsnBank mBank0, mBank1, mBank0to1;
|
||||
int mNper, mNmod, mNopen;
|
||||
int mEchobuf[1024], mPtr;
|
||||
int mCurrentVoiceType;
|
||||
float mPitch;
|
||||
char *mS;
|
||||
float mBuf[2048];
|
||||
unsigned int mBufwrite;
|
||||
unsigned int mBufread;
|
||||
float vcsrc(int aPitch, int aVoicetype);
|
||||
float noisrc();
|
||||
float genwave();
|
||||
void setphone(VizsnBank *aB, char aP, float aPitch);
|
||||
void slidePrepare(int aNumtix);
|
||||
void slideTick();
|
||||
int mA;
|
||||
int mB;
|
||||
int mOrgv;
|
||||
float mGlotlast;
|
||||
};
|
||||
|
||||
class Vizsn : public AudioSource
|
||||
{
|
||||
public:
|
||||
char *mText;
|
||||
Vizsn();
|
||||
virtual ~Vizsn();
|
||||
void setText(char *aText);
|
||||
public:
|
||||
virtual AudioSourceInstance *createInstance();
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
74
SoundPGEXTest/soloud_wav.h
Normal file
74
SoundPGEXTest/soloud_wav.h
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2018 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_WAV_H
|
||||
#define SOLOUD_WAV_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
struct stb_vorbis;
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class Wav;
|
||||
class File;
|
||||
class MemoryFile;
|
||||
|
||||
class WavInstance : public AudioSourceInstance
|
||||
{
|
||||
Wav *mParent;
|
||||
unsigned int mOffset;
|
||||
public:
|
||||
WavInstance(Wav *aParent);
|
||||
virtual unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize);
|
||||
virtual result rewind();
|
||||
virtual bool hasEnded();
|
||||
};
|
||||
|
||||
class Wav : public AudioSource
|
||||
{
|
||||
result loadwav(MemoryFile *aReader);
|
||||
result loadogg(MemoryFile *aReader);
|
||||
result loadmp3(MemoryFile *aReader);
|
||||
result loadflac(MemoryFile *aReader);
|
||||
result testAndLoadFile(MemoryFile *aReader);
|
||||
public:
|
||||
float *mData;
|
||||
unsigned int mSampleCount;
|
||||
|
||||
Wav();
|
||||
virtual ~Wav();
|
||||
result load(const char *aFilename);
|
||||
result loadMem(const unsigned char *aMem, unsigned int aLength, bool aCopy = false, bool aTakeOwnership = true);
|
||||
result loadFile(File *aFile);
|
||||
result loadRawWave8(unsigned char *aMem, unsigned int aLength, float aSamplerate = 44100.0f, unsigned int aChannels = 1);
|
||||
result loadRawWave16(short *aMem, unsigned int aLength, float aSamplerate = 44100.0f, unsigned int aChannels = 1);
|
||||
result loadRawWave(float *aMem, unsigned int aLength, float aSamplerate = 44100.0f, unsigned int aChannels = 1, bool aCopy = false, bool aTakeOwnership = true);
|
||||
|
||||
virtual AudioSourceInstance *createInstance();
|
||||
time getLength();
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
63
SoundPGEXTest/soloud_waveshaperfilter.h
Normal file
63
SoundPGEXTest/soloud_waveshaperfilter.h
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2018 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_WAVESHAPERFILTER_H
|
||||
#define SOLOUD_WAVESHAPERFILTER_H
|
||||
|
||||
#include "soloud.h"
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class WaveShaperFilter;
|
||||
|
||||
class WaveShaperFilterInstance : public FilterInstance
|
||||
{
|
||||
WaveShaperFilter *mParent;
|
||||
public:
|
||||
virtual void filterChannel(float *aBuffer, unsigned int aSamples, float aSamplerate, time aTime, unsigned int aChannel, unsigned int aChannels);
|
||||
virtual ~WaveShaperFilterInstance();
|
||||
WaveShaperFilterInstance(WaveShaperFilter *aParent);
|
||||
};
|
||||
|
||||
class WaveShaperFilter : public Filter
|
||||
{
|
||||
public:
|
||||
enum FILTERPARAMS {
|
||||
WET = 0,
|
||||
AMOUNT
|
||||
};
|
||||
float mAmount;
|
||||
virtual WaveShaperFilterInstance *createInstance();
|
||||
result setParams(float aAmount);
|
||||
WaveShaperFilter();
|
||||
virtual ~WaveShaperFilter();
|
||||
virtual int getParamCount();
|
||||
virtual const char* getParamName(unsigned int aParamIndex);
|
||||
virtual unsigned int getParamType(unsigned int aParamIndex);
|
||||
virtual float getParamMax(unsigned int aParamIndex);
|
||||
virtual float getParamMin(unsigned int aParamIndex);
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
106
SoundPGEXTest/soloud_wavstream.h
Normal file
106
SoundPGEXTest/soloud_wavstream.h
Normal file
@ -0,0 +1,106 @@
|
||||
/*
|
||||
SoLoud audio engine
|
||||
Copyright (c) 2013-2018 Jari Komppa
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#ifndef SOLOUD_WAVSTREAM_H
|
||||
#define SOLOUD_WAVSTREAM_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include "soloud.h"
|
||||
|
||||
struct stb_vorbis;
|
||||
#ifndef dr_flac_h
|
||||
struct drflac;
|
||||
#endif
|
||||
#ifndef dr_mp3_h
|
||||
struct drmp3;
|
||||
#endif
|
||||
#ifndef dr_wav_h
|
||||
struct drwav;
|
||||
#endif
|
||||
|
||||
namespace SoLoud
|
||||
{
|
||||
class WavStream;
|
||||
class File;
|
||||
|
||||
class WavStreamInstance : public AudioSourceInstance
|
||||
{
|
||||
WavStream *mParent;
|
||||
unsigned int mOffset;
|
||||
File *mFile;
|
||||
union codec
|
||||
{
|
||||
stb_vorbis *mOgg;
|
||||
drflac *mFlac;
|
||||
drmp3 *mMp3;
|
||||
drwav *mWav;
|
||||
} mCodec;
|
||||
unsigned int mOggFrameSize;
|
||||
unsigned int mOggFrameOffset;
|
||||
float **mOggOutputs;
|
||||
public:
|
||||
WavStreamInstance(WavStream *aParent);
|
||||
virtual unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize);
|
||||
virtual result rewind();
|
||||
virtual bool hasEnded();
|
||||
virtual ~WavStreamInstance();
|
||||
};
|
||||
|
||||
enum WAVSTREAM_FILETYPE
|
||||
{
|
||||
WAVSTREAM_WAV = 0,
|
||||
WAVSTREAM_OGG = 1,
|
||||
WAVSTREAM_FLAC = 2,
|
||||
WAVSTREAM_MP3 = 3
|
||||
};
|
||||
|
||||
class WavStream : public AudioSource
|
||||
{
|
||||
result loadwav(File *fp);
|
||||
result loadogg(File *fp);
|
||||
result loadflac(File *fp);
|
||||
result loadmp3(File *fp);
|
||||
public:
|
||||
int mFiletype;
|
||||
char *mFilename;
|
||||
File *mMemFile;
|
||||
File *mStreamFile;
|
||||
unsigned int mSampleCount;
|
||||
|
||||
WavStream();
|
||||
virtual ~WavStream();
|
||||
result load(const char *aFilename);
|
||||
result loadMem(const unsigned char *aData, unsigned int aDataLen, bool aCopy = false, bool aTakeOwnership = true);
|
||||
result loadToMem(const char *aFilename);
|
||||
result loadFile(File *aFile);
|
||||
result loadFileToMem(File *aFile);
|
||||
virtual AudioSourceInstance *createInstance();
|
||||
time getLength();
|
||||
|
||||
public:
|
||||
result parse(File *aFile);
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user