Mercurial > hg > btrack
changeset 83:3b69082715ea
Merge branch 'release/1.0.2'
author | Adam Stark <adamstark.uk@gmail.com> |
---|---|
date | Tue, 25 Nov 2014 23:00:13 +0000 |
parents | 73855a26a0e0 (current diff) 2d8cf2878483 (diff) |
children | 496d12635af8 |
files | README.md |
diffstat | 10 files changed, 3489 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/.gitignore Fri Nov 21 13:27:24 2014 +0000 +++ b/.gitignore Tue Nov 25 23:00:13 2014 +0000 @@ -6,4 +6,6 @@ *.o *.dylib -*.xcworkspace \ No newline at end of file +*.xcworkspace + +modules-and-plug-ins/max-external/build \ No newline at end of file
--- a/README.md Fri Nov 21 13:27:24 2014 +0000 +++ b/README.md Tue Nov 25 23:00:13 2014 +0000 @@ -1,7 +1,7 @@ BTrack - A Real-Time Beat Tracker ================================= -** Version 1.0.1 ** +** Version 1.0.2 ** *by Adam Stark, Matthew Davies and Mark Plumbley.* @@ -17,11 +17,17 @@ * Real-Time Beat-Synchronous Analysis of Musical Audio, A. M. Stark, M. E. P. Davies and M. D. Plumbley. In Proceedings of the 12th International Conference on Digital Audio Effects (DAFx-09), Como, Italy, September 1-4, 2009. +BTrack is made available under the GNU General Public License, version 3. Please see the included LICENSE.txt for more details. Versions -------- -==== 1.0.1 ==== (24th November 2014) +==== 1.0.2 ==== (25th November 2014) + +* Added updated Max external project and associated files +* Fixed a couple of bugs + +==== 1.0.1 ==== (21st November 2014) * Moved to git & updated README * No implementation changes @@ -36,11 +42,6 @@ -License -------- - -BTrack is made available under the GNU General Public License, version 3. Please see the included LICENSE.txt for more details. - Usage - C++ ----------- @@ -101,6 +102,14 @@ // do something on the beat } +Requirements +------------ + +To compile BTrack, you will require the following libraries: + +* FFTW +* libsamplerate + License -------
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules-and-plug-ins/max-external/Beat Tracking Example.maxpat Tue Nov 25 23:00:13 2014 +0000 @@ -0,0 +1,2040 @@ +{ + "patcher" : { + "fileversion" : 1, + "appversion" : { + "major" : 6, + "minor" : 1, + "revision" : 6, + "architecture" : "x86" + } +, + "rect" : [ 126.0, 89.0, 870.0, 487.0 ], + "bglocked" : 0, + "openinpresentation" : 0, + "default_fontsize" : 12.0, + "default_fontface" : 0, + "default_fontname" : "Arial", + "gridonopen" : 0, + "gridsize" : [ 15.0, 15.0 ], + "gridsnaponopen" : 0, + "statusbarvisible" : 2, + "toolbarvisible" : 1, + "boxanimatetime" : 200, + "imprint" : 0, + "enablehscroll" : 1, + "enablevscroll" : 1, + "devicewidth" : 0.0, + "description" : "", + "digest" : "", + "tags" : "", + "boxes" : [ { + "box" : { + "fontface" : 1, + "fontname" : "Arial", + "fontsize" : 12.0, + "frgb" : 0.0, + "id" : "obj-25", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 675.0, 420.0, 100.0, 20.0 ], + "text" : "Audio Settings:", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-11", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 780.0, 420.0, 37.0, 18.0 ], + "text" : "open" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 8.0, + "hidden" : 1, + "id" : "obj-17", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 0, + "patching_rect" : [ 780.0, 435.0, 28.0, 15.0 ], + "text" : "dac~" + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgovercolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoveroncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "border" : 1, + "bordercolor" : [ 0.537255, 0.537255, 0.537255, 1.0 ], + "borderoncolor" : [ 0.537255, 0.537255, 0.537255, 1.0 ], + "fontface" : 1, + "fontname" : "Arial", + "fontsize" : 18.0, + "id" : "obj-4", + "maxclass" : "textbutton", + "mode" : 1, + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "int" ], + "parameter_enable" : 0, + "patching_rect" : [ 45.0, 150.0, 118.0, 26.0 ], + "text" : "Audio File", + "textcolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ], + "texton" : "Live Input", + "textoncolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ], + "textovercolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ], + "textoveroncolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 8.0, + "hidden" : 1, + "id" : "obj-6", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patcher" : { + "fileversion" : 1, + "appversion" : { + "major" : 6, + "minor" : 1, + "revision" : 6, + "architecture" : "x86" + } +, + "rect" : [ 25.0, 69.0, 154.0, 143.0 ], + "bglocked" : 0, + "openinpresentation" : 0, + "default_fontsize" : 12.0, + "default_fontface" : 0, + "default_fontname" : "Arial", + "gridonopen" : 0, + "gridsize" : [ 15.0, 15.0 ], + "gridsnaponopen" : 0, + "statusbarvisible" : 2, + "toolbarvisible" : 1, + "boxanimatetime" : 200, + "imprint" : 0, + "enablehscroll" : 1, + "enablevscroll" : 1, + "devicewidth" : 0.0, + "description" : "", + "digest" : "", + "tags" : "", + "boxes" : [ { + "box" : { + "comment" : "", + "id" : "obj-2", + "maxclass" : "outlet", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 15.0, 105.0, 25.0, 25.0 ] + } + + } +, { + "box" : { + "comment" : "", + "id" : "obj-1", + "maxclass" : "inlet", + "numinlets" : 0, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 15.0, 15.0, 25.0, 25.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 8.0, + "id" : "obj-42", + "maxclass" : "newobj", + "numinlets" : 4, + "numoutlets" : 4, + "outlettype" : [ "bang", "bang", "bang", "" ], + "patching_rect" : [ 15.0, 45.0, 110.0, 16.0 ], + "text" : "sel 0 1 2" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 8.0, + "id" : "obj-44", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 75.0, 75.0, 57.0, 14.0 ], + "text" : "offset 0 -124" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 8.0, + "id" : "obj-45", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 15.0, 75.0, 51.0, 14.0 ], + "text" : "offset 0 -19" + } + + } + ], + "lines" : [ { + "patchline" : { + "destination" : [ "obj-42", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-1", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-44", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-42", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-45", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-42", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-2", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-44", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-2", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-45", 0 ] + } + + } + ] + } +, + "patching_rect" : [ 30.0, 180.0, 55.0, 15.0 ], + "saved_object_attributes" : { + "default_fontface" : 0, + "default_fontname" : "Arial", + "default_fontsize" : 12.0, + "description" : "", + "digest" : "", + "fontface" : 0, + "fontname" : "Arial", + "fontsize" : 12.0, + "globalpatchername" : "", + "tags" : "" + } +, + "text" : "p inputselect" + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "embed" : 1, + "id" : "obj-40", + "maxclass" : "bpatcher", + "name" : "AudioSelect.maxpat", + "numinlets" : 2, + "numoutlets" : 1, + "offset" : [ 0.0, -19.0 ], + "outlettype" : [ "signal" ], + "patcher" : { + "fileversion" : 1, + "appversion" : { + "major" : 6, + "minor" : 1, + "revision" : 6, + "architecture" : "x86" + } +, + "rect" : [ 156.0, 269.0, 159.0, 61.0 ], + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 0.0 ], + "bglocked" : 0, + "openinpresentation" : 0, + "default_fontsize" : 12.0, + "default_fontface" : 0, + "default_fontname" : "Arial", + "gridonopen" : 0, + "gridsize" : [ 15.0, 15.0 ], + "gridsnaponopen" : 0, + "statusbarvisible" : 2, + "toolbarvisible" : 1, + "boxanimatetime" : 200, + "imprint" : 0, + "enablehscroll" : 1, + "enablevscroll" : 1, + "devicewidth" : 0.0, + "description" : "", + "digest" : "", + "tags" : "", + "boxes" : [ { + "box" : { + "comment" : "", + "id" : "obj-18", + "maxclass" : "inlet", + "numinlets" : 0, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 541.0, 105.0, 25.0, 25.0 ] + } + + } +, { + "box" : { + "comment" : "", + "id" : "obj-15", + "maxclass" : "outlet", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 0.0, 315.0, 25.0, 25.0 ] + } + + } +, { + "box" : { + "fontface" : 1, + "fontname" : "Arial", + "fontsize" : 12.0, + "frgb" : 0.0, + "id" : "obj-12", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 15.0, 30.0, 134.0, 20.0 ], + "text" : "Audio File Controls:", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ] + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgovercolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoveroncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "border" : 1, + "fontface" : 1, + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-24", + "maxclass" : "textbutton", + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "int" ], + "parameter_enable" : 0, + "patching_rect" : [ 90.0, 60.0, 62.0, 15.0 ], + "text" : "Load File", + "textcolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ], + "texton" : "Live Input", + "textovercolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ] + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgovercolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoveroncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "border" : 1, + "fontface" : 1, + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-17", + "maxclass" : "textbutton", + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "int" ], + "parameter_enable" : 0, + "patching_rect" : [ 45.0, 60.0, 42.0, 16.0 ], + "text" : "Stop", + "textcolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ], + "texton" : "Live Input", + "textovercolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ] + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgovercolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoveroncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "border" : 1, + "fontface" : 1, + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-25", + "maxclass" : "textbutton", + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "int" ], + "parameter_enable" : 0, + "patching_rect" : [ 0.0, 60.0, 41.0, 16.0 ], + "text" : "Play", + "textcolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ], + "texton" : "Live Input", + "textovercolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-30", + "maxclass" : "newobj", + "numinlets" : 5, + "numoutlets" : 1, + "outlettype" : [ "signal" ], + "patcher" : { + "fileversion" : 1, + "appversion" : { + "major" : 6, + "minor" : 1, + "revision" : 6, + "architecture" : "x86" + } +, + "rect" : [ 336.0, 177.0, 410.0, 291.0 ], + "bglocked" : 0, + "openinpresentation" : 0, + "default_fontsize" : 12.0, + "default_fontface" : 0, + "default_fontname" : "Arial", + "gridonopen" : 0, + "gridsize" : [ 15.0, 15.0 ], + "gridsnaponopen" : 0, + "statusbarvisible" : 2, + "toolbarvisible" : 1, + "boxanimatetime" : 200, + "imprint" : 0, + "enablehscroll" : 1, + "enablevscroll" : 1, + "devicewidth" : 0.0, + "description" : "", + "digest" : "", + "tags" : "", + "boxes" : [ { + "box" : { + "comment" : "", + "id" : "obj-21", + "maxclass" : "inlet", + "numinlets" : 0, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 300.0, 30.0, 25.0, 25.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-19", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 300.0, 75.0, 84.0, 20.0 ], + "text" : "prepend set 1" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-13", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "signal", "signal" ], + "patching_rect" : [ 300.0, 105.0, 37.0, 20.0 ], + "text" : "adc~" + } + + } +, { + "box" : { + "comment" : "", + "id" : "obj-12", + "maxclass" : "inlet", + "numinlets" : 0, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 210.0, 30.0, 25.0, 25.0 ] + } + + } +, { + "box" : { + "comment" : "", + "id" : "obj-9", + "maxclass" : "inlet", + "numinlets" : 0, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 150.0, 30.0, 25.0, 25.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-7", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 210.0, 135.0, 37.0, 18.0 ], + "text" : "open" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-10", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 150.0, 135.0, 32.5, 18.0 ], + "text" : "0" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-11", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 105.0, 135.0, 32.5, 18.0 ], + "text" : "1" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-8", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 2, + "outlettype" : [ "signal", "bang" ], + "patching_rect" : [ 150.0, 180.0, 49.0, 20.0 ], + "save" : [ "#N", "sfplay~", "", 1, 120960, 0, "", ";" ], + "text" : "sfplay~" + } + + } +, { + "box" : { + "comment" : "", + "id" : "obj-5", + "maxclass" : "inlet", + "numinlets" : 0, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 105.0, 30.0, 25.0, 25.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-32", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 30.0, 195.0, 32.5, 18.0 ], + "text" : "1" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-31", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 60.0, 195.0, 32.5, 18.0 ], + "text" : "2" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-4", + "maxclass" : "newobj", + "numinlets" : 3, + "numoutlets" : 1, + "outlettype" : [ "signal" ], + "patching_rect" : [ 30.0, 225.0, 258.0, 20.0 ], + "text" : "selector~ 2" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-3", + "maxclass" : "newobj", + "numinlets" : 3, + "numoutlets" : 3, + "outlettype" : [ "", "", "" ], + "patching_rect" : [ 30.0, 165.0, 78.0, 20.0 ], + "text" : "route 0 1" + } + + } +, { + "box" : { + "comment" : "", + "id" : "obj-2", + "maxclass" : "outlet", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 30.0, 255.0, 25.0, 25.0 ] + } + + } +, { + "box" : { + "comment" : "", + "id" : "obj-1", + "maxclass" : "inlet", + "numinlets" : 0, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 30.0, 30.0, 25.0, 25.0 ] + } + + } + ], + "lines" : [ { + "patchline" : { + "destination" : [ "obj-3", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-1", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-8", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-10", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-8", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-11", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-7", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-12", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-4", 2 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 309.5, 167.0, 278.5, 167.0 ], + "source" : [ "obj-13", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-19", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-19", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-21", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-31", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-32", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-4", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 69.5, 213.0, 39.5, 213.0 ], + "source" : [ "obj-31", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-4", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 39.5, 208.0, 39.5, 208.0 ], + "source" : [ "obj-32", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-2", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-4", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-11", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-5", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-8", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-7", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-4", 1 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-8", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-10", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-9", 0 ] + } + + } + ] + } +, + "patching_rect" : [ 0.0, 285.0, 108.0, 20.0 ], + "saved_object_attributes" : { + "default_fontface" : 0, + "default_fontname" : "Arial", + "default_fontsize" : 12.0, + "description" : "", + "digest" : "", + "fontface" : 0, + "fontname" : "Arial", + "fontsize" : 12.0, + "globalpatchername" : "", + "tags" : "" + } +, + "text" : "p inputaudio" + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "fontface" : 1, + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-10", + "maxclass" : "number", + "minimum" : 0, + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "int", "bang" ], + "parameter_enable" : 0, + "patching_rect" : [ 90.0, 150.0, 49.0, 20.0 ], + "textcolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ], + "tricolor" : [ 0.360784, 0.360784, 0.360784, 1.0 ] + } + + } +, { + "box" : { + "fontface" : 1, + "fontname" : "Arial", + "fontsize" : 12.0, + "frgb" : 0.0, + "id" : "obj-11", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 0.0, 150.0, 98.0, 20.0 ], + "text" : "Input Source:", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "id" : "obj-9", + "maxclass" : "newobj", + "numinlets" : 4, + "numoutlets" : 0, + "patching_rect" : [ 420.0, 300.0, 126.0, 20.0 ], + "text" : "bgcolor 0.26 0.26 0.26" + } + + } +, { + "box" : { + "comment" : "", + "id" : "obj-7", + "maxclass" : "inlet", + "numinlets" : 0, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 405.0, 106.0, 25.0, 25.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "id" : "obj-8", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "" ], + "patching_rect" : [ 405.0, 135.0, 67.0, 20.0 ], + "save" : [ "#N", "thispatcher", ";", "#Q", "end", ";" ], + "text" : "thispatcher" + } + + } + ], + "lines" : [ { + "patchline" : { + "destination" : [ "obj-30", 4 ], + "disabled" : 0, + "hidden" : 1, + "midpoints" : [ 99.5, 196.0, 99.0, 196.0, 99.0, 243.0, 98.5, 243.0 ], + "source" : [ "obj-10", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-30", 2 ], + "disabled" : 0, + "hidden" : 1, + "source" : [ "obj-17", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-30", 0 ], + "disabled" : 0, + "hidden" : 1, + "midpoints" : [ 550.5, 160.0, 280.0, 160.0, 280.0, 211.0, 9.5, 211.0 ], + "source" : [ "obj-18", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-30", 3 ], + "disabled" : 0, + "hidden" : 1, + "midpoints" : [ 99.5, 230.689026, 76.25, 230.689026 ], + "source" : [ "obj-24", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-30", 1 ], + "disabled" : 0, + "hidden" : 1, + "midpoints" : [ 9.5, 230.0, 31.75, 230.0 ], + "source" : [ "obj-25", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-15", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-30", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-8", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-7", 0 ] + } + + } + ] + } +, + "patching_rect" : [ 30.0, 180.0, 159.0, 61.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "hidden" : 1, + "id" : "obj-32", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 30.0, -30.0, 72.0, 20.0 ], + "text" : "loadmess 0" + } + + } +, { + "box" : { + "id" : "obj-23", + "maxclass" : "gain~", + "numinlets" : 2, + "numoutlets" : 2, + "outlettype" : [ "signal", "int" ], + "parameter_enable" : 0, + "patching_rect" : [ 585.0, 360.0, 34.0, 72.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-18", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "signal" ], + "patching_rect" : [ 720.0, 180.0, 32.5, 20.0 ], + "text" : "+~" + } + + } +, { + "box" : { + "id" : "obj-12", + "maxclass" : "gain~", + "numinlets" : 2, + "numoutlets" : 2, + "outlettype" : [ "signal", "int" ], + "parameter_enable" : 0, + "patching_rect" : [ 30.0, 285.0, 64.0, 148.0 ] + } + + } +, { + "box" : { + "id" : "obj-21", + "maxclass" : "button", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "bang" ], + "patching_rect" : [ 525.0, 195.0, 20.0, 20.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-19", + "maxclass" : "newobj", + "numinlets" : 0, + "numoutlets" : 1, + "outlettype" : [ "bang" ], + "patcher" : { + "fileversion" : 1, + "appversion" : { + "major" : 6, + "minor" : 1, + "revision" : 6, + "architecture" : "x86" + } +, + "rect" : [ 25.0, 69.0, 128.0, 131.0 ], + "bglocked" : 0, + "openinpresentation" : 0, + "default_fontsize" : 12.0, + "default_fontface" : 0, + "default_fontname" : "Arial", + "gridonopen" : 0, + "gridsize" : [ 15.0, 15.0 ], + "gridsnaponopen" : 0, + "statusbarvisible" : 2, + "toolbarvisible" : 1, + "boxanimatetime" : 200, + "imprint" : 0, + "enablehscroll" : 1, + "enablevscroll" : 1, + "devicewidth" : 0.0, + "description" : "", + "digest" : "", + "tags" : "", + "boxes" : [ { + "box" : { + "comment" : "", + "id" : "obj-2", + "maxclass" : "outlet", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 15.0, 90.0, 25.0, 25.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-1", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 2, + "outlettype" : [ "bang", "" ], + "patching_rect" : [ 15.0, 45.0, 59.0, 20.0 ], + "text" : "select 13" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-17", + "maxclass" : "newobj", + "numinlets" : 0, + "numoutlets" : 4, + "outlettype" : [ "int", "int", "int", "int" ], + "patching_rect" : [ 15.0, 15.0, 46.0, 20.0 ], + "text" : "key" + } + + } + ], + "lines" : [ { + "patchline" : { + "destination" : [ "obj-2", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-1", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-1", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-17", 0 ] + } + + } + ] + } +, + "patching_rect" : [ 525.0, 165.0, 89.0, 20.0 ], + "saved_object_attributes" : { + "default_fontface" : 0, + "default_fontname" : "Arial", + "default_fontsize" : 12.0, + "description" : "", + "digest" : "", + "fontface" : 0, + "fontname" : "Arial", + "fontsize" : 12.0, + "globalpatchername" : "", + "tags" : "" + } +, + "text" : "p getkeystroke" + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgovercolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoveroncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "border" : 1, + "bordercolor" : [ 0.360784, 0.360784, 0.360784, 1.0 ], + "borderoncolor" : [ 0.360784, 0.360784, 0.360784, 1.0 ], + "fontface" : 1, + "fontname" : "Helvetica", + "fontsize" : 12.0, + "id" : "obj-5", + "maxclass" : "textbutton", + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "int" ], + "parameter_enable" : 0, + "patching_rect" : [ 525.0, 225.0, 82.0, 19.0 ], + "text" : "countin", + "textcolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ], + "texton" : "Live Input", + "textovercolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ] + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgovercolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoveroncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "border" : 1, + "bordercolor" : [ 0.360784, 0.360784, 0.360784, 1.0 ], + "borderoncolor" : [ 0.360784, 0.360784, 0.360784, 1.0 ], + "fontface" : 1, + "fontname" : "Helvetica", + "fontsize" : 12.0, + "id" : "obj-10", + "maxclass" : "textbutton", + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "int" ], + "parameter_enable" : 0, + "patching_rect" : [ 360.0, 165.0, 48.0, 18.0 ], + "text" : "on", + "textcolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ], + "texton" : "Live Input", + "textovercolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ] + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgovercolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "bgoveroncolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "border" : 1, + "bordercolor" : [ 0.360784, 0.360784, 0.360784, 1.0 ], + "borderoncolor" : [ 0.360784, 0.360784, 0.360784, 1.0 ], + "fontface" : 1, + "fontname" : "Helvetica", + "fontsize" : 12.0, + "id" : "obj-15", + "maxclass" : "textbutton", + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "int" ], + "parameter_enable" : 0, + "patching_rect" : [ 420.0, 165.0, 50.0, 18.0 ], + "text" : "off", + "textcolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ], + "texton" : "Live Input", + "textovercolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ] + } + + } +, { + "box" : { + "id" : "obj-1", + "maxclass" : "gain~", + "numinlets" : 2, + "numoutlets" : 2, + "outlettype" : [ "signal", "int" ], + "parameter_enable" : 0, + "patching_rect" : [ 705.0, 210.0, 67.0, 89.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-57", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "signal" ], + "patcher" : { + "fileversion" : 1, + "appversion" : { + "major" : 6, + "minor" : 1, + "revision" : 6, + "architecture" : "x86" + } +, + "rect" : [ 184.0, 182.0, 211.0, 226.0 ], + "bglocked" : 0, + "openinpresentation" : 0, + "default_fontsize" : 12.0, + "default_fontface" : 0, + "default_fontname" : "Arial", + "gridonopen" : 0, + "gridsize" : [ 15.0, 15.0 ], + "gridsnaponopen" : 0, + "statusbarvisible" : 2, + "toolbarvisible" : 1, + "boxanimatetime" : 200, + "imprint" : 0, + "enablehscroll" : 1, + "enablevscroll" : 1, + "devicewidth" : 0.0, + "description" : "", + "digest" : "", + "tags" : "", + "boxes" : [ { + "box" : { + "comment" : "", + "id" : "obj-7", + "maxclass" : "outlet", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 60.0, 177.0, 25.0, 25.0 ] + } + + } +, { + "box" : { + "comment" : "", + "id" : "obj-6", + "maxclass" : "inlet", + "numinlets" : 0, + "numoutlets" : 1, + "outlettype" : [ "bang" ], + "patching_rect" : [ 30.0, 30.0, 25.0, 25.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-5", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "bang" ], + "patching_rect" : [ 75.0, 72.0, 60.0, 20.0 ], + "text" : "loadbang" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-4", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 75.0, 102.0, 108.0, 18.0 ], + "text" : "open Cowbell.wav" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-3", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 30.0, 102.0, 32.5, 18.0 ], + "text" : "1" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-1", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 2, + "outlettype" : [ "signal", "bang" ], + "patching_rect" : [ 60.0, 147.0, 49.0, 20.0 ], + "save" : [ "#N", "sfplay~", "", 1, 120960, 0, "", ";" ], + "text" : "sfplay~" + } + + } + ], + "lines" : [ { + "patchline" : { + "destination" : [ "obj-7", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-1", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-1", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-1", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-4", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-4", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-5", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-3", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 39.5, 62.0, 39.5, 62.0 ], + "source" : [ "obj-6", 0 ] + } + + } + ] + } +, + "patching_rect" : [ 375.0, 405.0, 87.0, 20.0 ], + "saved_object_attributes" : { + "default_fontface" : 0, + "default_fontname" : "Arial", + "default_fontsize" : 12.0, + "description" : "", + "digest" : "", + "fontface" : 0, + "fontname" : "Arial", + "fontsize" : 12.0, + "globalpatchername" : "", + "tags" : "" + } +, + "text" : "p audioclick" + } + + } +, { + "box" : { + "fontface" : 1, + "fontname" : "Arial", + "fontsize" : 16.0, + "frgb" : 0.0, + "id" : "obj-14", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 555.0, 300.0, 60.0, 24.0 ], + "text" : "bpm", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ] + } + + } +, { + "box" : { + "bgcolor" : [ 0.0, 0.0, 0.0, 0.0 ], + "fontface" : 1, + "fontname" : "Helvetica", + "fontsize" : 24.0, + "frgb" : 0.0, + "id" : "obj-13", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 345.0, 105.0, 158.0, 30.0 ], + "text" : "Beat Tracker", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ] + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "fontface" : 1, + "fontname" : "Arial", + "fontsize" : 16.0, + "id" : "obj-9", + "maxclass" : "flonum", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "float", "bang" ], + "parameter_enable" : 0, + "patching_rect" : [ 480.0, 300.0, 66.0, 24.0 ], + "textcolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ], + "tricolor" : [ 0.360784, 0.360784, 0.360784, 1.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "hidden" : 1, + "id" : "obj-89", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 615.0, -30.0, 72.0, 20.0 ], + "text" : "loadmess 1" + } + + } +, { + "box" : { + "fontface" : 1, + "fontname" : "Arial", + "fontsize" : 12.0, + "frgb" : 0.0, + "id" : "obj-34", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 690.0, 390.0, 92.0, 20.0 ], + "text" : "Audio On/Off", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ] + } + + } +, { + "box" : { + "bgcolor" : [ 0.0, 0.0, 0.0, 0.0 ], + "fontface" : 1, + "fontname" : "Helvetica", + "fontsize" : 24.0, + "frgb" : 0.0, + "id" : "obj-29", + "linecount" : 2, + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 705.0, 105.0, 90.0, 54.0 ], + "text" : "Audio \n Out", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ] + } + + } +, { + "box" : { + "id" : "obj-28", + "maxclass" : "ezdac~", + "numinlets" : 2, + "numoutlets" : 0, + "patching_rect" : [ 705.0, 315.0, 67.0, 67.0 ] + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "grad1" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "grad2" : [ 0.360784, 0.360784, 0.360784, 1.0 ], + "id" : "obj-26", + "maxclass" : "panel", + "mode" : 1, + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 660.0, 90.0, 165.0, 359.0 ], + "rounded" : 38 + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "hidden" : 1, + "id" : "obj-22", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 705.0, -30.0, 83.0, 19.0 ], + "text" : "loadmess 125" + } + + } +, { + "box" : { + "bgcolor" : [ 0.407843, 0.407843, 0.407843, 1.0 ], + "coldcolor" : [ 0.145098, 0.07451, 0.376471, 1.0 ], + "hotcolor" : [ 0.101961, 0.717647, 0.717647, 1.0 ], + "id" : "obj-20", + "maxclass" : "meter~", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "float" ], + "overloadcolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ], + "patching_rect" : [ 105.0, 285.0, 70.0, 147.0 ], + "tepidcolor" : [ 0.262745, 0.129412, 0.709804, 1.0 ], + "warmcolor" : [ 0.086275, 0.490196, 0.490196, 1.0 ] + } + + } +, { + "box" : { + "bgcolor" : [ 0.694118, 0.694118, 0.694118, 1.0 ], + "blinkcolor" : [ 0.047059, 0.913725, 0.913725, 1.0 ], + "fgcolor" : [ 0.419608, 0.521569, 0.521569, 1.0 ], + "id" : "obj-7", + "maxclass" : "button", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "bang" ], + "outlinecolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "patching_rect" : [ 375.0, 300.0, 86.0, 86.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-3", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "bang", "float" ], + "patching_rect" : [ 375.0, 255.0, 50.0, 20.0 ], + "text" : "btrack~" + } + + } +, { + "box" : { + "bgcolor" : [ 0.0, 0.0, 0.0, 0.0 ], + "fontface" : 1, + "fontname" : "Helvetica", + "fontsize" : 24.0, + "frgb" : 0.0, + "id" : "obj-27", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 30.0, 105.0, 151.0, 30.0 ], + "text" : "Audio Input", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ] + } + + } +, { + "box" : { + "fontname" : "Helvetica", + "fontsize" : 12.0, + "frgb" : 0.0, + "id" : "obj-58", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 585.0, 60.0, 169.0, 18.0 ], + "text" : "livemusiclab.eecs.qmul.ac.uk" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "hidden" : 1, + "id" : "obj-43", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 465.0, -30.0, 142.0, 18.0 ], + "text" : "read QMlivemusiclab.jpg" + } + + } +, { + "box" : { + "autofit" : 1, + "id" : "obj-41", + "maxclass" : "fpic", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 360.0, 15.0, 500.0, 50.0 ], + "pic" : "QMlivemusiclab.jpg" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "hidden" : 1, + "id" : "obj-36", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "bang" ], + "patching_rect" : [ 420.0, -60.0, 60.0, 20.0 ], + "text" : "loadbang" + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "grad1" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "grad2" : [ 0.360784, 0.360784, 0.360784, 1.0 ], + "id" : "obj-56", + "maxclass" : "panel", + "mode" : 1, + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 15.0, 90.0, 179.0, 357.0 ], + "rounded" : 38 + } + + } +, { + "box" : { + "fontface" : 1, + "fontname" : "Arial", + "fontsize" : 48.0, + "frgb" : 0.0, + "id" : "obj-2", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 15.0, 15.0, 337.0, 60.0 ], + "text" : "Beat Tracking" + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "grad1" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "grad2" : [ 0.360784, 0.360784, 0.360784, 1.0 ], + "id" : "obj-16", + "maxclass" : "panel", + "mode" : 1, + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 210.0, 90.0, 424.0, 362.0 ], + "rounded" : 38 + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 0.0 ], + "border" : 1, + "id" : "obj-8", + "maxclass" : "panel", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 15.0, 15.0, 341.0, 60.0 ], + "rounded" : 20 + } + + } + ], + "lines" : [ { + "patchline" : { + "destination" : [ "obj-28", 1 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 714.5, 308.0, 762.5, 308.0 ], + "source" : [ "obj-1", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-28", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-1", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-3", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 384.0, 247.026321, 384.5, 247.026321 ], + "source" : [ "obj-10", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-17", 0 ], + "disabled" : 0, + "hidden" : 1, + "source" : [ "obj-11", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-18", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 39.5, 462.0, 646.0, 462.0, 646.0, 170.0, 729.5, 170.0 ], + "source" : [ "obj-12", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 39.5, 437.0, 99.0, 437.0, 99.0, 271.0, 114.5, 271.0 ], + "source" : [ "obj-12", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-3", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 445.0, 247.0, 384.5, 247.0 ], + "source" : [ "obj-15", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-1", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 729.5, 204.0, 714.5, 204.0 ], + "source" : [ "obj-18", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-21", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-19", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-5", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-21", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-1", 0 ], + "disabled" : 0, + "hidden" : 1, + "source" : [ "obj-22", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-12", 0 ], + "disabled" : 0, + "hidden" : 1, + "midpoints" : [ 714.5, 83.0, 39.5, 83.0 ], + "source" : [ "obj-22", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-23", 0 ], + "disabled" : 0, + "hidden" : 1, + "midpoints" : [ 714.5, 83.0, 594.5, 83.0 ], + "source" : [ "obj-22", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-18", 1 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 594.5, 462.0, 646.0, 462.0, 646.0, 170.0, 743.0, 170.0 ], + "source" : [ "obj-23", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-7", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-9", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 415.5, 280.0, 489.5, 280.0 ], + "source" : [ "obj-3", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-40", 1 ], + "disabled" : 0, + "hidden" : 1, + "midpoints" : [ 39.5, 178.0, 179.5, 178.0 ], + "source" : [ "obj-32", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-43", 0 ], + "disabled" : 0, + "hidden" : 1, + "source" : [ "obj-36", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-40", 1 ], + "disabled" : 0, + "hidden" : 1, + "midpoints" : [ 54.5, 177.387695, 179.5, 177.387695 ], + "source" : [ "obj-4", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-6", 0 ], + "disabled" : 0, + "hidden" : 1, + "midpoints" : [ 54.5, 177.422272, 39.5, 177.422272 ], + "source" : [ "obj-4", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-12", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-40", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-3", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 39.5, 271.894836, 202.394867, 271.894836, 202.394867, 247.342194, 384.5, 247.342194 ], + "source" : [ "obj-40", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-41", 0 ], + "disabled" : 0, + "hidden" : 1, + "source" : [ "obj-43", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-3", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 566.0, 247.0, 384.5, 247.0 ], + "source" : [ "obj-5", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-23", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 384.5, 431.0, 578.0, 431.0, 578.0, 354.0, 594.5, 354.0 ], + "source" : [ "obj-57", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-40", 0 ], + "disabled" : 0, + "hidden" : 1, + "source" : [ "obj-6", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-57", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 384.5, 391.0, 384.5, 391.0 ], + "source" : [ "obj-7", 0 ] + } + + } + ], + "dependency_cache" : [ { + "name" : "QMlivemusiclab.jpg", + "bootpath" : "/Applications/Max 6.1/Cycling '74/qm_externals/qm_maxhelp", + "patcherrelativepath" : "../../../../../../../Applications/Max 6.1/Cycling '74/qm_externals/qm_maxhelp", + "type" : "JPEG", + "implicit" : 1 + } +, { + "name" : "btrack~.mxo", + "type" : "iLaX" + } + ] + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules-and-plug-ins/max-external/Info.plist Tue Nov 25 23:00:13 2014 +0000 @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleExecutable</key> + <string>${PRODUCT_NAME}</string> + <key>CFBundleIconFile</key> + <string></string> + <key>CFBundleIdentifier</key> + <string>com.cycling74.${PRODUCT_NAME:rfc1034identifier}</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>${PRODUCT_VERSION}</string> + <key>CFBundlePackageType</key> + <string>iLaX</string> + <key>CFBundleSignature</key> + <string>max2</string> + <key>CFBundleVersion</key> + <string>1.0</string> + + <key>CFBundleVersion</key> + <string>${PRODUCT_VERSION}</string> + <key>CFBundleShortVersionString</key> + <string>${PRODUCT_VERSION}</string> + <key>CFBundleLongVersionString</key> + <string>${PRODUCT_NAME} ${PRODUCT_VERSION}, Copyright 2013 Cycling '74</string> + + <key>CSResourcesFileMapped</key> + <true/> +</dict> +</plist>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules-and-plug-ins/max-external/README.md Tue Nov 25 23:00:13 2014 +0000 @@ -0,0 +1,43 @@ +BTrack Max External: btrack~ +============================ + + +Build Instructions +------------------ + +Edit the file maxmspsdk.xcconfig in this directory, setting the path to the c74support folder in your version of the Max SDK: + + + C74SUPPORT = $(SRCROOT)/../../../SDKs/MaxSDK-6.1.4/c74support/ + + +Also, to compile BTrack, you will require the following libraries: + +* FFTW +* libsamplerate + +Documentation +------------- + +Please see the following two files for examples of how to use BTrack in Max: + +* btrack~.maxhelp +* Beat Tracking Example.maxpat + +License +------- + +Copyright (c) 2014 Queen Mary University of London + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules-and-plug-ins/max-external/btrack~.cpp Tue Nov 25 23:00:13 2014 +0000 @@ -0,0 +1,383 @@ +//=========================================================================== +/** @file btrack~.cpp + * @brief The btrack~ Max external + * @author Adam Stark + * @copyright Copyright (C) 2008-2014 Queen Mary University of London + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +//=========================================================================== + +//=========================================================================== +#include "ext.h" // standard Max include, always required (except in Jitter) +#include "ext_obex.h" // required for "new" style objects +#include "z_dsp.h" // required for MSP objects + +//=========================================================================== +// BTrack includes +#include "../../src/BTrack.h" +#include "../../src/OnsetDetectionFunction.h" + +//=========================================================================== +// struct to represent the object's state +typedef struct _btrack { + + // The object itself (t_pxobject in MSP instead of t_object) + t_pxobject ob; + + // An instance of the BTrack beat tracker + BTrack *b; + + // Indicates whether the beat tracker should output beats + bool should_output_beats; + + // the time of the last bang received in milliseconds + long time_of_last_bang_ms; + + // a count in counter + long count_in; + + // the recent tempi observed during count ins + double count_in_tempi[3]; + + // An outlet for beats + void *beat_outlet; + + // An outlet for tempo estimates + void *tempo_outlet; + +} t_btrack; + + +//=========================================================================== +// method prototypes +void *btrack_new(t_symbol *s, long argc, t_atom *argv); +void btrack_free(t_btrack *x); +void btrack_assist(t_btrack *x, void *b, long m, long a, char *s); +void btrack_float(t_btrack *x, double f); +void btrack_dsp(t_btrack *x, t_signal **sp, short *count); +void btrack_dsp64(t_btrack *x, t_object *dsp64, short *count, double samplerate, long maxvectorsize, long flags); +t_int *btrack_perform(t_int *w); +void btrack_perform64(t_btrack *x, t_object *dsp64, double **ins, long numins, double **outs, long numouts, long sampleframes, long flags, void *userparam); + +//=========================================================================== +void btrack_process(t_btrack *x,double* audioFrame); + +void btrack_on(t_btrack *x); +void btrack_off(t_btrack *x); + +void btrack_fixtempo(t_btrack *x, double f); +void btrack_unfixtempo(t_btrack *x); + +void btrack_bang(t_btrack *x); +void btrack_countin(t_btrack *x); + +void outlet_beat(t_btrack *x, t_symbol *s, long argc, t_atom *argv); + +// global class pointer variable +static t_class *btrack_class = NULL; + + + + +//=========================================================================== +int C74_EXPORT main(void) +{ + //-------------------------------------------------------------- + t_class *c = class_new("btrack~", (method)btrack_new, (method)btrack_free, (long)sizeof(t_btrack), 0L, A_GIMME, 0); + + //-------------------------------------------------------------- + class_addmethod(c, (method)btrack_float, "float", A_FLOAT, 0); + class_addmethod(c, (method)btrack_dsp, "dsp", A_CANT, 0); // Old 32-bit MSP dsp chain compilation for Max 5 and earlier + class_addmethod(c, (method)btrack_dsp64, "dsp64", A_CANT, 0); // New 64-bit MSP dsp chain compilation for Max 6 + class_addmethod(c, (method)btrack_assist, "assist", A_CANT, 0); + + //-------------------------------------------------------------- + class_addmethod(c, (method)btrack_on, "on", 0); + class_addmethod(c, (method)btrack_off, "off", 0); + + //-------------------------------------------------------------- + class_addmethod(c, (method)btrack_fixtempo, "fixtempo", A_FLOAT, 0); + class_addmethod(c, (method)btrack_unfixtempo, "unfixtempo", 0); + + //-------------------------------------------------------------- + class_addmethod(c, (method)btrack_bang, "bang", 0); + class_addmethod(c, (method)btrack_countin, "countin", 0); + + //-------------------------------------------------------------- + class_dspinit(c); + class_register(CLASS_BOX, c); + btrack_class = c; + + return 0; +} + +//=========================================================================== +void *btrack_new(t_symbol *s, long argc, t_atom *argv) +{ + t_btrack *x = (t_btrack *)object_alloc(btrack_class); + + if (x) { + dsp_setup((t_pxobject *)x, 1); // MSP inlets: arg is # of inlets and is REQUIRED! + // use 0 if you don't need inlets + + // create detection function and beat tracking objects + x->b = new BTrack(); + + // create outlets for bpm and beats + x->tempo_outlet = floatout(x); + x->beat_outlet = bangout(x); + + // initialise variables + x->should_output_beats = true; + x->time_of_last_bang_ms = 0; + x->count_in = 4; + x->count_in_tempi[0] = 120; + x->count_in_tempi[1] = 120; + x->count_in_tempi[2] = 120; + + } + return (x); +} + + +//=========================================================================== +void btrack_free(t_btrack *x) +{ + // delete the beat tracker + delete x->b; + x->b = NULL; + + // call the dsp free function on our object + dsp_free((t_pxobject *)x); +} + + +//=========================================================================== +void btrack_assist(t_btrack *x, void *b, long m, long a, char *s) +{ + if (m == ASSIST_INLET) { //inlet + if (a == 0) + { + sprintf(s, "(signal) Audio In"); + } + } + else { // outlet + if (a == 0) + { + sprintf(s, "Beats Out"); + } + if (a == 1) + { + sprintf(s, "Tempo (bpm)"); + } + + } +} + + +//=========================================================================== +void btrack_float(t_btrack *x, double f) +{ + + +} + +//=========================================================================== +// this function is called when the DAC is enabled, and "registers" a function for the signal chain in Max 5 and earlier. +// In this case we register the 32-bit, "btrack_perform" method. +void btrack_dsp(t_btrack *x, t_signal **sp, short *count) +{ + // get hop size and frame size + int hopSize = (int) sp[0]->s_n; + int frameSize = hopSize*2; + + // initialise the beat tracker + x->b->updateHopAndFrameSize(hopSize, frameSize); + + // set up dsp + dsp_add(btrack_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); +} + + +//=========================================================================== +// this is the Max 6 version of the dsp method -- it registers a function for the signal chain in Max 6, +// which operates on 64-bit audio signals. +void btrack_dsp64(t_btrack *x, t_object *dsp64, short *count, double samplerate, long maxvectorsize, long flags) +{ + // get hop size and frame size + int hopSize = (int) maxvectorsize; + int frameSize = hopSize*2; + + // initialise the beat tracker + x->b->updateHopAndFrameSize(hopSize, frameSize); + + // set up dsp + object_method(dsp64, gensym("dsp_add64"), x, btrack_perform64, 0, NULL); +} + + +//=========================================================================== +// this is the 32-bit perform method for Max 5 and earlier +t_int *btrack_perform(t_int *w) +{ + t_btrack *x = (t_btrack *)(w[1]); + t_float *inL = (t_float *)(w[2]); + int n = (int)w[3]; + + double audioFrame[n]; + + for (int i = 0;i < n;i++) + { + audioFrame[i] = (double) inL[i]; + } + + btrack_process(x,audioFrame); + + // you have to return the NEXT pointer in the array OR MAX WILL CRASH + return w + 4; +} + +//=========================================================================== +// this is 64-bit perform method for Max 6 +void btrack_perform64(t_btrack *x, t_object *dsp64, double **ins, long numins, double **outs, long numouts, long sampleframes, long flags, void *userparam) +{ + t_double *inL = ins[0]; // we get audio for each inlet of the object from the **ins argument + int n = sampleframes; + + double audioFrame[n]; + + for (int i = 0;i < n;i++) + { + audioFrame[i] = (double) inL[i]; + } + + btrack_process(x,audioFrame); +} + +//=========================================================================== +void btrack_process(t_btrack *x,double* audioFrame) +{ + // process the audio frame + x->b->processAudioFrame(audioFrame); + + + // if there is a beat in this frame + if (x->b->beatDueInCurrentFrame()) + { + // outlet a beat + defer_low((t_object *)x, (method)outlet_beat, NULL, 0, NULL); + } +} + +//=========================================================================== +void outlet_beat(t_btrack *x, t_symbol *s, long argc, t_atom *argv) +{ + if (x->should_output_beats) + { + // send a bang out of the beat outlet + outlet_bang(x->beat_outlet); + + // send the tempo out of the tempo outlet + outlet_float(x->tempo_outlet, (float) x->b->getCurrentTempoEstimate()); + } +} + + +//=========================================================================== +void btrack_on(t_btrack *x) +{ + x->should_output_beats = true; +} + +//=========================================================================== +void btrack_off(t_btrack *x) +{ + x->should_output_beats = false; + x->count_in = 4; +} + +//=========================================================================== +void btrack_fixtempo(t_btrack *x, double f) +{ + x->b->fixTempo(f); + object_post((t_object *) x,"Tempo fixed to %f BPM",f); +} + +//=========================================================================== +void btrack_unfixtempo(t_btrack *x) +{ + x->b->doNotFixTempo(); + object_post((t_object *) x,"Tempo no longer fixed"); +} + +//=========================================================================== +void btrack_countin(t_btrack *x) +{ + x->count_in = x->count_in-1; + + btrack_bang(x); + if (x->count_in == 0) + { + x->should_output_beats = 1; + } +} + +//=========================================================================== +void btrack_bang(t_btrack *x) +{ + double bperiod; + double tempo; + double mean_tempo; + + // get current time in milliseconds + long ms = systime_ms(); + + // calculate beat period + bperiod = ((double) (ms - x->time_of_last_bang_ms))/1000.0; + + // store time since last bang + x->time_of_last_bang_ms = ms; + + // if beat period is between 0 and 1 + if ((bperiod < 1.0) && (bperiod > 0.0)) + { + // calculate tempo from beat period + tempo = (1/bperiod)*60; + + double sum = 0; + + // move back elements in tempo history and sum remaining elements + for (int i = 0;i < 2;i++) + { + x->count_in_tempi[i] = x->count_in_tempi[i+1]; + sum = sum+x->count_in_tempi[i]; + } + + // set final element to be the newly calculated tempo + x->count_in_tempi[2] = tempo; + + // add the new tempo to the sum + sum = sum+x->count_in_tempi[2]; + + // calculate the mean tempo by dividing the tempo by 3 + mean_tempo = sum/3; + + // set the tempo in the beat tracker + x->b->setTempo(mean_tempo); + } +} + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules-and-plug-ins/max-external/btrack~.maxhelp Tue Nov 25 23:00:13 2014 +0000 @@ -0,0 +1,616 @@ +{ + "patcher" : { + "fileversion" : 1, + "appversion" : { + "major" : 6, + "minor" : 1, + "revision" : 6, + "architecture" : "x86" + } +, + "rect" : [ 129.0, 45.0, 649.0, 660.0 ], + "bglocked" : 0, + "openinpresentation" : 0, + "default_fontsize" : 11.595187, + "default_fontface" : 0, + "default_fontname" : "Arial", + "gridonopen" : 0, + "gridsize" : [ 15.0, 15.0 ], + "gridsnaponopen" : 0, + "statusbarvisible" : 2, + "toolbarvisible" : 1, + "boxanimatetime" : 200, + "imprint" : 0, + "enablehscroll" : 1, + "enablevscroll" : 1, + "devicewidth" : 0.0, + "description" : "", + "digest" : "", + "tags" : "", + "boxes" : [ { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "frgb" : 0.0, + "id" : "obj-28", + "linecount" : 6, + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 374.0, 242.0, 237.0, 84.0 ], + "text" : "the 'fixtempo' message tells the beat tracker that the tempo will be roughly the argument given - 120bpm in the example. Once set, the beat tracker will not search for tempi drastically different from the argument. The 'unfixtempo' message turns this off.", + "varname" : "autohelp_top_description[10]" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "frgb" : 0.0, + "id" : "obj-27", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 344.0, 377.0, 39.0, 19.0 ], + "text" : "bpm", + "varname" : "autohelp_top_description[9]" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "id" : "obj-26", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 303.0, 272.0, 67.0, 17.0 ], + "text" : "unfixtempo" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "id" : "obj-25", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 284.0, 242.0, 77.0, 17.0 ], + "text" : "fixtempo 120" + } + + } +, { + "box" : { + "fontface" : 2, + "fontname" : "Arial", + "fontsize" : 11.0, + "frgb" : 0.0, + "id" : "obj-21", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 280.0, 47.0, 285.0, 19.0 ], + "text" : "by Adam Stark, Matthew Davies and Mark Plumbley", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ], + "varname" : "autohelp_top_digest[1]" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "frgb" : 0.0, + "id" : "obj-24", + "linecount" : 2, + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 29.0, 482.0, 456.0, 32.0 ], + "text" : "Adam. M. Stark, (2011). Musicians and Machines: Bridging the Semantic Gap In Live Performance. PhD Thesis, Queen Mary, University of London. Chapter 3.", + "varname" : "autohelp_top_description[8]" + } + + } +, { + "box" : { + "fontface" : 1, + "fontname" : "Arial", + "fontsize" : 11.595187, + "frgb" : 0.0, + "id" : "obj-23", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 14.0, 452.0, 88.0, 19.0 ], + "text" : "References:", + "varname" : "autohelp_top_description[7]" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "frgb" : 0.0, + "id" : "obj-22", + "linecount" : 3, + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 29.0, 527.0, 451.0, 45.0 ], + "text" : "Adam M. Stark, Matthew E. P. Davies and Mark D. Plumbley, (2009). Real-time beat-synchronous analysis of musical audio. In Proceedings of International Conference on Digital Audio Effects, pages 299–304.", + "varname" : "autohelp_top_description[6]" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "frgb" : 0.0, + "id" : "obj-20", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 239.0, 422.0, 167.0, 19.0 ], + "text" : "'bang' on every beat", + "varname" : "autohelp_top_description[5]" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "frgb" : 0.0, + "id" : "obj-19", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 299.0, 347.0, 52.0, 19.0 ], + "text" : "tempo", + "varname" : "autohelp_top_description[4]" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "id" : "obj-18", + "maxclass" : "number", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "int", "bang" ], + "parameter_enable" : 0, + "patching_rect" : [ 284.0, 377.0, 56.0, 19.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "frgb" : 0.0, + "id" : "obj-17", + "linecount" : 4, + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 314.0, 152.0, 239.0, 58.0 ], + "text" : "when beat tracker is off, tap this 4 times to 'count in' the beat tracker at a particular tempo. If the beat tracker is on - tap it twice to 'nudge' it to the right tempo and phase.", + "varname" : "autohelp_top_description[3]" + } + + } +, { + "box" : { + "id" : "obj-15", + "maxclass" : "ezdac~", + "numinlets" : 2, + "numoutlets" : 0, + "patching_rect" : [ 89.0, 341.0, 45.0, 45.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "id" : "obj-14", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 149.0, 227.0, 32.5, 17.0 ], + "text" : "0" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "id" : "obj-13", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 104.0, 227.0, 32.5, 17.0 ], + "text" : "1" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "id" : "obj-12", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 59.0, 227.0, 36.0, 17.0 ], + "text" : "open" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "id" : "obj-11", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 2, + "outlettype" : [ "signal", "bang" ], + "patching_rect" : [ 104.0, 257.0, 48.0, 19.0 ], + "save" : [ "#N", "sfplay~", "", 1, 120960, 0, "", ";" ], + "text" : "sfplay~" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "id" : "obj-10", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 254.0, 152.0, 48.0, 17.0 ], + "text" : "countin" + } + + } +, { + "box" : { + "id" : "obj-6", + "maxclass" : "button", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "bang" ], + "patching_rect" : [ 179.0, 407.0, 53.0, 53.0 ] + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "frgb" : 0.0, + "id" : "obj-5", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 59.0, 152.0, 165.0, 19.0 ], + "text" : ": switches the beat tracker off", + "varname" : "autohelp_top_description[2]" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "id" : "obj-4", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 29.0, 182.0, 32.5, 17.0 ], + "text" : "on" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "frgb" : 0.0, + "id" : "obj-3", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 59.0, 182.0, 167.0, 19.0 ], + "text" : ": switches the beat tracker on", + "varname" : "autohelp_top_description[1]" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "id" : "obj-2", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 29.0, 152.0, 32.5, 17.0 ], + "text" : "off" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "id" : "obj-1", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "bang", "float" ], + "patching_rect" : [ 179.0, 347.0, 68.0, 19.0 ], + "text" : "qm.btrack~" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "hidden" : 1, + "id" : "obj-43", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 29.0, -103.0, 171.0, 18.0 ], + "text" : "read QMlivemusiclab.jpg" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "hidden" : 1, + "id" : "obj-36", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "bang" ], + "patching_rect" : [ 29.0, -133.0, 69.0, 20.0 ], + "text" : "loadbang" + } + + } +, { + "box" : { + "fontface" : 3, + "fontname" : "Arial", + "fontsize" : 20.871338, + "frgb" : 0.0, + "id" : "obj-7", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 29.0, 17.0, 325.0, 30.0 ], + "text" : "btrack~", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ], + "varname" : "autohelp_top_title" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.754705, + "frgb" : 0.0, + "id" : "obj-8", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 29.0, 47.0, 325.0, 21.0 ], + "text" : "A Real-Time Beat Tracker", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ], + "varname" : "autohelp_top_digest" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 11.595187, + "frgb" : 0.0, + "id" : "obj-9", + "linecount" : 3, + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 14.0, 92.0, 447.0, 45.0 ], + "text" : "btrack~ is a real-time beat tracker for Max/MSP. It takes as input an audio signal and outputs bang events from the left outlet on every beat. The tempo is output from the right inlet.", + "varname" : "autohelp_top_description" + } + + } +, { + "box" : { + "bgcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "grad1" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "grad2" : [ 0.360784, 0.360784, 0.360784, 1.0 ], + "id" : "obj-16", + "maxclass" : "panel", + "mode" : 1, + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 14.0, 17.0, 598.0, 56.0 ], + "rounded" : 38 + } + + } + ], + "lines" : [ { + "patchline" : { + "destination" : [ "obj-18", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 237.5, 369.0, 293.5, 369.0 ], + "source" : [ "obj-1", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-6", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-1", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-1", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 263.5, 295.0, 188.5, 295.0 ], + "source" : [ "obj-10", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-1", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 113.5, 286.0, 188.5, 286.0 ], + "source" : [ "obj-11", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-15", 1 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 113.5, 328.0, 124.5, 328.0 ], + "source" : [ "obj-11", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-15", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 113.5, 328.0, 98.5, 328.0 ], + "source" : [ "obj-11", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-11", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-12", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-11", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-13", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-11", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-14", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-1", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 38.5, 176.0, 24.0, 176.0, 24.0, 295.0, 188.5, 295.0 ], + "source" : [ "obj-2", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-1", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 293.5, 307.0, 188.5, 307.0 ], + "source" : [ "obj-25", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-1", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 312.5, 307.0, 188.5, 307.0 ], + "source" : [ "obj-26", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-43", 0 ], + "disabled" : 0, + "hidden" : 1, + "source" : [ "obj-36", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-1", 0 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 38.5, 295.0, 188.5, 295.0 ], + "source" : [ "obj-4", 0 ] + } + + } + ], + "dependency_cache" : [ { + "name" : "qm.btrack~.mxo", + "type" : "iLaX" + } + ] + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules-and-plug-ins/max-external/btrack~.xcodeproj/project.pbxproj Tue Nov 25 23:00:13 2014 +0000 @@ -0,0 +1,264 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 44; + objects = { + +/* Begin PBXBuildFile section */ + 22CF119B0EE9A8250054F513 /* btrack~.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22CF119A0EE9A8250054F513 /* btrack~.cpp */; }; + 22CF119E0EE9A82E0054F513 /* MaxAudioAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22CF119D0EE9A82E0054F513 /* MaxAudioAPI.framework */; }; + E34F60F61A22A83400AD0770 /* BTrack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E34F60F21A22A83400AD0770 /* BTrack.cpp */; }; + E34F60F71A22A83400AD0770 /* BTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = E34F60F31A22A83400AD0770 /* BTrack.h */; }; + E34F60F81A22A83400AD0770 /* OnsetDetectionFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E34F60F41A22A83400AD0770 /* OnsetDetectionFunction.cpp */; }; + E34F60F91A22A83400AD0770 /* OnsetDetectionFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = E34F60F51A22A83400AD0770 /* OnsetDetectionFunction.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 22CF10220EE984600054F513 /* maxmspsdk.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = maxmspsdk.xcconfig; sourceTree = SOURCE_ROOT; }; + 22CF119A0EE9A8250054F513 /* btrack~.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "btrack~.cpp"; sourceTree = "<group>"; }; + 22CF119D0EE9A82E0054F513 /* MaxAudioAPI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MaxAudioAPI.framework; path = "../../../SDKs/MaxSDK-6.1.4/c74support/msp-includes/MaxAudioAPI.framework"; sourceTree = SOURCE_ROOT; }; + 2FBBEAE508F335360078DB84 /* btrack~.mxo */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "btrack~.mxo"; sourceTree = BUILT_PRODUCTS_DIR; }; + E34F60F21A22A83400AD0770 /* BTrack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BTrack.cpp; sourceTree = "<group>"; }; + E34F60F31A22A83400AD0770 /* BTrack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BTrack.h; sourceTree = "<group>"; }; + E34F60F41A22A83400AD0770 /* OnsetDetectionFunction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OnsetDetectionFunction.cpp; sourceTree = "<group>"; }; + E34F60F51A22A83400AD0770 /* OnsetDetectionFunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OnsetDetectionFunction.h; sourceTree = "<group>"; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2FBBEADC08F335360078DB84 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 22CF119E0EE9A82E0054F513 /* MaxAudioAPI.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* iterator */ = { + isa = PBXGroup; + children = ( + 22CF10220EE984600054F513 /* maxmspsdk.xcconfig */, + 22CF119A0EE9A8250054F513 /* btrack~.cpp */, + E34F60F11A22A83400AD0770 /* src */, + 22CF119D0EE9A82E0054F513 /* MaxAudioAPI.framework */, + 19C28FB4FE9D528D11CA2CBB /* Products */, + ); + name = iterator; + sourceTree = "<group>"; + }; + 19C28FB4FE9D528D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 2FBBEAE508F335360078DB84 /* btrack~.mxo */, + ); + name = Products; + sourceTree = "<group>"; + }; + E34F60F11A22A83400AD0770 /* src */ = { + isa = PBXGroup; + children = ( + E34F60F21A22A83400AD0770 /* BTrack.cpp */, + E34F60F31A22A83400AD0770 /* BTrack.h */, + E34F60F41A22A83400AD0770 /* OnsetDetectionFunction.cpp */, + E34F60F51A22A83400AD0770 /* OnsetDetectionFunction.h */, + ); + name = src; + path = ../../src; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 2FBBEAD708F335360078DB84 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E34F60F91A22A83400AD0770 /* OnsetDetectionFunction.h in Headers */, + E34F60F71A22A83400AD0770 /* BTrack.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 2FBBEAD608F335360078DB84 /* max-external */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2FBBEAE008F335360078DB84 /* Build configuration list for PBXNativeTarget "max-external" */; + buildPhases = ( + 2FBBEAD708F335360078DB84 /* Headers */, + 2FBBEAD808F335360078DB84 /* Resources */, + 2FBBEADA08F335360078DB84 /* Sources */, + 2FBBEADC08F335360078DB84 /* Frameworks */, + 2FBBEADF08F335360078DB84 /* Rez */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "max-external"; + productName = iterator; + productReference = 2FBBEAE508F335360078DB84 /* btrack~.mxo */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + }; + buildConfigurationList = 2FBBEACF08F335010078DB84 /* Build configuration list for PBXProject "btrack~" */; + compatibilityVersion = "Xcode 3.0"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = 089C166AFE841209C02AAC07 /* iterator */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 2FBBEAD608F335360078DB84 /* max-external */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 2FBBEAD808F335360078DB84 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + 2FBBEADF08F335360078DB84 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2FBBEADA08F335360078DB84 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E34F60F81A22A83400AD0770 /* OnsetDetectionFunction.cpp in Sources */, + E34F60F61A22A83400AD0770 /* BTrack.cpp in Sources */, + 22CF119B0EE9A8250054F513 /* btrack~.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 2FBBEAD008F335010078DB84 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "-lsamplerate", + "-lfftw3", + ); + }; + name = Development; + }; + 2FBBEAD108F335010078DB84 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "-lsamplerate", + "-lfftw3", + ); + }; + name = Deployment; + }; + 2FBBEAE108F335360078DB84 /* Development */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 22CF10220EE984600054F513 /* maxmspsdk.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(C74SUPPORT)/msp-includes\"", + ); + GCC_OPTIMIZATION_LEVEL = 0; + HEADER_SEARCH_PATHS = ( + "\"$(C74SUPPORT)/max-includes\"", + "\"$(C74SUPPORT)/msp-includes\"", + "\"$(C74SUPPORT)/jit-includes\"", + /usr/local/include, + ); + LIBRARY_SEARCH_PATHS = /usr/local/lib; + OTHER_LDFLAGS = ( + "$(C74_SYM_LINKER_FLAGS)", + "-lfftw3", + "-lsamplerate", + ); + PRODUCT_NAME = "btrack~"; + }; + name = Development; + }; + 2FBBEAE208F335360078DB84 /* Deployment */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 22CF10220EE984600054F513 /* maxmspsdk.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(C74SUPPORT)/msp-includes\"", + ); + HEADER_SEARCH_PATHS = ( + "\"$(C74SUPPORT)/max-includes\"", + "\"$(C74SUPPORT)/msp-includes\"", + "\"$(C74SUPPORT)/jit-includes\"", + /usr/local/include, + ); + LIBRARY_SEARCH_PATHS = /usr/local/lib; + OTHER_LDFLAGS = ( + "$(C74_SYM_LINKER_FLAGS)", + "-lfftw3", + "-lsamplerate", + ); + PRODUCT_NAME = "btrack~"; + }; + name = Deployment; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2FBBEACF08F335010078DB84 /* Build configuration list for PBXProject "btrack~" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2FBBEAD008F335010078DB84 /* Development */, + 2FBBEAD108F335010078DB84 /* Deployment */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Development; + }; + 2FBBEAE008F335360078DB84 /* Build configuration list for PBXNativeTarget "max-external" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2FBBEAE108F335360078DB84 /* Development */, + 2FBBEAE208F335360078DB84 /* Deployment */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Development; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules-and-plug-ins/max-external/maxmspsdk.xcconfig Tue Nov 25 23:00:13 2014 +0000 @@ -0,0 +1,86 @@ +// Xcode target configuration settings for the Max 6 SDK +// Used as the basis for Xcode projects to build Max externals. +// +// Changes to the settings in this file will be applied to all SDK examples +// To change settings for only one of the examples, override the settings using +// Xcode's target inspector. +// +// by Timothy Place +// Copyright © 2012, Cycling '74 + + +// Name & Version +PRODUCT_NAME = $(PROJECT_NAME) +PRODUCT_VERSION = 6.1.4 +//ARCHS = i386 x86_64 +ARCHS = x86_64 + + +// Paths + +// =========================================================================== +// NOTE: SET PATH TO YOUR C74SUPPORT FOLDER IN YOUR MAX SDK HERE + +C74SUPPORT = $(SRCROOT)/../../../SDKs/MaxSDK-6.1.4/c74support/ + +// =========================================================================== + +HEADER_SEARCH_PATHS = "$(C74SUPPORT)/max-includes" "$(C74SUPPORT)/msp-includes" "$(C74SUPPORT)/jit-includes" +FRAMEWORK_SEARCH_PATHS = "$(C74SUPPORT)/max-includes" "$(C74SUPPORT)/msp-includes" "$(C74SUPPORT)/jit-includes" +DSTROOT = $(SRCROOT)/build +// (This next path is relative to DSTROOT) +INSTALL_PATH = / + + +// Special Files +GCC_PREFIX_HEADER = $(C74SUPPORT)/max-includes/macho-prefix.pch +INFOPLIST_FILE = $(SRCROOT)/Info.plist + + +// Architecture and Deployment +ARCHS = i386 x86_64 + +// The following section sets the Mac SDK version to be used. +// For most projects this has little to no impact because there are no direct dependencies on OS function calls. +// In those projects with OS function calls, it should be okay to use the most recent SDK version because the +// MACOSX_DEPLOYMENT_TARGET will disable functionality that is unavailable in the older target OS. +// For this reason, the SDKROOT variable is commented out, telling Xcode to use the default (which is the most recent SDK). +// +// If you do need to define the SDKROOT, different versions of Xcode have varying syntax and varying versions of the SDK present. + +// Xcode 3.x +// SDKROOT = $(DEVELOPER_DIR)/SDKs/MacOSX10.5.sdk + +// Xcode 4.0 - Xcode 4.2 +// SDKROOT = $(DEVELOPER_DIR)/SDKs/MacOSX10.6.sdk + +// Xcode 4.3+ +// SDKROOT = macosx10.6 + +MACOSX_DEPLOYMENT_TARGET = 10.6 + + +// Compiler Version -- leave them all commented out to get the default version provided by Xcode +// GCC_VERSION = 4.2 +// GCC_VERSION = com.apple.compilers.llvmgcc42 +// GCC_VERSION = com.apple.compilers.llvm.clang.1_0 + + +// Preprocessor Defines +GCC_PREPROCESSOR_DEFINITIONS = "DENORM_WANT_FIX = 1" "NO_TRANSLATION_SUPPORT = 1" + + +// Static Configuration (don't change these) +WRAPPER_EXTENSION = mxo; +WARNING_CFLAGS = -Wmost -Wno-four-char-constants -Wno-unknown-pragmas +DEPLOYMENT_LOCATION = YES +GENERATE_PKGINFO_FILE = YES + + +// Flags to enforce some build-time checks for the symbols used while not actually performing a hard link +C74_SYM_LINKER_FLAGS = @$(C74SUPPORT)/max-includes/c74_linker_flags.txt + + +// hide all symbols by default +// mark a function to be exported with the C74_EXPORT macro -- most likely this will only apply to the main() function +OTHER_CFLAGS = -fvisibility=hidden
--- a/src/BTrack.cpp Fri Nov 21 13:27:24 2014 +0000 +++ b/src/BTrack.cpp Tue Nov 25 23:00:13 2014 +0000 @@ -165,6 +165,12 @@ } //======================================================================= +double BTrack::getCurrentTempoEstimate() +{ + return estimatedTempo; +} + +//======================================================================= int BTrack::getHopSize() { return hopSize;