diff --git a/LaunchScript/VirtualAcousticStarterConfig.ITC16100.json b/LaunchScript/VirtualAcousticStarterConfig.ITC16100.json index 4eabe72854126436b40843554022b946b9040bb9..25b1b847ad06842f8239b1ea01e51ec3aba766a6 100644 --- a/LaunchScript/VirtualAcousticStarterConfig.ITC16100.json +++ b/LaunchScript/VirtualAcousticStarterConfig.ITC16100.json @@ -3,6 +3,7 @@ "nLauncherPort": 41578, "nVAServerPort": 12340, "nWaitForVAServerStart": 5, + "sVASetupIni": "VASetup.aixCAVE.ini", "lsBinauralReproductionModules": ["TalkthroughHP", "CTC"], "dVAServerDirectories" = { diff --git a/LaunchScript/VirtualAcousticStarterConfig.json b/LaunchScript/VirtualAcousticStarterConfig.json index 9b3010ac35e172d807c369d49c257f347e2def5f..f0cb806d83af63d9ff1a74fef645445eccb5f7a9 100644 --- a/LaunchScript/VirtualAcousticStarterConfig.json +++ b/LaunchScript/VirtualAcousticStarterConfig.json @@ -3,6 +3,7 @@ "nLauncherPort": 41578, "nVAServerPort": 12340, "nWaitForVAServerStart": 3, + "sVASetupIni": "VASetup.Launcher.ini", "lsBinauralReproductionModules": ["TalkthroughHP"], "lsAmbisonicsReproductionModules": ["AmbisonicsBinauralMixdown"], diff --git a/LaunchScript/VirtualAcousticsStarterServer.py b/LaunchScript/VirtualAcousticsStarterServer.py index 7dce6e3f4bf25edf6287debec6e1ed3b1032b7ba..24a84c27024a11f3e3e4bbbb062e20209559264c 100644 --- a/LaunchScript/VirtualAcousticsStarterServer.py +++ b/LaunchScript/VirtualAcousticsStarterServer.py @@ -40,6 +40,11 @@ class LauncherConfig: print( "ERROR reading the json config. Missing " + str(e.args[0]) ) sys.exit( ErrorCodes.ERROR_INCOMPLETE_CONFIG ) + try: + conf.sVASetupIni = json_config["sVASetupIni"] + except KeyError: + conf.sVASetupIni = None + try: conf.lsBinauralReproductionModules = json_config["lsBinauralReproductionModules"] except KeyError: @@ -56,6 +61,7 @@ class LauncherConfig: class VAComposedIniParser: def __init__(self, oLauncherConf : LauncherConfig): + self.sVASetupIni = oLauncherConf.sVASetupIni self.lsBinauralReproductionModules = oLauncherConf.lsBinauralReproductionModules self.lsAmbisonicsReproductionModules = oLauncherConf.lsAmbisonicsReproductionModules self.lsCustomReproductionModules = oLauncherConf.lsCustomReproductionModules @@ -73,29 +79,33 @@ class VAComposedIniParser: def prepare_inis(self): print("Parsing VA ini-files") - self.link_renderer_ini() + self.link_setup_and_renderer_ini() return self.prepare_reproduction_ini() - def link_renderer_ini(self): + def link_setup_and_renderer_ini(self): if not self.sRendererIniPath: - print("No renderer ini-file sent by client, using default one.") + print("No renderer ini-file sent by client, using default one: 'VARenderer.Default.ini'") self.sRendererIniPath = "VARenderer.Default.ini" + if not self.sVASetupIni: + print("No setup ini-file specified, using default one: 'VASetup.Launcher.ini'") + self.sVASetupIni = "VASetup.Launcher.ini" sMainInifile = self.get_main_inifile() if not os.path.isfile(sMainInifile): print("ERROR: Could not find 'VACore.Main.ini' in 'conf' folder. Did you delete it?") sys.exit( ErrorCodes.ERROR_MISSING_VA_INI ) - rendererIni = self._create_parser() + mainIni = self._create_parser() try: - rendererIni.read( sMainInifile ) - rendererIni["Files"]["VARendererIni"] = self.sRendererIniPath + mainIni.read( sMainInifile ) + mainIni["Files"]["VARendererIni"] = self.sRendererIniPath + mainIni["Files"]["VASetupIni"] = self.sVASetupIni except Exception as e: print( "ERROR: " + str(e) ) sys.exit( ErrorCodes.ERROR_INCOMPLETE_VA_INI ) with open( sMainInifile, 'w' ) as inifile: - rendererIni.write(inifile) + mainIni.write(inifile) def prepare_reproduction_ini(self): sFileToRead = self.sConfFolder + "VAReproduction.Prototype.ini" diff --git a/README.md b/README.md index ef14fcdfbd77c3b40dc0149741bc86d55500d483..5a1f4c3b710518e05b0fce5d79ae2effa4ec1386 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ The VAServerLauncher can be configured by adjusting the settings in `./LaunchScr | nLauncherPort | Port used for communication with launcher | 41578 | | nVAServerPort | Port used for communication with VAServer | 12340 | | nWaitForVAServerStart | Time to wait for VAServer to start [seconds] | 3 | +| sVASetupIni | Name of VA ini-file with [audio hardware](#audio-hardware) settings located in `conf` folder | "VASetup.Launcher.ini" | | lsBinauralReproductionModules | [Reproduction modules](#audio-reproduction) used for [binaural](#unreal-project-configuration) input signals | ["TalkthroughHP"] | | lsAmbisonicsReproductionModules | [Reproduction modules](#audio-reproduction) used for [ambisonics](#unreal-project-configuration) input signals | ["AmbisonicsBinauralMixdown"] | | lsCustomReproductionModules | [Reproduction modules](#audio-reproduction) used for [custom](#unreal-project-configuration) purposes (e.g. multiple renderers with different signal types) | e.g. ["TalkthroughHP", "AmbisonicsBinauralMixdown"] | @@ -51,7 +52,7 @@ If you want to use other VAServer versions than provided, you can extend the `dV A set of .ini files is provided in the `./conf` directory. The VAServerLauncher will automatically combine them before starting the VAServer. For this to work, you should **not** change those files with the following exceptions. ### Audio hardware -The audio hardware settings are specific to each computer and typically have to be modified in the `VASetup.Launcher.ini`. Those include [audio driver](https://www.virtualacoustics.org/VA/documentation/configuration/#audio-driver-configuration) and [output device](https://www.virtualacoustics.org/VA/documentation/configuration/#audio-hardware-configuration) settings including the respective channels (e.g. headphones on channels 1 & 2). +The audio hardware settings are specific to each computer and typically have to be modified in the VASetup ini file (see `sVASetupIni` in [Launcher config](#launcher-configuration), default `VASetup.Launcher.ini`). Those include [audio driver](https://www.virtualacoustics.org/VA/documentation/configuration/#audio-driver-configuration) and [output device](https://www.virtualacoustics.org/VA/documentation/configuration/#audio-hardware-configuration) settings including the respective channels (e.g. headphones on channels 1 & 2). ### Audio reproduction The audio [reproduction settings](https://www.virtualacoustics.org/VA/documentation/reproduction/) can to be modified in the `VAReproduction.Prototype.ini`. VA uses reproduction modules to specify how the audio stream is processed before being sent to the output devices. For examples binaural signals can be reproduced using a direct routing to headphones or using cross-talk cancellation (CTC) and loudspeakers. @@ -64,7 +65,7 @@ Per default the following reproduction modules are defined - AmbisonicsLS - AmbisonicsBinauralMixdown -You can add additional modules, if you want. However, you should *not* rename the existing ones. Furthermore, all modules must be disbaled [Enabled = false]. The VAServerLauncher will automatically enable the reproduction modules specified in the `VirtualAcousticStarterConfig.json` (see [Launcher configuration](#launcher-configuration)) when starting the VAServer. +You can add additional modules, if you want. However, you should **not** rename the existing ones. Furthermore, all modules must be disbaled [Enabled = false]. The VAServerLauncher will automatically enable the reproduction modules specified in the `VirtualAcousticStarterConfig.json` (see [Launcher configuration](#launcher-configuration)) when starting the VAServer. In any case, especially for the loudspeaker-based modules, you will have to update the `Outputs` setting according to what you defined in the `VASetup.Launcher.ini`. diff --git a/conf/VASetup.aixCAVE.ini b/conf/VASetup.aixCAVE.ini new file mode 100644 index 0000000000000000000000000000000000000000..71eb29d01a62d529ef22913d80ad0dac59a101c5 --- /dev/null +++ b/conf/VASetup.aixCAVE.ini @@ -0,0 +1,497 @@ +# +# ------------------------------------------------------------------------------------------- +# +# VVV VVV A +# VVV VVV AAA Virtual Acoustics (VA) +# VVV VVV AAA Real-time auralization for virtual reality +# VVV VVV AAA +# VVVVVV AAA (c) Copyright Institute of Technical Acoustics (ITA) +# VVVV AAA RWTH Aachen University (http://www.akustik.rwth-aachen.de) +# +# ------------------------------------------------------------------------------------------- +# + +[Debug] + +# Set log level: 0 = quiet; 1 = errors; 2 = warnings; 3 = info (default); 4 = verbose; 5 = trace; +LogLevel = 3 + +[Audio driver] + +# MANDATORY: Audio driver backend (ASIO|Portaudio|Virtual) +Driver = ASIO + +# MANDATORY: Audio device ( e.g. ASIO4ALL v2, ASIO Hammerfall DSP, Portaudio 'default', 0,1,2,3,..., virtual user 'Trigger' ) +Device = ASIO Hammerfall DSP + +# MANDATORY: Sampling rate [Hz] +Samplerate = 44100 + +# OPTIONAL: Buffer size / block length used for audio streaming [Samples] +# AUTO will determine the buffer size from the audio device automatically [recommended, set in sound card driver configuration] +# Note: Adjust this to your latency requirements +BufferSize = AUTO + +# Define number of output channels manually (e.g. for virtual device) +OutputChannels = AUTO + + +[Setup] +# -- outputs + +[Output:Ac_Op] +Description = Acoustic Operator Monitor Loudspeaker +Devices = MONL, MONR + +[Output:Wireless_HP] +Description = Wireless Headphones +Devices = WHP + +[Output:HP_1] +Description = Wired Headphones 1 +Devices = HP1 + +[Output:HP_2] +Description = Wired Headphones 2 +Devices = HP2 + +[Output:Cave_LS] +Type = Group +Description = aixCave Loudspeaker Array +Devices = LS1, LS2, LS3, LS4, LS5, LS6, LS7, LS8, LS9, LS10, LS11, LS12 + +[Output:Cave_SW] +Description = aixCave Subwoofer Array +Devices = SW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8, SW9 + +[Output:Cave_LS_QuadConfig] +Type = Group +Description = aixCave quadratic loudspeaker configuration (center of screen edges) +Devices = LS2, LS5, LS8, LS11 + +# -- inputs + +[Input:Cave_MikeArray] +Description = aixCave Microphone Array +Devices = MIC1,MIC2,MIC3,MIC4,MIC5,MIC6,MIC7,MIC8,MIC9,MIC10,MIC11,MIC12,MIC13,MIC14,MIC15,MIC16,MIC17,MIC18,MIC19,MIC20,MIC21,MIC22 + +[Input:Ac_Op_TableMike] +Description = Acoustic Operator Table Microphone +Devices = TMIC1 + +[Input:Cave_Op_TableMike] +Description = Cave Operator Table Microphone Panasonic xyz +Devices = TMIC2 + +[Input:Cave_WirelessMike] +Description = Cave Wireless Microphone +Devices = WMIC + + +# -- hardware output devices + +# Top-Down View +# RPY in -z direction, -x = +yaw, y = +pitch +#Subwoofer (Pro Dipe 10S V2) Lautsprecher Neumann KH120 +#+--------------+ +---4---5---6---+ +#| | | | +#| 7 8 9 | 3 7 +#| | | | +#| 4 5 6 | +----> +X 2 + 8 +#| | | | | +#| 1 2 3 | V 1 9 +#| | | | +#+==============+ +Z +==12==11==10===+ +# Door Door + + +[OutputDevice:MONL] +Type = LS +Description = Neumann K110 +Channels = 1 +DataFileName = Neumann_K110_Directivity_DFT.daff + +[OutputDevice:MONR] +Type = LS +Description = Neumann K110 +Channels = 2 +DataFileName = Neumann_K110_Directivity_DFT.daff + +[OutputDevice:WHP] +Type = HP +Description = Sennheiser +Channels = 3,4 +DataFileName = Sennheiser_WHP_Equalization.wav + +[OutputDevice:HP1] +Type = HP +Description = Superlux 1 +Channels = 5,6 +DataFileName = Superlux_Equalization.wav + +[OutputDevice:HP2] +Type = HP +Description = Superlux 2 +Channels = 7,8 +DataFileName = Superlux_Equalization.wav + + +[OutputDevice:LS1] +Type = LS +Description = Neumann K110 +Channels = 9 +Position = -2.556, 3.405, 1.313 +OrientationRPY = 0, -42, -90 +DataFileName = Neumann_K110_Directivity_DFT.daff + +[OutputDevice:LS2] +Type = LS +Description = Neumann K110 +Channels = 10 +Position = -2.555, 3.402, 0 +OrientationRPY = 0, -42, -90 +DataFileName = Neumann_K110_Directivity_DFT.daff + +[OutputDevice:LS3] +Type = LS +Description = Neumann K110 +Channels = 11 +Position = -2.552, 3.402, -1.313 +OrientationRPY = 0, -42, -90 +DataFileName = Neumann_K110_Directivity_DFT.daff + +[OutputDevice:LS4] +Type = LS +Description = Neumann K110 +Channels = 12 +Position = -1.313, 3.405, -2.551 +OrientationRPY = 0, -42, 180 +DataFileName = Neumann_K110_Directivity_DFT.daff + +[OutputDevice:LS5] +Type = LS +Description = Neumann K110 +Channels = 13 +Position = 0, 3.403, -2.55 +OrientationRPY = 0, -42, 180 +DataFileName = Neumann_K110_Directivity_DFT.daff + +[OutputDevice:LS6] +Type = LS +Description = Neumann K110 +Channels = 14 +Position = 1.313, 3.403, -2.555 +OrientationRPY = 0, -42, 180 +DataFileName = Neumann_K110_Directivity_DFT.daff + +[OutputDevice:LS7] +Type = LS +Description = Neumann K110 +Channels = 15 +Position = 2.560, 3.402, -1.313 +OrientationRPY = 0, -42, 90 +DataFileName = Neumann_K110_Directivity_DFT.daff + +[OutputDevice:LS8] +Type = LS +Description = Neumann K110 +Channels = 16 +Position = 2.560, 3.402, 0 +OrientationRPY = 0, -42, 90 +DataFileName = Neumann_K110_Directivity_DFT.daff + +[OutputDevice:LS9] +Type = LS +Description = Neumann K110 +Channels = 17 +Position = 2.559, 3.404, 1.313 +OrientationRPY = 0, -42, 90 +DataFileName = Neumann_K110_Directivity_DFT.daff + +[OutputDevice:LS10] +Type = LS +Description = Neumann K110 +Channels = 18 +Position = 1.313, 3.399, 2.30 +OrientationRPY = 0, -42, 0 +DataFileName = Neumann_K110_Directivity_DFT.daff + +[OutputDevice:LS11] +Type = LS +Description = Neumann K110 +Channels = 19 +Position = 0, 3.401, 2.3 +OrientationRPY = 0, -42, 0 +DataFileName = Neumann_K110_Directivity_DFT.daff + +[OutputDevice:LS12] +Type = LS +Description = Neumann K110 +Channels = 20 +Position = -1.313, 3.401, 2.3 +OrientationRPY = 0, -42, 0 +DataFileName = Neumann_K110_Directivity_DFT.daff + + +[OutputDevice:SW1] +Type = LS +Description = Pro Dipe 10S V2 +Channels = 21 +Position = -1.75, 3.45, -1.75 +OrientationRPY = 0, -90, 0 +DataFileName = ProDipe_Directivity_DFT.daff + +[OutputDevice:SW2] +Type = LS +Description = Pro Dipe 10S V2 +Channels = 22 +Position = 0, 3.45, -1.75 +OrientationRPY = 0, -90, 0 +DataFileName = ProDipe_Directivity_DFT.daff + +[OutputDevice:SW3] +Type = LS +Description = Pro Dipe 10S V2 +Channels = 23 +Position = 1.75, 3.45, -1.75 +OrientationRPY = 0, -90, 0 +DataFileName = ProDipe_Directivity_DFT.daff + +[OutputDevice:SW4] +Type = LS +Description = Pro Dipe 10S V2 +Channels = 24 +Position = -1.75, 3.45, 0 +OrientationRPY = 0, -90, 0 +DataFileName = ProDipe_Directivity_DFT.daff + +[OutputDevice:SW5] +Type = LS +Description = Pro Dipe 10S V2 +Channels = 25 +Position = 0, 3.45, 0 +OrientationRPY = 0, -90, 0 +DataFileName = ProDipe_Directivity_DFT.daff + +[OutputDevice:SW6] +Type = LS +Description = Pro Dipe 10S V2 +Channels = 26 +Position = 1.75, 3.45, 0 +OrientationRPY = 0, -90, 0 +DataFileName = ProDipe_Directivity_DFT.daff + +[OutputDevice:SW7] +Type = LS +Description = Pro Dipe 10S V2 +Channels = 27 +Position = -1.75, 3.45, 1.75 +OrientationRPY = 0, -90, 0 +DataFileName = ProDipe_Directivity_DFT.daff + +[OutputDevice:SW8] +Type = LS +Description = Pro Dipe 10S V2 +Channels = 28 +Position = 0, 3.45, 1.75 +OrientationRPY = 0, -90, 0 +DataFileName = ProDipe_Directivity_DFT.daff + +[OutputDevice:SW9] +Type = LS +Description = Pro Dipe 10S V2 +Channels = 29 +Position = 1.75, 3.45, 1.75 +OrientationRPY = 0, -90, 0 +DataFileName = ProDipe_Directivity_DFT.daff + + +# -- microphones + +# Top-Down View + +# Mikrofone (Panasonic P9925-ND / WM-61A) +# RPY in -z direction, -x = +yaw, y = +pitch +#+--------------------------------------+ +#| | +#| 19 20 21 22 | +#| | +#| 14 15 16 17 18 | +#| | +#| 10 11 12 13 | +#| | +#| 5 6 7 8 9 | +----> +X +#| | | +#| 1 2 3 4 | | +#| | V +#+======================================+ +Z +# Door + +[InputDevice:WMIC] +Type = HP +Description = Sennheiser Wireless Microphone +Channels = 1 + +[InputDevice:TMIC1] +Type = HP +Description = Table Microphone 1 +Channels = 7 + +[InputDevice:TMIC2] +Type = HP +Description = Table Microphone 2 +Channels = 8 + +[InputDevice:MIC1] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 9 +Position = -1.350, 3.435, 1.559 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC2] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 10 +Position = -0.450, 3.435, 1.559 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC3] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 11 +Position = 4.50, 3.435, 1.559 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC4] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 12 +Position = 1.350, 3.435, 1.559 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC5] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 13 +Position = -1.8, 3.435, 0.779 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC6] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 14 +Position = -0.9, 3.435, 0.779 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC7] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 15 +Position = 0, 3.435, 0.779 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC8] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 16 +Position = 0.9, 3.435, 0.779 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC9] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 17 +Position = 1.8, 3.435, 0.779 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC10] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 18 +Position = -1.35, 3.435, 0 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC11] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 19 +Position = -0.45, 3.435, 0 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC12] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 20 +Position = 0.45, 3.435, 0 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC13] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 21 +Position = 1.35, 3.435, 0 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC14] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 22 +Position = -1.8, 3.435, -0.779 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC15] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 23 +Position = -0.9, 3.435, -0.779 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC16] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 24 +Position = 0, 3.435, -0.779 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC17] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 25 +Position = 0.9, 3.435, -0.779 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC18] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 9 +Position = 1.8, 3.435, -0.779 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC19] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 26 +Position = -1.35, 3.435, -1.559 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC20] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 27 +Position = -0.45, 3.435, -1.559 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC21] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 28 +Position = 0.45, 3.435, -1.559 +OrientationRPY = 0, -90, 0 + +[InputDevice:MIC22] +Type = MIC +Description = Panasonic P9925-ND / WM-61A +Channels = 29 +Position = 1.350, 3.435, -1.559 +OrientationRPY = 0, -90, 0