Software and APIs: Difference between revisions

From Sofaconventions
Jump to navigation Jump to search
Content deleted Content added
 
(29 intermediate revisions by 3 users not shown)
Line 1: Line 1:
== API for Matlab/Octave ==
== HDFView: Generic SOFA file viewer ==


SOFA files are based on [http://en.wikipedia.org/wiki/NetCDF netCDF-4]. NetCDF is based on [http://en.wikipedia.org/wiki/Hdf5 HDF5]. [http://www.hdfgroup.org/hdf-java-html/hdfview/ HDFView] is a generic viewer for [http://en.wikipedia.org/wiki/Hdf5 HDF5] files running in Java.
An application-programming interface (API) for Matlab and Octave.


Thus, SOFA files can be loaded and edited in the HDFView. This is a generic viewer; it allows browsing through all metadata and data in a numeric format only.
The releases are provided at [https://sourceforge.net/projects/sofacoustics/ Sourceforge]. The sources are stored at [https://github.com/sofacoustics/sofa github]


== SOFA Toolbox for Matlab/Octave (previously SOFA API Matlab/Octave) ==
If you have questions about this API, please send an email to the [mailto:sofacoustics-devel@lists.sourceforge.net mailing list]. You don't have to be a member of the mailing list to send a message to the list moderator.


SOFA Toolbox for Matlab/Octave aims at providing a basic interface for handling SOFA files in Matlab and Octave.
== API for C++ ==

The releases are provided at [https://ecosystem.sonicom.eu/tools/14 SONICOM Ecosystem] (versions on [https://sourceforge.net/projects/sofacoustics/ Sourceforge] are not updated anymore).
The sources are stored at [https://github.com/sofacoustics/sofa github]

== SOFA API for C++ ==


An API for C++ is available online. The version 1.0 is in accordance with the AES69-2015 standard.
An API for C++ is available online. The version 1.0 is in accordance with the AES69-2015 standard.
Line 15: Line 20:
If you have questions about this API, please send an email to the [mailto:sofacoustics-devel@lists.sourceforge.net mailing list]. You don't have to be a member of the mailing list to send a message to the list moderator.
If you have questions about this API, please send an email to the [mailto:sofacoustics-devel@lists.sourceforge.net mailing list]. You don't have to be a member of the mailing list to send a message to the list moderator.


== SOFAlizer: Demo of a SOFA-based audio engine in C++ ==
== pysofaconventions: SOFA API for Python ==

[https://github.com/andresperezlopez/pysofaconventions pysofaconventions] is a SOFA API for Python made by Andrés Pérez-López (UPF/Eurecat, Spain). It is a full implementation of SOFA including reading and writing SOFA files, taking the C++ API as a reference. It supports automatic installation via [https://pypi.org/project/pysofaconventions/ the pip system].

== pySOFA: Lightweight SOFA API for Python (read-only, FIR only) ==

[https://github.com/Jencke/pySOFA pySOFA] is a SOFA API for Python made by Jörg Encke (TUM, Munich). The API is currently read-only and implements the FIR Datatype. It was implemented for a specific project and only implements a limited amount of features. If you have question about this API, feel free to contact [https://github.com/Jencke Jörg Encke] or to submit [https://github.com/Jencke/pySOFA/issues an issue report].

== SOFASonix: Lightweight SOFA API for Python (read/write support, all conventions) ==

[https://github.com/OneBadNinja/SOFASonix SOFASonix] is another lightweight SOFA API for Python made by Ioseb Laghidze (ISVR, Southampton University, UK). It supports both reading and writing of SOFA files for the conventions defined at the time of writing. The API is a full implementation of SOFA with built-in validation-checks for compliance with each convention and a generator of convention templates for quickly creating SOFA files. SOFASonix runs on an SQLite database, making it backwards compatible with previous versions of each convention.

== sofar: Maybe the most complete Python package for the SOFA file format (read/write support) ==

[https://pypi.org/project/sofar/ sofar] is a SOFA API for Python made by Fabian Brinkmann. It supports both reading and writing of SOFA files. The API allows adding custom data & attributes to SOFA files and verifying its content with respect to the data type and shape.

== libmysofa: Lightweight SOFA API in C (reading) ==

[https://github.com/hoene/libmysofa Libmysofa] is a light weight C-library intended to read SOFA files for spatial rendering.

It hardly has any library dependencies and is suitable for embedded devices. It can read SOFA files and check whether the data comply the "SimpleFreeFieldHRIR" conventions. In addition, provides functions to look-up and interpolate the filters for a given orientation and to normalize the HRTFs to a reference level. It compiles unter Linux (CMake) and Windows (Visual Studio 2015).

== WebSofa: SOFA API in JavaScript ==

[https://github.com/CWBudde/WebSofa WebSofa] is slightly based on the libmysofa research for loading HDF files without much dependencies. However, in contrast to the low level c library this library is meant to be executed in a JavaScript environment (such as any modern browser or [https://nodejs.org/en/ Node.js]). So far it is not completed as it's just a hobby project, but it already allows to display properties of a given SOFA file. Try it out in the [https://rawgit.com/CWBudde/WebSofa/master/Demo/www/index.html online demo].

== sofa~: SOFA for [https://cycling74.com Max] ==

[https://github.com/APL-Huddersfield/SOFA-for-Max SOFA for Max] is a collection of objects made by Dale Johnson and Hyunkook Lee ([https://www.hud.ac.uk/apl/resources University of Huddersfield], UK) for using and creating SOFA files in [https://cycling74.com Max]. It is based on libsofa C++ API and enables SOFA files to be utilized in patches designed for spatial audio reproduction. The binaries are available for [ https://doi.org/10.5281/zenodo.3269271 MacOS and Windows].

== Application: IRCAM Spat ==
[https://forum.ircam.fr/projects/detail/spat/ Spat] is a software suite for sound spatialisation in real-time in music creation, post-production, and live performances. It supports SOFA for binaural rendering.

== Application: IRCAM Panoramix ==
[https://forum.ircam.fr/projects/detail/panoramix/ Panoramix] is a standalone application for spatial audio mixing and post-production. It supports SOFA for binaural rendering.

== Application: SOFAlizer plug-in for VLC player ==


SOFAlizer is a simple demo of an audio engine as a plugin for the [http://www.videolan.org/vlc/ VLC-Player].
SOFAlizer is a simple demo of an audio engine as a plugin for the [http://www.videolan.org/vlc/ VLC-Player].


Currently, Windows binaries of the VLC-Player 2.1 compiled with the SOFAlizer plugin are available. In order to use SOFAlizer:
Currently, Windows binaries of the VLC-Player 2.1 compiled with the SOFAlizer plugin are available. Details on the installation can be found [https://github.com/sofacoustics/SOFAlizer/releases/tag/0.1.0 here].
* Download the official VLC 2.1 from [https://www.videolan.org/vlc/releases/2.1.0.html#download here] and install on your machine
* Download the SOFAlizer from [https://github.com/sofacoustics/SOFAlizer/releases/tag/0.1.0 here], unzip, and copy over your VLC installation
* Start VLC
* Goto Tools, Preferences, check "Show settings: All"
* In the left panel, for Audio/Filters, check "SOFAlizer"
* In the left panel, for Audio/Filters/SOFAlizer, select at SOFA file 1,2,3 up to three SOFA files
* Click on Save
* Goto Tools/Effects and Filters, in that panel, select "SOFAlizer"
* Enable SOFAlizer
* Load a audio/video file, enjoy


The source code is available [https://github.com/sofacoustics/SOFAlizer here]. The file [https://github.com/sofacoustics/SOFAlizer/blob/master/modules/audio_filter/sofalizer/sofalizer.c sofalizer.c] can serve as an example of how to load SOFA files in C++.
The source code is available [https://github.com/sofacoustics/SOFAlizer here]. The file [https://github.com/sofacoustics/SOFAlizer/blob/master/modules/audio_filter/sofalizer/sofalizer.c sofalizer.c] can serve as an example of how to load SOFA files in C++.


== WaveCloud-M ==
== Application: DirPat ==


[https://opendata.iem.at/projects/dirpat/ DirPat] is a set of tools aiming at the analysis and visualization of the directivity of acoustic sources like loudspeakers, microphones, singers, talkers, and music instruments. DirPat consists of user interfaces, signal-processing tools, and a database of measured directivities which are handled as SOFA files.
[http://www.ee.bgu.ac.il/~sheaffer/wavecloud.html WaveCloud-M] is Matlab-oriented room simulator. Beginning with version 1.0, WaveCloud-M can use HRTFs saved in SOFA to render binaural signals.


== Application: 3D Tune-In Toolkit ==
== Spat ==
[http://forumnet.ircam.fr/product/spat-en/ Spat] is a software suite for spatialization of sound signals in real-time intended for musical creation, postproduction, and live performances made by IRCAM. It supports SOFA for binaural rendering.


[https://github.com/3DTune-In/3dti_AudioToolkit 3D Tune-In Toolkit] is a standard C++ library for audio spatialization via headphones. It was developed within the [http://www.3d-tune-in.eu 3D Tune-In project] aiming at using 3D sound and simulating hearing loss and hearing aids within virtual environments and games.
== HDF5View ==


== Application: Anaglyph VST ==
SOFA files are based on [http://en.wikipedia.org/wiki/NetCDF netCDF-4]. NetCDF is based on [http://en.wikipedia.org/wiki/Hdf5 HDF5]. [http://www.hdfgroup.org/hdf-java-html/hdfview/ HDFView] is a generic viewer for [http://en.wikipedia.org/wiki/Hdf5 HDF5] files running in Java.


[http://anaglyph.dalembert.upmc.fr Anaglyph VST] is a [https://en.wikipedia.org/wiki/Virtual_Studio_Technology#VST_plugins VST effect plugin] for binaural rendering with SOFA files in a digital-audio workstation. Anaglyph includes a personalizable morphological ITD model, near-field ILD corrections, and HRTF parallax selection, among other features.
Thus, SOFA files can be loaded and edited in the HDFView.


== Application: Binaural Audio ==
== libmysofa ==


The [https://kutt.it/binaural Binaural Audio project] aims to introduce people to binaural audio. It provides audio samples (including HRTF and SOFA files) within its large [https://airtable.com/shrHEOlBTzftrnVKY/tbloLjoZKWJDnLtTc database].
[https://github.com/hoene/libmysofa Libmysofa] is a light weight C-library intended to read SOFA files for spatial rendering.


== Application: Webcam Headtracker ==
It hardly has any library dependencies and is suitable for embedded devices. It can read SOFA files and check whether the data comply the "SimpleFreeFieldHRIR" conventions. In addition, provides functions to look-up and interpolate the filters for a given orientation and to normalize the HRTFs to a reference level. It compiles unter Linux (CMake) and Windows (Visual Studio 2015).

The [https://github.com/eac-ufsm/webcam-headtracker Webcam Headtracker Application] by the Federal University of Santa Maria (Brazil) and the ISVR in Southampton is software-based, which means you don't need any special hardware attached to your head, only a webcam video feed, so the model can infer the listener's head orientation and positioning, making it a handy approach to many applications involving spatialized audio.


== Application: Individualized HRTF App ==
== WebSofa ==


The [https://github.com/davircarvalho/Individualized_HRTF_Synthesis/tree/master/Individualized%20HRTF%20App Individualized HRTF App] by the Federal University of Santa Maria (Brazil) is a MATLAB-based app capable of generating HRTFs in SOFA and [https://sourceforge.net/p/hesuvi/wiki/Help/ HeSuVi] WAV formats by providing [https://i.imgur.com/AwnMMyb.png personal measurements of head and ears]. More info about the Individualized HRTF Synthesis project can be found on [https://github.com/davircarvalho/Individualized_HRTF_Synthesis Github].
[https://github.com/CWBudde/WebSofa WebSofa] is slightly based on the libmysofa research for loading HDF files without much dependencies. However, in contrast to the low level c library this library is meant to be executed in a JavaScript environment (such as any modern browser or [https://nodejs.org/en/ Node.js]). So far it is not completed as it's just a hobby project, but it already allows to display properties of a given SOFA file. Try it out in the [https://rawgit.com/CWBudde/WebSofa/master/Demo/www/index.html online demo]

Latest revision as of 09:28, 23 July 2025

HDFView: Generic SOFA file viewer

SOFA files are based on netCDF-4. NetCDF is based on HDF5. HDFView is a generic viewer for HDF5 files running in Java.

Thus, SOFA files can be loaded and edited in the HDFView. This is a generic viewer; it allows browsing through all metadata and data in a numeric format only.

SOFA Toolbox for Matlab/Octave (previously SOFA API Matlab/Octave)

SOFA Toolbox for Matlab/Octave aims at providing a basic interface for handling SOFA files in Matlab and Octave.

The releases are provided at SONICOM Ecosystem (versions on Sourceforge are not updated anymore). The sources are stored at github

SOFA API for C++

An API for C++ is available online. The version 1.0 is in accordance with the AES69-2015 standard.

The sources are stored at github.

If you have questions about this API, please send an email to the mailing list. You don't have to be a member of the mailing list to send a message to the list moderator.

pysofaconventions: SOFA API for Python

pysofaconventions is a SOFA API for Python made by Andrés Pérez-López (UPF/Eurecat, Spain). It is a full implementation of SOFA including reading and writing SOFA files, taking the C++ API as a reference. It supports automatic installation via the pip system.

pySOFA: Lightweight SOFA API for Python (read-only, FIR only)

pySOFA is a SOFA API for Python made by Jörg Encke (TUM, Munich). The API is currently read-only and implements the FIR Datatype. It was implemented for a specific project and only implements a limited amount of features. If you have question about this API, feel free to contact Jörg Encke or to submit an issue report.

SOFASonix: Lightweight SOFA API for Python (read/write support, all conventions)

SOFASonix is another lightweight SOFA API for Python made by Ioseb Laghidze (ISVR, Southampton University, UK). It supports both reading and writing of SOFA files for the conventions defined at the time of writing. The API is a full implementation of SOFA with built-in validation-checks for compliance with each convention and a generator of convention templates for quickly creating SOFA files. SOFASonix runs on an SQLite database, making it backwards compatible with previous versions of each convention.

sofar: Maybe the most complete Python package for the SOFA file format (read/write support)

sofar is a SOFA API for Python made by Fabian Brinkmann. It supports both reading and writing of SOFA files. The API allows adding custom data & attributes to SOFA files and verifying its content with respect to the data type and shape.

libmysofa: Lightweight SOFA API in C (reading)

Libmysofa is a light weight C-library intended to read SOFA files for spatial rendering.

It hardly has any library dependencies and is suitable for embedded devices. It can read SOFA files and check whether the data comply the "SimpleFreeFieldHRIR" conventions. In addition, provides functions to look-up and interpolate the filters for a given orientation and to normalize the HRTFs to a reference level. It compiles unter Linux (CMake) and Windows (Visual Studio 2015).

WebSofa: SOFA API in JavaScript

WebSofa is slightly based on the libmysofa research for loading HDF files without much dependencies. However, in contrast to the low level c library this library is meant to be executed in a JavaScript environment (such as any modern browser or Node.js). So far it is not completed as it's just a hobby project, but it already allows to display properties of a given SOFA file. Try it out in the online demo.

sofa~: SOFA for Max

SOFA for Max is a collection of objects made by Dale Johnson and Hyunkook Lee (University of Huddersfield, UK) for using and creating SOFA files in Max. It is based on libsofa C++ API and enables SOFA files to be utilized in patches designed for spatial audio reproduction. The binaries are available for [ https://doi.org/10.5281/zenodo.3269271 MacOS and Windows].

Application: IRCAM Spat

Spat is a software suite for sound spatialisation in real-time in music creation, post-production, and live performances. It supports SOFA for binaural rendering.

Application: IRCAM Panoramix

Panoramix is a standalone application for spatial audio mixing and post-production. It supports SOFA for binaural rendering.

Application: SOFAlizer plug-in for VLC player

SOFAlizer is a simple demo of an audio engine as a plugin for the VLC-Player.

Currently, Windows binaries of the VLC-Player 2.1 compiled with the SOFAlizer plugin are available. Details on the installation can be found here.

The source code is available here. The file sofalizer.c can serve as an example of how to load SOFA files in C++.

Application: DirPat

DirPat is a set of tools aiming at the analysis and visualization of the directivity of acoustic sources like loudspeakers, microphones, singers, talkers, and music instruments. DirPat consists of user interfaces, signal-processing tools, and a database of measured directivities which are handled as SOFA files.

Application: 3D Tune-In Toolkit

3D Tune-In Toolkit is a standard C++ library for audio spatialization via headphones. It was developed within the 3D Tune-In project aiming at using 3D sound and simulating hearing loss and hearing aids within virtual environments and games.

Application: Anaglyph VST

Anaglyph VST is a VST effect plugin for binaural rendering with SOFA files in a digital-audio workstation. Anaglyph includes a personalizable morphological ITD model, near-field ILD corrections, and HRTF parallax selection, among other features.

Application: Binaural Audio

The Binaural Audio project aims to introduce people to binaural audio. It provides audio samples (including HRTF and SOFA files) within its large database.

Application: Webcam Headtracker

The Webcam Headtracker Application by the Federal University of Santa Maria (Brazil) and the ISVR in Southampton is software-based, which means you don't need any special hardware attached to your head, only a webcam video feed, so the model can infer the listener's head orientation and positioning, making it a handy approach to many applications involving spatialized audio.

Application: Individualized HRTF App

The Individualized HRTF App by the Federal University of Santa Maria (Brazil) is a MATLAB-based app capable of generating HRTFs in SOFA and HeSuVi WAV formats by providing personal measurements of head and ears. More info about the Individualized HRTF Synthesis project can be found on Github.