VACore issueshttps://git.rwth-aachen.de/ita/VACore/-/issues2017-08-14T17:03:24+02:00https://git.rwth-aachen.de/ita/VACore/-/issues/1Reset does not clear motion history2017-08-14T17:03:24+02:00Dipl.-Ing. Jonas StienenReset does not clear motion historyCop&Paste from FPA bug report:
Hier scheint noch Information über die Quellposition/-orientierung von SoundSources übrigzubleiben. Setzt man die Szene zurück und erzeugt nochmal SoundSources (gleiche ID in VA) (.createSoundSource), werd...Cop&Paste from FPA bug report:
Hier scheint noch Information über die Quellposition/-orientierung von SoundSources übrigzubleiben. Setzt man die Szene zurück und erzeugt nochmal SoundSources (gleiche ID in VA) (.createSoundSource), werden diese auf die ursprünglichen Positionen/Orientierungen gesetzt (nicht auf default Position (0,0,0), Orientierung (v=[0,0,-1],u=[0,1,0]).Dipl.-Ing. Jonas StienenDipl.-Ing. Jonas Stienenhttps://git.rwth-aachen.de/ita/VACore/-/issues/2AudiofileSignalSourcePlaybackAction unintended inter-connection between diffe...2017-08-14T17:03:24+02:00Dipl.-Ing. Jonas StienenAudiofileSignalSourcePlaybackAction unintended inter-connection between different sound sources and signal sourcesC&P from FAP bug report mail:
```matlab
% Sources
S1 = a.createSoundSource('Source 1');
S2 = a.createSoundSource('Source 2');
S3 = a.createSoundSource('Source 3');
S1ori = itaOrientation(1);
S1ori.rpy_deg = [0,0,-90];
% S2ori...C&P from FAP bug report mail:
```matlab
% Sources
S1 = a.createSoundSource('Source 1');
S2 = a.createSoundSource('Source 2');
S3 = a.createSoundSource('Source 3');
S1ori = itaOrientation(1);
S1ori.rpy_deg = [0,0,-90];
% S2ori = itaOrientation(1);
% S2ori.rpy_deg = [0,0,180];
S3ori = itaOrientation(1);
S3ori.rpy_deg = [0,0,90];
a.setSoundSourcePositionOrientationYPR(S1, [-2 1.2 0], [S1ori.yaw_deg S1ori.pitch_deg S1ori.roll_deg])
a.setSoundSourcePositionOrientationYPR(S2, [0 1.2 -2], [S2ori.yaw_deg S2ori.pitch_deg S2ori.roll_deg])
a.setSoundSourcePositionOrientationYPR(S3, [2 1.2 0], [S3ori.yaw_deg S3ori.pitch_deg S3ori.roll_deg])
X1 = a.createAudiofileSignalSource(fullfile(deployDir,'\data\Audiofiles\Boing.wav'));
% X2 = a.createAudiofileSignalSource(fullfile(deployDir,'\data\Audiofiles\Feddich.wav'));
X3 = a.createAudiofileSignalSource(fullfile(deployDir,'\data\Audiofiles\Gehtab.wav'));
a.setSoundSourceSignalSource(S1,X1)
% a.setSoundSourceSignalSource(S2,X2)
a.setSoundSourceSignalSource(S3,X3)
a.setAudiofileSignalSourcePlaybackAction(X1, 'PLAY')
% a.setAudiofileSignalSourcePlaybackAction(X2, 'PLAY')
a.setAudiofileSignalSourcePlaybackAction(X3, 'PLAY')
```
-------------------------------
<b>a.setAudiofileSignalSourcePlaybackAction(X3, 'PLAY') funktioniert nur, wenn a.setSoundSourcePositionOrientationYPR(S2, [0 1.2 -2], [S2ori.yaw_deg S2ori.pitch_deg S2ori.roll_deg]) ausgeführt wird.</b>
https://git.rwth-aachen.de/ita/VACore/-/issues/3Clipping somewhere along the audio chain2017-08-14T17:03:24+02:00Dipl.-Ing. Jonas StienenClipping somewhere along the audio chainToo loud sound source? Occurs in binaural renderingToo loud sound source? Occurs in binaural renderingDipl.-Ing. Jonas StienenDipl.-Ing. Jonas Stienenhttps://git.rwth-aachen.de/ita/VACore/-/issues/4Single shot artifact on generic path init2017-08-14T17:03:24+02:00Dipl.-Ing. Jonas StienenSingle shot artifact on generic path initWhen setting a SampleFrame for a generic path the output plays a loud block of probably uninitialised samplesWhen setting a SampleFrame for a generic path the output plays a loud block of probably uninitialised samplesDipl.-Ing. Jonas StienenDipl.-Ing. Jonas Stienenhttps://git.rwth-aachen.de/ita/VACore/-/issues/5CallModule is not snychronized with core thread2017-08-14T17:03:24+02:00Dipl.-Ing. Jonas StienenCallModule is not snychronized with core threadCalling a core method that uses the event mechanism and directly calling CallModule that tries to access changed values will eventually fail because it overtakes the core thread changes. Synchronisation required.Calling a core method that uses the event mechanism and directly calling CallModule that tries to access changed values will eventually fail because it overtakes the core thread changes. Synchronisation required.Dipl.-Ing. Jonas StienenDipl.-Ing. Jonas Stienenhttps://git.rwth-aachen.de/ita/VACore/-/issues/9Reset of managed audio signal sources during audio streaming crashes occasion...2017-12-06T11:46:11+01:00Dipl.-Ing. Jonas StienenReset of managed audio signal sources during audio streaming crashes occasionallyWith a lot of signal sources active, a reset of the core crashes. During audio stream processing, a non-existing managed dynamic signal source is accessed, which probably has been removed from the internal maps without acknowledge from a...With a lot of signal sources active, a reset of the core crashes. During audio stream processing, a non-existing managed dynamic signal source is accessed, which probably has been removed from the internal maps without acknowledge from audio thread.Dipl.-Ing. Jonas StienenDipl.-Ing. Jonas Stienenhttps://git.rwth-aachen.de/ita/VACore/-/issues/10Portaudio does not work if JACK is installed2021-05-03T11:56:47+02:00Philipp SchäferPortaudio does not work if JACK is installedIf JACK is installed on the machine using VA, portaudio does not work. Using a Portaudio build with JACK support might fix this problem.If JACK is installed on the machine using VA, portaudio does not work. Using a Portaudio build with JACK support might fix this problem.https://git.rwth-aachen.de/ita/VACore/-/issues/11[OutdoorNoiseRenderer] Simulation output artifacts when performing TemporalV...2021-10-01T13:53:27+02:00João Garrett Fatela[OutdoorNoiseRenderer] Simulation output artifacts when performing TemporalVariations turbulence filtering**BRANCH:** https://git.rwth-aachen.de/ita/VACore/-/tree/feature/outdoornoise_with_turbulence
## Objective and introduction:
Implementation of the `IVATurbulenceFilter` and its child classes (`CVATemporalVariations` and `CVAHighShelfF...**BRANCH:** https://git.rwth-aachen.de/ita/VACore/-/tree/feature/outdoornoise_with_turbulence
## Objective and introduction:
Implementation of the `IVATurbulenceFilter` and its child classes (`CVATemporalVariations` and `CVAHighShelfFilter`) in the `OutdoorNoiseRenderer` (ON) paradigm.
This was done in order to introduce the possibility of simulating atmospheric turbulence effects in a given simulation using this renderer.
The IVATurbulenceFilter interface and child classes were originally designed for the `AirTrafficNoiseRenderer` (ATN).
The ON renderer had already a framework prepared for the possibility of adding further filtering to the simulation. This made the implementation a fairly simple process.
## Output and issues:
- _HighShelf filtering_ -> The output features filtering as expected, similarly to what was obtained using the ATN renderer: a somewhat plausible result, with some roughness due to the sudden filter change.
This roughness is seen as a fixable issue, but it wasn't approached since it wasn't seen as a priority at the time of this implementation. It is also an issue observed in the ATN renderer.
- _TemporalVariations filtering_ -> The output filtering is also in line with the results from the ATN renderer. Some artifacts were observed: a regular "clicking" noise persists throughout the whole audio.
## Isolating the issue:
It became important to determine whether the issue sourced from `IVATurbulenceFilter` and its child classes. The filter sets generated by the turbulence filtering classes were recorded over the simulation and compared. The filter sets recorded in both renderers were identical, for each of the respective filtering methods.
Then, both renderers were used to process data from the same aircraft trajectory and receiver position. Doppler delays and spreading loss effects were taken out of the simulation, in order to better isolate the issue.
The "clicking" artifacts remained for the `TemporalVariations` filtering with ON rendering.
## Next steps:
At the moment, we believe the problem could be related to the way IIR filter coefficients are being generated in this renderer.
This somewhat sensitive process could be raising issues with the generated `TemporalVariations` turbulence filters.
A possible way to either solve or isolate this problem would be to import the IIR filter generation method from the ATN renderer into the ON renderer.
This seems reasonable, since no artifacts are found when rendering via ATN renderer. Nevertheless, there is still no guarantee that this would solve the issue.
Furthermore, the two renderers generate IIR filtering in a very diferent fashion: the classes and data structures employed in each renderer differ greatly; hence, the previously described approach is rather complex and was not yet followed due to time constraints.https://git.rwth-aachen.de/ita/VACore/-/issues/12[AirTrafficNoiseRenderer] High shelf turbulence filtering implementation2021-10-01T14:10:44+02:00João Garrett Fatela[AirTrafficNoiseRenderer] High shelf turbulence filtering implementation**BRANCH:** https://git.rwth-aachen.de/ita/VACore/-/tree/feature/highshelf_turbulence_filter
## Introduction
### Motivation:
`AirTrafficNoiseRenderer` needs a way to simulate the effects of atmospheric turbulence (namely wind/temperatur...**BRANCH:** https://git.rwth-aachen.de/ita/VACore/-/tree/feature/highshelf_turbulence_filter
## Introduction
### Motivation:
`AirTrafficNoiseRenderer` needs a way to simulate the effects of atmospheric turbulence (namely wind/temperature eddies) on the propagated signal. In the current version, the renderer amplitude-modulates the signal by convolving it with different magnitude spectrum filters over time.
Originally for this renderer, such effects were being simulated via `CVATemporalVariations` object, which generates a magnitude filter for each block in the processing pipeline. The filters are generated by selecting filtering data from a large set of filter coefficients. These coefficients were gathered at a given measurement and stored inside this class. The filters are generated and processed as third-octave band magnitude spectra.
Since this class relies on the constant data of a specific measurement, it was important to find a way to simulate turbulence effects in a more versatile way, specific to the data of each simulation.
### Requirements:
The development of a new turbulence filtering class was in order. This new class should feature:
- a physics-based model;
- simulation-specific model (i.e. depending on simulation-specific variables like source and receiver positions);
- turbulence filter generation in the same format as `CVATemporalVariations`. This is essential to allow the user to choose between turbulence filtering methods when using this renderer.
## `CVAHighShelfTurbulenceFilter`
### Developing the new turbulence filtering method:
Such a method was implemented in class `CVAHighShelfTurbulenceFilter`. This class follows the model proposed in [1] (see equations (7) and (8)).
`CVAHighShelfTurbulenceFilter` generates high-shelf magnitude filters. These filters are time-variant with a pseudo-random normal gain distribution. The shape and distribution of such filters are dependent on two variables:
- _The standard deviation in dB_: defines the standard deviation of the distribution. The distribution mean is also derived from this variable.
- _Source-receiver distance_: is a factor in defining the filter’s cutoff frequency.
Additionally, the current `CVAHighShelfTurbulenceFilter` admits two different constructors:
- One which updates the high-shelf filter at each processing block;
- One which updates the high-shelf filter at a given update frequency [Hz]. Such update frequency is only approximated, as it depends on the block size and sampling rate of the audio processing. There’s also a maximum update rate which corresponds to the audio block update rate.
In the current `AirTrafficNoiseRenderer` version, these variables are by default:
- _Standard deviation_: 3.0 dB (after what is described in the paper)
- _Source-receiver distance_: dependent on source and receiver positions and trajectories. In the cited paper, this is also the data that was used.
- _Filter update rate_: 10 Hz.
These values can be changed only by changing the source code.
### Using `CVAHighShelfTurbulenceFilter` objects:
**Relevant variables:**
- `float m_fStandardDevDB`: filter distribution standard deviation in dB
- `float m_fMeanDB`: filter distribution mean in dB
- `float m_fSourceReceiverDistance`: direct distance between sound source and receiver in meters.
- `double dFilterUpdateRate`: filter update rate in Hz.
**Available constructors:**
- `CVAHighShelfTurbulenceFilter(float fStdDevDB, float fSourceReceiverDistance)`; generates a new filter at every audio block.
- `CVAHighShelfTurbulenceFilter(float fStdDevDB, float fSourceReceiverDistance, double dSamplingRate, int iBlockSize, double dFilterUpdateRate)`; generates filters at a given (approximated) rate.
**Useful functions:**
- `virtual void GetMagnitudes(ITABase::CThirdOctaveMagnitudeSpectrum& oDest)`; “gets” filter spectrum data onto oDest inoutput (destination CThirdOctaveMagnitudeSpectrum object).
- `void SetStandardDeviationDB(float fStdDev)`;
- `void SetSourceReceiverDistance(float fDistance)`;
- `float GetSourceReceiverDistance() const`;
- `float GetStandardDeviationDB() const`;
- `float GetMeanDB() const`;
## Choosing turbulence filtering method in `AirTrafficNoiseRenderer`:
In order to make both turbulence filtering methods available, an interface `IVATurbulenceFiltering` was developed, with `CVATemporalVariations` and `CVAHighShelfTurbulenceFilter` as its child classes.
To give the user a choice between turbulence filtering methods, the field _TurbulenceFilter_ was added to the configuration file options for the ATN renderer.
This field admits two inputs:
- _temporalvariations_ – respective to `CVATemporalVariations`;
- _highshelf_ – corresponding to the use of `CVAHighShelfTurbulenceFilter`.
In case the field is not explicit in the configuration file, _temporalvariations_ is selected by default. Any other input will throw an `ITA_EXCEPT1(INVALID_PARAMETER)` error.
### Output and issues:
`CVAHighShelfTurbulenceFilter` is currently outputting a fairly plausible audio result. However, the audio is considered quite “rough”, due to sudden filter changes. This is thought to be a consequence of the random filter distribution.
### To do:
A way of smoothing out the previously described “jumps” in filtering gain is due.
## Sources:
[1] Pieren, Reto, et al. "Improving future low-noise aircraft technologies using experimental perception-based evaluation of synthetic flyovers". _Science of the Total Environment_ 692 (2019): 68-81.https://git.rwth-aachen.de/ita/VACore/-/issues/14Improve config file search2022-01-05T16:11:09+01:00Pascal PalendaImprove config file searchImprove the search for configuration files, so that it works both from the current working directory and from the bin directory.
Maybe this can be done via a makro path in the config ini file.
If this makro is used, paths are relative t...Improve the search for configuration files, so that it works both from the current working directory and from the bin directory.
Maybe this can be done via a makro path in the config ini file.
If this makro is used, paths are relative to this path (e.g. the bin dir) otherwise relative to the current working directory.
It may also be useful/required to be able to determine the current executable location.https://git.rwth-aachen.de/ita/VACore/-/issues/15CMake: configuration ini file improvements2022-01-05T16:18:15+01:00Pascal PalendaCMake: configuration ini file improvementsImprove the behaviour of the copying/install of the configuration files.
- The dev path should not exist in the install
- When installing, the VACore.ini should be re-configured before installation.Improve the behaviour of the copying/install of the configuration files.
- The dev path should not exist in the install
- When installing, the VACore.ini should be re-configured before installation.https://git.rwth-aachen.de/ita/VACore/-/issues/16VAPoolObject Smart Pointer2022-04-19T10:57:10+02:00Pascal PalendaVAPoolObject Smart PointerAdapt the VAPoolObject(Factory) to use smart pointer for its API.
With this, it would be easier to use the objects form the pool since the references would not have to be incremented/decremented.
It might be possible to implement this v...Adapt the VAPoolObject(Factory) to use smart pointer for its API.
With this, it would be easier to use the objects form the pool since the references would not have to be incremented/decremented.
It might be possible to implement this via the custom destructors for std::shared_ptr, see [here](https://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr) and for an example [here](https://www.cppstories.com/2016/04/custom-deleters-for-c-smart-pointers/).
Otherwise, a custom pool smart pointer might be necessary that automatically counts its references.
However, it might be necessary to implement a version with owning an non-owning pointers.https://git.rwth-aachen.de/ita/VACore/-/issues/17LowFrequencyMixer revision2022-04-28T10:35:33+02:00Philipp SchäferLowFrequencyMixer revisionThe ALL option just for MixingChannels parameter just seems to use channel 1. So it is not actually mixing the channels.The ALL option just for MixingChannels parameter just seems to use channel 1. So it is not actually mixing the channels.https://git.rwth-aachen.de/ita/VACore/-/issues/18Test BinauralMixdown2022-04-29T08:52:46+02:00Philipp SchäferTest BinauralMixdownUsing VBAP together with this mixdown did not seem to workUsing VBAP together with this mixdown did not seem to workhttps://git.rwth-aachen.de/ita/VACore/-/issues/19Extract Ambisonics decoder2022-04-29T08:52:46+02:00Philipp SchäferExtract Ambisonics decoderMove the ambisonics decoding to a separate function so that it can be used by HOA and BinauralAmbisonicsMixdown.Move the ambisonics decoding to a separate function so that it can be used by HOA and BinauralAmbisonicsMixdown.https://git.rwth-aachen.de/ita/VACore/-/issues/20Create class structure for BinauralMixdown and AmbisonicsBinauralMixdown2022-04-29T08:52:46+02:00Philipp SchäferCreate class structure for BinauralMixdown and AmbisonicsBinauralMixdownAmbisonicsBinauralMixdown is basically the same as BinauralMixdown but doing a decoding step before the mixdown.
Thus, AmbisonicsBinauralMixdown should be derived from BinauralMixdown or both should have the same base class.AmbisonicsBinauralMixdown is basically the same as BinauralMixdown but doing a decoding step before the mixdown.
Thus, AmbisonicsBinauralMixdown should be derived from BinauralMixdown or both should have the same base class.https://git.rwth-aachen.de/ita/VACore/-/issues/21Remove VACore.ini dev paths during install2022-04-28T11:24:55+02:00Philipp SchäferRemove VACore.ini dev paths during installWhen generating VACore.ini from the proto file, some dev search paths are added.
Those should be automatically removed during the install process.When generating VACore.ini from the proto file, some dev search paths are added.
Those should be automatically removed during the install process.https://git.rwth-aachen.de/ita/VACore/-/issues/22NCTC: remove unsed config parameters2022-04-28T11:51:10+02:00Philipp SchäferNCTC: remove unsed config parametersThere are many parameters which do not seem to be used in the VACore.ini. Maybe they should be fixed to their default values.
Also some parameters could be taken from Core config (e.g. homogeneous medium -> speed of sound).There are many parameters which do not seem to be used in the VACore.ini. Maybe they should be fixed to their default values.
Also some parameters could be taken from Core config (e.g. homogeneous medium -> speed of sound).https://git.rwth-aachen.de/ita/VACore/-/issues/23BinauralMixdown: fix listener position or at least add the option?2022-04-29T08:52:46+02:00Philipp SchäferBinauralMixdown: fix listener position or at least add the option?Compared to AmbisonicsBinauralDownmix, the listener position is not fixed but taken from the real-world position.
PSC: I don't see the point for a downmix. Typically, I would assume to sit in front of a screen wearing HPs and just rotate...Compared to AmbisonicsBinauralDownmix, the listener position is not fixed but taken from the real-world position.
PSC: I don't see the point for a downmix. Typically, I would assume to sit in front of a screen wearing HPs and just rotate my head. Would there actually be a case were I wear HPs but walk around (e.g. in the VR lab)?https://git.rwth-aachen.de/ita/VACore/-/issues/24Implement sound source enable and mute2022-05-11T11:48:56+02:00Pascal PalendaImplement sound source enable and muteSource (and receiver) have the option to be muted and/or enabled.
As far as I can see, this is not implemented except in the core interface and the binarual Free Field renderer.
This would be a very useful feature and should be implemen...Source (and receiver) have the option to be muted and/or enabled.
As far as I can see, this is not implemented except in the core interface and the binarual Free Field renderer.
This would be a very useful feature and should be implemented fully.