{"id":2091,"date":"2014-05-02T07:04:17","date_gmt":"2014-05-02T04:04:17","guid":{"rendered":"http:\/\/www.matthiaskronlachner.com\/?p=2091"},"modified":"2026-02-24T14:13:01","modified_gmt":"2026-02-24T12:13:01","slug":"headtracking-for-binaural-ambisonic-playback","status":"publish","type":"post","link":"https:\/\/www.matthiaskronlachner.com\/?p=2091","title":{"rendered":"Headtracking for Binaural Ambisonic Playback"},"content":{"rendered":"<p><a href=\"https:\/\/www.matthiaskronlachner.com\/wp-content\/uploads\/2014\/05\/headtracker_photo_small.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-2093 size-thumbnail\" src=\"https:\/\/www.matthiaskronlachner.com\/wp-content\/uploads\/2014\/05\/headtracker_photo_small-150x150.jpg\" alt=\"Low-Budget headtracker mounted on headphones\" width=\"150\" height=\"150\" \/><\/a>Here is a short tutorial about an inexpensive headtracking solution which you can use to improve the binaural listening experience with the <strong><em><a title=\"ambix\" href=\"https:\/\/www.matthiaskronlachner.com\/?p=2015\" target=\"_blank\">ambix<\/a><\/em><\/strong> Ambisonic tools. The calibration software is currently Windows only, but the Pd patch is naturally\u00a0cross-platform.<\/p>\n<p>It uses the headtracker described here by Dennis Frie: <a title=\"DIY Headtracker\" href=\"http:\/\/www.rcgroups.com\/forums\/showthread.php?t=1677559\" target=\"_blank\">http:\/\/www.rcgroups.com\/forums\/showthread.php?t=1677559<\/a><br \/>\nParts: <a title=\"Arduino Nano\" href=\"http:\/\/arduino.cc\/en\/Main\/arduinoBoardNano\" target=\"_blank\">arduino nano<\/a>, <a href=\"http:\/\/www.dx.com\/p\/gy-85-6dof-9dof-imu-sensor-module-for-arduino-148436#.U2Mska2Sz-U\" target=\"_blank\">GY-85 sensor board<\/a>.<\/p>\n<p>A Pure Data patch provided by me\u00a0receives the serial data from the Arduino based headtracker and sends OSC messages to the host of your choice. In this case I will describe the use within the digital audio workstation <a title=\"DAW Reaper\" href=\"http:\/\/www.reaper.fm\" target=\"_blank\">Reaper<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-1922\" src=\"https:\/\/www.matthiaskronlachner.com\/wp-content\/uploads\/2014\/01\/noun_project_464-copy.png\" alt=\"download\" width=\"30\" height=\"30\" \/>For the impatient, here is the Pure Data patch (use with <a title=\"Pd-extended download\" href=\"http:\/\/puredata.info\/downloads\/pd-extended\" target=\"_blank\">Pd-extended<\/a>):<br \/>\n<a  data-e-Disable-Page-Transition=\"true\" class=\"download-link\" title=\"\" href=\"https:\/\/www.matthiaskronlachner.com?download=2094&amp;tmstv=1777457479\" rel=\"nofollow\" id=\"download-link-2094\" data-redirect=\"false\" >\n\tpd-patch-headtracker-osc-sender<\/a>\n<\/p>\n<p><strong><br \/>\n1)<\/strong> First you have to get the Arduino and Sensor Board, some soldering and upload the firmware according to the instructions <a href=\"http:\/\/www.rcgroups.com\/forums\/showthread.php?t=1677559\" target=\"_blank\">here<\/a>.<\/p>\n<p><a href=\"https:\/\/www.matthiaskronlachner.com\/wp-content\/uploads\/2014\/05\/headtracker_axis_method.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-thumbnail wp-image-2101\" src=\"https:\/\/www.matthiaskronlachner.com\/wp-content\/uploads\/2014\/05\/headtracker_axis_method-150x150.jpg\" alt=\"Use the Axis Method for calibration\" width=\"150\" height=\"150\" \/><\/a>Use the provided Windows software\u00a0to calibrate the tracker &#8211; for me the <strong><em>Axis Method<\/em><\/strong> works best. You might have to repeat the calibration\u00a0from time to time.<\/p>\n<p><strong>2)<\/strong> Now you can use the Pd Patch I provide to communicate with the tracker. Use <a title=\"Pd-extended\" href=\"http:\/\/puredata.info\/downloads\/pd-extended\" target=\"_blank\">Pd-Extended<\/a> to open\u00a0it!<br \/>\nDownload: <a  data-e-Disable-Page-Transition=\"true\" class=\"download-link\" title=\"\" href=\"https:\/\/www.matthiaskronlachner.com?download=2094&amp;tmstv=1777457479\" rel=\"nofollow\" id=\"download-link-2094\" data-redirect=\"false\" >\n\tpd-patch-headtracker-osc-sender<\/a>\n<br \/>\nThis patch will translate the serial data from the Arduino board to OSC messages.<\/p>\n<p><a href=\"https:\/\/www.matthiaskronlachner.com\/wp-content\/uploads\/2014\/05\/reaper_control_surfaces.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-2102 size-thumbnail\" src=\"https:\/\/www.matthiaskronlachner.com\/wp-content\/uploads\/2014\/05\/reaper_control_surfaces-150x150.png\" alt=\"reaper_control_surfaces\" width=\"150\" height=\"150\" \/><\/a><strong>3)<\/strong>\u00a0Open up the Reaper preferences and\u00a0add\u00a0an OSC control surface. Important: <strong><em>Receive on port 8000<\/em><\/strong> and <em><strong>Allow binding messages to REAPER actions and FX learn<\/strong>.<\/em><\/p>\n<p><strong>4)<\/strong>\u00a0Add the <em>ambix_rotator<\/em> plug-in before <em>ambix_binaural<\/em> and use the OSC tracking data to control the parameters of <em>ambix_rotator<\/em>:<br \/>\nClick the <em><strong>Track Envelopes\/Automation<\/strong> <\/em>Button of th<a href=\"https:\/\/www.matthiaskronlachner.com\/wp-content\/uploads\/2014\/05\/reaper_automation_click.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-2103 size-thumbnail\" src=\"https:\/\/www.matthiaskronlachner.com\/wp-content\/uploads\/2014\/05\/reaper_automation_click-e1399002793844-150x84.jpg\" alt=\"Reaper Track Envelopes\/Automation\" width=\"150\" height=\"84\" \/><\/a>e Track with ambix_rotator to open up the Automation controls. Now click the <strong><em>Learn&#8230;<\/em><\/strong> Button next to the parameter Yaw.<\/p>\n<p>Now you have to send a OSC message from the Pd patch to attach\u00a0the correct message to Yaw, Pitch and Roll. Therefore don&#8217;t activate tracking yet (as it sends out all three messages <a href=\"https:\/\/www.matthiaskronlachner.com\/wp-content\/uploads\/2014\/05\/reaper_pd_learn.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-thumbnail wp-image-2104\" src=\"https:\/\/www.matthiaskronlachner.com\/wp-content\/uploads\/2014\/05\/reaper_pd_learn-150x150.jpg\" alt=\"Reaper OSC learn and Pd patch\" width=\"150\" height=\"150\" \/><\/a>at once and thus does not allow to use the Learn functionality)<br \/>\nInstead click the buttons below <em><strong>OSC_LEARN<\/strong><\/em> in the Pd-patch to trigger single OSC messages.<\/p>\n<p><strong>5)<\/strong>\u00a0You may have to change the serial port in Pd. First click the button <strong><em>list_dev<\/em><\/strong> to get a list of you serial devices. Enter the serial port id in the number box <em><strong>open_port<\/strong><\/em>.<br \/>\nNow you can activate head tracking and enjoy a stable binaural surround image. Use\u00a0<em><strong>reset_orientation<\/strong><\/em> to define your\u00a0zero degree direction.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here is a short tutorial about an inexpensive headtracking solution which you can use to improve the binaural listening experience with the ambix Ambisonic tools. The calibration software is currently Windows only, but the Pd patch is naturally\u00a0cross-platform. It uses &hellip; <a href=\"https:\/\/www.matthiaskronlachner.com\/?p=2091\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":2099,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,158,3,37],"tags":[155,154,156,153,152,64,17,157],"class_list":["post-2091","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","category-projects-2014","category-software","category-tutorials","tag-ambix","tag-arduino","tag-binaural","tag-head-tracker","tag-headtracking","tag-osc","tag-pure-data","tag-rotation"],"modified_by":"matthias","jetpack_featured_media_url":"https:\/\/www.matthiaskronlachner.com\/wp-content\/uploads\/2014\/05\/header1.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.matthiaskronlachner.com\/index.php?rest_route=\/wp\/v2\/posts\/2091","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.matthiaskronlachner.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.matthiaskronlachner.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.matthiaskronlachner.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.matthiaskronlachner.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2091"}],"version-history":[{"count":1,"href":"https:\/\/www.matthiaskronlachner.com\/index.php?rest_route=\/wp\/v2\/posts\/2091\/revisions"}],"predecessor-version":[{"id":2741,"href":"https:\/\/www.matthiaskronlachner.com\/index.php?rest_route=\/wp\/v2\/posts\/2091\/revisions\/2741"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.matthiaskronlachner.com\/index.php?rest_route=\/wp\/v2\/media\/2099"}],"wp:attachment":[{"href":"https:\/\/www.matthiaskronlachner.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2091"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.matthiaskronlachner.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2091"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.matthiaskronlachner.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2091"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}