Commit 14627e79 authored by Dipl.-Ing. Jonas Stienen's avatar Dipl.-Ing. Jonas Stienen
Browse files

Merging ambisonics and develop

parents 3f90400f 0a931843
......@@ -66,3 +66,4 @@ OrientationYPR = -45, -19.1, 0
#DataFileName = $(VADataDir)/LSEQ/KleinHummel/ls16_eq_nDFT_1025.daff
# ITA Laboratory for Virtual Acoustics (VRLab) audio hardware setup
# by Michael Kohnen
# Outputs: logical groups of output audio hardware
[Output:HOAIdeal]
Description = Equiangular placed loudspeaker
Enabled = true
Devices = LS1, LS2, LS3, LS4, LS5, LS6, LS7, LS8, LS9, LS10, LS11, LS12, LS13, LS14, LS15, LS16, LS17, LS18, LS19, LS20, LS21, LS22, LS23, LS24, LS25
[OutputDevice:LS1]
Type = LS
Channels = 1
Position = 0,1,-6.1232e-17
[OutputDevice:LS2]
Type = LS
Channels = 2
Position = 0,-0.44216,-0.89694
[OutputDevice:LS3]
Type = LS
Channels = 3
Position = -0.32687,0.19947,0.92378
[OutputDevice:LS4]
Type = LS
Channels = 4
Position = 0.98721,0.069029,-0.14369
[OutputDevice:LS5]
Type = LS
Channels = 5
Position = 0.77885,0.44862,0.43833
[OutputDevice:LS6]
Type = LS
Channels = 6
Position = -0.48015,-0.48095,0.73358
[OutputDevice:LS7]
Type = LS
Channels = 7
Position = 0.17993,-0.90665,-0.3816
[OutputDevice:LS8]
Type = LS
Channels = 8
Position = -0.23215,-0.93862,0.25516
[OutputDevice:LS9]
Type = LS
Channels = 9
Position = 0.65248,0.73868,-0.16918
[OutputDevice:LS10]
Type = LS
Channels = 10
Position = 0.60413,0.15673,-0.78132
[OutputDevice:LS11]
Type = LS
Channels = 11
Position = -0.11457,0.23328,-0.96564
[OutputDevice:LS12]
Type = LS
Channels = 12
Position = 0.35422,0.12681,0.92653
[OutputDevice:LS13]
Type = LS
Channels = 13
Position = 0.80741,-0.26818,0.52552
[OutputDevice:LS14]
Type = LS
Channels = 14
Position = -0.95081,0.28724,-0.116
[OutputDevice:LS15]
Type = LS
Channels = 15
Position = 0.16237,0.75622,-0.63385
[OutputDevice:LS16]
Type = LS
Channels = 16
Position = 0.59325,-0.79266,0.14052
[OutputDevice:LS17]
Type = LS
Channels = 17
Position = 0.10299,0.75008,0.65328
[OutputDevice:LS18]
Type = LS
Channels = 18
Position = -0.85196,0.069728,0.51895
[OutputDevice:LS19]
Type = LS
Channels = 19
Position = -0.48217,-0.76556,-0.42595
[OutputDevice:LS20]
Type = LS
Channels = 20
Position = 0.72077,-0.48095,-0.49917
[OutputDevice:LS21]
Type = LS
Channels = 21
Position = -0.57288,0.75007,0.33045
[OutputDevice:LS22]
Type = LS
Channels = 22
Position = -0.89509,-0.44532,0.022394
[OutputDevice:LS23]
Type = LS
Channels = 23
Position = -0.71173,-0.11269,-0.69335
[OutputDevice:LS24]
Type = LS
Channels = 24
Position = 0.21394,-0.61262,0.76088
[OutputDevice:LS25]
Type = LS
Channels = 25
Position = -0.53917,0.66038,-0.52268
\ No newline at end of file
......@@ -5,13 +5,18 @@
[Output:VRLAB_LS_ALL]
Description = ITA VRLab setup using all available broadband loudspeaker (O300 & O110)
Enabled = false
Devices = LS_FL, LS_FR, LS_RR, LS_RL, LS_TF, LS_TR, LS_TB, LS_TL, LS_BF, LS_BR, LS_BB, LS_BL
[Output:VRLAB_VLS_ALL]
Description = ITA VRLab setup using all available broadband loudspeaker (O300 & O110)
Enabled = true
Devices = LS_FL, LS_FR, LS_RL, LS_RR, LS_TF, LS_TR, LS_TB, LS_TL, LS_BF, LS_BR, LS_BB, LS_BL
Devices = LS_FL, LS_FR, LS_RR, LS_RL, LS_TF, LS_TR, LS_TB, LS_TL, LS_BF, LS_BR, LS_BB, LS_BL, LS_VU, LS_VD
[Output:VRLAB_LS_HORIZONTAL]
Description = ITA VRLab setup using loudspeaker ring in horizontal plane at user's head elevation
Enabled = true
Devices = LS_FL, LS_FR, LS_RL, LS_RR
Devices = LS_FL, LS_FR, LS_RR, LS_RL
[Output:VRLAB_LS_STEREO]
Description = ITA VRLab simple stereo setup
......@@ -178,3 +183,21 @@ Channels = 21, 22
Type = HP
Description = Sennheiser wirless headphones
Channels = 23, 24
[OutputDevice:LS_VU]
Type = LS
Description = K&H O110D, no16, rear-left
Channels = 15
#Position = 0.0, 2.0, 0.0
#OrientationYPR = -45, -15, 0
Position = 0, 2, 0
OrientationYPR = -45, -19.1, 0
#DataFileName = $(VADataDir)/LSEQ/KleinHummel/ls16_eq_nDFT_1025.daff
[OutputDevice:LS_VD]
Type = LS
Description = K&H O110D, no16, rear-left
Channels = 16
Position = 0.0, -2.0, 0.0
OrientationYPR = -45, -19.1, 0
#DataFileName = $(VADataDir)/LSEQ/KleinHummel/ls16_eq_nDFT_1025.daff
\ No newline at end of file
......@@ -96,10 +96,10 @@ void CVAAudiofileSignalSource::SetPlaybackAction( int iPlayStateAction )
m_iRequestedPlaybackAction = iPlayStateAction;
break;
case IVACore::VA_PLAYBACK_ACTION_NONE:
VA_WARN( "CVAAudiofileSignalSource", "Ignoring playback action '" << iPlayStateAction << "' (NONE)" );
VA_WARN( "AudiofileSignalSource", "Ignoring playback action '" << iPlayStateAction << "' (NONE)" );
break;
default:
VA_ERROR( "CVAAudiofileSignalSource", "Could not apply unkown playback action '" << iPlayStateAction << "'" );
VA_ERROR( "AudiofileSignalSource", "Could not apply unkown playback action '" << iPlayStateAction << "'" );
break;
}
......@@ -250,7 +250,7 @@ const float* CVAAudiofileSignalSource::GetStreamBlock( const CVAAudiostreamState
if( m_pBufferDataSource->GetLoopMode() == false )
{
m_iCurrentPlayState = IVACore::VA_PLAYBACK_STATE_STOPPED; // Attention, directly modifying member, only OK here.
VA_INFO( "CVAAudiofileSignalSource", "Playback stop transition forced during locked scene." );
VA_INFO( "AudiofileSignalSource", "Playback stop transition forced during locked scene." );
}
}
break;
......@@ -315,7 +315,7 @@ const float* CVAAudiofileSignalSource::GetStreamBlock( const CVAAudiostreamState
if( m_iCurrentPlayState != iNewPlaybackState && !bSyncMod )
{
VA_INFO( "CVAAudiofileSignalSource", "Playback transition from '" << GetStateString( m_iCurrentPlayState ) << "'" <<
VA_INFO( "AudiofileSignalSource", "Playback transition from '" << GetStateString( m_iCurrentPlayState ) << "'" <<
" to '" << GetStateString( iNewPlaybackState ) << "'" );
assert( iNewPlaybackState != IVACore::VA_PLAYBACK_STATE_INVALID );
......
......@@ -216,7 +216,7 @@ const float* CVAMachineSignalSource::GetStreamBlock( const CVAAudiostreamState*
for( int i=0; i<m_sbOut.length(); i++ )
{
if( m_sbOut[i] > 1.0f || m_sbOut[i] < -1.0f )
VA_WARN( "CVAMachineSignalSource", "high energy detected" );
VA_WARN( "MachineSignalSource", "high energy detected" );
}
return m_sbOut.data();
......
......@@ -83,7 +83,7 @@ const float* CVATextToSpeechSignalSource::GetStreamBlock( const CVAAudiostreamSt
delete m_pFrameToDelete;
m_pFrameToDelete = NULL;
}
//VA_INFO("CVATextToSpeechSignalSource", "TTS to VA_PLAYBACK_ACTION_STOP");
//VA_INFO("TextToSpeechSignalSource", "TTS to VA_PLAYBACK_ACTION_STOP");
}
}
......@@ -124,7 +124,7 @@ std::string CVATextToSpeechSignalSource::GetStateString() const
void CVATextToSpeechSignalSource::Reset()
{
VA_WARN("CVATextToSpeechSignalSource", "Reset is not yet implemented.");
VA_WARN("TextToSpeechSignalSource", "Reset is not yet implemented.");
}
CVAStruct CVATextToSpeechSignalSource::GetParameters( const CVAStruct& oArgs ) const
......@@ -134,7 +134,7 @@ CVAStruct CVATextToSpeechSignalSource::GetParameters( const CVAStruct& oArgs ) c
#ifndef VACORE_WITH_TTS_SIGNAL_SOURCE
oRet[ "error" ] = "TTS signal sources not activated in your VACore";
VA_WARN( "CVATextToSpeechSignalSource", "TTS signal sources was requested but is not activated in your VACore" );
VA_WARN( "TextToSpeechSignalSource", "TTS signal sources was requested but is not activated in your VACore" );
#else
/*
......@@ -146,7 +146,7 @@ CVAStruct CVATextToSpeechSignalSource::GetParameters( const CVAStruct& oArgs ) c
auto it = m_Visemes.find(id);
if (it == m_Visemes.end()){
VA_WARN("CVATextToSpeechSignalSource", "Visemes for requested id \"" + id + "\" do not exist.");
VA_WARN("TextToSpeechSignalSource", "Visemes for requested id \"" + id + "\" do not exist.");
oRet["visemes"] = "";
return oRet;
}
......@@ -187,12 +187,12 @@ CVAStruct CVATextToSpeechSignalSource::GetParameters( const CVAStruct& oArgs ) c
if (oArgs.IsEmpty())
{
oRet["info"] = "see VATextToSpeechSignalSource.h documentation for SetParameters() for usage information";
VA_INFO("CVATextToSpeechSignalSource", "GetParameters called with empty argument, see VATextToSpeechSignalSource.h documentation for SetParameters() for usage information.");
VA_INFO("TextToSpeechSignalSource", "GetParameters called with empty argument, see VATextToSpeechSignalSource.h documentation for SetParameters() for usage information.");
return oRet;
}
oRet["info"] = "Unknown parameters! see VATextToSpeechSignalSource.h documentation for SetParameters() for usage information";
VA_INFO("CVATextToSpeechSignalSource", "Unknonwn parameters: " + oArgs.ToString());
VA_INFO("TextToSpeechSignalSource", "Unknonwn parameters: " + oArgs.ToString());
#endif
return oRet;
......@@ -201,7 +201,7 @@ CVAStruct CVATextToSpeechSignalSource::GetParameters( const CVAStruct& oArgs ) c
void CVATextToSpeechSignalSource::SetParameters( const CVAStruct& oParams )
{
#ifndef VACORE_WITH_TTS_SIGNAL_SOURCE
VA_WARN( "CVATextToSpeechSignalSource", "TTS signal sources was requested but is not activated in your VACore" );
VA_WARN( "TextToSpeechSignalSource", "TTS signal sources was requested but is not activated in your VACore" );
#else
/*
......@@ -210,7 +210,7 @@ void CVATextToSpeechSignalSource::SetParameters( const CVAStruct& oParams )
if (oParams.HasKey("prepare_text")){
if (!oParams["prepare_text"].IsString()){
VA_WARN("CVATextToSpeechSignalSource", "No Text given!");
VA_WARN("TextToSpeechSignalSource", "No Text given!");
return;
}
std::string sText = oParams["prepare_text"];
......@@ -227,7 +227,7 @@ void CVATextToSpeechSignalSource::SetParameters( const CVAStruct& oParams )
std::string id = "tmp";
if (!oParams.HasKey("id") || !oParams["id"].IsString()){
if (!direct_playback){
VA_WARN("CVATextToSpeechSignalSource", "No id is given for the prepare speech request, the user application has to give an unique id.");
VA_WARN("TextToSpeechSignalSource", "No id is given for the prepare speech request, the user application has to give an unique id.");
return;
}
}
......@@ -235,7 +235,7 @@ void CVATextToSpeechSignalSource::SetParameters( const CVAStruct& oParams )
id = oParams["id"];
if (m_Visemes.find(id) != m_Visemes.end() && id.compare("tmp")!=0){
VA_WARN("CVATextToSpeechSignalSource", "The id \""+id+"\" was used before, make sure you do not overwrite anything still needed.");
VA_WARN("TextToSpeechSignalSource", "The id \""+id+"\" was used before, make sure you do not overwrite anything still needed.");
}
......@@ -257,7 +257,7 @@ void CVATextToSpeechSignalSource::SetParameters( const CVAStruct& oParams )
#endif
CPRC_abuf* buf = CPRCEN_engine_channel_speak(TTSEngine::getInstance().getEngine(), chan, sText.c_str(), sText.length(), true);
if (buf == NULL){
VA_WARN("CVATextToSpeechSignalSource", "Cannot create an audio file, probably no voice is available!");
VA_WARN("TextToSpeechSignalSource", "Cannot create an audio file, probably no voice is available!");
return;
}
......@@ -292,7 +292,7 @@ void CVATextToSpeechSignalSource::SetParameters( const CVAStruct& oParams )
SetParameters(oParams_play);
}
VA_INFO("CVATextToSpeechSignalSource", "VA creatted audio, to say \"" + sText + "\", with id: \"" + id + "\"");
VA_INFO("TextToSpeechSignalSource", "VA creatted audio, to say \"" + sText + "\", with id: \"" + id + "\"");
return;
}
......@@ -309,7 +309,7 @@ void CVATextToSpeechSignalSource::SetParameters( const CVAStruct& oParams )
if (oParams["play_speech"].IsString())
id = oParams["play_speech"];
else
VA_WARN("CVATextToSpeechSignalSource", "play_speech does not hold an identificator for the speech to be played, use \"tmp\"");
VA_WARN("TextToSpeechSignalSource", "play_speech does not hold an identificator for the speech to be played, use \"tmp\"");
//pAudioFile = new CVAAudiofileSignalSource("D:/work/tts.wav", GetSampleRate(), GetBlocklength());
//pAudioFile->SetIsLooping(true);
......@@ -326,7 +326,7 @@ void CVATextToSpeechSignalSource::SetParameters( const CVAStruct& oParams )
auto it = m_AudioSampleFrames.find(id);
if (it == m_AudioSampleFrames.end() || it->second==NULL){
VA_WARN("CVATextToSpeechSignalSource", "There is no audio created for id: \"" + id + "\"");
VA_WARN("TextToSpeechSignalSource", "There is no audio created for id: \"" + id + "\"");
return;
}
......@@ -349,12 +349,12 @@ void CVATextToSpeechSignalSource::SetParameters( const CVAStruct& oParams )
m_Visemes[id] = "";
}
VA_INFO("CVATextToSpeechSignalSource", "Play TTS for id: \"" + id + "\"");
VA_INFO("TextToSpeechSignalSource", "Play TTS for id: \"" + id + "\"");
return;
}
VA_WARN( "CVATextToSpeechSignalSource", "Could not interpret parameters for text-to-speech signal source setter method, use empty getter for help." );
VA_WARN( "TextToSpeechSignalSource", "Could not interpret parameters for text-to-speech signal source setter method, use empty getter for help." );
#endif
}
......@@ -376,12 +376,12 @@ void CVATextToSpeechSignalSource::VisemeProcessing(CPRC_abuf * abuf, void * user
float endTime = 0.0f;
if (abuf == NULL){
VA_WARN("CVATextToSpeechSignalSource", "The buffer is NULL, cannot extract visemes!");
VA_WARN("TextToSpeechSignalSource", "The buffer is NULL, cannot extract visemes!");
return;
}
if (userdata == NULL){
VA_WARN("CVATextToSpeechSignalSource", "The userdata viseme string is NULL, cannot extract visemes!");
VA_WARN("TextToSpeechSignalSource", "The userdata viseme string is NULL, cannot extract visemes!");
return;
}
......@@ -397,7 +397,7 @@ void CVATextToSpeechSignalSource::VisemeProcessing(CPRC_abuf * abuf, void * user
end = CPRC_abuf_trans_end(trans); /* End time in seconds */
label = CPRC_abuf_trans_name(trans); /* Label, type dependent */
if (CPRC_abuf_trans_type(trans) == CPRC_ABUF_TRANS_PHONE) {
//VA_INFO("CVATextToSpeechSignalSource", "Phoneme: " + std::to_string(start) + " " + std::to_string(end) + " " + label);
//VA_INFO("TextToSpeechSignalSource", "Phoneme: " + std::to_string(start) + " " + std::to_string(end) + " " + label);
//visemes_time->first.append( "\t<viseme start=\"" + to_string_with_precision(start+visemes_time->second) + "\" articulation=\"1\" type=\"" + PhonemeToViseme(label) + "\" />\n");
std::string viseme = std::string("\t<lips ")
+ "viseme=\"" + TTSEngine::getInstance().PhonemeToViseme(label) + "\" "
......@@ -411,13 +411,13 @@ void CVATextToSpeechSignalSource::VisemeProcessing(CPRC_abuf * abuf, void * user
endTime = end;
}
/*else if (CPRC_abuf_trans_type(trans) == CPRC_ABUF_TRANS_WORD) {
VA_INFO("CVATextToSpeechSignalSource", "Word: " + std::to_string(start) + " " + std::to_string(end) + " " + label);
VA_INFO("TextToSpeechSignalSource", "Word: " + std::to_string(start) + " " + std::to_string(end) + " " + label);
}
else if (CPRC_abuf_trans_type(trans) == CPRC_ABUF_TRANS_MARK) {
VA_INFO("CVATextToSpeechSignalSource", "Marker: " + std::to_string(start) + " " + std::to_string(end) + " " + label);
VA_INFO("TextToSpeechSignalSource", "Marker: " + std::to_string(start) + " " + std::to_string(end) + " " + label);
}*/
else if (CPRC_abuf_trans_type(trans) == CPRC_ABUF_TRANS_ERROR) {
VA_INFO("CVATextToSpeechSignalSource", "ERROR: could not retrieve transcription at "+ std::to_string(i));
VA_INFO("TextToSpeechSignalSource", "ERROR: could not retrieve transcription at "+ std::to_string(i));
}
}
data->lastEnd += endTime;
......@@ -444,11 +444,11 @@ void CVATextToSpeechSignalSource::TTSEngine::Init(){
SetAdditionalVoicePath(CEREVOICE_VOICES_PATH);//this is defined by the FindVCereVoice cmake script, but cannot be used e.g. for deployed VAServers
for (std::string voices_path : m_VoicePaths){
VA_INFO("CVATextToSpeechSignalSource", "CereVoice voices are searched in \"" + voices_path + "\"");
VA_INFO("TextToSpeechSignalSource", "CereVoice voices are searched in \"" + voices_path + "\"");
VistaFileSystemDirectory voicesDir(voices_path);
if (!voicesDir.Exists()){
VA_WARN("CVATextToSpeechSignalSource", "The voices directory does not exist!");
VA_WARN("TextToSpeechSignalSource", "The voices directory does not exist!");
continue;
}
......@@ -460,7 +460,7 @@ void CVATextToSpeechSignalSource::TTSEngine::Init(){
std::string licence_file = name.substr(0, suffix_pos) + ".lic";
VistaFileSystemFile licenseFile(licence_file);
if (!licenseFile.Exists()){
VA_WARN("CVATextToSpeechSignalSource", "The associated license file ("+licence_file+") does not exist, cannot load voice");
VA_WARN("TextToSpeechSignalSource", "The associated license file ("+licence_file+") does not exist, cannot load voice");
continue;
}
......@@ -468,9 +468,10 @@ void CVATextToSpeechSignalSource::TTSEngine::Init(){
continue; //so we do not load the same voice multiple times if it is in multiple directories in which we search
CPRCEN_engine_load_voice(m_pTTSEngine, licence_file.c_str(), NULL, name.c_str(), CPRC_VOICE_LOAD);
VA_INFO("CVATextToSpeechSignalSource", "Loaded voice \"" + name + "\"");
m_loadedVoices.insert((*it)->GetLocalName());
VA_INFO("TextToSpeechSignalSource", "Loaded voice \"" + name + "\"");
m_loadedVoices.insert((*it)->GetLocalName());
}
}
......@@ -478,7 +479,7 @@ void CVATextToSpeechSignalSource::TTSEngine::Init(){
m_sampleRate = -1.0;
int num_voices = CPRCEN_engine_get_voice_count(getEngine());
if (num_voices == 0){
VA_WARN("CVATextToSpeechSignalSource", "No voices were loaded!!!!! TTS will not work!!!!!");
VA_WARN("TextToSpeechSignalSource", "No voices were loaded!!!!! TTS will not work!!!!!");
}
for (int i = 0; i < num_voices; i++) {
std::string strSamplerate = CPRCEN_engine_get_voice_info(getEngine(), i, "SAMPLE_RATE");
......@@ -486,7 +487,7 @@ void CVATextToSpeechSignalSource::TTSEngine::Init(){
if (m_sampleRate < 0.0)
m_sampleRate = rate;
if (rate != m_sampleRate)
VA_WARN("CVATextToSpeechSignalSource", "Voices with different sample rates are used namely "+std::to_string(rate)+" and "+std::to_string(m_sampleRate));
VA_WARN("TextToSpeechSignalSource", "Voices with different sample rates are used namely "+std::to_string(rate)+" and "+std::to_string(m_sampleRate));
}
SetupPhonemeMapping();
......@@ -518,13 +519,13 @@ std::string CVATextToSpeechSignalSource::TTSEngine::PhonemeToViseme(std::string
auto it = m_phonemeToId.find(phoneme);
if (it == m_phonemeToId.end()){
VA_WARN("CVATextToSpeechSignalSource", "There exists no mapping for the phoneme: \"" + phoneme + "\"");
VA_WARN("TextToSpeechSignalSource", "There exists no mapping for the phoneme: \"" + phoneme + "\"");
return phoneme;
}
auto it2 = m_idToViseme.find(it->second);
if (it2 == m_idToViseme.end()){
VA_WARN("CVATextToSpeechSignalSource", "There exists no mapping for viseme id: " + it->second);
VA_WARN("TextToSpeechSignalSource", "There exists no mapping for viseme id: " + it->second);
return phoneme;
}
return it2->second;
......
......@@ -192,7 +192,7 @@ void CVAHRIRDatasetDAFF2D::GetHRIRByIndex(ITASampleFrame* psfDest,
assert( m_pContent );
if (psfDest->channels() > m_pReader->getProperties()->getNumberOfChannels())
VA_EXCEPT1(std::string("CVAHRIRDatasetDAFF2D::GetHRIRByIndex - Target SampleFrame contains more channels than HRIR database"));
VA_EXCEPT1(std::string("HRIRDatasetDAFF2D::GetHRIRByIndex - Target SampleFrame contains more channels than HRIR database"));
int iResult;
for (int iChan=0;iChan<psfDest->channels();iChan++)
......
......@@ -90,7 +90,7 @@ int CVAHRIRManager::LoadHRIR(const std::string& sFilename, const std::string& sN
bool CVAHRIRManager::FreeHRIR( int iID )
{
VA_VERBOSE( "VAHRIRManager", "Freeing HRIR with ID " << iID );
VA_VERBOSE( "HRIRManager", "Freeing HRIR with ID " << iID );
// Prfen ob die ID gltig ist
int iRefCount = m_ocHRIR.GetRefCount( iID );
......@@ -98,7 +98,7 @@ bool CVAHRIRManager::FreeHRIR( int iID )
if( iRefCount != 0 )
{
// Noch Referenzen vorhanden oder ungltige ID (-1)
VA_VERBOSE( "VAHRIRManager", "FreeHRIR failed, HRIR still in use by a user or invalid ID " << iID << ")" );
VA_VERBOSE( "HRIRManager", "FreeHRIR failed, HRIR still in use by a user or invalid ID " << iID << ")" );
return false;
}
......@@ -107,7 +107,7 @@ bool CVAHRIRManager::FreeHRIR( int iID )
delete pHRIR;
m_ocHRIR.Remove( iID );
VA_VERBOSE( "VAHRIRManager", "HRIR successfully cleared" );
VA_VERBOSE( "HRIRManager", "HRIR successfully cleared" );
return true;
}
......
/*
*
* VVV VVV A
* VVV VVV AAA Virtual Acoustics
* VVV VVV AAA Real-time auralization for Virtual Reality
* VVV VVV AAA
* VVVVVV AAA (c) Copyright Institute for Technical Acoustics (ITA)
* VVVV AAA RWTH Aachen (http://www.akustik.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*
* File: VAAmbisonicsFreefieldAudioRenderer.h
*
* Purpose: Ambisonics free field audio renderer implementation
*
* Author(s): Frank Wefers (Frank.Wefers@akustik.rwth-aachen.de)
* Jonas Stienen (jst@akustik.rwth-aachen.de)
* Michael Kohnen (mko@akustik.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*/
*
* VVV VVV A
* VVV VVV AAA Acoustics
* VVV VVV AAA Real-time auralisation for reality
* VVV VVV AAA
* VVVVVV AAA (c) Copyright Institut fr Technische Akustik (ITA)
* VVVV AAA RWTH Aachen (http://www.akustik.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*
* Datei: VAAmbisonicsFreeFieldAudioRenderer.h
*
* Zweck: Ambisonics free field audio renderer implementation
*
* Autor(en): Michael Kohnen (mko@akustik.rwth-aachen.de)
* Jonas Stienen (jst@akustik.rwth-aachen.de)
*
*
* ---------------------------------------------------------------------------------
*/
// $Id: $
#ifndef __VA_AMBISONICSFREEFIELDAUDIORENDERER__
#define __VA_AMBISONICSFREEFIELDAUDIORENDERER__
#if ( VACORE_WITH_RENDERER_AMBISONICS_FREE_FIELD == 1 )
#if( VACORE_WITH_RENDERER_AMBISONICS_FREE_FIELD == 1 )
// VA includes
#include "../../../Motion/VAMotionModelBase.h"
#include "../../../Motion/VASampleAndHoldMotionModel.h"
#include "../../../Motion/VASharedMotionModel.h"
#include "../../VAAudioRenderer.h"
#include "../../VAAudioRendererRegistry.h"
#include "../../../Scene/VAScene.h"
#include <VAObject.h>
#include <VABaseDefinitions.h>
#include <VACore.h>
#include <VAObjectPool.h>
#include "../../../VASourceListenerMetrics.h"
#include "../../../VAHardwareSetup.h"
#include "../../../VACoreImpl.h"
// ITA includes
#include <ITABufferedAudioFileWriter.h>
#include <ITADataSourceRealization.h>
#include <ITASampleFrame.h>
#include <ITAStringUtils.h>
// 3rdParty includes
#include <tbb/concurrent_queue.h>
#include <ITAVariableDelayLine.h>
#include <ITASampleBuffer.h>
......@@ -48,101 +57,333 @@
#include <list>
#include <set>
// External forwards
class CVACoreImpl;
class ITAFileDatasource;
// VA forwards
class CVASceneState;
class CVASceneStateDiff;
class CVASignalSourceManager;
class CVASoundSourceDesc;
//! Ambisonics audio renderer implementation
class CVAAmbisonicsFreefieldAudioRenderer : public IVAAudioRenderer, ITADatasourceRealizationEventHandler
// Internal forwards
class CVAAFFSoundPath;
class CVAAFFSoundPathFactory;
//! Ambisonics Freefield Audio Renderer
/**
* The Ambisonics freefield audio renderer implements sound propagation with
* no propagation disturbance in the medium, i.e. by reflecting surfaces.
*
* It accounts for
* - source directivity
* - medium propagation delay
* - medium absorption over distance
* - distance gain / 1-by-r law / spherical spreading attenuation
* - Doppler shifts (source and listener movement in medium of finite speed of sound)
*