From f7297f6932c02b4bfabfc6ddd1b536b4d4755842 Mon Sep 17 00:00:00 2001 From: Joseph Anderson Date: Wed, 14 Jun 2017 18:12:50 -0700 Subject: [PATCH 1/3] Remove Class files To Quarkify the ATK, both Classes and HelpSource are removed from SC3-plugins and are now found at https://github.com/ambisonictoolkit/atk-sc3. --- source/ATK/sc/Classes/ATK.sc | 1398 ------------- source/ATK/sc/Classes/ATKMatrix.sc | 2767 -------------------------- source/ATK/sc/Classes/extArray.sc | 13 - source/ATK/sc/Classes/extPathName.sc | 64 - 4 files changed, 4242 deletions(-) delete mode 100644 source/ATK/sc/Classes/ATK.sc delete mode 100644 source/ATK/sc/Classes/ATKMatrix.sc delete mode 100644 source/ATK/sc/Classes/extArray.sc delete mode 100644 source/ATK/sc/Classes/extPathName.sc diff --git a/source/ATK/sc/Classes/ATK.sc b/source/ATK/sc/Classes/ATK.sc deleted file mode 100644 index 42aefaa2d2..0000000000 --- a/source/ATK/sc/Classes/ATK.sc +++ /dev/null @@ -1,1398 +0,0 @@ -/* - Copyright the ATK Community, Joseph Anderson, and Josh Parmenter, 2011 - J Anderson j.anderson[at]ambisonictoolkit.net - J Parmenter j.parmenter[at]ambisonictoolkit.net - - - This file is part of SuperCollider3 version of the Ambisonic Toolkit (ATK). - - The SuperCollider3 version of the Ambisonic Toolkit (ATK) 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. - - The SuperCollider3 version of the Ambisonic Toolkit (ATK) 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 the - SuperCollider3 version of the Ambisonic Toolkit (ATK). If not, see - . -*/ - - -//--------------------------------------------------------------------- -// The Ambisonic Toolkit (ATK) is a soundfield kernel support library. -// -// Class (UGen superclass): Foa -// -// Class (UGen): FoaPanB -// -// Class (UGen): FoaDirectO -// Class (UGen): FoaDirectX -// Class (UGen): FoaDirectZ -// Class (UGen): FoaRotate -// Class (UGen): FoaTilt -// Class (UGen): FoaTumble -// Class (UGen): FoaFocusX -// Class (UGen): FoaFocusY -// Class (UGen): FoaFocusZ -// Class (UGen): FoaPushX -// Class (UGen): FoaPushY -// Class (UGen): FoaPushZ -// Class (UGen): FoaPressX -// Class (UGen): FoaPressY -// Class (UGen): FoaPressZ -// Class (UGen): FoaZoomX -// Class (UGen): FoaZoomY -// Class (UGen): FoaZoomZ -// Class (UGen): FoaDominateX -// Class (UGen): FoaDominateY -// Class (UGen): FoaDominateZ -// Class (UGen): FoaAsymmetry -// -// Class: FoaRTT -// Class: FoaMirror -// Class: FoaDirect -// Class: FoaDominate -// Class: FoaZoom -// Class: FoaFocus -// Class: FoaPush -// Class: FoaPress -// -// Class (UGen): FoaProximity -// Class (UGen): FoaNFC -// Class (UGen): FoaPsychoShelf -// -// Class: AtkMatrixMix -// Class: AtkKernelConv -// -// Class: FoaDecode -// Class: FoaEncode -// -// Class: FoaXform -// Class: FoaTransform -// -// The Ambisonic Toolkit (ATK) is intended to bring together a number of tools and -// methods for working with Ambisonic surround sound. The intention is for the toolset -// to be both ergonomic and comprehensive, providing both classic and novel algorithms -// to creatively manipulate and synthesise complex Ambisonic soundfields. -// -// The tools are framed for the user to think in terms of the soundfield kernel. By -// this, it is meant the ATK addresses the holistic problem of creatively controlling a -// complete soundfield, allowing and encouraging the composer to think beyond the placement -// of sounds in a sound-space and instead attend to the impression and image of a soundfield. -// This approach takes advantage of the model the Ambisonic technology presents, and is -// viewed to be the idiomatic mode for working with the Ambisonic technique. -// -// -// We hope you enjoy the ATK! -// -// For more information visit http://ambisonictoolkit.net/ or -// email info[at]ambisonictoolkit.net -// -//--------------------------------------------------------------------- - -Atk { - classvar 0; - hasRelPath = usrPN.colonIndices.size > 0; - - mtxDirPath = if (searchExtensions) { - Atk.getMatrixExtensionSubPath('FOA', mtxType); // hard coded to 'FOA'.. - } { - Atk.getAtkMatrixSubPath('FOA', mtxType); // .. for now - }; - - relPath = mtxDirPath +/+ usrPN; - - if (hasRelPath, - { // search specific path within matrix directory - if (hasExtension, { - - if( relPath.isFile, { - srcPath = relPath; // valid relative path, with file extension - },{ - Error(format("No file found at\n\t%\n", relPath)).throw; - }); - - }, { // user gives a path, but no file extension - - relWithoutLast = PathName( relPath.fullPath.dirname ); - - if (relWithoutLast.isFolder, // test enclosing folder - { - foundCnt = 0; - name = usrPN.fileNameWithoutExtension; - // NOTE: filesDo searches recursively in the parent folder, - // so keep track of matches in case there are multiple - relWithoutLast.filesDo{ - |file| - if (file.fileNameWithoutExtension == name, { - srcPath = file; - foundCnt = foundCnt+1; - }); - }; - - if (foundCnt >1) { - Error( format( - "Found multiple matches in recursive search of\n\t%\nPlease provide a more specific path", - relWithoutLast.fullPath - ) ).throw; - }; - - },{ - Error( format( - "Parent directory isn't a folder:\n\t%\n", - relWithoutLast.fullPath ) - ).throw; - } - ) - } - ); - }, { // single filename, no other path - matches = []; - - // name = usrPN.fileNameWithoutExtension; - name = usrPN.fileName; - - // recursively search whole directory - mtxDirPath.filesDo { |file| - var test; - test = if (hasExtension) {file.fileName} {file.fileNameWithoutExtension}; - if (test == name, { matches = matches.add(file) }); - }; - - case - { matches.size == 1 } { srcPath = matches[0] } - { matches.size == 0 } { Error( format("No file found for %", name) ).throw } - { matches.size > 1 } { - str = format("Multiple matches found for filename:\t%\n", usrPN.fileName); - matches.do{|file| str = str ++ "\t" ++ file.asRelativePath( mtxDirPath ) ++ "\n" }; - str = str ++ format( - "Provide either an absolute path to the matrix, or one relative to\n\t%\n", - mtxDirPath); - Error( str ).throw; - }; - }); - } - ); - - if( srcPath.notNil, - { - // postf("Found matrix file: \n\t> %\n\t> %\n", srcPath.asRelativePath(mtxDirPath), srcPath); - ^srcPath - },{ Error("No matrix file found!").throw } - ); - } - - *checkSet { |set| - Atk.sets.includes(set.asString.toUpper.asSymbol).not.if {^Error("Invalid set").throw}; - } - - - // NOTE: could be generalized for other user extensions, e.g. kernels, etc. - // type: 'decoders', 'encoders', 'xformers' - *postMyMatrices { |set, type| - var postContents; - - block { |break| - - if (set.isNil) { - // no set provided, show all sets - Atk.sets.do{ |thisSet| - Atk.postMyMatrices(thisSet, type) - }; - break.() - } { - Atk.checkSet(set); - }; - - postf("~ %%% ~\n", set.asString.toUpper, type.notNil.if({" "},{""}), type ?? ""); - - postContents = { |folderPN, depth=1| - var offset, f_offset; - offset = ("\t"!depth).join; - f_offset = ("\t"!(depth-1)).join; - postf("%:: % ::\n", f_offset, folderPN.folderName); - - // folderPN.fileName.postln; - folderPN.entries.do{ |entry| - - offset = ("\t"!depth).join; - offset.post; - entry.isFolder.if( - { postContents.(entry, depth+1) }, - { postf("%%\n", offset, entry.fileName) } - ) - }; - }; - - postContents.( - type.isNil.if( - { Atk.getAtkOpPath('matrices', isExtension:true) +/+ set.asString.toUpper }, - { - if ( - [ - 'decoders', 'encoders', 'xformers', - 'decoder', 'encoder', 'xformer' // include singular - ].includes(type.asSymbol) - ) - { Atk.getMatrixExtensionSubPath(set, type) } - { Error("'type' must be 'decoder', 'encoder', 'xformer', or nil (to see all matrix directories)").throw; }; - } - ); - - ); - } - } - -} - - -FoaPanB : MultiOutUGen { - - *ar { arg in, azimuth=0, elevation=0, mul = 1, add = 0; - ^this.multiNew('audio', in, azimuth, elevation ).madd(mul, add); - } - - init { arg ... theInputs; - inputs = theInputs; - channels = [ OutputProxy(\audio,this,0), OutputProxy(\audio,this,1), - OutputProxy(\audio,this,2), OutputProxy(\audio,this,3) ]; - ^channels - } - - checkInputs { ^this.checkNInputs(1) } -} - -Foa : MultiOutUGen { - - init { arg ... theInputs; - inputs = theInputs; - channels = [ OutputProxy(\audio,this,0), OutputProxy(\audio,this,1), - OutputProxy(\audio,this,2), OutputProxy(\audio,this,3) ]; - ^channels - } - - checkInputs { ^this.checkNInputs(4) } - - *checkChans {arg in; - (in.size < 4).if({ - ^([in] ++ (4 - in.size).collect({Silent.ar})).flat; - }, { - ^in - }); - } - - } - -FoaDirectO : Foa { - *ar { arg in, angle = pi/2, mul = 1, add = 0; - var w, x, y, z; - in = this.checkChans(in); - #w, x, y, z = in; - ^this.multiNew('audio', w, x, y, z, angle).madd(mul, add); - } -} - - -FoaDirectX : Foa { - *ar { arg in, angle = pi/2, mul = 1, add = 0; - var w, x, y, z; - in = this.checkChans(in); - #w, x, y, z = in; - ^this.multiNew('audio', w, x, y, z, angle).madd(mul, add); - } -} - -FoaDirectY : FoaDirectX { } -FoaDirectZ : FoaDirectX { } - -FoaRotate : Foa { - *ar { arg in, angle = 0, mul = 1, add = 0; - var w, x, y, z; - in = this.checkChans(in); - #w, x, y, z = in; - ^this.multiNew('audio', w, x, y, z, angle).madd(mul, add); - } -} -FoaTilt : FoaRotate { } -FoaTumble : FoaRotate { } - -FoaFocusX : FoaRotate { } -FoaFocusY : FoaRotate { } -FoaFocusZ : FoaRotate { } - -FoaPushX : FoaRotate { } -FoaPushY : FoaRotate { } -FoaPushZ : FoaRotate { } - -FoaPressX : FoaRotate { } -FoaPressY : FoaRotate { } -FoaPressZ : FoaRotate { } - -FoaZoomX : FoaRotate { } -FoaZoomY : FoaRotate { } -FoaZoomZ : FoaRotate { } - -FoaBalance { - *ar { arg in, angle = 0, mul = 1, add = 0; - var w, x, y, z; - in = this.checkChans(in); - #w, x, y, z = in; - ^FoaZoomY.ar(w, x, y, z, angle, mul, add); - } -} - - -FoaDominateX : Foa { - *ar { arg in, gain = 0, mul = 1, add = 0; - var w, x, y, z; - in = this.checkChans(in); - #w, x, y, z = in; - ^this.multiNew('audio', w, x, y, z, gain).madd(mul, add); - } -} - -FoaDominateY : FoaDominateX { } -FoaDominateZ : FoaDominateX { } - -FoaAsymmetry : FoaRotate { } - - -FoaRTT { - *ar { arg in, rotAngle = 0, tilAngle = 0, tumAngle = 0, mul = 1, add = 0; - in = FoaRotate.ar(in, rotAngle); - in = FoaTilt.ar(in, tilAngle); - ^FoaTumble.ar(in, tumAngle, mul, add); - } -} - -FoaMirror { - *ar { arg in, theta = 0, phi = 0, mul = 1, add = 0; - in = FoaRotate.ar(in, theta.neg); - in = FoaTumble.ar(in, phi.neg); - in = FoaXform.ar(in, FoaXformerMatrix.newMirrorX); - in = FoaTumble.ar(in, phi); - ^FoaRotate.ar(in, theta, mul, add); - } -} - -FoaDirect { - *ar { arg in, angle = 0, theta = 0, phi = 0, mul = 1, add = 0; - - in = FoaRotate.ar(in, theta.neg); - in = FoaTumble.ar(in, phi.neg); - in = FoaDirectX.ar(in, angle); - in = FoaTumble.ar(in, phi); - ^FoaRotate.ar(in, theta, mul, add); - } -} - -FoaDominate { - *ar { arg in, gain = 0, theta = 0, phi = 0, mul = 1, add = 0; - - in = FoaRotate.ar(in, theta.neg); - in = FoaTumble.ar(in, phi.neg); - in = FoaDominateX.ar(in, gain); - in = FoaTumble.ar(in, phi); - ^FoaRotate.ar(in, theta, mul, add); - } -} - -FoaZoom { - *ar { arg in, angle = 0, theta = 0, phi = 0, mul = 1, add = 0; - - in = FoaRotate.ar(in, theta.neg); - in = FoaTumble.ar(in, phi.neg); - in = FoaZoomX.ar(in, angle); - in = FoaTumble.ar(in, phi); - ^FoaRotate.ar(in, theta, mul, add); - } -} - -FoaFocus { - *ar { arg in, angle = 0, theta = 0, phi = 0, mul = 1, add = 0; - - in = FoaRotate.ar(in, theta.neg); - in = FoaTumble.ar(in, phi.neg); - in = FoaFocusX.ar(in, angle); - in = FoaTumble.ar(in, phi); - ^FoaRotate.ar(in, theta, mul, add); - } -} - -FoaPush { - *ar { arg in, angle = 0, theta = 0, phi = 0, mul = 1, add = 0; - - in = FoaRotate.ar(in, theta.neg); - in = FoaTumble.ar(in, phi.neg); - in = FoaPushX.ar(in, angle); - in = FoaTumble.ar(in, phi); - ^FoaRotate.ar(in, theta, mul, add); - } -} - -FoaPress { - *ar { arg in, angle = 0, theta = 0, phi = 0, mul = 1, add = 0; - - in = FoaRotate.ar(in, theta.neg); - in = FoaTumble.ar(in, phi.neg); - in = FoaPressX.ar(in, angle); - in = FoaTumble.ar(in, phi); - ^FoaRotate.ar(in, theta, mul, add); - } -} - - -//------------------------------------------------------------------------ -// Filters - -FoaProximity : Foa { - *ar { arg in, distance = 1, mul = 1, add = 0; - var w, x, y, z; - in = this.checkChans(in); - #w, x, y, z = in; - ^this.multiNew('audio', w, x, y, z, distance).madd(mul, add); - } - -} - -FoaNFC : Foa { - *ar { arg in, distance = 1, mul = 1, add = 0; - var w, x, y, z; - in = this.checkChans(in); - #w, x, y, z = in; - ^this.multiNew('audio', w, x, y, z, distance).madd(mul, add); - } - -} - -FoaPsychoShelf : Foa { - *ar { arg in, freq = 400, k0 = (3/2).sqrt, k1 = 3.sqrt/2, mul = 1, add = 0; - var w, x, y, z; - in = this.checkChans(in); - #w, x, y, z = in; - ^this.multiNew('audio', w, x, y, z, freq, k0, k1).madd(mul, add); - } - -} - - -//------------------------------------------------------------------------ -// AtkMatrixMix & AtkKernelConv - -AtkMatrixMix { - *ar { arg in, matrix, mul = 1, add = 0; - - var out; - - // wrap input as array if needed, for mono inputs - in.isArray.not.if({ in = [in] }); - - out = Mix.fill( matrix.cols, { arg i; // fill input - UGen.replaceZeroesWithSilence( - matrix.flop.asArray.at(i) * in.at(i) - ) - }); - - ^out.madd(mul, add) - } -} - -AtkKernelConv { - *ar { arg in, kernel, mul = 1, add = 0; - - var out; - - // wrap input as array if needed, for mono inputs - in.isArray.not.if({ in = [in] }); - - out = Mix.new( - kernel.shape.at(0).collect({ arg i; - kernel.shape.at(1).collect({ arg j; - Convolution2.ar( - in.at(i), - kernel.at(i).at(j), - framesize: kernel.at(i).at(j).numFrames - ) - }) - }) - ); - - ^out.madd(mul, add) - } -} - - -//------------------------------------------------------------------------ -// Decoder built using AtkMatrixMix & AtkKernelConv - -FoaUGen { - *checkChans {arg in; - (in.size < 4).if({ - ^([in] ++ (4 - in.size).collect({Silent.ar})).flat; - }, { - ^in - }); - } - - *argDict { arg ugen, args, argDefaults; - var index, userDict; - var ugenKeys; - var ugenDict; - // find index dividing ordered and named args - index = args.detectIndex({arg item; item.isKindOf(Symbol)}); - - // find ugen args, drop [ 'this', sig] - ugenKeys = ugen.class.findRespondingMethodFor(\ar).argNames.drop(2); - ugenDict = Dictionary.new; - ugenKeys.do({arg key, i; ugenDict.put(key, argDefaults.at(i))}); - - // build user dictionary - userDict = Dictionary.new(ugenKeys.size); - (index == nil).not.if({ - userDict = userDict.putAll(Dictionary.newFrom(args[index..])); - }, { - index = args.size; - }); - userDict = userDict.putAll(Dictionary.newFrom((index).collect({arg i; - [ugenKeys.at(i), args.at(i)]}).flat)); - - // merge - ^ugenDict.merge(userDict, { - arg ugenArg, userArg; (userArg != nil).if({userArg}) - }) - } -} - -FoaDecode : FoaUGen { - *ar { arg in, decoder, mul = 1, add = 0; - in = this.checkChans(in); - - case - { decoder.isKindOf(FoaDecoderMatrix) } { - - if ( decoder.shelfFreq.isNumber, { // shelf filter? - in = FoaPsychoShelf.ar(in, - decoder.shelfFreq, decoder.shelfK.at(0), decoder.shelfK.at(1)) - }); - - ^AtkMatrixMix.ar(in, decoder.matrix, mul, add) - } - { decoder.isKindOf(FoaDecoderKernel) } { - ^AtkKernelConv.ar(in, decoder.kernel, mul, add) - }; - } -} - - -//------------------------------------------------------------------------ -// Encoder built using AtkMatrixMix & AtkKernelConv - -FoaEncode : FoaUGen { - *ar { arg in, encoder, mul = 1, add = 0; - var out; - - case - { encoder.isKindOf(FoaEncoderMatrix) } { - out = AtkMatrixMix.ar(in, encoder.matrix, mul, add) - } - { encoder.isKindOf(FoaEncoderKernel) } { - out = AtkKernelConv.ar(in, encoder.kernel, mul, add) - }; - -// if ( out.size < 4, { // 1st order, fill missing harms with zeros -// out = out ++ Silent.ar(4 - out.size) -// }); - out = this.checkChans(out); - ^out - } -} - - -//------------------------------------------------------------------------ -// Transformer built using AtkMatrixMix & AtkKernelConv - -FoaXform : FoaUGen { - *ar { arg in, xformer, mul = 1, add = 0; - - var out; - in = this.checkChans(in); - -// switch ( xformer.class, -// -// FoaXformerMatrix, { -// out = AtkMatrixMix.ar(in, xformer.matrix, mul, add) -// }, -// -// FoaXformerKernel, { -// out = AtkKernelConv.ar(in, xformer.kernel, mul, add) -// } -// ); -// -// ^out - - // for now... - ^AtkMatrixMix.ar(in, xformer.matrix, mul, add) - } -} - - -//------------------------------------------------------------------------ -// Transformer: UGen wrapper -/* -argument key - see helpfile for reasonable values -'rtt' - angle - -*/ - -FoaTransform : FoaUGen { - *ar { arg in, kind ... args; - - var argDict, argDefaults; - var ugen; - in = this.checkChans(in); - -// argDict = { arg ugen, args, argDefaults; -// var index, userDict; -// var ugenKeys; -// var ugenDict; -// [ugen, args, argDefaults].postln; -// // find index dividing ordered and named args -// index = args.detectIndex({arg item; item.isKindOf(Symbol)}); -// -// // find ugen args, drop [ 'this', w, x, y, z ] -// ugenKeys = ugen.class.findRespondingMethodFor(\ar).argNames.drop(2); -// ugenDict = Dictionary.new; -// ugenKeys.do({arg key, i; ugenDict.put(key, argDefaults.at(i))}); -// -// // build user dictionary -// userDict = Dictionary.new(ugenKeys.size); -// (index == nil).not.if({ -// userDict = userDict.putAll(Dictionary.newFrom(args[index..])); -// }, { -// index = args.size; -// }); -// userDict = userDict.putAll(Dictionary.newFrom((index).collect({arg i; -// [ugenKeys.at(i), args.at(i)]}).flat)); -// -// // merge -// ugenDict.merge(userDict, { -// arg ugenArg, userArg; (userArg != nil).if({userArg}) -// }) -// }; -// - - switch ( kind, - - 'rotate', { - - ugen = FoaRotate; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'tilt', { - - ugen = FoaTilt; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'tumble', { - - ugen = FoaTumble; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'directO', { - - ugen = FoaDirectO; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'directX', { - - ugen = FoaDirectX; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'directY', { - - ugen = FoaDirectY; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'directZ', { - - ugen = FoaDirectZ; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'dominateX', { - - ugen = FoaDominateX; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\gain), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'dominateY', { - - ugen = FoaDominateY; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\gain), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'dominateZ', { - - ugen = FoaDominateZ; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\gain), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'zoomX', { - - ugen = FoaZoomX; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'zoomY', { - - ugen = FoaZoomY; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'zoomZ', { - - ugen = FoaZoomZ; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'focusX', { - - ugen = FoaFocusX; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'focusY', { - - ugen = FoaFocusY; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'focusZ', { - - ugen = FoaFocusZ; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'pushX', { - - ugen = FoaPushX; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'pushY', { - - ugen = FoaPushY; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'pushZ', { - - ugen = FoaPushZ; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'pressX', { - - ugen = FoaPressX; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'pressY', { - - ugen = FoaPressY; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'pressZ', { - - ugen = FoaPressZ; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'asymmetry', { - - ugen = FoaAsymmetry; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'balance', { - - ugen = FoaZoomY; - argDefaults = [0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\mul), argDict.at(\add) - ) - }, - - 'rtt', { - - ugen = FoaRTT; - argDefaults = [0, 0, 0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\rotAngle), argDict.at(\tilAngle), argDict.at(\tumAngle), - argDict.at(\mul), argDict.at(\add) - ) - }, - - 'mirror', { - - ugen = FoaMirror; - argDefaults = [0, 0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\theta), argDict.at(\phi), - argDict.at(\mul), argDict.at(\add) - ) - }, - - 'direct', { - - ugen = FoaDirect; - argDefaults = [0, 0, 0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\theta), argDict.at(\phi), - argDict.at(\mul), argDict.at(\add) - ) - }, - - 'dominate', { - - ugen = FoaDominate; - argDefaults = [0, 0, 0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\gain), argDict.at(\theta), argDict.at(\phi), - argDict.at(\mul), argDict.at(\add) - ) - }, - - 'zoom', { - - ugen = FoaZoom; - argDefaults = [0, 0, 0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\theta), argDict.at(\phi), - argDict.at(\mul), argDict.at(\add) - ) - }, - - 'focus', { - - ugen = FoaFocus; - argDefaults = [0, 0, 0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\theta), argDict.at(\phi), - argDict.at(\mul), argDict.at(\add) - ) - }, - - 'push', { - - ugen = FoaPush; - argDefaults = [0, 0, 0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\theta), argDict.at(\phi), - argDict.at(\mul), argDict.at(\add) - ) - }, - - 'press', { - - ugen = FoaPress; - argDefaults = [0, 0, 0, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\angle), argDict.at(\theta), argDict.at(\phi), - argDict.at(\mul), argDict.at(\add) - ) - }, - - 'nfc', { - - ugen = FoaNFC; - argDefaults = [1, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\distance), - argDict.at(\mul), argDict.at(\add) - ) - }, - - 'proximity', { - - ugen = FoaProximity; - argDefaults = [1, 1, 0]; - - argDict = this.argDict(ugen, args, argDefaults); - - ^ugen.ar( - in, - argDict.at(\distance), - argDict.at(\mul), argDict.at(\add) - ) - } - ) - } -} diff --git a/source/ATK/sc/Classes/ATKMatrix.sc b/source/ATK/sc/Classes/ATKMatrix.sc deleted file mode 100644 index c77188c8df..0000000000 --- a/source/ATK/sc/Classes/ATKMatrix.sc +++ /dev/null @@ -1,2767 +0,0 @@ -/* - Copyright the ATK Community and Joseph Anderson, 2011-2016 - J Anderson j.anderson[at]ambisonictoolkit.net - - - This file is part of SuperCollider3 version of the Ambisonic Toolkit (ATK). - - The SuperCollider3 version of the Ambisonic Toolkit (ATK) 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. - - The SuperCollider3 version of the Ambisonic Toolkit (ATK) 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 the - SuperCollider3 version of the Ambisonic Toolkit (ATK). If not, see - . -*/ - - -//--------------------------------------------------------------------- -// The Ambisonic Toolkit (ATK) is a soundfield kernel support library. -// -// Class: FoaSpeakerMatrix -// Class: FoaDecoderMatrix -// Class: FoaEncoderMatrix -// Class: FoaDecoderKernel -// Class: FoaEncoderKernel -// -// The Ambisonic Toolkit (ATK) is intended to bring together a number of tools and -// methods for working with Ambisonic surround sound. The intention is for the toolset -// to be both ergonomic and comprehensive, providing both classic and novel algorithms -// to creatively manipulate and synthesise complex Ambisonic soundfields. -// -// The tools are framed for the user to think in terms of the soundfield kernel. By -// this, it is meant the ATK addresses the holistic problem of creatively controlling a -// complete soundfield, allowing and encouraging the composer to think beyond the placement -// of sounds in a sound-space and instead attend to the impression and image of a soundfield. -// This approach takes advantage of the model the Ambisonic technology presents, and is -// viewed to be the idiomatic mode for working with the Ambisonic technique. -// -// -// We hope you enjoy the ATK! -// -// For more information visit http://ambisonictoolkit.net/ or -// email info[at]ambisonictoolkit.net -// -//--------------------------------------------------------------------- - - -//------------------------------------------------------------------------ -// Third Party Notices -//------------------------------------------------------------------------ -// -//----------------------------------------------------------------------- -// Support for Gerzon's Diametric Decoder Theorem (DDT) decoding algorithm is derived -// from Aaron Heller's Octave code available at: http://www.ai.sri.com/ajh/ambisonics/ -// -// Benjamin, et al., "Localization in Horizontal-Only Ambisonic Systems" -// Preprint from AES-121, 10/2006, San Francisco -// -// Implementation in the SuperCollider3 version of the ATK is by -// Joseph Anderson -//----------------------------------------------------------------------- -// -//----------------------------------------------------------------------- -// Irregular array decoding coefficients (5.0, 7.0) are kindly provided by -// Bruce Wiggins: http://www.brucewiggins.co.uk/ -// -// B. Wiggins, "An Investigation into the Real-time Manipulation and Control of -// Three-dimensional Sound Fields," PhD Thesis, University of Derby, Derby, 2004. -//----------------------------------------------------------------------- - - -//----------------------------------------------------------------------- -// matrix decoders - -// Heller's DDT (helper function) -FoaSpeakerMatrix { - var 1) { - postf("\n% : [\n", attribute); - value.do{ |elem| postf("\t%\n", elem) }; - " ]".postln; - } { - postf("\n% : \n\t%\n", attribute, value); - } - } { - postf("\n% : %\n", attribute, value); - }; - }; - } - - // For subclasses of AtkMatrix - writeToFile { arg fileNameOrPath, note, attributeDictionary, overwrite=false; - this.prWriteToFile(fileNameOrPath, this.set, this.type, note, attributeDictionary, overwrite); - } - - // argSet: FOA, HOA1, HOA2, etc - // argType: \encoder, \decoder, \xformer - prWriteToFile { arg fileNameOrPath, argSet, argType, note, attributeDictionary, overwrite=false; - var pn, writer, ext; - var mtxPath, relPath; - - pn = PathName(fileNameOrPath); - - if (PathName(pn.parentPath).isFolder.not) { // check for an enclosing folder - // ... no enclosing folder found so assumed - // to be relative to extensions/matrices/'type' directory - - Atk.checkSet(argSet); - - // This is only needed for relative file paths in user-matrices directory - ['encoder', 'decoder', 'xformer'].includes(argType).not.if{ - Error("'type' argument must be 'encoder', 'decoder', or 'xformer'").throw; ^this - }; - - case - { pn.colonIndices.size == 0} { - // only filename provided, write to dir matching 'type' - pn = Atk.getMatrixExtensionSubPath(argSet, argType) +/+ pn; - - } { pn.colonIndices.size > 0} { - // relative path given, look for it - mtxPath = Atk.getMatrixExtensionSubPath(argSet, argType); - relPath = (mtxPath +/+ PathName(pn.parentPath)); - if (relPath.isFolder) { - // valid relative path confirmed - pn = mtxPath +/+ pn; - } { - Error( - format( - "Specified relative folder path was not found in %\n", - relPath.fullPath - ) - ).throw; - ^this - } - }; - }; // otherwise, provided path is absolute - - ext = pn.extension; - if (ext == "") {pn = pn +/+ PathName(".yml")}; - - overwrite.not.if{ - pn.isFile.if{ - Error(format( - "File already exists:\n\t%\nChoose another name or location, or set overwrite:true", - pn.fullPath - )).throw; ^this} - }; - - case - {ext == "txt"} { - if (pn.fileName.contains(".mosl")) { - this.prWriteMatrixToMOSL(pn) - } { - this.prWriteMatrixToTXT(pn) - } - } - {ext == "yml"} {this.prWriteMatrixToYML(pn, argSet, argType, note, attributeDictionary)} - { // catch all - Error( format( "%%", - "Invalid file extension: provide '.txt' for writing matrix only, ", - "or '.yml' or no extension to write matrix with metadata (as YAML)") - ).throw; - }; - } - - - prWriteMatrixToTXT { arg pn; // a PathName - var writer; - writer = FileWriter( pn.fullPath ); - // write the matrix into it by row, and close - matrix.rows.do{ |i| writer.writeLine( matrix.getRow(i) ) }; - writer.close - } - - prWriteMatrixToMOSL { arg pn; // a PathName - var writer; - writer = FileWriter( pn.fullPath ); - - // write num rows and cols to first 2 lines - writer.writeLine(["// Dimensions: rows, columns"]); - writer.writeLine(matrix.rows.asArray); - writer.writeLine(matrix.cols.asArray); - // write the matrix into it by row, and close - matrix.rows.do{ |i| - var row; - writer.writeLine([""]); // blank line - writer.writeLine([format("// Row %", i)]); - - row = matrix.getRow(i); - row.do{ |j| writer.writeLine( j.asArray ) }; - }; - writer.close; - } - - prWriteMatrixToYML { arg pn, set, type, note, attributeDictionary; - var writer, defAttributes; - - writer = FileWriter( pn.fullPath ); - - // writer.writeLine(["matrix :"] ++ m.asArray.asString.split($ )); // all one line - - // overkill on formatting, but more readable... - writer.writeLine(["matrix : ["]); - matrix.rows.do{ |i| - var line, row; - row = matrix.getRow(i); - line = row.asString.split($ ); - if ((i+1) != matrix.rows) {line[line.size-1] = line.last ++ ","}; - writer.writeLine(line); - }; - writer.writeLine(["]"]); - - type !? { - writer.writeLine([]); - writer.writeLine( ["type", ":", type] ) - }; - - // write default attributes - defAttributes = [\kind, \dirOutputs, \dirInputs]; - if (type=='decoder') { - defAttributes = defAttributes ++ [\shelfK,\shelfFreq] - }; - - if (attributeDictionary.notNil) { - // make sure attribute dict doesn't explicitly set the attribute first - defAttributes.do{ |attribute| - attributeDictionary[attribute] ?? { - writer.writeLine([]); //newline for readability - writer.writeLine( [attribute, ":", this.tryPerform(attribute)] ) - } - }; - } { - defAttributes.do{ |attribute| - writer.writeLine([]); //newline for readability - writer.writeLine( [attribute, ":", this.tryPerform(attribute)] ) - }; - }; - - note !? { - writer.writeLine([]); - writer.writeLine( ["note", ":", note] ) - }; - - attributeDictionary !? { - attributeDictionary.keysValuesDo{ |k,v| - writer.writeLine([]); - writer.writeLine( [k.asString, ":", v] ) - } - }; - - writer.close; - } - - prParseMOSL { |pn| - var file, numRows, numCols, mtx, row; - file = FileReader.read(pn.fullPath); - numRows = nil; - numCols = nil; - mtx = []; - row = []; - file.do{ |line| - var val = line[0]; - switch( val, - "//", {}, // ignore comments - "", {}, // ignore blank line - { // found valid line - case - {numRows.isNil} { numRows = val.asInt } - {numCols.isNil} { numCols = val.asInt } - { - row = row.add(val.asFloat); - if (row.size==numCols) { - mtx = mtx.add(row); - row = []; - } - } - } - ) - }; - // test matrix dimensions - (mtx.size==numRows).not.if{ - Error( - format( - "Mismatch in matrix dimensions: rows specified [%], rows parsed from file [%]", - numRows, mtx.size - ) - ).throw - }; - mtx.do{ |row, i| - if (row.size!=numCols) { - Error( - format( - "Mismatch in matrix dimensions: rows % has % columns, but file species %", - i, row.size, numCols - ) - ).throw - } - }; - - ^mtx - } - - fileName { ^try {PathName(filePath).fileName} } - - loadFromLib { |...args| - var pathStr; - pathStr = this.kind.asString ++ "/"; - - args.do{ |argParam, i| - pathStr = if (i>0) { - format("%-%", pathStr, argParam.asString) - } { - format("%%", pathStr, argParam.asString) - }; - }; - - this.initFromFile( - // format("%/%-%.yml", this.kind, *args), - pathStr++".yml", - this.type - ); - - switch( this.type, - '\encoder', {this.initEncoderVarsForFiles}, // properly set dirInputs - '\decoder', {this.initDecoderVarsForFiles}, // properly set dirOutputs - '\xformer', {} - ) - } - -} - -FoaDecoderMatrix : AtkMatrix { - var shelfFreq, missing kernel database - { databasePath.isFolder.not } - { - errorMsg = "ATK kernel database missing!" + - "Please install % database.".format(kind) - } - - // --> unsupported SR - { PathName.new(subjectPath.parentLevelPath(2)).isFolder.not } - { - "Supported samplerates:".warn; - PathName.new(subjectPath.parentLevelPath(3)).folders.do({ - arg folder; - ("\t" + folder.folderName).postln; - }); - - errorMsg = "Samplerate = % is not available for".format(sampleRate) - + - "% kernel decoder.".format(kind) - } - - // --> unsupported kernelSize - { PathName.new(subjectPath.parentLevelPath(1)).isFolder.not } - { - "Supported kernel sizes:".warn; - PathName.new(subjectPath.parentLevelPath(2)).folders.do({ - arg folder; - ("\t" + folder.folderName).postln; - }); - - errorMsg = "Kernel size = % is not available for".format(kernelSize) - + - "% kernel decoder.".format(kind) - } - - // --> unsupported subject - { subjectPath.isFolder.not } - { - "Supported subjects:".warn; - PathName.new(subjectPath.parentLevelPath(1)).folders.do({ - arg folder; - ("\t" + folder.folderName).postln; - }); - - errorMsg = "Subject % is not available for".format(subjectID) - + - "% kernel decoder.".format(kind) - }; - - // throw error! - "\n".post; - Error(errorMsg).throw - }, { - score.isNil.if({ - if ( server.serverRunning.not, { // is server running? - - // throw server error! - Error( - "Please boot server: %. Encoder kernel failed to load.".format( - server.name.asString - ) - ).throw - }, { - // Else... everything is fine! Load kernel. - kernel = subjectPath.files.collect({ arg kernelPath; - chans.collect({ arg chan; - Buffer.readChannel(server, kernelPath.fullPath, channels: [chan], - action: { arg buf; - ( - kernelBundle = kernelBundle.add( - ["/b_allocReadChannel", buf.bufnum, kernelPath.fullPath, 0, kernelSize, chan] - ); - kernelInfo = kernelInfo.add([kernelPath.fullPath, buf.bufnum, [chan]]); - "Kernel %, channel % loaded.".format( - kernelPath.fileName, chan - ) - ).postln - } - ) - }) - }) - }) - }); - - score.isKindOf(CtkScore).if({ - kernel = subjectPath.files.collect({ arg kernelPath; - chans.collect({ arg chan; - var buf = CtkBuffer(kernelPath.fullPath, channels: [chan]); - kernelInfo = kernelInfo.add([kernelPath.fullPath, buf.bufnum, [chan]]); - score.add(buf); - buf; - }) - }) - }); - - score.isKindOf(Score).if({ - kernel = subjectPath.files.collect({ arg kernelPath; - chans.collect({ arg chan; - var buf; - buf = Buffer(server, kernelSize); - kernelBundle = kernelBundle.add( - ["/b_allocReadChannel", buf.bufnum, kernelPath.fullPath, 0, kernelSize, chan] - ); - kernelInfo = kernelInfo.add([kernelPath.fullPath, buf.bufnum, [chan]]); - buf; - }) - }); - score.add(kernelBundle) - }); - - (score.isKindOf(CtkScore).not && score.isKindOf(Score).not && score.notNil).if( { - Error( - "Score is not a Score or a CtkScore. Score is a %.".format( - score.class.asString - ) - ).throw - - }) - - - }) - } - - free { - var path; - kernel.shape.at(0).do({ arg i; - kernel.shape.at(1).do({ arg j; - path = kernel.at(i).at(j).path; - kernel.at(i).at(j).free; - ( - "Kernel %, channel % freed.".format( - PathName.new(path).fileName, j - ) - ).postln - }) - }) - } - - buffers { ^kernel.flat } - - kernelInfo { ^kernelInfo } - - kernelBundle { ^kernelBundle } - - dim { ^kernel.shape.at(0) - 1} - - numChannels { ^kernel.shape.at(1) } - - kernelSize { ^kernel.at(0).at(0).numFrames } - - numOutputs { ^kernel.shape.at(1) } - - dirOutputs { ^dirChannels } - - numInputs { ^kernel.shape.at(0) } - - dirInputs { ^this.numInputs.collect({ inf }) } - - type { ^'decoder' } - - printOn { arg stream; - stream << this.class.name << "(" <<* - [kind, this.dim, this.numChannels, subjectID, this.kernelSize] <<")"; - } -} - - -//------------------------------------------------------------------------ -// kernel encoders - -FoaEncoderKernel { - var missing kernel database - { databasePath.isFolder.not } - { - errorMsg = "ATK kernel database missing!" + - "Please install % database.".format(kind) - } - - // --> unsupported SR - { PathName.new(subjectPath.parentLevelPath(2)).isFolder.not } - { - "Supported samplerates:".warn; - PathName.new(subjectPath.parentLevelPath(3)).folders.do({ - arg folder; - ("\t" + folder.folderName).postln; - }); - - errorMsg = "Samplerate = % is not available for".format(sampleRate) - + - "% kernel encoder.".format(kind) - } - - // --> unsupported kernelSize - { PathName.new(subjectPath.parentLevelPath(1)).isFolder.not } - { - "Supported kernel sizes:".warn; - PathName.new(subjectPath.parentLevelPath(2)).folders.do({ - arg folder; - ("\t" + folder.folderName).postln; - }); - - errorMsg = "Kernel size = % is not available for".format(kernelSize) - + - "% kernel encoder.".format(kind) - } - - // --> unsupported subject - { subjectPath.isFolder.not } - { - "Supported subjects:".warn; - PathName.new(subjectPath.parentLevelPath(1)).folders.do({ - arg folder; - ("\t" + folder.folderName).postln; - }); - - errorMsg = "Subject % is not available for".format(subjectID) - + - "% kernel encoder.".format(kind) - }; - - // throw error! - "\n".post; - Error(errorMsg).throw - }, { - score.isNil.if( { - if ( server.serverRunning.not, { // is server running? - - // throw server error! - Error( - "Please boot server: %. Encoder kernel failed to load.".format( - server.name.asString - ) - ).throw - }, { - // Else... everything is fine! Load kernel. - kernel = subjectPath.files.collect({ arg kernelPath; - chans.collect({ arg chan; - Buffer.readChannel(server, kernelPath.fullPath, channels: [chan], - action: { arg buf; - ( - kernelBundle = kernelBundle.add( - ["/b_allocReadChannel", buf.bufnum, kernelPath.fullPath, 0, kernelSize, chan] - ); - kernelInfo = kernelInfo.add([kernelPath.fullPath, buf.bufnum, [chan]]); - "Kernel %, channel % loaded.".format( - kernelPath.fileName, chan - ) - ).postln - } - ) - }) - }) - }) - }); - score.isKindOf(CtkScore).if({ - kernel = subjectPath.files.collect({ arg kernelPath; - chans.collect({ arg chan; - var buf = CtkBuffer(kernelPath.fullPath, channels: [chan]); - kernelInfo = kernelInfo.add([kernelPath.fullPath, buf.bufnum, [chan]]); - score.add(buf); - buf; - }) - }) - }); - - score.isKindOf(Score).if({ - kernel = subjectPath.files.collect({ arg kernelPath; - chans.collect({ arg chan; - var buf; - buf = Buffer(server, kernelSize); - kernelBundle = kernelBundle.add( - ["/b_allocReadChannel", buf.bufnum, kernelPath.fullPath, 0, kernelSize, chan] - ); - kernelInfo = kernelInfo.add([kernelPath.fullPath, buf.bufnum, [chan]]); - buf; - }) - }); - score.add(kernelBundle) - }); - - (score.isKindOf(CtkScore).not && score.isKindOf(Score).not && score.notNil).if({ - Error( - "Score is not a Score or a CtkScore. Score is a %.".format( - score.class.asString - ) - ).throw - - }); - - - }) - } - - free { - var path; - kernel.shape.at(0).do({ arg i; - kernel.shape.at(1).do({ arg j; - path = kernel.at(i).at(j).path; - kernel.at(i).at(j).free; - ( - "Kernel %, channel % freed.".format( - PathName.new(path).fileName, j - ) - ).postln - }) - }) - } - - buffers { ^kernel.flat } - - kernelInfo { ^kernelInfo } - - kernelBundle { ^kernelBundle } - - dim { ^kernel.shape.at(1) - 1} - - numChannels { ^kernel.shape.at(0) } - - kernelSize { ^kernel.at(0).at(0).numFrames } - - numOutputs { ^kernel.shape.at(1) } - - dirInputs { ^dirChannels } - - numInputs { ^kernel.shape.at(0) } - - dirOutputs { ^this.numOutputs.collect({ inf }) } - - type { ^'encoder' } - - printOn { arg stream; - stream << this.class.name << "(" <<* - [kind, this.dim, this.numChannels, subjectID, this.kernelSize] <<")"; - } -} diff --git a/source/ATK/sc/Classes/extArray.sc b/source/ATK/sc/Classes/extArray.sc deleted file mode 100644 index 5b68834693..0000000000 --- a/source/ATK/sc/Classes/extArray.sc +++ /dev/null @@ -1,13 +0,0 @@ -+ Array { - - // set: FOA, HOA1, HOA2, etc. - // type: \encoder, \decoder, \xformer - // NOTE: set and type aren't currently enforced, but it's a - // good idea to provide it for writing to file - asAtkMatrix { arg set, type; - var mtx; - mtx = Matrix.with(this.asArray); - ^AtkMatrix.newFromMatrix(mtx, set, type); - } - -} diff --git a/source/ATK/sc/Classes/extPathName.sc b/source/ATK/sc/Classes/extPathName.sc deleted file mode 100644 index 028b01e3a9..0000000000 --- a/source/ATK/sc/Classes/extPathName.sc +++ /dev/null @@ -1,64 +0,0 @@ -/* - Copyright the ATK Community and Joseph Anderson, 2011 - J Anderson j.anderson[at]ambisonictoolkit.net - - - This file is part of SuperCollider3 version of the Ambisonic Toolkit (ATK). - - The SuperCollider3 version of the Ambisonic Toolkit (ATK) 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. - - The SuperCollider3 version of the Ambisonic Toolkit (ATK) 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 the - SuperCollider3 version of the Ambisonic Toolkit (ATK). If not, see - . -*/ - - -//--------------------------------------------------------------------- -// The Ambisonic Toolkit (ATK) is a soundfield kernel support library. -// -// Extension: PathName -// -// The Ambisonic Toolkit (ATK) is intended to bring together a number of tools and -// methods for working with Ambisonic surround sound. The intention is for the toolset -// to be both ergonomic and comprehensive, providing both classic and novel algorithms -// to creatively manipulate and synthesise complex Ambisonic soundfields. // -// The tools are framed for the user to think in terms of the soundfield kernel. By -// this, it is meant the ATK addresses the holistic problem of creatively controlling a -// complete soundfield, allowing and encouraging the composer to think beyond the placement -// of sounds in a sound-space and instead attend to the impression and image of a soundfield. -// This approach takes advantage of the model the Ambisonic technology presents, and is -// viewed to be the idiomatic mode for working with the Ambisonic technique. -// -// -// We hope you enjoy the ATK! -// -// For more information visit http://ambisonictoolkit.net/ or -// email info[at]ambisonictoolkit.net -// -//--------------------------------------------------------------------- - -+ PathName { - - parentLevelPath { arg index; - - var ci = this.colonIndices; - - ^if( index == 0, { - fullPath - }, { - if((fullPath.last.isPathSeparator) && (ci.size > 1), { - fullPath.copyRange(0, ci[ci.size - (1 + index)]) - }, { - fullPath.copyRange(0, ci[ci.size - index]) - }) - }) - } -} \ No newline at end of file From 94a2c2fdcceb47bc0841c21bdb6d5f1be018a6ea Mon Sep 17 00:00:00 2001 From: Joseph Anderson Date: Wed, 14 Jun 2017 18:14:12 -0700 Subject: [PATCH 2/3] Remove HelpSource files To Quarkify the ATK, both Classes and HelpSource are removed from SC3-plugins and are now found at https://github.com/ambisonictoolkit/atk-sc3. --- source/ATK/sc/HelpSource/Classes/Atk.schelp | 172 --- .../HelpSource/Classes/AtkKernelConv.schelp | 78 -- .../sc/HelpSource/Classes/AtkMatrix.schelp | 117 -- .../sc/HelpSource/Classes/AtkMatrixMix.schelp | 92 -- source/ATK/sc/HelpSource/Classes/Foa.schelp | 12 - .../sc/HelpSource/Classes/FoaAsymmetry.schelp | 46 - .../sc/HelpSource/Classes/FoaBalance.schelp | 48 - .../sc/HelpSource/Classes/FoaDecode.schelp | 871 -------------- .../Classes/FoaDecoderKernel.schelp | 386 ------- .../Classes/FoaDecoderMatrix.schelp | 625 ---------- .../sc/HelpSource/Classes/FoaDirect.schelp | 48 - .../sc/HelpSource/Classes/FoaDirectO.schelp | 47 - .../sc/HelpSource/Classes/FoaDirectX.schelp | 48 - .../sc/HelpSource/Classes/FoaDirectY.schelp | 48 - .../sc/HelpSource/Classes/FoaDirectZ.schelp | 42 - .../sc/HelpSource/Classes/FoaDominate.schelp | 47 - .../sc/HelpSource/Classes/FoaDominateX.schelp | 45 - .../sc/HelpSource/Classes/FoaDominateY.schelp | 41 - .../sc/HelpSource/Classes/FoaDominateZ.schelp | 41 - .../sc/HelpSource/Classes/FoaEncode.schelp | 1020 ----------------- .../Classes/FoaEncoderKernel.schelp | 307 ----- .../Classes/FoaEncoderMatrix.schelp | 486 -------- .../ATK/sc/HelpSource/Classes/FoaFocus.schelp | 47 - .../sc/HelpSource/Classes/FoaFocusX.schelp | 46 - .../sc/HelpSource/Classes/FoaFocusY.schelp | 42 - .../sc/HelpSource/Classes/FoaFocusZ.schelp | 42 - .../sc/HelpSource/Classes/FoaMirror.schelp | 47 - .../ATK/sc/HelpSource/Classes/FoaNFC.schelp | 48 - .../ATK/sc/HelpSource/Classes/FoaPanB.schelp | 37 - .../ATK/sc/HelpSource/Classes/FoaPress.schelp | 47 - .../sc/HelpSource/Classes/FoaPressX.schelp | 45 - .../sc/HelpSource/Classes/FoaPressY.schelp | 40 - .../sc/HelpSource/Classes/FoaPressZ.schelp | 40 - .../sc/HelpSource/Classes/FoaProximity.schelp | 46 - .../HelpSource/Classes/FoaPsychoShelf.schelp | 47 - .../ATK/sc/HelpSource/Classes/FoaPush.schelp | 47 - .../ATK/sc/HelpSource/Classes/FoaPushX.schelp | 45 - .../ATK/sc/HelpSource/Classes/FoaPushY.schelp | 40 - .../ATK/sc/HelpSource/Classes/FoaPushZ.schelp | 40 - .../ATK/sc/HelpSource/Classes/FoaRTT.schelp | 51 - .../sc/HelpSource/Classes/FoaRotate.schelp | 43 - .../Classes/FoaSpeakerMatrix.schelp | 84 -- .../ATK/sc/HelpSource/Classes/FoaTilt.schelp | 44 - .../sc/HelpSource/Classes/FoaTransform.schelp | 884 -------------- .../sc/HelpSource/Classes/FoaTumble.schelp | 44 - .../ATK/sc/HelpSource/Classes/FoaXform.schelp | 274 ----- .../Classes/FoaXformerMatrix.schelp | 610 ---------- .../ATK/sc/HelpSource/Classes/FoaZoom.schelp | 48 - .../ATK/sc/HelpSource/Classes/FoaZoomX.schelp | 46 - .../ATK/sc/HelpSource/Classes/FoaZoomY.schelp | 47 - .../ATK/sc/HelpSource/Classes/FoaZoomZ.schelp | 42 - .../sc/HelpSource/Classes/asymmetry_fig.png | Bin 44083 -> 0 bytes .../ATK/sc/HelpSource/Classes/balance_fig.png | Bin 43655 -> 0 bytes .../ATK/sc/HelpSource/Classes/direct_fig.png | Bin 42435 -> 0 bytes .../sc/HelpSource/Classes/direct_x_fig.png | Bin 43900 -> 0 bytes .../sc/HelpSource/Classes/direct_y_fig.png | Bin 42802 -> 0 bytes .../sc/HelpSource/Classes/dominance_fig.png | Bin 44450 -> 0 bytes .../ATK/sc/HelpSource/Classes/focus_fig.png | Bin 42528 -> 0 bytes .../ATK/sc/HelpSource/Classes/press_fig.png | Bin 42546 -> 0 bytes source/ATK/sc/HelpSource/Classes/push_fig.png | Bin 42563 -> 0 bytes source/ATK/sc/HelpSource/Classes/zoom_fig.png | Bin 42424 -> 0 bytes .../Guides/ATK-SynthDef-Examples.schelp | 582 ---------- .../Guides/Guide-to-ATK-Matrix-Files.schelp | 500 -------- .../HelpSource/Guides/Intro-to-the-ATK.schelp | 467 -------- .../ATK/sc/HelpSource/Guides/atk-network.pdf | Bin 115837 -> 0 bytes .../ATK/sc/HelpSource/Guides/atknetwork.png | Bin 55075 -> 0 bytes .../HelpSource/Other/ATKDocsLicensing.schelp | 14 - .../sc/HelpSource/Other/ATKLicensing.schelp | 133 --- .../ATK/sc/HelpSource/Other/ccbysa3_88x31.png | Bin 5083 -> 0 bytes .../ATK/sc/HelpSource/Other/gplv3-88x31.png | Bin 2666 -> 0 bytes 70 files changed, 9326 deletions(-) delete mode 100644 source/ATK/sc/HelpSource/Classes/Atk.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/AtkKernelConv.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/AtkMatrix.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/AtkMatrixMix.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/Foa.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaAsymmetry.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaBalance.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaDecode.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaDecoderKernel.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaDecoderMatrix.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaDirect.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaDirectO.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaDirectX.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaDirectY.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaDirectZ.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaDominate.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaDominateX.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaDominateY.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaDominateZ.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaEncode.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaEncoderKernel.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaEncoderMatrix.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaFocus.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaFocusX.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaFocusY.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaFocusZ.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaMirror.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaNFC.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaPanB.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaPress.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaPressX.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaPressY.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaPressZ.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaProximity.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaPsychoShelf.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaPush.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaPushX.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaPushY.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaPushZ.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaRTT.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaRotate.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaSpeakerMatrix.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaTilt.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaTransform.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaTumble.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaXform.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaXformerMatrix.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaZoom.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaZoomX.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaZoomY.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/FoaZoomZ.schelp delete mode 100644 source/ATK/sc/HelpSource/Classes/asymmetry_fig.png delete mode 100644 source/ATK/sc/HelpSource/Classes/balance_fig.png delete mode 100644 source/ATK/sc/HelpSource/Classes/direct_fig.png delete mode 100644 source/ATK/sc/HelpSource/Classes/direct_x_fig.png delete mode 100644 source/ATK/sc/HelpSource/Classes/direct_y_fig.png delete mode 100644 source/ATK/sc/HelpSource/Classes/dominance_fig.png delete mode 100644 source/ATK/sc/HelpSource/Classes/focus_fig.png delete mode 100644 source/ATK/sc/HelpSource/Classes/press_fig.png delete mode 100644 source/ATK/sc/HelpSource/Classes/push_fig.png delete mode 100644 source/ATK/sc/HelpSource/Classes/zoom_fig.png delete mode 100644 source/ATK/sc/HelpSource/Guides/ATK-SynthDef-Examples.schelp delete mode 100644 source/ATK/sc/HelpSource/Guides/Guide-to-ATK-Matrix-Files.schelp delete mode 100644 source/ATK/sc/HelpSource/Guides/Intro-to-the-ATK.schelp delete mode 100644 source/ATK/sc/HelpSource/Guides/atk-network.pdf delete mode 100644 source/ATK/sc/HelpSource/Guides/atknetwork.png delete mode 100644 source/ATK/sc/HelpSource/Other/ATKDocsLicensing.schelp delete mode 100644 source/ATK/sc/HelpSource/Other/ATKLicensing.schelp delete mode 100644 source/ATK/sc/HelpSource/Other/ccbysa3_88x31.png delete mode 100644 source/ATK/sc/HelpSource/Other/gplv3-88x31.png diff --git a/source/ATK/sc/HelpSource/Classes/Atk.schelp b/source/ATK/sc/HelpSource/Classes/Atk.schelp deleted file mode 100644 index a00c73b283..0000000000 --- a/source/ATK/sc/HelpSource/Classes/Atk.schelp +++ /dev/null @@ -1,172 +0,0 @@ -CLASS:: Atk -summary:: a class that stores some global variables for the Ambisonic Toolkit -categories:: Libraries>Ambisonic Toolkit>Internals -related:: Guides/Intro-to-the-ATK - -DESCRIPTION:: -The Atk class defines variables that may be used by the rest of the ATK library, including resources for kernel encoding and decoding and sample soundfile paths. - - -CLASSMETHODS:: - -METHOD:: sets - -returns:: an Array listing valid ATK sets. (Currently only code::'FOA':: is -supported, code::'HOAn':: is in development!) - -SUBSECTION:: ATK's default asset directories - -NOTE:: The following methods have both strong::user:: and -strong::system:: versions. Which version you should use will depend on whether -you have the ATK assets installed at the user level: -code:: -Platform.userAppSupportDir -:: -or the system level: -code:: -Platform.systemAppSupportDir -:: -:: - -METHOD:: userSupportDir -set the user support dir where ATK resources are located - -argument:: userSupportDirIn -the path to the ATK folder containing your ATK support files - -METHOD:: userSupportDir - -returns::the path to the ATK support dir. Defaults to: -code::Platform.userAppSupportDir.dirname ++ "/ATK";:: - -METHOD:: userSoundsDir - -returns:: a path to the 'sounds' dir inside the ATK support dir - -METHOD:: userMatrixDir - -returns:: a path to the 'matrices' dir inside the ATK support dir - -METHOD:: userKernelDir - -returns:: a path to the 'kernel' dir inside the ATK support dir - -METHOD:: openUserSupportDir -runs a link::Classes/String#-unixCmd:: to open the userAppSupport dir. Uses -'open' (OS X only) - -METHOD:: createUserSupportDir -runs a unix command to create the user support dir for ATK - -METHOD:: systemSupportDir - -returns::the path to the ATK support dir. Defaults to: -code::Platform.systemAppSupportDir.dirname ++ "/ATK";:: - -METHOD:: systemSoundsDir - -returns:: a path to the 'sounds' dir inside the ATK system support dir - -METHOD:: systemMatrixDir - -returns:: a path to the 'matrices' dir inside the ATK system support dir - -METHOD:: systemKernelDir - -returns:: a path to the 'kernel' dir inside the ATK system support dir - -METHOD:: openSystemSupportDir -runs a link::Classes/String#-unixCmd:: to open the systemAppSupport dir. Uses -'open' (OS X only) - -METHOD:: createSystemSupportDir -runs a unix command to create the system support dir for ATK - - -SUBSECTION:: User asset /extensions directory - -The code::extensions:: directory is where the ATK looks for assets generated or -added by you, such as your own matrices or kernels. It is located in -code:: -Atk.userExtensionsDir -:: -or if the ATK assets are installed system-wide, in: -code:: -Atk.systemExtensionsDir -:: -It is strong::not installed by default::. It can be -created by running -code:: -Atk.createExtensionsDir -:: -You can find out more about the directory structure in the -link::Guides/Guide-to-ATK-Matrix-Files::. - -METHOD:: userExtensionsDir - -returns:: a path to the 'extensions' dir inside the ATK support dir. This is where -user-generated matrices and kernels are stored to and rerieved from by default. - -METHOD:: systemExtensionsDir - -returns:: a path to the 'extensions' dir inside the ATK support dir. This is where -user-generated matrices and kernels are stored to and rerieved from by default. - -METHOD:: postMyMatrices -Displays a formatted list the matrices stored in your -code::ATK/extensions/matrices:: directory. The strong::set:: and -strong::type:: arguments are optional filters to display only matrices of a the -specified strong::set:: and strong::type::. -NOTE:: This method first searches the code::Atk.userExtensionsDir:: and if no -directory is found, it proceeds to check for a system-wide installation in -code::Atk.systemExtensionsDir::. -:: - -METHOD:: createExtensionsDir -Creates the code::extensions:: folder, along with numerous subdirectories in a -pre-defined structure, in your ATK assets folder. This is where the ATK looks -for assets generated or added by you, such as your own matrices or kernels. -You can find out more about the directory structure and its use in the -link::Guides/Guide-to-ATK-Matrix-Files::. - - -SUBSECTION:: Convenience methods for accessing subdirectories - -The following methods are used by ATK internally but listed here in the case -you find them useful. - -METHOD:: getAtkOpPath -Get the Link::Classes/PathName:: of the strong::op:: directory (code::'kernels':: or -code::'matrices'::), in either the "built-in" ATK support directory or -the user code::extension:: subdirectory (strong::isExtension:: = true). - -METHOD:: getAtkOpSubPath - -Get the Link::Classes/PathName:: of the subdirectory within the -code::ATK/'op'/'set'/'type':: folder. -NOTE:: This method first searches the code::Atk.userExtensionsDir:: and if no -directory is found, it proceeds to check the code::Atk.systemExtensionsDir::. -:: - -METHOD:: getAtkMatrixSubPath -A shortcut for code::Atk.getAtkOpSubPath(set, op, 'matrices'):: - -METHOD:: getAtkKernelSubPath -A shortcut for code::Atk.getAtkOpSubPath(set, op, 'kernels'):: - -METHOD:: getExtensionSubPath -Get the Link::Classes/PathName:: of the subdirectory within the -code::ATK/extensions/'op'/'set'/'type':: folder. -NOTE:: This method first searches the code::Atk.userExtensionsDir:: and if no -directory is found, it proceeds to check the code::Atk.systemExtensionsDir::. -:: - -METHOD:: getMatrixExtensionSubPath -A shortcut for code::Atk.getExtensionSubPath(set, op, 'matrices'):: - -METHOD:: getKernelExtensionSubPath -A shortcut for code::Atk.getExtensionSubPath(set, op, 'kernels'):: - - - -PRIVATE:: checkSet, sets, getAtkLibSubPath, getKernelExtensionPath, getBuiltInPath, getMatrixBuiltInPath, resolveMtxPath, folderExists diff --git a/source/ATK/sc/HelpSource/Classes/AtkKernelConv.schelp b/source/ATK/sc/HelpSource/Classes/AtkKernelConv.schelp deleted file mode 100644 index 3baf4da869..0000000000 --- a/source/ATK/sc/HelpSource/Classes/AtkKernelConv.schelp +++ /dev/null @@ -1,78 +0,0 @@ -CLASS:: AtkKernelConv -summary:: Kernel convolution from the Ambisonic Toolkit (ATK) -categories:: Libraries>Ambisonic Toolkit>Internals, UGens>Multichannel>Ambisonics -related:: Classes/Convolution2, Classes/AtkMatrixMix - -DESCRIPTION:: -Convolve an link::Classes/Array:: of channels to an link::Classes/Array:: of channels. - -note:: -link::Classes/AtkKernelConv:: is usually called internally by the Ambisonic Toolkit's encoders, transformers and decoders. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The input signal, an array. - -argument:: kernel -The convolution kernel. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -returns:: -An array of channels. - - -discussion:: - -note:: In normal circumstances, the user will not call link::Classes/AtkKernelConv:: directly.:: - - -EXAMPLES:: - -subsection:: Monophonic to decorrelated FOA -code:: -// hand code a mono signal to a decorrelated soundfield in B-format -// NOTE: the demonstrated kernel is not ideal for this task - -// define encoding kernel -( -var kernelSize; -var scale; - -kernelSize = 256; -scale = 24.neg.dbamp; - -~kernel = [[ - Buffer.loadCollection(s, FloatArray.fill(kernelSize, {(3/2).sqrt * scale.rand2})), - Buffer.loadCollection(s, FloatArray.fill(kernelSize, {scale.rand2})), - Buffer.loadCollection(s, FloatArray.fill(kernelSize, {scale.rand2})), - Buffer.loadCollection(s, FloatArray.fill(kernelSize, {scale.rand2})) -]] -) - -// convolve -( -{ - var sig; - - // pink noise - sig = PinkNoise.ar; - - // encode - AtkKernelConv.ar(sig, ~kernel); -}.scope -) - -// free kernel when finished -~kernel.at(0).do({arg kern; kern.free}) -:: diff --git a/source/ATK/sc/HelpSource/Classes/AtkMatrix.schelp b/source/ATK/sc/HelpSource/Classes/AtkMatrix.schelp deleted file mode 100644 index 1b598628e4..0000000000 --- a/source/ATK/sc/HelpSource/Classes/AtkMatrix.schelp +++ /dev/null @@ -1,117 +0,0 @@ -TITLE:: AtkMatrix -summary:: A superclass to the Atk's various matrix classes. -categories:: Libraries>Ambisonic Toolkit>Internals -related:: Classes/FoaEncoderMatrix, Classes/FoaDecoderMatrix, Classes/FoaXformerMatrix, Classes/Matrix, Guides/Guide-to-ATK-Matrix-Files - -DESCRIPTION:: -An AtkMatrix is not typically instantiated directly, but rather through one of its subclasses: -link::Classes/FoaEncoderMatrix::, link::Classes/FoaDecoderMatrix::, and link::Classes/FoaXformerMatrix::. - - -CLASSMETHODS:: - -METHOD:: new -code::*new:: should not be called directly from AtkMatrix but rather is called from the various creation methods of its subclasses: -link::Classes/FoaEncoderMatrix::, link::Classes/FoaDecoderMatrix::, or link::Classes/FoaXformerMatrix::. - - -METHOD:: newFromMatrix -Create an instance from a raw 2D link::Classes/Matrix::. - -ARGUMENT:: aMatrix -A link::Classes/Matrix:: in the form of -code:: -Matrix.with([[row1],[row2],...[rowN]]) -:: - -ARGUMENT:: set -code::'FOA', 'HOA1', 'HOA2', ... etc::. -Set describes both the signal set and the tool set, encompassing the Ambisonic order, as well as channel ordering and normalisation. - -ARGUMENT:: type -code::'decoder', 'encoder', or 'xformer'::. - -NOTE:: -strong::set:: and strong::type:: will be required if the code::AtkMatrix:: will subsequently be written to a file. -:: - - -INSTANCEMETHODS:: - -PRIVATE:: set, kind - -METHOD:: op -Answers code::'matrix'::, i.e. the type of operation used to compute the resulting signals. - -METHOD:: matrix -Returns the raw coefficient Matrix. - -METHOD:: info -A convenience method to post the properties of the matrix, including metadata -if the matrix was loaded from a code::.yml:: file. - -METHOD:: fileParse -If the instance was created by loading a code::.yml:: file, this method returns -the link::Classes/IdentityDictionary:: containing the parsed metadata. This can -be useful if anything was stored in the metadata that can be subsequently used -once reloaded, such as encoding directions, rotations, etc. -Note:: For simply a quick glance at the metadata, it's recommended to use link::#-info::.:: - -METHOD:: filePath -Answers the path of the file used to create the instance, or code::nil:: if not created by loading a matrix from a file. - -METHOD:: fileName -Answers the name of the file used to create the instance, or code::nil:: if not created by loading a matrix from a file. - -METHOD:: writeToFile -Write the matrix to a file - -ARGUMENT:: fileNameOrPath -A String of the file name. The file extension determines the format: -list:: -## code::.yml:: allows for additional user-specified metadata (recommended). -## code::.txt:: writes the matrix coefficients only, in rows. -## code::.mosl.txt:: creates basic matrix files compatible with the link::http://www.ambisonictoolkit.net/download/reaper/##ATK for Reaper::, a set of link::http://www.reaper.fm/sdk/js/js.php##JSFX plugins:: for the link::http://www.reaper.fm/##Reaper:: DAW. -:: -You may provide a full path if you would like to save the file somewhere other -than the default location in the Atk code::extensions:: folder. See the -Discussion below for more information. - -ARGUMENT:: note -A String that is a short description or bit of info about the matrix to store for future reference. - -ARGUMENT:: attributeDictionary -A Dictionary containing any information that's useful to store in key:value pairs. Keys that match getters in the AtkMatrix will take precedence over the defaults. See the Discussion for more details. - -ARGUMENT:: overwrite -A boolean specifying whether you'd like to force overwriting an existing file of the same name and extension. - -DISCUSSION:: - -The link::Guides/Guide-to-ATK-Matrix-Files:: offers examples and more discussion regarding -writing and reading matrices and metadata, including how to generate -matrices for use in Reaper. - - -METHOD:: info -A convenience method to post the properties of the matrix, including metadata -if the matrix was loaded from a code::.yml:: file. - - -METHOD:: fileParse -If the instance was created by loading a code::.yml:: file, this method returns -the link::Classes/IdentityDictionary:: containing the parsed metadata. This can -be useful if anything was stored in the metadata that can be subsequently used -once reloaded, such as encoding directions, rotations, etc. -Note:: For simply a quick glance at the metadata, it's recommended to use link::#-info::.:: - - -METHOD:: filePath -Answers the path of the file used to create the instance, or code::nil:: if not created by loading a matrix from a file. - - -METHOD:: fileName -Answers the name of the file used to create the instance, or code::nil:: if not created by loading a matrix from a file. - - -PRIVATE:: prWriteMatrixToMOSL, prWriteMatrixToYML, prWriteMatrixToTXT, prParseMOSL, initFromMatrix, initFromFile, loadFromLib, prWriteToFile diff --git a/source/ATK/sc/HelpSource/Classes/AtkMatrixMix.schelp b/source/ATK/sc/HelpSource/Classes/AtkMatrixMix.schelp deleted file mode 100644 index 8b9ebab7c4..0000000000 --- a/source/ATK/sc/HelpSource/Classes/AtkMatrixMix.schelp +++ /dev/null @@ -1,92 +0,0 @@ -CLASS:: AtkMatrixMix -summary:: Matrix mixer from the Ambisonic Toolkit (ATK) -categories:: Libraries>Ambisonic Toolkit>Internals, UGens>Multichannel>Ambisonics -related:: Classes/Mix, Classes/AtkKernelConv - - -DESCRIPTION:: -Mix an link::Classes/Array:: of channels to an link::Classes/Array:: of channels. - -note:: -link::Classes/AtkMatrixMix:: is usually called internally by the Ambisonic Toolkit's encoders, transformers and decoders. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The input signal, an array. - -argument:: matrix -The mixing matrix. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -returns:: -An array of channels. - - -discussion:: - -note:: In normal circumstances, the user will not call link::Classes/AtkMatrixMix:: directly.:: - - - -EXAMPLES:: - -subsection:: Monophonic to FOA -code:: -// hand code a mono signal to a planewave in B-format -( -{ - var matrix; - var sig; - - // define encoding matrix - matrix = Matrix.with([ - [ 2.sqrt.reciprocal ], - [ 1 ], - [ 0 ], - [ 0 ] - ]); - - // pink noise - sig = PinkNoise.ar; - - // encode - AtkMatrixMix.ar(sig, matrix); -}.scope -) -:: - -subsection:: Stereophonic to FOA -code:: -// hand code a stereo signal to a +/-45deg in B-format -( -{ - var matrix; - var sig; - - // define encoding matrix - matrix = Matrix.with([ - [ 2.sqrt.reciprocal, 2.sqrt.reciprocal ], - [ 2.sqrt.reciprocal, 2.sqrt.reciprocal ], - [ 2.sqrt.reciprocal, 2.sqrt.reciprocal.neg ], - [ 0, 0 ] - ]); - - // pink noise - sig = PinkNoise.ar([1, 1]); - - // encode - AtkMatrixMix.ar(sig, matrix); -}.scope -) -:: \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/Foa.schelp b/source/ATK/sc/HelpSource/Classes/Foa.schelp deleted file mode 100644 index 0544413ee0..0000000000 --- a/source/ATK/sc/HelpSource/Classes/Foa.schelp +++ /dev/null @@ -1,12 +0,0 @@ -CLASS:: Foa -summary:: First Order Ambisonic (FOA) UGen superclass -categories:: Libraries>Ambisonic Toolkit>Internals - - -DESCRIPTION:: -UGen superclass from the Ambisonic Toolkit (ATK) - -note:: -In normal circumstances, the user will not call link::Classes/Foa:: directly. -:: - diff --git a/source/ATK/sc/HelpSource/Classes/FoaAsymmetry.schelp b/source/ATK/sc/HelpSource/Classes/FoaAsymmetry.schelp deleted file mode 100644 index 28345b12eb..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaAsymmetry.schelp +++ /dev/null @@ -1,46 +0,0 @@ -CLASS:: FoaAsymmetry -summary:: First Order Ambisonic (FOA) asymmetry transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply asymmetry to a first order ambisonic signal (B-format). - - -NOTE:: -link::Classes/FoaAsymmetry:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: Positive values of strong::angle:: rotate code:: [0, -pi/2] :: towards code:: [0, 0] ::, and at pi/2 collapse the soundfield to a planewave. Negative values rotate code:: [0, pi/2] :: towards code:: [0, 0] ::. The default, 0, results in no change. - - - -anchor::figure:: - -image::asymmetry_fig.png#Asymmetry imaging:: - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newAsymmetry:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaBalance.schelp b/source/ATK/sc/HelpSource/Classes/FoaBalance.schelp deleted file mode 100644 index 4a93c720e0..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaBalance.schelp +++ /dev/null @@ -1,48 +0,0 @@ -CLASS:: FoaBalance -summary:: First Order Ambisonic (FOA) balance transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaZoomX, Classes/FoaZoomY, Classes/FoaZoomZ, Classes/FoaZoom, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Soundfield balance. A synonym for link::Classes/FoaZoomY:: - -Apply zoom to a first order ambisonic signal (B-format) along the y-axis. - - -NOTE:: -link::Classes/FoaZoomY:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - - -discussion:: Zoom is a normailised dominance variant, specified in terms of a distortion angle. Positive values of strong::angle:: increase gain at code:: [0, pi/2] ::, while reducing at code:: [0, -pi/2] ::. Negative values do the inverse. The default, 0, results in no change. - -anchor::figure:: - -image::balance_fig.png#Balance imaging:: - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newZoomY:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. diff --git a/source/ATK/sc/HelpSource/Classes/FoaDecode.schelp b/source/ATK/sc/HelpSource/Classes/FoaDecode.schelp deleted file mode 100644 index 84c28e35ce..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaDecode.schelp +++ /dev/null @@ -1,871 +0,0 @@ -CLASS:: FoaDecode -summary:: First Order Ambisonic (FOA) decoder -categories:: Libraries>Ambisonic Toolkit>FOA>Decoding, UGens>Multichannel>Ambisonics -related:: Classes/FoaDecoderMatrix, Classes/FoaDecoderKernel - -DESCRIPTION:: -Renders (decodes) a first order ambisonic signal (B-format) to speaker feeds in a variety of configurations. link::Classes/DecodeB2:: is the SuperCollider inbuilt equivalent. - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: decoder -link::Classes/FoaDecoderMatrix:: or link::Classes/FoaDecoderKernel:: instance. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -returns:: -An array of channels, one for each speaker. - - -EXAMPLES:: - -The examples below are intended to briefly illustrate some of the first order decoding options made available in the Ambisonic Toolkit. The user is encouraged to carefully review the features of link::Classes/FoaDecoderMatrix:: and link::Classes/FoaDecoderKernel:: to gain a deeper understanding of the flexibility of these tools. - -As the Ambisonic technique is a hierarchal system, numerous options for playback are possible. These include two channel stereo, two channel binaural, 2D horizontal only surround (pantophonic) and full 3D with height surround (periphonic). A brief introduction is explored below. - - -Encoded as an omnidirectional soundfield, link::Classes/PinkNoise:: is used as the example sound source. In a well aligned, dampend studio environment, this usually sounds "in the head". link::Classes/FoaPush:: is used to "push" the omnidirectional soundfield so that it becomes a planewave (infinite distance, in an anechoic environment) arriving from some direction. - -The soundfield is controlled by link::Classes/MouseX:: and link::Classes/MouseY::, where link::Classes/MouseX:: specifies the incident azimuth angle (pi to -pi; left to right of display) and link::Classes/MouseY:: the link::Classes/FoaPush:: angle (0 to pi/2; bottom to top of display). With the mouse at the bottom of the display, the soundfield remains omnidirectional. Placed at the top of the display, the soundfield becomes directional, and varying left/right position will vary the incident azimuth of the resulting planewave. - -Before exploring the examples below, it is suggested you confirm your -link::Classes/Server:: has enough output channels to support your chosen -decoder. You can query the server: - -code:: -myServer.options.numOutputBusChannels -:: - -An example link::Classes/Function::, code:: ~checkMyServerOutputs::, can -be found link::Guides/Intro-to-the-ATK#Choose a decoder#here::. -code:: ~checkMyServerOutputs:: throws a warning if -code::myServer.options.numOutputBusChannels < myDecoder.numOutputs::. If you -need to update your link::Classes/Server::'s number of output bus channels, -review the example found link::Classes/ServerOptions#examples#here::. - - -subsection:: Virtual microphone stereo decoder - -The soundfield may be decoded to stereo using a pair of virtual microphones. - -note:: A matrix type decoder, see link::Classes/FoaDecoderMatrix#*newStereo:: for further details.:: - -code:: -// ------------------------------------------------------------ -// virtual microphone stereo decoder -// -// mono pink noise source -// omni encoder - - -// define encoder / decoder matrices -~encoder = FoaEncoderMatrix.newOmni -~decoder = FoaDecoderMatrix.newStereo - - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -~decoder.kind -~decoder.numChannels -~decoder.dirChannels.raddeg - -( -{ - var sig;// audio signal - var angle, azim; // angle and azimuth control - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - // ------------------------------------------------------------ - // decode (to stereo) - FoaDecode.ar(sig, ~decoder); - -}.scope; -) - -// free kernel -~decoder.free - -// ------------------------------------------------------------ -:: - - -subsection:: Ambisonic UHJ stereo decoder - -Ambisonic UHJ stereo footnote::See: link::http://en.wikipedia.org/wiki/Ambisonic_UHJ_format:::: is the 'native' stereo format for Ambisonics. A B-format signal (2D, with some losses) can be recovered from a UHJ decoded signal through the use of link::Classes/FoaEncoderKernel#*newUHJ::. - - - -note:: A kernel type decoder, see link::Classes/FoaDecoderKernel#*newUHJ:: for further details.:: - -warning:: Kernel decoders require special care. Allow the kernel time to load before attempting to use. Additionally, the kernel buffer should be freed through the use of link::Classes/FoaDecoderKernel#-free:: after use.:: - - - -code:: -// ------------------------------------------------------------ -// UHJ (stereo) decoder -// -// mono pink noise source -// omni encoder - - -// define encoder / decoder matrices -~encoder = FoaEncoderMatrix.newOmni -~decoder = FoaDecoderKernel.newUHJ // kernel decoders should be freed after use!! - // free below... - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -~decoder.kind -~decoder.numChannels -~decoder.dirChannels.raddeg - -( -{ - var sig;// audio signal - var angle, azim; // angle and azimuth control - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - // ------------------------------------------------------------ - // decode (to stereo) - FoaDecode.ar(sig, ~decoder); - -}.scope; -) - -// free kernel -~decoder.free - -// ------------------------------------------------------------ -:: - -subsection:: Synthetic binaural decoder - - -The Ambisonic Tookit provides a synthetic spherical head model HRTF decoder. footnote::See: R. O. Duda, "Modeling head related transfer functions," in Proceedings of the Twenty-Seventh Annual Asilomar Conference on Signals, Systems and Computers, Asilomar, CA, 1993.:: Ten subjects with varying head sizes are available. Audition to find one that works best for you. - -Additionally, HRTF decoders computed from measured HRIRs are also available: link::Classes/FoaDecoderKernel#*newListen:: & link::Classes/FoaDecoderKernel#*newCIPIC::. - - -note:: A kernel type decoder, see link::Classes/FoaDecoderKernel#*newSpherical:: for further details.:: - -warning:: Kernel decoders require special care. Allow the kernel time to load before attempting to use. Additionally, the kernel buffer should be freed through the use of link::Classes/FoaDecoderKernel#-free:: after use.:: - - -code:: -// ------------------------------------------------------------ -// Binaural (synthetic) decoder -// -// mono pink noise source -// omni encoder - - -// define encoder / decoder matrices -~encoder = FoaEncoderMatrix.newOmni -~decoder = FoaDecoderKernel.newSpherical // kernel decoders should be freed after use!! - // free below... - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -~decoder.kind -~decoder.numChannels -~decoder.dirChannels.raddeg - -( -{ - var sig;// audio signal - var angle, azim; // angle and azimuth control - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - // ------------------------------------------------------------ - // decode (to binaural) - FoaDecode.ar(sig, ~decoder); - -}.scope; -) - -// free kernel -~decoder.free - -// ------------------------------------------------------------ -:: - - -subsection:: CIPIC binaural decoder - -Measured HRTF decoder, with measurements from the University of California Davis' link::http://interface.cipic.ucdavis.edu/sound/hrtf.html##CIPIC HRTF database::. footnote::See: link::http://interface.cipic.ucdavis.edu/sound/hrtf.html:::: Forty-five subjects with varying head sizes are available. Audition to find one that works best for you. - - -note:: A kernel type decoder, see link::Classes/FoaDecoderKernel#*newCIPIC:: for further details.:: - -warning:: Kernel decoders require special care. Allow the kernel time to load before attempting to use. Additionally, the kernel buffer should be freed through the use of link::Classes/FoaDecoderKernel#-free:: after use.:: - -code:: -// ------------------------------------------------------------ -// Binaural (CIPIC) decoder -// -// mono pink noise source -// omni encoder - - -// define encoder / decoder matrices -~encoder = FoaEncoderMatrix.newOmni -~decoder = FoaDecoderKernel.newCIPIC // kernel decoders should be freed after use!! - // free below... - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -~decoder.kind -~decoder.numChannels -~decoder.dirChannels.raddeg - -( -{ - var sig;// audio signal - var angle, azim; // angle and azimuth control - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - // ------------------------------------------------------------ - // decode (to binaural) - FoaDecode.ar(sig, ~decoder); - -}.scope; -) - -// free kernel -~decoder.free - -// ------------------------------------------------------------ -:: - - -subsection:: Quadraphonic decoder - -The Ambisonic Toolkit provides an optimised quadraphonic decoder with variable loudspeaker angle. The below example uses the default settings, which results in a square layout, code::'single':: band type ( code::'energy':: ) decoder. This sort of decoder is suitable for mid-scale playback, though, for best results for an audience, the use of a larger array (5+ loudspeakers) is advised. link::Classes/FoaDecoderMatrix#*newPanto:: or link::Classes/FoaDecoderMatrix#*newDiametric:: would be appropriate. - -A psychoacoustically optimised (dual-band) near-field compensated decoder, suitable for studio monitoring, is demonstrated link::#psychoacoustically_optimised_quadraphonic_decoder#below::. - -note:: A matrix type decoder, see link::Classes/FoaDecoderMatrix#*newQuad:: for further details.:: - -code:: -// ------------------------------------------------------------ -// quad decoder -// -// mono pink noise source -// omni encoder - - -// define encoder / decoder matrices -~encoder = FoaEncoderMatrix.newOmni -~decoder = FoaDecoderMatrix.newQuad - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -~decoder.kind -~decoder.numChannels -~decoder.dirChannels.raddeg - -( -{ - var sig; // audio signal - var angle, azim; // angle and azimuth control - var fl, bl, br, fr; // quad output channels - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - - // ------------------------------------------------------------ - // decode (to quad) - #fl, bl, br, fr = FoaDecode.ar(sig, ~decoder); - [fl, fr, bl, br] // reorder output to match speaker arrangement - -}.scope; -) -// ------------------------------------------------------------ -:: - -subsection:: SuperCollider's inbuilt decoder - -By default, SuperCollider includes a pantophonic (2D) decoder, link::Classes/DecodeB2::. This inbuilt decoder provides functionality similar to the Ambisonic Toolkit's link::Classes/FoaDecoderMatrix#*newPanto::, with the exceptions of a variable strong::k:: argument and the documentation features of link::Classes/FoaDecoderMatrix::, e.g. link::Classes/FoaDecoderMatrix#-dirChannels::. - -The inbuilt decoder is a code::'controlled':: strong::k:: decoder. (See link::Classes/FoaDecoderMatrix#decoder k#this discussion:: on strong::k::.) The below code includes a function, code::funK::, to add variable strong::k:: functionality to link::Classes/DecodeB2::. So, this example is realised as a code::'single':: band type ( code::'energy':: ) decoder, matching the link::Classes/FoaDecoderMatrix#*newQuad:: example link::#quadraphonic_decoder#above::. - -note:: See link::Classes/DecodeB2#*ar:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// compare to SuperCollider's inbuilt DecodeB2 (as quad decoder) -// -// mono pink noise source -// omni encoder - - -// define encoder matrix and decoder channels -~encoder = FoaEncoderMatrix.newOmni -~numChans = 4 - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -~numChans - -// function to adjust k of DecodeB2.ar -( -var funK; - -funK = { arg k; - if ( k.isNumber, { - k - }, { - switch ( k, - 'velocity', { [1, 2, 2, 2] }, - 'energy', { [1, 2.sqrt, 2.sqrt, 2.sqrt] }, - 'controlled', { [1, 1, 1, 1] }, - 'single', { [1, 2.sqrt, 2.sqrt, 2.sqrt] } - ) - } - ) -}; - -~kScale = funK.value('single'); // specify ATK's default, -) // a single band ('energy') decoder - -( -{ - var sig; // audio signal - var angle, azim; // angle and azimuth control - var fl, bl, br, fr; // quad output channels - var w, x, y, z; // b-format channels (split) - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format("inbuilt").postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - // ------------------------------------------------------------ - // split to w, x, y, z, and scale k - #w, x, y, z = sig * ~kScale; - - // ------------------------------------------------------------ - // decode (to quad), and match gain to ATK decoders - #fl, fr, br, bl = DecodeB2.ar(~numChans, w, x, y) * 6.neg.dbamp; - [fl, fr, bl, br] // reorder output to match speaker arrangement - -}.scope; -) -// ------------------------------------------------------------ -:: - - -subsection:: Psychoacoustically optimised quadraphonic decoder - -The decoder presented here is an example of a dual-band ( code::'dual':: ) psychoacoustically optmisied, near-field compensated decoder described by Gerzon. footnote::M. A. Gerzon, "Multi-system ambisonic decoder," Wireless World, pp. 43-47, 69-73, July/Aug. 1977.:: This sort of decoder is considered the ideal for first order Ambisonics, meeting all the criteria outlined by Gerzon to qualify as Ambisonic, footnote::E. Benjamin, R. Lee, and A. Heller, "Is My Decoder Ambisonic?," in Proceedings of the 125th Audio Engineering Society Convention, San Francisco, 2008.:: and is the choice for critical studio listening. - -Additionally, this decode is rendered as a 'narrow quadraphonic' layout, with loudspeaker angles at code:: [ 30.0, 150.0, -150.0, -30.0 ] ::. For studio based work, this can be convenient, as the front pair is at the correct angle for two channel stereo monitoring. The narrow layout gives increased localisation and stabilised images at front and back, at the expense of reduced stability at the sides. - -Near-field compensation, filtering for the near-field effects of loudspeaker placement, is made through the use of link::Classes/FoaNFC::. - - -note:: A matrix type decoder, see link::Classes/FoaDecoderMatrix#*newQuad:: and link::Classes/FoaNFC:: for further details.:: - -code:: -// ------------------------------------------------------------ -// narrow quad decoder, psychocacousticly optimised, & with NFC -// -// mono pink noise source -// omni encoder - - -// define encoder / decoder matrices -~encoder = FoaEncoderMatrix.newOmni -~decoder = FoaDecoderMatrix.newQuad(pi/6, 'dual') -~distance = 1.2 // louspeaker distance, for NFC, in meters - - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -~decoder.kind -~decoder.numChannels -~decoder.dirChannels.raddeg -~distance - -( -{ - var sig; // audio signal - var angle, azim; // angle and azimuth control - var fl, bl, br, fr; // quad output channels - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - - // ------------------------------------------------------------ - // nfc & decode (to quad) - sig = FoaTransform.ar(sig, 'nfc', ~distance); - #fl, bl, br, fr = FoaDecode.ar(sig, ~decoder); - [fl, fr, bl, br] // reorder output to match speaker arrangement - -}.scope; -) -// ------------------------------------------------------------ -:: - - - -subsection:: ITU 5.0 decoder - -The Ambisonic Toolkit includes link::http://www.brucewiggins.co.uk/?page_id=78##Bruce Wiggins':: optimised ITU 5.0 decoders. footnote::Irregular decoders in the Ambisonic Toolkit are kindly provided by Bruce Wiggins: link::http://www.brucewiggins.co.uk/::. See also: B. Wiggins, I. Paterson-Stephens, V. Lowndes, and S. Berry, "The design and optimisation of surround sound decoders using heuristic methods," in Proceedings of UKSIM 2003: Conference on Computer Simulation, Cambridge, England, 2003.:: - -note:: A matrix type decoder, see link::Classes/FoaDecoderMatrix#*new5_0:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// 5.0 decoder -// -// mono pink noise source -// omni encoder - - -// define encoder / decoder matrices -~encoder = FoaEncoderMatrix.newOmni -~decoder = FoaDecoderMatrix.new5_0 - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -~decoder.kind -~decoder.numChannels -~decoder.dirChannels.raddeg - -( -{ - var sig;// audio signal - var angle, azim; // angle and azimuth control - var fc, fl, bl, br, fr; // 5.0 output channels - var lo; // low freq channel place holder - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - // ------------------------------------------------------------ - // decode (to 5.0) - #fc, fl, bl, br, fr = FoaDecode.ar(sig, ~decoder); - lo = Silent.ar; - - [fl, fr, fc, lo, bl, br] // reorder output to match speaker arrangement - -}.scope; -) -// ------------------------------------------------------------ -:: - - -subsection:: Periphonic (cube) decoder - -A full 3D decoder, with eight loudspeakers arranged in upper and lower rings of four. This small eight channel array is not optimal for large scale playback. For public performance, a 10 or 12 channel arrangement (two rings of 5 or 6) is more suitable. - -The loudspeaker layout specified by this decoder is more suited to a small-scale situation. See link::#Diametric_(bi-rectangle)_decoder#below:: for a minimal arrangement appropriate for full 3D studio monitoring. - -note:: A matrix type decoder, see link::Classes/FoaDecoderMatrix#*newPeri:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// periphonic (3D) decoder (8-channels arranged as a cube) -// -// mono pink noise source -// omni encoder - - -// define encoder / decoder matrices -~encoder = FoaEncoderMatrix.newOmni -~decoder = FoaDecoderMatrix.newPeri - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -~decoder.kind -~decoder.numChannels -~decoder.dirChannels.raddeg - -( -{ - var sig; // audio signal - var angle, azim; // angle and azimuth control - var flu, blu, bru, fru; // cube output channels - var fld, bld, brd, frd; - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - - // ------------------------------------------------------------ - // decode (to cube) - #flu, blu, bru, fru, fld, bld, brd, frd = FoaDecode.ar(sig, ~decoder); - [flu, fru, blu, bru, fld, frd, bld, brd] // reorder output to match speaker arrangement - -}.scope; -) -// ------------------------------------------------------------ -:: - -subsection:: Psychoacoustically optimised diametric (bi-rectangle) decoder - -This bi-rectangular decoder has been described by Gerzon as optimal for small-scale, full 3D listening. The decoder presented is an example of a dual-band ( code::'dual':: ) psychoacoustically optmisied, near-field compensated decoder. Meeting all the criteria outlined by Gerzon to qualify as Ambisonic, this decoder is a good choice for full 3D critical studio listening. - -The frontal loudspeaker pair is arranged at code:: [ 30.0, -30.0 ] :: degrees. For studio based work, this can be convenient, as the front pair is at the correct angle for two channel stereo monitoring. - -Near-field compensation, filtering for the near-field effects of loudspeaker placement, is made through the use of link::Classes/FoaNFC::. - - - - - -note:: A matrix type decoder, see link::Classes/FoaDecoderMatrix#*newDiametric:: and link::Classes/FoaNFC:: for further details.:: - -code:: -// ------------------------------------------------------------ -// diametric 3d decoder (8-channels in a bi-rectangle) -// psychocacousticly optimised, & with NFC -// -// mono pink noise source -// omni encoder - - -// define encoder / decoder matrices -~encoder = FoaEncoderMatrix.newOmni -~decoder = FoaDecoderMatrix.newDiametric( - [[30, 0], [-30, 0], [90, 35.3], [-90, 35.3]].degrad, - 'dual' -) -~distance = 1.2 // louspeaker distance, for NFC, in meters - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -~decoder.kind -~decoder.numChannels -~decoder.dirChannels.raddeg -~distance - -( -{ - var sig; // audio signal - var angle, azim; // angle and azimuth control - var fl, fr, bl, br; // bi-rectangle output channels - var slu, sru, sld, srd; - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - - // ------------------------------------------------------------ - // nfc & decode (to bi-rectangle) - sig = FoaTransform.ar(sig, 'nfc', ~distance); - #fl, fr, slu, sru, br, bl, srd, sld = FoaDecode.ar(sig, ~decoder); - [fl, fr, bl, br, slu, sru, sld, srd] // reorder output to match speaker arrangement - -}.scope; -) -// ------------------------------------------------------------ -:: diff --git a/source/ATK/sc/HelpSource/Classes/FoaDecoderKernel.schelp b/source/ATK/sc/HelpSource/Classes/FoaDecoderKernel.schelp deleted file mode 100644 index 0d8d25f4a7..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaDecoderKernel.schelp +++ /dev/null @@ -1,386 +0,0 @@ -CLASS:: FoaDecoderKernel -summary:: First Order Ambisonic (FOA) decoder kernels -categories:: Libraries>Ambisonic Toolkit>FOA>Decoding -related:: Classes/FoaDecoderMatrix, Classes/FoaDecode - -DESCRIPTION:: -Generates decoding kernels required by the Ambisonic Toolkit's first order decoder, link::Classes/FoaDecode::. - -note:: The ATK kernels are required for kernel decoding. Please see the instructions link::http://www.ambisonictoolkit.net/download/kernels/#ATK_Kernels#here:: for installation. :: - - -CLASSMETHODS:: - -METHOD:: newUHJ -Ambisonic UHJ stereo decoder. footnote::See: link::http://en.wikipedia.org/wiki/Ambisonic_UHJ_format:::: - -argument:: kernelSize -256, 512, 1024, 2048, 4096, 8192 - -argument:: server -link::Classes/Server:: on which to load kernel. - -argument:: sampleRate -The sample rate defaults to code::nil:: and is usually supplied by the running server. In NRT, you can specify a sampleRate to avoid booting a server. - -argument:: score -Default is code::nil:: for most real time usages. When using NRT, you can supply a score (a link::Classes/Score:: or a link::Classes/CtkScore::) onto which the kernels will be added, which lets you bypass booting a server. - -discussion:: For production work targeting stereo output, the authors advise using UHJ, as Ambisonic UHJ stereo is the native Ambisonic stereo format. - - - -METHOD:: newSpherical -Synthetic spherical head model HRTF footnote::See: R. O. Duda, "Modeling head related transfer functions," in Proceedings of the Twenty-Seventh Annual Asilomar Conference on Signals, Systems and Computers, Asilomar, CA, 1993.:: decoder, equalised for the diffuse field. - -argument:: subjectID -0 to 9 - -argument:: server -link::Classes/Server:: on which to load kernel. - -argument:: sampleRate -The sample rate defaults to code::nil:: and is usually supplied by the running server. In NRT, you can specify a sampleRate to avoid booting a server. - -argument:: score -Default is code::nil:: for most real time usages. When using NRT, you can supply a score (a link::Classes/Score:: or a link::Classes/CtkScore::) onto which the kernels will be added, which lets you bypass booting a server. - -discussion:: -link::#-newSpherical:: models a sphere only, and is equivalent to placing a pair of spaced, sphere baffled microphones in the soundfield. With no pinnae and no body, elevation cues are not present. - -The strong::subjectID:: argument varies to suit listener head width, with 0 the smallest and 9 the largest head. The user is advised to audition to find a suitable choice. - - - -METHOD:: newListen -Measured HRTF decoder, with measurements from IRCAM's link::http://recherche.ircam.fr/equipes/salles/listen/##Listen HRTF database:: footnote::See: link::http://recherche.ircam.fr/equipes/salles/listen/:::: equalised for the diffuse field. - -argument:: subjectID -1002 to 1059 (51 in total) warning:: strong::subjectID::s are not entirely contiguous.:: - -argument:: server -link::Classes/Server:: on which to load kernel. - -argument:: sampleRate -The sample rate defaults to code::nil:: and is usually supplied by the running server. In NRT, you can specify a sampleRate to avoid booting a server. - -argument:: score -Default is code::nil:: for most real time usages. When using NRT, you can supply a score (a link::Classes/Score:: or a link::Classes/CtkScore::) onto which the kernels will be added, which lets you bypass booting a server. - -discussion:: -The user is advised to audition strong::subjectID::s to find a suitable choice. If an invalid strong::subjectID:: is chosen, valid choices are returned. - - -code:: -// Boot desired server first... -// ... choose an invalid subject -~encoder = FoaDecoderKernel.newListen(0) - -// make sure you scroll up to see the resulting valid subjects! -:: - - - -METHOD:: newCIPIC -Measured HRTF decoder, with measurements from the University of California Davis' link::http://interface.cipic.ucdavis.edu/sound/hrtf.html##CIPIC HRTF database:: footnote::See: link::http://interface.cipic.ucdavis.edu/sound/hrtf.html:::: equalised for the diffuse field. - -argument:: subjectID -3 to 165 (45 in total) warning:: strong::subjectID::s are not entirely contiguous.:: - -argument:: server -link::Classes/Server:: on which to load kernel. - -argument:: sampleRate -The sample rate defaults to code::nil:: and is usually supplied by the running server. In NRT, you can specify a sampleRate to avoid booting a server. - -argument:: score -Default is code::nil:: for most real time usages. When using NRT, you can supply a score (a link::Classes/Score:: or a link::Classes/CtkScore::) onto which the kernels will be added, which lets you bypass booting a server. - - -discussion:: -The link::http://interface.cipic.ucdavis.edu/sound/hrtf.html##CIPIC HRTF database:: provides two link::http://www.gras.dk/00012/00330/##KEMAR dummy:: measurements. strong::subjectID:: = 21 is the large pinnae dummy and strong::subjectID:: = 165 is the small pinnae dummy. - -The user is advised to audition strong::subjectID::s to find a suitable choice. If an invalid strong::subjectID:: is chosen, valid choices are returned. - -code:: -// Boot desired server first... -// ... choose an invalid subject -~encoder = FoaDecoderKernel.newCIPIC(0) - -// make sure you scroll up to see the resulting valid subjects! -:: - - - -INSTANCEMETHODS:: -private:: initPath, initKernel, printOn - - -METHOD:: set - -Describes both the emphasis::signal set:: and the emphasis::tool set::, encompassing the Ambisonic order, as well as channel ordering and normalisation. - -Answers code::'FOA'::, aka traditional B-format: - -table:: -## strong::Ambisonic Order:: || strong::Channel Ordering:: || strong::Channel Normalisation:: -## 1st || Gerzon (aka Furse-Malham) || MaxN -:: - -METHOD:: type -returns:: code::'decoder':: - -METHOD:: op -Answers code::'kernel'::, i.e. the type of operation used to compute the resulting signals. - -METHOD:: kind -Answers the kind of decoder - -discussion:: - -code:: -// decoder - make sure you boot the server first!! -~decoder = FoaDecoderKernel.newUHJ - -// inspect -~decoder.kind - -// don't forget to free!! -~decoder.free -:: - -code:: -// decoder - make sure you boot the server first!! -~decoder = FoaDecoderKernel.newCIPIC - -// inspect -~decoder.kind - -// don't forget to free!! -~decoder.free -:: - - - -METHOD:: subjectID -Answers the strong::subjectID:: of the decoder - -discussion:: - -code:: -// decoder - make sure you boot the server first!! -~decoder = FoaDecoderKernel.newUHJ - -// inspect -~decoder.subjectID - -// don't forget to free!! -~decoder.free -:: - -code:: -// decoder - make sure you boot the server first!! -~decoder = FoaDecoderKernel.newCIPIC - -// inspect -~decoder.subjectID - -// don't forget to free!! -~decoder.free -:: - - - -METHOD:: dim -Answers the number of decoder dimensions: 2D or 3D. - -discussion:: - -code:: -// decoder - make sure you boot the server first!! -~decoder = FoaDecoderKernel.newSpherical - -// inspect -~decoder.dim - -// don't forget to free!! -~decoder.free -:: - -code:: -// decoder - make sure you boot the server first!! -~decoder = FoaDecoderKernel.newCIPIC - -// inspect -~decoder.dim - -// don't forget to free!! -~decoder.free -:: - - -METHOD:: numChannels -Answers the number of loudspeaker (or headphone) feeds (output channels). - -discussion:: - -code:: -// decoder - make sure you boot the server first!! -~decoder = FoaDecoderKernel.newUHJ - -// inspect -~decoder.numChannels - -// don't forget to free!! -~decoder.free -:: - - - - -METHOD:: dirChannels -Answers the direction of loudspeaker (or headphone) feeds, with angles in radians. - - -discussion:: - -code:: -// decoder - make sure you boot the server first!! -~decoder = FoaDecoderKernel.newUHJ - -// inspect -~decoder.dirChannels.raddeg - -// don't forget to free!! -~decoder.free -:: - -code:: -// decoder - make sure you boot the server first!! -~decoder = FoaDecoderKernel.newCIPIC - -// inspect -~decoder.dirChannels.raddeg - -// don't forget to free!! -~decoder.free -:: - - - -METHOD:: kernel -Answers the decoder kernel. - -discussion:: - -code:: -// decoder - make sure you boot the server first!! -~decoder = FoaDecoderKernel.newUHJ - -// inspect -~decoder.kernel - -// don't forget to free!! -~decoder.free -:: - -code:: -// decoder - make sure you boot the server first!! -~decoder = FoaDecoderKernel.newCIPIC - -// inspect -~decoder.kernel - -// don't forget to free!! -~decoder.free -:: - - -METHOD:: kernelSize -Answers the strong::kernelSize::. - -discussion:: - -Use of link::Classes/FoaDecoderKernel:: introduces a delay to the decoded -B-format signal. - -The total delay, in samples, can be calculated as -code::(kernelSize-1)/2 + kernelSize - blockSize::, where -link::Classes/ServerOptions#-blockSize#blockSize:: is the number of -samples in one control period of the link::Classes/Server:: in use. - -code:: -// decoder - make sure you boot the server first!! -~decoder = FoaDecoderKernel.newUHJ - -// inspect -~decoder.kernelSize - -// calculate delay in samples -(~decoder.kernelSize-1)/2 + ~decoder.kernelSize - s.options.blockSize - -// calculate delay in seconds -((~decoder.kernelSize-1)/2 + ~decoder.kernelSize - s.options.blockSize) / s.sampleRate - -// don't forget to free!! -~decoder.free -:: - -code:: -// decoder - make sure you boot the server first!! -~decoder = FoaDecoderKernel.newCIPIC - -// inspect -~decoder.kernelSize - -// calculate delay in samples -(~decoder.kernelSize-1)/2 + ~decoder.kernelSize - s.options.blockSize - -// calculate delay in seconds -((~decoder.kernelSize-1)/2 + ~decoder.kernelSize - s.options.blockSize) / s.sampleRate - -// don't forget to free!! -~decoder.free -:: - - - - -METHOD:: free -Free the kernel. - -discussion:: Release the kernel buffer's memory on the server and return the bufferID back to the server's buffer number allocator for future reuse. - -warning:: Only free the kernel when the link::Classes/FoaDecode#*ar:: is no longer in use!:: - - - -METHOD:: numOutputs -A synonym for link::#-numChannels:: - - -METHOD:: dirOutputs -A synonym for link::#-dirChannels:: - - -METHOD:: numInputs -Answers the number of inputs for the decoder. 3 for 2D and 4 for 3D. - - - -METHOD:: dirInputs -A convenience method providing polymorphism with link::Classes/FoaEncoderKernel#-dirInputs::. - -returns:: - -list:: -## for 2D: code:: [ inf, inf, inf ] :: -## for 3D: code:: [ inf, inf, inf , inf ] :: -:: - -PRIVATE:: buffers, kernelBundle, kernelInfo - - -EXAMPLES:: - -Please see link::Classes/FoaDecode#Examples::. diff --git a/source/ATK/sc/HelpSource/Classes/FoaDecoderMatrix.schelp b/source/ATK/sc/HelpSource/Classes/FoaDecoderMatrix.schelp deleted file mode 100644 index 1126654ff5..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaDecoderMatrix.schelp +++ /dev/null @@ -1,625 +0,0 @@ -CLASS:: FoaDecoderMatrix -summary:: First Order Ambisonic (FOA) decoder matrices -categories:: Libraries>Ambisonic Toolkit>FOA>Decoding -related:: Classes/FoaDecoderKernel, Classes/FoaDecode - -DESCRIPTION:: -Generates decoding matrices required by the Ambisonic Toolkit's first order decoder, link::Classes/FoaDecode::. - - - -CLASSMETHODS:: - - -METHOD:: newMono -Virtual microphone monophonic decoder. - -argument:: theta -Azimuth angle, in radians: pi to pi.neg. - -argument:: phi -Elevation angle, in radians: pi/2 to pi.neg/2. - -argument:: pattern -Virtual microphone pattern, 0 to 1: - -table:: -## strong::pattern:: || strong::virtual microphone:: -## 0.0 || Omni -## 0.5 || Cardioid -## (3-sqrt(3))/2 || Super-cardioid -## 0.75 || Hyper-cardioid -## 1.0 || Bi-directional -:: - -For equivalences to decoder strong::k::, please see link::#decoder k::. - -discussion:: The virtual microphone decoder returns a single monophonic channel, and can be used to "listen in" to the soundfield at the specified azimuth and elevation. - - -METHOD:: newStereo -Virtual microphone stereophonic decoder. - -argument:: angle -The half angle of the stereo pair, in radians: 0 to pi., Default: pi/2 - -argument:: pattern -Virtual microphone pattern, 0 to 1: - -table:: -## strong::pattern:: || strong::virtual microphone:: -## 0.0 || Omni -## 0.5 || Cardioid -## (3-sqrt(3))/2 || Super-cardioid -## 0.75 || Hyper-cardioid -## 1.0 || Bi-directional -:: - -For equivalences to decoder strong::k::, please see link::#decoder k::. - -discussion:: Standard coincident stereo microphone configurations footnote::Sengpiel Audio provides a useful tool to visualise resulting imaging: link::http://www.sengpielaudio.com/Visualization-Blumlein-E.htm::::: - -code:: -// Default: Cardioids at 180 deg -~decoder = FoaDecoderMatrix.newStereo - -// Cardioids at 131 deg -~angle = (131/2).degrad -~pattern = 0.5 -~decoder = FoaDecoderMatrix.newStereo(~angle, ~pattern) - -// Super-cardioids at 115 deg -~angle = (115/2).degrad -~pattern = (3-sqrt(3))/2 -~decoder = FoaDecoderMatrix.newStereo(~angle, ~pattern) - -// Hyper-cardioids at 105 deg -~angle = (105/2).degrad -~pattern = 0.75 -~decoder = FoaDecoderMatrix.newStereo(~angle, ~pattern) - -// Blumlein -~angle = (90/2).degrad -~pattern = 1.0 -~decoder = FoaDecoderMatrix.newStereo(~angle, ~pattern) - -:: - -note::While the virtual microphone stereophonic decoder is very easy and convenient, for production work the authors advise using the UHJ ( link::Classes/FoaDecoderKernel#*newUHJ:: ) decoder. footnote::See link::http://en.wikipedia.org/wiki/Ambisonic_UHJ_format:: for further information.:::: - - -METHOD:: newQuad -Optimised quadraphonic decoder with variable loudspeaker angle. - -argument:: angle -The half angle of the front (and rear) loudspeaker pair. Defaults to pi/4, a square. In radians. - -argument:: k -The k factor of the decoder. May be specified as a float: 0.5 to 1.0. Or more conviently by name: - -list:: -## code::'single':: -## code::'dual':: -## code::'velocity':: -## code::'energy':: -## code::'controlled':: -:: - -discussion:: The outputs are in anti-clockwise order. The position of the first speaker is left of centre. link::#-dirChannels:: may be used to query resulting loudspeaker directions. - -Varying strong::angle:: allows a number of flexible quadraphonic decoders to be generated. E.g, strong::angle:: = pi/6 returns a decoder with loudspeakers at [ 30, 150, -150, 30 ] degrees. - -Please see link::#decoder k:: for further discussion on strong::k::. - - - -METHOD:: new5_0 -link::http://www.brucewiggins.co.uk/?page_id=78##Bruce Wiggins':: optimised ITU 5.0 decoders. footnote::Irregular decoders in the Ambisonic Toolkit are kindly provided by Bruce Wiggins: link::http://www.brucewiggins.co.uk/::. See also: B. Wiggins, I. Paterson-Stephens, V. Lowndes, and S. Berry, "The design and optimisation of surround sound decoders using heuristic methods," in Proceedings of UKSIM 2003: Conference on Computer Simulation, Cambridge, England, 2003.:: - -argument:: irregKind -Three kinds are available: - -list:: -## code::'focused':: -## code::'equal':: -## code::'four':: -:: - -discussion:: -The outputs are in anti-clockwise order. The position of the first speaker is centre. link::#-dirChannels:: may be used to query resulting loudspeaker directions. - -strong::irregKind:: code:: = 'focused':: returns a focused, but front weighted image. code::'equal':: equalises the angles across the image. code::'four':: is similar to code::'equal'::, but doesn't use the centre speaker. - - - - -METHOD:: newPanto -Pantophonic (2D) regular polygon decoder. - -argument:: numChans -number of loudspeaker feeds - -argument:: orientation -code::'flat':: or code::'point':: - -argument:: k -The k factor of the decoder. May be specified as a float: 0.5 to 1.0. Or more conviently by name: - -list:: -## code::'single':: -## code::'dual':: -## code::'velocity':: -## code::'energy':: -## code::'controlled':: -:: - -discussion:: The outputs are in anti-clockwise order. The position of the first speaker is either centre or left of centre. link::#-dirChannels:: may be used to query resulting loudspeaker directions. - -Used in conjunction with link::Classes/FoaDecode#*ar:: the resulting decoder is equivalent to link::Classes/DecodeB2#*ar:: (SuperCollider's inbuilt decoder), albeit with the addition of variable strong::k:: and dual-band optimised psychoacoustic decoding. link::Classes/DecodeB2#*ar:: is a "controlled opposites" decoder ( strong::k:: = code::'controlled':: ) with a gain of 6dB greater than link::#*newPanto::. - -Please see link::#decoder k:: for further discussion on strong::k::. - - -METHOD:: newPeri -Periphonic (3D) dual ring, regular cylindrical decoder. - -argument:: numChanPairs -Number of channel pairs. (Half the total number of loudspeaker feeds.) - -argument:: elevation -Elevation of the upper ring, measured from the origin. In radians. - -argument:: orientation -code::'flat':: or code::'point':: - -argument:: k -The k factor of the decoder. May be specified as a float: 0.5 to 1.0. Or more conviently by name: - -list:: -## code::'single':: -## code::'dual':: -## code::'velocity':: -## code::'energy':: -## code::'controlled':: -:: - -discussion:: The outputs are in anti-clockwise order, beginning with the top ring. The position of the first speaker is either centre or left of centre. link::#-dirChannels:: may be used to query resulting loudspeaker directions. - -Please see link::#decoder k:: for further discussion on strong::k::. - - -METHOD:: newDiametric -Gerzon's classic diametric decoder, suitable for varied periphonic and pantophonic loudspeaker arrays. footnote::See: M. A. Gerzon, "Practical Periphony: The Reproduction of Full-Sphere Sound," in Proceedings of the 65th Audio Engineering Engineering Society Convention, London, 1980, p. 10.:: - -argument:: directions -An array of directions for half of the loudspeaker feeds for the desired decoder. Specify in radians. - -Rank 1 arrays return pantophonic, while rank 2 arrays return periphonic. E.g., -code:: -// 2D: -~directions = [ theta0, theta1, ... thetaN ]; -:: -code:: -// 3D: -~directions = [ [ theta0, phi0 ], [ theta1, phi1 ], ... [ thetaN, phiN ] ]; -:: - -argument:: k -The k factor of the decoder. May be specified as a float: 0.5 to 1.0. Or more conviently by name: - -list:: -## code::'single':: -## code::'dual':: -## code::'velocity':: -## code::'energy':: -## code::'controlled':: -:: - -discussion:: -strong::directions:: specifies only half of the loudspeakers for the resulting array, the remaining loudspeakers are diametrically opposite (through the origin). link::#-dirChannels:: may be used to query resulting loudspeaker directions. - -code:: -// Pantophonic (2D) decoder with four channels arranged in a rectangle: -// [ 30, -30, -150, 150 ] - -// specify 1/2 the desired directions -~directions = [ 30, -30 ].degrad; -~decoder = FoaDecoderMatrix.newDiametric(~directions); - -// inspect -~decoder.dirChannels.raddeg -:: -code:: -// Periphonic (3D) decoder with eight channels arranged in a bi-rectangle: -// [ [ 30, 0 ], [ -30, 0 ], [ 90, 35.3 ], [ -90, 35.3 ], -// [ -150, -0 ], [ 150, -0 ], [ -90, -35.3 ], [ 90, -35.3 ] ] - -// specify 1/2 the desired directions -~directions = [[ 30, 0 ], [ -30, 0 ], [ 90, 35.3 ], [ -90, 35.3]].degrad; -~decoder = FoaDecoderMatrix.newDiametric(~directions); - -// inspect -~decoder.dirChannels.raddeg -:: - -Please see link::#decoder k:: for further discussion on strong::k::. - - -METHOD:: newBtoA -B-format to A-format decoder. Decodes to a variety of tetrahedral orientations and W channel weights. - -argument:: orientation -Orientation of the A-format tetrahedron. - -table:: -## strong::orientation:: || strong::angles:: ([theta, phi] in degrees) -## code::'flu':: || code:: [[45.0, 35.3], [-45.0, -35.3], [135.0, -35.3], [-135.0, 35.3]] :: -## code::'fld':: || code:: [[45.0, -35.3], [-45.0 , 35.3], [135.0, 35.3], [-135.0, -35.3]] :: -## code::'flr':: || code:: [[54.7, 0.0], [-54.7, 0.0], [180.0, 54.7], [ 180.0, -54.7]] :: -## code::'fud':: || code:: [[ 0.0, 54.7], [ 0.0, -54.7], [125.7, 0.0], [-125.7, 0.0]] :: -## code::'fbd':: || code:: [[ 0.0, 0.0], [180.0, -70.5], [112.2, 28.1], [-112.2, 28.1]] :: -## code::'fbu':: || code:: [[ 0.0, 0.0], [180.0, 70.5], [112.2, -28.1], [-112.2, -28.1]] :: -## code::'flru':: || code:: [[67.8, 28.1], [-67.8, 28.1], [ 0.0, -70.5], [ 180.0, 0.0]] :: -## code::'flrd':: || code:: [[67.8, -28.1], [-67.8, -28.1], [ 0.0, 70.5], [ 180.0, 0.0]] :: -:: - -argument:: weight -The W weight factor. - -For convenience, equivalent virtual microphone strong::pattern:: and decoding strong::k:: are also listed. - -table:: -## strong::weight:: || strong::kind:: || strong::W scale:: || strong::virtual microphone:: || strong::pattern:: || strong::decoding:: || strong::k:: -## code::'dec':: || Decorrelated (on the sphere) || 1/sqrt(3) || Hyper-cardioid || 0.75 || strict soundfield || code::'velocity':: -## code::'can':: || Canonical (B-format) || 1/sqrt(2) || || sqrt(6)/(1+sqrt(6)) || || sqrt(2/3) -## code::'uns':: || Unscaled || 1 || Super-cardioid || (3-sqrt(3))/2 || energy optimised || code::'energy':: -## code::'car':: || Cardioid || sqrt(3) || Cardioid || 0.5 || controlled opposites || code::'controlled':: -:: - -discussion:: -anchor::btoadiscuss:: -The B-format to A-format decoder is primarily intended to be used in conjuction with the A-format to B-format encoder, link::Classes/FoaEncoderMatrix#*newAtoB::. Though the use of BtoA/AtoB decoder/encoder pairs, signal processing networks can be constructed which preserve the spatial encoding found in the original input B-format signal. - -In order to reconstruct the original B-format signal, matching strong::orientation:: and strong::weight:: for both decoding and encoding should be chosen. For most applications the default strong::weight:: (code::'dec'::) is a good choice. This strong::weight:: decodes to four planewaves. Setting strong::weight:: to code::'uns':: returns an energy optimised decoding. For link::Browse#UGens>Dynamics#Dynamic Range Control:: processing, code::'uns':: is often a good choice. - -code:: -// ------------------------------------------------------------ -// Single stage allpass ambience in A-format -// -// mono pink noise source -// FoaPanB encoder -// -// quad decoder - - -// decoder matrix -~decoder = FoaDecoderMatrix.newQuad - -// b-to-a, a-to-b matrices -~b2a = FoaDecoderMatrix.newBtoA -~a2b = FoaEncoderMatrix.newAtoB - -// inspect -~decoder.kind -~decoder.numChannels -~decoder.dirChannels.raddeg - -( -{ - var sig; // audio signal - var azim; // azimuth control - var fl, bl, br, fr; // quad output channels - var delaytime, decaytime; // allpass parameters - - - // display decoder - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // ------------------------------------------------------------ - // parameters - delaytime = 0.1; - decaytime = 0.2; - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar * LFPulse.ar(2.0); // enveloped mono pink noise - - - // ------------------------------------------------------------ - // encode to b-format - sig = FoaPanB.ar(sig, azim); - - // ------------------------------------------------------------ - // b-to-a --> allpass --> a-to-b - sig = FoaDecode.ar(sig, ~b2a); - sig = AllpassN.ar(sig, delaytime, Array.fill(4, {delaytime}).rand, decaytime); - sig = FoaEncode.ar(sig, ~a2b); - - - // ------------------------------------------------------------ - // decode (to quad) - #fl, bl, br, fr = FoaDecode.ar(sig, ~decoder); - [fl, fr, bl, br] // reorder output to match speaker arrangement - -}.scope; -) -// ------------------------------------------------------------ -:: - -METHOD:: newHoa1 -A first order link::https://en.wikipedia.org/wiki/Ambisonic_data_exchange_formats##Ambisonic format exchange:: decoder. Decodes traditional B-format to a variety of formats. - -argument:: ordering -Input Ambisonic channel component ordering. - -table:: -## strong::ordering:: || strong::kind:: -## code::'acn':: || Ambisonic Channel Number (ACN) -## code::'sid':: || Single Index Designation (SID) -:: - -argument:: normalisation -Spherical harmonic normalisation method. - -table:: -## strong::normalisation:: || strong::kind:: -## code::'n3d':: || Orthonormal basis for 3D decomposition (N3D) -## code::'sn3d':: || Semi-normalised basis for 3D decomposition (SN3D) -:: - - -discussion:: -Decoding means decoding from traditional B-format to another Ambisonic channel componenent orderding and normalisation. In other words, from strong::Gerzon:: (aka strong::Furse-Malham::) ordering with strong::MaxN:: normalisation to some other standard scheme. - -note::code::Hoa1:: in the method name link::#*newHoa1:: refers to Higher Order Ambisonic (HOA) encoding format, Ambisonic order = 1.:: - - -METHOD:: newAmbix1 -A first order link::https://en.wikipedia.org/wiki/Ambisonic_data_exchange_formats##Ambisonic format exchange:: decoder. Decodes traditional B-format to AmbiX. A convenience alias to link::#*newHoa1::. - - -discussion:: -Decoding means decoding from traditional B-format to another Ambisonic channel componenent orderding and normalisation. In this case, from strong::Gerzon:: (aka strong::Furse-Malham::) ordering, strong::MaxN:: normalisation to the AmbiX encoding scheme (strong::ACN:: ordering, strong::SN3D:: normalisation). - - -METHOD:: newFromFile -Create an FoaEncoderMatrix by loading a matrix from a file. - -argument:: filePathOrName -Can be a path relative to your code::/extensions/matrices/decoders:: folder: -code:: -Atk.getMatrixExtensionPath('decoders').fullPath -:: -Otherwise a full path to your matrix file. - -discussion:: -See the link::Guides/Guide-to-ATK-Matrix-Files:: for more information. - - -COPYMETHOD:: AtkMatrix, *newFromMatrix - - - -SUBSECTION:: Decoder k -The default strong::k:: ( code::'single':: ), for decoders accepting strong::k:: as an argument, returns an code::'energy':: optimised (aka "maximum energy" or "max rE") decoder. code::'dual':: returns a dual-band psychoacoustically optimised decoder. footnote::See: E. Benjamin, R. Lee, and A. Heller, "Is My Decoder Ambisonic?," in Proceedings of the 125th Audio Engineering Society Convention, San Francisco, 2008.:: The code::'dual':: decoder is the optimum choice for small scale studio or domestic settings. code::'single':: is suitable for larger, mid-scale environments. code::'velocity':: returns "strict soundfield" (aka "planewave" or "basic") decoding. footnote::While "strict soundfield" decoding is usually not preferred for first order Ambisonics audition, it is usually a good choice for use in signal processing networks.:: code::'controlled':: returns "controlled opposites" decoding (aka "minimum energy" or "in phase"), which is often preferred in large-scale, concert environments. footnote::See: D. G. Malham, "Experience with Large Area 3-D Ambisonic Sound Systems," Proceedings of the Institute of Acoustics, vol. 14, no. 5, pp. 209–215, Nov. 1992.:: (SuperCollider's inbuilt decoder, link::Classes/DecodeB2#*ar::, is a "controlled opposites" decoder. See link::Classes/FoaDecode#supercollider#this discussion::.) - -Given a uniform periphonic (3D) distribution of loudspeakers, e.g. a link::https://en.wikipedia.org/wiki/Platonic_solid##Platonic solid::, some useful strong::virtual microphone:: equivalences: - -table:: -## strong::keyword:: || strong::decoding:: || strong::virtual microphone:: || strong::pattern:: -## code::'velocity':: || strict soundfield || Hyper-cardioid || 0.75 -## code::'energy':: || energy optimised || Super-cardioid || (3-sqrt(3))/2 -## code::'controlled':: || controlled opposites || Cardioid || 0.5 -:: - -The strong::k:: keywords translate to numerical values as follows: - -table:: -## strong::keyword:: || strong::k:: for pantophonic (2D) || strong::k:: for periphonic (3D) -## code::'velocity':: || 1 || 1 -## code::'energy':: || 1/sqrt(2) || 1/sqrt(3) -## code::'controlled':: || 1/2 || 1/3 -:: - -note:: For large-scale concert presentation, the authors advise auditioning values of strong::k:: between those noted for code::'energy':: and code::'controlled'::.:: - - - - -INSTANCEMETHODS:: -private:: initPeri, initK2D, initStereo, initBtoA, initPanto, initK3D, initQuad, printOn, initMono, init5_0, initDiametric, initHoa1, initAmbix1 - -METHOD:: set - -Describes both the emphasis::signal set:: and the emphasis::tool set::, encompassing the Ambisonic order, as well as channel ordering and normalisation. - -Answers code::'FOA'::, aka traditional B-format: - -table:: -## strong::Ambisonic Order:: || strong::Channel Ordering:: || strong::Channel Normalisation:: -## 1st || Gerzon (aka Furse-Malham) || MaxN -:: - -METHOD:: type -returns:: code::'decoder':: - -COPYMETHOD:: AtkMatrix, -op - -METHOD:: kind -Answers the kind of decoder - -discussion:: - -code:: -// decoder -~decoder = FoaDecoderMatrix.newQuad - -// inspect -~decoder.kind -:: - -code:: -// decoder -~decoder = FoaDecoderMatrix.newPeri - -// inspect -~decoder.kind -:: - - - -METHOD:: dim -Answers the number of decoder dimensions: 2D or 3D. - -discussion:: - -code:: -// decoder -~decoder = FoaDecoderMatrix.newQuad - -// inspect -~decoder.dim -:: - -code:: -// decoder -~decoder = FoaDecoderMatrix.newPeri - -// inspect -~decoder.dim -:: - -METHOD:: numChannels -Answers the number of loudspeaker feeds (output channels). - -discussion:: - -code:: -// decoder (narrow quad) -~decoder = FoaDecoderMatrix.newQuad(pi/6) - -// inspect -~decoder.numChannels -:: - -code:: -// decoder (two rings of 6) -~decoder = FoaDecoderMatrix.newPeri(6) - -// inspect -~decoder.numChannels -:: - - -METHOD:: dirChannels -Answers the direction of loudspeaker feeds, with angles in radians. - -returns:: A rank 1 array for pantophonic, and rank 2 array for periphonic. E.g., -code:: -// 2D: -[ theta0, theta1, ... thetaN ] -:: -code:: -// 3D -[ [ theta0, phi0 ], [ theta1, phi1 ], ... [ thetaN, phiN ] ] -:: - -discussion:: Loudspeakers should be place at the angles returned (with equal radii). - -code:: -// decoder (narrow quad) -~decoder = FoaDecoderMatrix.newQuad(pi/6) - -// inspect -~decoder.dirChannels.raddeg -:: - -code:: -// decoder (two rings of 6) -~decoder = FoaDecoderMatrix.newPeri(6) - -// inspect -~decoder.dirChannels.raddeg -:: - -code:: -// Pantophonic (2D) decoder with four channels arranged in a rectangle: -~directions = [ 30, -30 ].degrad -~decoder = FoaDecoderMatrix.newDiametric(~directions) - -// inspect -~decoder.dirChannels.raddeg -:: - -code:: -// Periphonic (3D) decoder with eight channels arranged in a bi-rectangle: -~directions = [[ 30, 0 ], [ -30, 0 ], [ 90, 35.3 ], [ -90, 35.3]].degrad -~decoder = FoaDecoderMatrix.newDiametric(~directions) - -// inspect -~decoder.dirChannels.raddeg -:: - - -METHOD:: matrix -Answers the decoding matrix - - - -METHOD:: shelfFreq -If the decoder is dual-band psychoacoustically optimised, get or set the shelf filter frequency, in Hz. - -discussion:: strong::shelfFreq:: defaults to 400Hz, which is suitable for a well aligned domestic or studio space. strong::shelfFreq:: may be set up to 700Hz, for a tight sweet-spot, and very focused single user listening. - - -METHOD:: shelfK -If the decoder is dual-band psychoacoustically optimised, get or set the shelf k. - -discussion:: If set, strong::shelfK:: is optimised for the chosen decoder, and should be left at the assigned value unless one is an expert user. - - - -METHOD:: numOutputs -A synonym for link::#-numChannels:: - - -METHOD:: dirOutputs -A synonym for link::#-dirChannels:: - - - -METHOD:: numInputs -Answers the number of inputs for the decoder. 3 for 2D and 4 for 3D. - - -METHOD:: dirInputs -A convenience method providing polymorphism with link::Classes/FoaEncoderMatrix#-dirInputs::. - -returns:: - -list:: -## for 2D: code:: [ inf, inf, inf ] :: -## for 3D: code:: [ inf, inf, inf, inf ] :: -:: - - -COPYMETHOD:: AtkMatrix, -info - -COPYMETHOD:: AtkMatrix, -fileParse - -COPYMETHOD:: AtkMatrix, -filePath - -COPYMETHOD:: AtkMatrix, -fileName - -COPYMETHOD:: AtkMatrix, -writeToFile - -private:: initDecoderVarsForFiles - -EXAMPLES:: - -Please see link::Classes/FoaDecode#Examples::. diff --git a/source/ATK/sc/HelpSource/Classes/FoaDirect.schelp b/source/ATK/sc/HelpSource/Classes/FoaDirect.schelp deleted file mode 100644 index 6db70b2fa8..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaDirect.schelp +++ /dev/null @@ -1,48 +0,0 @@ -CLASS:: FoaDirect -summary:: First Order Ambisonic (FOA) directivity transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaDirectO, Classes/FoaDirectX, Classes/FoaDirectY, Classes/FoaDirectZ, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Adjust the soundfield directivity of a first order ambisonic signal (B-format) across an arbitrary plane. - - -NOTE:: -link::Classes/FoaDirect:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. 0 to pi/2 - -argument:: theta -Azimuth for the normal to the plane, in radians. - -argument:: phi -Elevation for the normal to the plane, in radians. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: - -strong::Angle:: = 0 retains the current directivity of the soundfield. Increasing strong::angle:: towards pi/2 decreases the directivity along the normal defined by strong::theta:: and strong::phi::, reducing the gain on this normal to zero, and is equivalent to a spatial low-pass filter. The resulting image becomes directionless on the normal. - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newDirect:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaDirectO.schelp b/source/ATK/sc/HelpSource/Classes/FoaDirectO.schelp deleted file mode 100644 index 101cab4498..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaDirectO.schelp +++ /dev/null @@ -1,47 +0,0 @@ -CLASS:: FoaDirectO -summary:: First Order Ambisonic (FOA) directivity transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaDirectX, Classes/FoaDirectY, Classes/FoaDirectZ, Classes/FoaDirect, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Adjust the soundfield directivity of a first order ambisonic signal (B-format) across the origin. - - -NOTE:: -link::Classes/FoaDirectO:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. 0 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: - -strong::Angle:: = 0 retains the current directivity of the soundfield. Increasing strong::angle:: towards pi/2 decreases the directivity, reducing the gains on the directional compenents to zero, and is equivalent to a spatial low-pass filter. The resulting image becomes omnidirectional or directionless. - -anchor::figure:: - -image::direct_fig.png#DirectO imaging:: - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newDirectO:: :: - - - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaDirectX.schelp b/source/ATK/sc/HelpSource/Classes/FoaDirectX.schelp deleted file mode 100644 index 855bbe20f9..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaDirectX.schelp +++ /dev/null @@ -1,48 +0,0 @@ -CLASS:: FoaDirectX -summary:: First Order Ambisonic (FOA) directivity transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaDirectO, Classes/FoaDirectY, Classes/FoaDirectZ, Classes/FoaDirect, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Adjust the soundfield directivity of a first order ambisonic signal (B-format) along the x-axis. - - -NOTE:: -link::Classes/FoaDirectX:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. 0 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: - -strong::Angle:: = 0 retains the current directivity of the soundfield. Increasing strong::angle:: towards pi/2 decreases the directivity along the x-axis, reducing the gain on this axis to zero, and is equivalent to a spatial low-pass filter. The resulting image becomes directionless on the x-axis. - -anchor::figure:: - - -image::direct_x_fig.png#DirectX imaging:: - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newDirectX:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaDirectY.schelp b/source/ATK/sc/HelpSource/Classes/FoaDirectY.schelp deleted file mode 100644 index 4a86a64241..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaDirectY.schelp +++ /dev/null @@ -1,48 +0,0 @@ -CLASS:: FoaDirectY -summary:: First Order Ambisonic (FOA) directivity transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaDirectO, Classes/FoaDirectX, Classes/FoaDirectZ, Classes/FoaDirect, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Adjust the soundfield directivity of a first order ambisonic signal (B-format) along the y-axis. - - -NOTE:: -link::Classes/FoaDirectY:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. 0 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: - -strong::Angle:: = 0 retains the current directivity of the soundfield. Increasing strong::angle:: towards pi/2 decreases the directivity along the y-axis, reducing the gain on this axis to zero, and is equivalent to a spatial low-pass filter. The resulting image becomes directionless on the y-axis. - - -anchor::figure:: - -image::direct_y_fig.png#DirectY imaging:: - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newDirectY:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaDirectZ.schelp b/source/ATK/sc/HelpSource/Classes/FoaDirectZ.schelp deleted file mode 100644 index ed3dbcb967..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaDirectZ.schelp +++ /dev/null @@ -1,42 +0,0 @@ -CLASS:: FoaDirectZ -summary:: First Order Ambisonic (FOA) directivity transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaDirectO, Classes/FoaDirectX, Classes/FoaDirectY, Classes/FoaDirect, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Adjust the soundfield directivity of a first order ambisonic signal (B-format) along the z-axis. - - -NOTE:: -link::Classes/FoaDirectZ:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. 0 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: - -strong::Angle:: = 0 retains the current directivity of the soundfield. Increasing strong::angle:: towards pi/2 decreases the directivity along the z-axis, reducing the gain on this axis to zero, and is equivalent to a spatial low-pass filter. The resulting image becomes directionless on the z-axis. - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newDirectZ:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaDominate.schelp b/source/ATK/sc/HelpSource/Classes/FoaDominate.schelp deleted file mode 100644 index e43022742d..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaDominate.schelp +++ /dev/null @@ -1,47 +0,0 @@ -CLASS:: FoaDominate -summary:: First Order Ambisonic (FOA) dominance transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaDominateX, Classes/FoaDominateY, Classes/FoaDominateZ, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply dominance to a first order ambisonic signal (B-format) along an arbitrary axis. - - -NOTE:: -link::Classes/FoaDominate:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: gain -Dominance gain, in dB. - -argument:: theta -Azimuth, in radians. - -argument:: phi -Elevation, in radians. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: Applies dominance along the axis defined by strong::theta:: and strong::phi::. See link::Classes/FoaDominateX::. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newDominate:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaDominateX.schelp b/source/ATK/sc/HelpSource/Classes/FoaDominateX.schelp deleted file mode 100644 index 695f0e4c0a..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaDominateX.schelp +++ /dev/null @@ -1,45 +0,0 @@ -CLASS:: FoaDominateX -summary:: First Order Ambisonic (FOA) dominance transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaDominateY, Classes/FoaDominateZ, Classes/FoaDominate, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply dominance to a first order ambisonic signal (B-format) along the x-axis. - - -NOTE:: -link::Classes/FoaDominateX:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: gain -Dominance gain, in dB. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: Positive values of strong::gain:: increase the gain at code:: [0, 0] :: to strong::+gain:: dB, while decreasing the gain at code:: [pi, 0] :: to strong::-gain::. This simultaneously results in a distortion of the image towards code:: [0, 0] ::. Negative values of gain invert this distortion, distorting towards code:: [pi, 0] :: . The default, 0, results in no change. - - -anchor::figure:: - -image::dominance_fig.png#Dominance imaging:: - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newDominateX:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaDominateY.schelp b/source/ATK/sc/HelpSource/Classes/FoaDominateY.schelp deleted file mode 100644 index 1d4c435577..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaDominateY.schelp +++ /dev/null @@ -1,41 +0,0 @@ -CLASS:: FoaDominateY -summary:: First Order Ambisonic (FOA) dominance transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaDominateX, Classes/FoaDominateZ, Classes/FoaDominate, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply dominance to a first order ambisonic signal (B-format) along the y-axis. - - -NOTE:: -link::Classes/FoaDominateY:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: gain -Dominance gain, in dB. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: Positive values of strong::gain:: increase the gain at code:: [pi/2, 0] :: to strong::+gain:: dB, while decreasing the gain at code:: [-pi/2, 0] :: to strong::-gain::. This simultaneously results in a distortion of the image towards code:: [pi/2, 0] ::. Negative values of gain invert this distortion, distorting towards code:: [-pi/2, 0] :: . The default, 0, results in no change. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newDominateY:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaDominateZ.schelp b/source/ATK/sc/HelpSource/Classes/FoaDominateZ.schelp deleted file mode 100644 index 4b27e23b00..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaDominateZ.schelp +++ /dev/null @@ -1,41 +0,0 @@ -CLASS:: FoaDominateZ -summary:: First Order Ambisonic (FOA) dominance transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaDominateX, Classes/FoaDominateY, Classes/FoaDominate, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply dominance to a first order ambisonic signal (B-format) along the z-axis. - - -NOTE:: -link::Classes/FoaDominateZ:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: gain -Dominance gain, in dB. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: Positive values of strong::gain:: increase the gain at code:: [0, pi/2] :: to strong::+gain:: dB, while decreasing the gain at code:: [0, -pi/2] :: to strong::-gain::. This simultaneously results in a distortion of the image towards code:: [0, pi/2] ::. Negative values of gain invert this distortion, distorting towards code:: [0, -pi/2] :: . The default, 0, results in no change. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newDominateZ:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaEncode.schelp b/source/ATK/sc/HelpSource/Classes/FoaEncode.schelp deleted file mode 100644 index 9f6ecee611..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaEncode.schelp +++ /dev/null @@ -1,1020 +0,0 @@ -CLASS:: FoaEncode -summary:: First Order Ambisonic (FOA) encoder -categories:: Libraries>Ambisonic Toolkit>FOA>Encoding, UGens>Multichannel>Ambisonics -related:: Classes/FoaEncoderMatrix, Classes/FoaEncoderKernel - - -DESCRIPTION:: -Encodes signals in a variety of configurations to a first order ambisonic signal (B-format). link::Classes/PanB:: is a SuperCollider inbuilt equivalent. - - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The input signal, an array: [in0, in1, ... inN] - -argument:: encoder -link::Classes/FoaEncoderMatrix:: or link::Classes/FoaEncoderKernel:: instance. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -returns:: - -A B-format signal as an array of channels: [w, x, y, z] - - - -EXAMPLES:: - -The examples below are intended to briefly illustrate some of the first order encoding options made available in the Ambisonic Toolkit. The user is encouraged to carefully review the features of link::Classes/FoaEncoderMatrix:: and link::Classes/FoaEncoderKernel:: to gain a deeper understanding of the flexibility of these tools. - -Available encoders include monophonic (as an omnidirectional soundfield, planewave or frequency spreading), stereophonic and varieties of pantophonic (2D surround) and periphonic (3D surround). Additionally, microphone array encoding is also supported. - -As the Ambisonic technique is a hierarchal system, numerous options for playback are possible. These include two channel stereo, two channel binaural, pantophonic and full 3D periphonic. With the examples below, we'll take advantage of this by first choosing a suitable decoder with with to audition. - -subsection:: Choose a decoder - -Choose a decoder suitable for your system, as illustrated link::Guides/Intro-to-the-ATK#Choose a decoder#here::. You'll end up definining code:: ~decoder :: and code:: ~renderDecode :: . - -note:: If you choose a kernel decoder, link::Classes/FoaDecoderKernel::, be sure to free the kernel after use. :: - - -subsection:: Omnidirectional encoder - - -Encoded as an omnidirectional soundfield, link::Classes/PinkNoise:: is used as the example sound source. In a well aligned, dampend studio environment, this usually sounds "in the head". link::Classes/FoaPush:: is used to "push" the omnidirectional soundfield so that it becomes a planewave (infinite distance, in an anechoic environment) arriving from some direction. - -The soundfield is controlled by link::Classes/MouseX:: and link::Classes/MouseY::, where link::Classes/MouseX:: specifies the incident azimuth angle (pi to -pi; left to right of display) and link::Classes/MouseY:: the link::Classes/FoaPush:: angle (0 to pi/2; bottom to top of display). With the mouse at the bottom of the display, the soundfield remains omnidirectional. Placed at the top of the display, the soundfield becomes directional, and varying left/right position will vary the incident azimuth of the resulting planewave. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A matrix type encoder, see link::Classes/FoaEncoderMatrix#*newOmni:: for further details.:: - -code:: -// ------------------------------------------------------------ -// omni encoder -// mono pink noise source - - -// define encoder matrix -~encoder = FoaEncoderMatrix.newOmni - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -( -{ - var sig; // audio signal - var angle, azim; // angle and azimuth control - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) -// ------------------------------------------------------------ -:: - - - -subsection:: Frequency spreading encoder - - -Encoded as a frequency spread soundfield, link::Classes/PinkNoise:: is used as the example sound source. This sounds as spread across the soundfield, with the various frequency components appearing in various places. link::Classes/FoaPush:: is used to "push" the omnidirectional soundfield so that it becomes a planewave (infinite distance, in an anechoic environment) arriving from some direction. - -The soundfield is controlled by link::Classes/MouseX:: and link::Classes/MouseY::, where link::Classes/MouseX:: specifies the incident azimuth angle (pi to -pi; left to right of display) and link::Classes/MouseY:: the link::Classes/FoaPush:: angle (0 to pi/2; bottom to top of display). With the mouse at the bottom of the display, the soundfield remains spread. Placed at the top of the display, the soundfield becomes directional, and varying left/right position will vary the incident azimuth of the resulting planewave. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A kernel type encoder, see link::Classes/FoaEncoderKernel#*newSpread:: for further details.:: - -warning:: Kernel encoders require special care. Allow the kernel time to load before attempting to use. Additionally, the kernel buffer should be freed through the use of link::Classes/FoaEncoderKernel#-free:: after use.:: - -code:: -// ------------------------------------------------------------ -// frequency spreading encoder -// mono pink noise source - - -// define encoder kernel -~encoder = FoaEncoderKernel.newSpread - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -( -{ - var sig; // audio signal - var angle, azim; // angle and azimuth control - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) -// ------------------------------------------------------------ - -// free kernel -~encoder.free -:: - - -subsection:: Frequency diffusion encoder - - -Encoded as a frequency diffused soundfield, link::Classes/PinkNoise:: is used as the example sound source. This sounds as diffused across the soundfield, with the various frequency components appearing in various places, with various phases. link::Classes/FoaPush:: is used to "push" the omnidirectional soundfield so that it becomes a planewave (infinite distance, in an anechoic environment) arriving from some direction. - -The soundfield is controlled by link::Classes/MouseX:: and link::Classes/MouseY::, where link::Classes/MouseX:: specifies the incident azimuth angle (pi to -pi; left to right of display) and link::Classes/MouseY:: the link::Classes/FoaPush:: angle (0 to pi/2; bottom to top of display). With the mouse at the bottom of the display, the soundfield remains spread. Placed at the top of the display, the soundfield becomes directional, and varying left/right position will vary the incident azimuth of the resulting planewave. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A kernel type encoder, see link::Classes/FoaEncoderKernel#*newDiffuse:: for further details.:: - -warning:: Kernel encoders require special care. Allow the kernel time to load before attempting to use. Additionally, the kernel buffer should be freed through the use of link::Classes/FoaEncoderKernel#-free:: after use.:: - -code:: -// ------------------------------------------------------------ -// frequency diffusion encoder -// mono pink noise source - - -// define encoder kernel -~encoder = FoaEncoderKernel.newDiffuse - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -( -{ - var sig; // audio signal - var angle, azim; // angle and azimuth control - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) -// ------------------------------------------------------------ - -// free kernel -~encoder.free -:: - - -subsection:: A to B encoder - - -Here we encode four channels of decorrelated link::Classes/PinkNoise:: as a decorrelated soundfield, resulting in a maximally diffuse soundfield. link::Classes/FoaPush:: is used to "push" the soundfield so that it becomes a planewave (infinite distance, in an anechoic environment) arriving from some direction. This technique gives the opportunity to continuously modulate between a directional and a diffuse soundfield. - -The soundfield is controlled by link::Classes/MouseX:: and link::Classes/MouseY::, where link::Classes/MouseX:: specifies the incident azimuth angle (pi to -pi; left to right of display) and link::Classes/MouseY:: the link::Classes/FoaPush:: angle (0 to pi/2; bottom to top of display). With the mouse at the bottom of the display, the soundfield remains omnidirectional. Placed at the top of the display, the soundfield becomes directional, and varying left/right position will vary the incident azimuth of the resulting planewave. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A matrix type encoder, see link::Classes/FoaEncoderMatrix#*newAtoB:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// A to B encoder -// decorrelated pink noise source - - -// define encoder matrix -~encoder = FoaEncoderMatrix.newAtoB - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels - -( -{ - var sig; // audio signal - var angle, azim; // angle and azimuth control - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - // ------------------------------------------------------------ - // test sig - sig = -3.dbamp * PinkNoise.ar([1, 1, 1, 1]); // 4 channels decorrelated pink noise - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) -// ------------------------------------------------------------ -:: - -subsection:: A to B encoder (soundfile) - -This example is somewhat unconvential as regards the literature. Four microphones (omnis) are place around the performer in a tetrahedron. This is then matrixed into B-format. - -As the performer rotates and moves about, the image shifts through the sound-scene. In a compositional context, link::Classes/FoaPush:: could be used to control the soundfield. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A matrix type encoder, see link::Classes/FoaEncoderMatrix#*newAtoB:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// A to B encoder -// A-format soundfile read from disk - -// define encoder matrix -~encoder = FoaEncoderMatrix.newAtoB('flrd') // for Thomas -~encoder = FoaEncoderMatrix.newAtoB('flr') // for Cross - - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels.raddeg - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/a-format/Thomas_Mackay.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/a-format/Cross_Tenor_Sax.wav") - - -( -{ - var sig; // audio signal - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - -note:: strong::Soundfile Credits:: - -list:: -## Niall Thomas, "Rob Mackay: flute improvisations," [unpublished recording] -## David Cross, "Tenor saxophone improvisations," [unpublished recording] -:: - -:: - - -subsection:: Stereophonic encoder - -In this example we first encode a single channel of link::Classes/PinkNoise:: into a stereophonic signal with link::Classes/Pan2::. link::Classes/FoaZoom:: is then used to balance the soundfield across the x-axis (front/back). - -The soundfield is controlled by link::Classes/MouseX:: and link::Classes/MouseY::, where link::Classes/MouseX:: specifies the left to right position of the stereo panned source and link::Classes/MouseY:: the link::Classes/FoaZoom:: front to back position (distortion angle). Moving the mouse in a circular motion results in a circular motion of the sound. footnote:: We don't advise using this approach for encoding monophonic sources. The technique illustrated link::#omnidirectional_encoder#here:: is the idiomatic method. If one desires a similar use of the mouse, link::Classes/MouseX:: and link::Classes/MouseY:: can be mapped appropriately to link::Classes/FoaPush::'s strong::angle::, strong::theta::, and strong::phi:: parameters. :: - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - - -note:: A matrix type encoder, see link::Classes/FoaEncoderMatrix#*newStereo:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// stereo encoder -// stereo panned mono pink noise source - - -// define encoder matrix -~encoder = FoaEncoderMatrix.newStereo - - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels.raddeg - -( -{ - var sig; // audio signal - var angle, azim; // angle and azimuth control - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = zoom to plane wave at front - // bottom = zoom to plane wave at back - angle = MouseY.kr(pi/2, pi.neg/2); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar; // mono pink noise - - // ------------------------------------------------------------ - // pan (encode) to stereo - sig = Pan2.ar(sig, azim.neg/pi); - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, 'zoom', angle); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free kernel -~encoder.free - -// ------------------------------------------------------------ -:: - -subsection:: Stereophonic encoder (soundfile) - -For this example we'll look at encoding stereo soundfiles. - -The stereo encoder places the left channel at +pi/4 and the right at -pi/4. Compare to the link::Classes/FoaEncoderKernel#*newSuper#Super Stereo:: encoder link::#super_stereo_encoder_(soundfile)#below::. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - - -note:: A matrix type encoder, see link::Classes/FoaEncoderMatrix#*newStereo:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// stereo encoder -// stereo soundfile read from disk - - -// define encoder matrix -~encoder = FoaEncoderMatrix.newStereo(pi/4) - - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels.raddeg - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/stereo/The_City_Waites-The_Downfall.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/stereo/The_City_Waites-An_Old.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/stereo/Aurora_Surgit-Lux_Aeterna.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/stereo/Aurora_Surgit-Dies_Irae.wav") - - -( -{ - var sig; // audio signal - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - -note:: strong::Soundfile Credits:: - -list:: -## The City Waites, "The Downfall of Dancing," Penny Merriments, NAXOS 8.557672 -## The City Waites, "An Old Song on the Spanish Armada," Penny Merriments, NAXOS 8.557672 -## Aurora Surgit, "Lux aeterna," Ego sum Resurrectio, NAXOS 8.557672 -## Aurora Surgit, "Dies irae," Ego sum Resurrectio, NAXOS 8.557672 -:: - -:: - - -subsection:: Super Stereo encoder (soundfile) - -Super Stereo footnote:: See: http://en.wikipedia.org/wiki/Ambisonics#Super_stereo :: is the classic Ambisonic method to encode stereophonic files, and is considered to be optimal for frontal stereo encoding. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A kernel type encoder, see link::Classes/FoaEncoderKernel#*newSuper:: for further details.:: - -warning:: Kernel encoders require special care. Allow the kernel time to load before attempting to use. Additionally, the kernel buffer should be freed through the use of link::Classes/FoaEncoderKernel#-free:: after use.:: - - -code:: -// ------------------------------------------------------------ -// super stereo encoder -// stereo soundfile read from disk - - -// define encoder matrix -~encoder = FoaEncoderKernel.newSuper - - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels.raddeg - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/stereo/The_City_Waites-The_Downfall.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/stereo/The_City_Waites-An_Old.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/stereo/Aurora_Surgit-Lux_Aeterna.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/stereo/Aurora_Surgit-Dies_Irae.wav") - - -( -{ - var sig; // audio signal - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free kernel & buffer -~encoder.free -~sndbuf.free -// ------------------------------------------------------------ -:: - - -note:: strong::Soundfile Credits:: - -list:: -## The City Waites, "The Downfall of Dancing," Penny Merriments, NAXOS 8.557672 -## The City Waites, "An Old Song on the Spanish Armada," Penny Merriments, NAXOS 8.557672 -## Aurora Surgit, "Lux aeterna," Ego sum Resurrectio, NAXOS 8.557672 -## Aurora Surgit, "Dies irae," Ego sum Resurrectio, NAXOS 8.557672 -:: - -:: - - -subsection:: Ambisonic UHJ stereo encoder (soundfile) - -link::http://en.wikipedia.org/wiki/Ambisonic_UHJ_format##Ambisonic UHJ:: is the stereo format for Ambisonics. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A kernel type encoder, see link::Classes/FoaEncoderKernel#*newUHJ:: for further details.:: - -warning:: Kernel encoders require special care. Allow the kernel time to load before attempting to use. Additionally, the kernel buffer should be freed through the use of link::Classes/FoaEncoderKernel#-free:: after use.:: - - -code:: -// ------------------------------------------------------------ -// ambisonic uhj stereo encoder -// stereo soundfile read from disk - - -// define encoder matrix -~encoder = FoaEncoderKernel.newUHJ - - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels.raddeg - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/uhj/Palestrina-O_Bone.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/uhj/Gabrieli-Canzon_Duodecimi.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/uhj/Cante_Flamenco-Alegrias.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/uhj/Waldteufel-The_Skaters.wav") - - -( -{ - var sig; // audio signal - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free kernel & buffer -~encoder.free -~sndbuf.free -// ------------------------------------------------------------ -:: - - -note:: strong::Soundfile Credits:: - -list:: -## Christ Church Cathedral Choir, "Palestrina: O Bone Jesu, exaudi me," Ambisonic Sampler, NI 1417 -## The Wallace Collection, "Gabrieli: Canzon Duodecimi Toni a 10 (No 2)," Ambisonic Sampler, NI 1417 -## C. Lobato, J. del Gastor, & P. del Gastor, "Alegrias," Ambisonic Sampler, NI 1417 -## The Gulbenkian Orchestra, "Waldteufel: The Skaters' Waltz," Ambisonic Sampler, NI 1417 -:: - -:: - - -subsection:: ZoomH2 encoder (soundfile) - -The link::http://www.zoom.co.jp/english/products/h2/##ZoomH2:: is a convenient, portable handheld recorder. The device only records horizontal surround (pantophonic), so we don't get height. - -As a relatively inexpensive piece of equipment, the imaging of the link::http://www.zoom.co.jp/english/products/h2/##ZoomH2:: isn't always as consistent as we'd prefer. To remedy, the Y gain is tweaked to widen the image, and link::Classes/FoaXformerMatrix#*newDominateX#dominance:: is applied to stabilise the front. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A matrix type encoder, see link::Classes/FoaEncoderMatrix#*newZoomH2:: and link::Classes/FoaXformerMatrix#*newDominateX:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// zoomH2 encoder -// zoomH2 soundfile read from disk - - -// define encoder and xform matricies -~encoder = FoaEncoderMatrix.newZoomH2(k: 1.7378) -~xformer = FoaXformerMatrix.newDominateX(3.0) - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels.raddeg - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/zoomh2/Anderson-Waltz.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/zoomh2/Anderson-Steam.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/zoomh2/Anderson-Stape_Silver.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/zoomh2/Anderson-St_Peter_&_St_Paul.wav") - - -( -{ - var sig; // audio signal - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - - // ------------------------------------------------------------ - // xform - sig = FoaXform.ar(sig, ~xformer); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - -note:: strong::Soundfile Credits:: - -list:: -## Joseph Anderson, "Pickering Steam Fair: Waltz," [unpublished recording] -## Joseph Anderson, "Pickering Steam Fair: Engine," [unpublished recording] -## Joseph Anderson, "Stape Silver Band: March," [unpublished recording] -## Joseph Anderson, "St Peter & St Paul," [unpublished recording] -:: - -:: - - - -subsection:: ZoomH2 encoder, reversed (soundfile) - -As described link::Classes/FoaEncoderMatrix#*newZoomH2#here::, the link::http://www.zoom.co.jp/english/products/h2/##ZoomH2:: encoder reverses the labels for front and back of the link::http://www.zoom.co.jp/english/products/h2/##ZoomH2::. This is done to favour the use of the decoder as a roving, hand-held device, with the display facing the operator. - -If one wishes to respect the labelled orientation of the device as does link::http://www.radio.uqam.ca/ambisonic/comparative_recording.html##Courville:: in the example below, we'll need to either adjust the strong::angles:: argument or apply link::Classes/FoaXform#*newMirrorX::. For this example, we'll set strong::angles:: = code:: [3/4*pi, pi/3] ::, which are those specified in the link::http://www.zoom.co.jp/downloads/h2/manual/##ZoomH2 documentation::. - -As a relatively inexpensive piece of equipment, the imaging of the link::http://www.zoom.co.jp/english/products/h2/##ZoomH2:: isn't always as consistent as we'd prefer. To remedy, the Y gain is tweaked to widen the image. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A matrix type encoder, see link::Classes/FoaEncoderMatrix#*newZoomH2:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// zoomH2 encoder -// zoomH2 soundfile read from disk - - -// define encoder matrix -~encoder = FoaEncoderMatrix.newZoomH2([3/4*pi, pi/3], 1.7378) - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels.raddeg - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/zoomh2/Courville-Dialogue.wav") - - -( -{ - var sig; // audio signal - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - -note:: strong::Soundfile Credits:: - -list:: -## D. Courville, "Comparative Surround Recording," Ambisonic Studio | Comparative Surround Recording, 2007. [Online]. Available: http://www.radio.uqam.ca/ambisonic/comparative_recording.html [Accessed: 26-Jul-2011]. -:: - -:: - - - -subsection:: Pantophonic encoder (soundfile) - -The pantophonic encoder may be used to transcode from one format to another. This example transcodes an octophonic recording to the decoder you've chosen. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A matrix type encoder, see link::Classes/FoaEncoderMatrix#*newPanto:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// pantophonic (8-channel) encoder -// pantophonic (8-channel) soundfile read from disk - - -// define encoder matrix -~encoder = FoaEncoderMatrix.newPanto(8, 'flat') // choose for Mackay -~encoder = FoaEncoderMatrix.newPanto(8, 'point') // choose for Young - - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels.raddeg - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/multichannel/Mackay-Augustines_Message.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/multichannel/Young-Allting_Runt.wav") - - -( -{ - var sig; // audio signal - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - -note:: -strong::Soundfile Credits:: -list:: -## Robert Mackay, "Augustine's Message," [unpublished recording] -## John Young, "Allting Runt Omkring," [unpublished recording] -:: -:: - -subsection:: Directions encoder (soundfile) - -The directions encoder may be used to transcode from one format to another. This example transcodes a periphonic 12-channel recording to the decoder you've chosen. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A matrix type encoder, see link::Classes/FoaEncoderMatrix#*newPanto:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// periphonic (12-channel) encoder - - -// define encoder matrix -~directions = [ [ 22.5, 0 ], [ -22.5, 0 ], [ 67.5, 0 ], [ -67.5, 0 ], [ 112.5, 0 ], [ -112.5, 0 ], [ 157.5, 0 ], [ -157.5, 0 ], [ 45, 45 ], [ -45, 45 ], [ -135, 45 ], [ 135, 45 ] ].degrad -~encoder = FoaEncoderMatrix.newDirections(~directions) - - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels.raddeg - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/multichannel/Wilson-Bose.wav") - - -( -{ - var sig; // audio signal - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf) doneAction:2); // soundfile - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - -note:: strong::Soundfile Credits:: -list:: -## Scott Wilson, "Böse," [unpublished recording] -:: -:: diff --git a/source/ATK/sc/HelpSource/Classes/FoaEncoderKernel.schelp b/source/ATK/sc/HelpSource/Classes/FoaEncoderKernel.schelp deleted file mode 100644 index 63037a7235..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaEncoderKernel.schelp +++ /dev/null @@ -1,307 +0,0 @@ -CLASS:: FoaEncoderKernel -summary:: First Order Ambisonic (FOA) encoder kernels -categories:: Libraries>Ambisonic Toolkit>FOA>Encoding -related:: Classes/FoaEncoderMatrix, Classes/FoaEncode - -DESCRIPTION:: -Generates encoding kernels required by the Ambisonic Toolkit's first order encoder, link::Classes/FoaEncode::. - -note:: The ATK kernels are required for kernel encoding. Please see the instructions link::http://www.ambisonictoolkit.net/download/kernels/#ATK_Kernels#here:: for installation. :: - - -CLASSMETHODS:: - -METHOD:: newSuper -Ambisonic Super Stereo encoder. footnote::See: link::https://en.wikipedia.org/wiki/Ambisonic_UHJ_format#Super_stereo:::: - -argument:: kernelSize -256, 512, 1024, 2048, 4096, 8192 - -argument:: server -link::Classes/Server:: on which to load kernel. - -argument:: sampleRate -The sample rate defaults to code::nil:: and is usually supplied by the running server. In NRT, you can specify a sampleRate to avoid booting a server. - -argument:: score -Default is code::nil:: for most real time usages. When using NRT, you can supply a score (a link::Classes/Score:: or a link::Classes/CtkScore::) onto which the kernels will be added, which lets you bypass booting a server. - -discussion:: The Super Stereo encoding technique is the classic method for encoding stereophonic signals into B-format. - - -METHOD:: newUHJ -Ambisonic UHJ stereo encoder. footnote::See: link::http://en.wikipedia.org/wiki/Ambisonic_UHJ_format:::: - -argument:: kernelSize -256, 512, 1024, 2048, 4096, 8192 - -argument:: server -link::Classes/Server:: on which to load kernel. - -argument:: sampleRate -The sample rate defaults to code::nil:: and is usually supplied by the running server. In NRT, you can specify a sampleRate to avoid booting a server. - -argument:: score -Default is code::nil:: for most real time usages. When using NRT, you can supply a score (a link::Classes/Score:: or a link::Classes/CtkScore::) onto which the kernels will be added, which lets you bypass booting a server. - -discussion:: The UHJ encoder offers access to numerous published recordings footnote:: Nimbus Records' primary output is in Ambisonic UHJ. See: http://en.wikipedia.org/wiki/Nimbus_Records And: http://www.wyastone.co.uk/index.php :: for periphonic (2D) audition. - -note:: For optimal performance, use a dual-band decoder ( code::'dual':: ) for monitoring. See discussion link::Classes/FoaDecoderMatrix#decoder_k#here::. :: - - -METHOD:: newSpread -Frequency spreading mono encoder. - -argument:: subjectID -0 to 12. Specifies the number of bands per octave of the frequency spreader. 0 returns 1 band per octave, etc. - -argument:: kernelSize -512, 1024, 2048, 4096, 8192, 16384 - -argument:: server -link::Classes/Server:: on which to load kernel. - -argument:: sampleRate -The sample rate defaults to code::nil:: and is usually supplied by the running server. In NRT, you can specify a sampleRate to avoid booting a server. - -argument:: score -Default is code::nil:: for most real time usages. When using NRT, you can supply a score (a link::Classes/Score:: or a link::Classes/CtkScore::) onto which the kernels will be added, which lets you bypass booting a server. - -discussion:: The frequency spreading technique encodes a monophonic signal into B-format by smoothly rotating the signal across the soundfield sphere, by frequency. - -note:: As the number of bands per octaves increases, more time domain artefacts are introduced. This is usually heard as smearing in time.:: - - -METHOD:: newDiffuse -Frequency diffusion mono encoder. - -argument:: subjectID -0 to 5. Specifies the amount of phase dispersion of the frequency diffuser. 0 is low, 5 is high. - -argument:: kernelSize -512, 1024, 2048, 4096, 8192, 16384 - -argument:: server -link::Classes/Server:: on which to load kernel. - -argument:: sampleRate -The sample rate defaults to code::nil:: and is usually supplied by the running server. In NRT, you can specify a sampleRate to avoid booting a server. - -argument:: score -Default is code::nil:: for most real time usages. When using NRT, you can supply a score (a link::Classes/Score:: or a link::Classes/CtkScore::) onto which the kernels will be added, which lets you bypass booting a server. - -discussion:: The frequency diffusion technique encodes a monophonic signal into B-format by randomising the phase of the signal across the soundfield sphere, by frequency. - -note:: As the diffusion increases, more time domain artefacts are introduced. This is usually heard as smearing in time.:: - - -INSTANCEMETHODS:: -private:: initPath, initKernel, printOn - - -METHOD:: set - -Describes both the emphasis::signal set:: and the emphasis::tool set::, encompassing the Ambisonic order, as well as channel ordering and normalisation. - -Answers code::'FOA'::, aka traditional B-format: - -table:: -## strong::Ambisonic Order:: || strong::Channel Ordering:: || strong::Channel Normalisation:: -## 1st || Gerzon (aka Furse-Malham) || MaxN -:: - -METHOD:: type -returns:: code::'encoder':: - -METHOD:: op -Answers code::'kernel'::, i.e. the type of operation used to compute the resulting signals. - -METHOD:: kind -Answers the kind of encoder - -discussion:: - -code:: -// encoder - make sure you boot the server first!! -~encoder = FoaEncoderKernel.newUHJ - -// inspect -~encoder.kind - -// don't forget to free!! -~encoder.free -:: - - -METHOD:: subjectID -Answers the strong::subjectID:: of the decoder - -discussion:: - -code:: -// encoder - make sure you boot the server first!! -~encoder = FoaEncoderKernel.newUHJ - -// inspect -~encoder.subjectID - -// don't forget to free!! -~encoder.free -:: - - - -METHOD:: dim -Answers the number of decoder dimensions: 2D or 3D. - -discussion:: - -code:: -// encoder - make sure you boot the server first!! -~encoder = FoaEncoderKernel.newUHJ - -// inspect -~encoder.dim - -// don't forget to free!! -~encoder.free -:: - - - -METHOD:: numChannels -Answers the number of input channels. - -discussion:: - -code:: -// encoder - make sure you boot the server first!! -~encoder = FoaEncoderKernel.newUHJ - -// inspect -~encoder.numChannels - -// don't forget to free!! -~encoder.free -:: - - - - -METHOD:: dirChannels -Answers the direction of input channels, with angles in radians. - -discussion:: - -code:: -// encoder - make sure you boot the server first!! -~encoder = FoaEncoderKernel.newSuper - -// inspect -~encoder.dirChannels.raddeg - -// don't forget to free!! -~encoder.free -:: - -code:: -// encoder - make sure you boot the server first!! -~encoder = FoaEncoderKernel.newUHJ - -// inspect -~encoder.dirChannels.raddeg - -// don't forget to free!! -~encoder.free -:: - - -METHOD:: kernel -Answers the encoder kernel. - -discussion:: - -code:: -// encoder - make sure you boot the server first!! -~encoder = FoaEncoderKernel.newUHJ - -// inspect -~encoder.kernel - -// don't forget to free!! -~encoder.free -:: - - - - -METHOD:: kernelSize -Answers the strong::kernelSize::. - - -discussion:: - -Use of link::Classes/FoaEncoderKernel:: introduces a delay to the encoded -B-format signal. - -The total delay, in samples, can be calculated as -code::(kernelSize-1)/2 + kernelSize - blockSize::, where -link::Classes/ServerOptions#-blockSize#blockSize:: is the number of -samples in one control period of the link::Classes/Server:: in use. - -code:: -// encoder - make sure you boot the server first!! -~encoder = FoaEncoderKernel.newUHJ - -// inspect -~encoder.kernelSize - -// calculate delay in samples -(~encoder.kernelSize-1)/2 + ~encoder.kernelSize - s.options.blockSize - -// calculate delay in seconds -((~encoder.kernelSize-1)/2 + ~encoder.kernelSize - s.options.blockSize) / s.sampleRate - -// don't forget to free!! -~encoder.free -:: - - -METHOD:: free -Free the kernel. - -discussion:: Release the kernel buffer's memory on the server and return the bufferID back to the server's buffer number allocator for future reuse. - -warning:: Only free the kernel when the link::Classes/FoaEncode#*ar:: is no longer in use!:: - - - -METHOD:: numInputs -A synonym for link::#-numChannels:: - - -METHOD:: dirInputs -A synonym for link::#-dirChannels:: - - -METHOD:: numOutputs -Answers the number of outputs for the decoder. 3 for 2D and 4 for 3D. - - -METHOD:: dirOutputs -A convenience method providing polymorphism with link::Classes/FoaDecoderKernel#-dirOutputs::. - -returns:: - -list:: -## for 2D: code:: [ inf, inf, inf ] :: -## for 3D: code:: [ inf, inf, inf , inf ] :: -:: - - -PRIVATE:: buffers, kernelBundle, kernelInfo - - -EXAMPLES:: - -Please see link::Classes/FoaEncode#Examples::. diff --git a/source/ATK/sc/HelpSource/Classes/FoaEncoderMatrix.schelp b/source/ATK/sc/HelpSource/Classes/FoaEncoderMatrix.schelp deleted file mode 100644 index 34eade3fc9..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaEncoderMatrix.schelp +++ /dev/null @@ -1,486 +0,0 @@ -CLASS:: FoaEncoderMatrix -summary:: First Order Ambisonic (FOA) encoder matrices -categories:: Libraries>Ambisonic Toolkit>FOA>Encoding -related:: Classes/FoaEncoderKernel, Classes/FoaEncode - -DESCRIPTION:: -Generates encoding matrices required by the Ambisonic Toolkit's first order encoder, link::Classes/FoaEncode::. - - - -CLASSMETHODS:: - -METHOD:: newOmni -Omnidirectional encoder (monophonic). - -discussion:: An omnidirectional soundfield can be regarded in two ways: a soundfield with an infinite number of planewaves arriving in all directions, or a soundfield with no directions. In a well aligned, dampend studio environment, this usually sounds "in the head", while in concert hall listening usually appears as omnipresent. - -To control the soundfield, link::Classes/FoaPush:: and link::Classes/FoaFocus:: can be applied to either "push" or "focus" an omnidirectional soundfield into a planewave, giving the soundfield an angle of arrival. footnote:: In combination with distance scaling, link::#*newOmni:: and link::Classes/FoaPush:: can be used to implement Menzies' "W-panning" technique. See: D. Menzies, "W-panning and O-format, tools for object spatialization," in Proceedings of the Audio Engineering Society 22nd International Conference on Virtual, Synthetic and Entertainment Audio, Espoo, Finland, 2002.:: - - - -METHOD:: newDirection -Planewave encoder (monophonic). - -argument:: theta -Azimuth angle, in radians: pi to -pi - -argument:: phi -Elevation anglein radians: pi/2 to -pi/2 - -discussion:: This is the classic Ambisonic encoding (panning) function. SuperCollider's inbuilt link::Classes/PanB:: and the Ambisonic Toolkit's link::Classes/FoaPanB:: implement this encoder as a UGen, and allow dynamically changing strong::theta:: and strong::phi::. - - - -METHOD:: newStereo -Stereophonic encoder. - -argument:: angle -Soundfield distortion angle, in radians: pi/2 to -pi/2 - -discussion:: The stereophonic signal is encoded as two planewaves. When strong::angle:: = 0, the left and right channels of the input signal arrive at code:: [90, -90] :: degrees. strong::angle:: = pi/4 distorts the arrivals to code:: [45, -45] :: degrees. strong::angle:: = pi/2, places both the left and right inputs at front centre, code:: [0, 0] :: degrees. This behaviour matches that of the Ambisonic Toolkit's first order image warping UGens: link::Classes/FoaFocus::, link::Classes/FoaZoom::, link::Classes/FoaPush::, and link::Classes/FoaPress::. -note::The authors also suggest reviewing the Super Stereo footnote::See link::https://en.wikipedia.org/wiki/Ambisonic_UHJ_format#Super_stereo:: for further information.:: encoding technique, the classic method for encoding stereophonic signals into B-format: link::Classes/FoaEncoderKernel#*newSuper:: :: - -METHOD:: newQuad -Quadraphonic encoder. - -discussion:: The quadraphonic signal is encoded as four planewaves arriving at code:: [ 45, 135, -135, -45 ] :: degrees. This encoding is equivalent to placing infinitely distant loudspeakers around a soundfield microphone in an anechoic chamber. - - - -METHOD:: new5_0 -5.0 encoder. - -discussion:: The 5.0 signal is encoded as five planewaves arriving at code:: [ 0, 30, 110, -110, -30 ] :: degrees. This encoding is equivalent to placing infinitely distant loudspeakers around a soundfield microphone in an anechoic chamber. - - - -METHOD:: new7_0 -7.0 encoder. - -discussion:: The 7.0 signal is encoded as seven planewaves arriving at code:: [ 0, 30, 90, 135, -135, -90, -30 ] :: degrees. This encoding is equivalent to placing infinitely distant loudspeakers around a soundfield microphone in an anechoic chamber. - - - -METHOD:: newPanto -Pantophonic (2D) regular polygon encoder. - -argument:: numChans -number of input channel feeds - -argument:: orientation -code::'flat':: or code::'point':: - -discussion:: Inputs are in anti-clockwise order. The position of the first input channel is either centre or left of centre. link::#-dirChannels:: may be used to query resulting input channel directions. This encoding is equivalent to placing infinitely distant loudspeakers around a soundfield microphone in an anechoic chamber. - - - -METHOD:: newPeri -Periphonic (3D) dual ring, regular cylindrical encoder. - -argument:: numChanPairs -Number of channel pairs. (Half the total number of input channel feeds.) - -argument:: elevation -Elevation of the upper ring, measured from the origin. In radians. - -argument:: orientation -code::'flat':: or code::'point':: - - -discussion:: Inputs are in anti-clockwise order, beginning with the top ring. The position of the first speaker is either centre or left of centre. link::#-dirChannels:: may be used to query resulting loudspeaker directions. This encoding is equivalent to placing infinitely distant loudspeakers around a soundfield microphone in an anechoic chamber. - - - -METHOD:: newDirections -Virtual loudspeaker or microphone encoder, suitable for varied periphonic and pantophonic arrays. - -argument:: directions -An array of directions of the virtual loudspeakers or microphones. Specify in radians. - -Rank 1 arrays return pantophonic, while rank 2 arrays return periphonic. E.g., -code:: -// 2D: -~directions = [ theta0, theta1, ... thetaN ]; -:: -code:: -// 3D: -~directions = [ [ theta0, phi0 ], [ theta1, phi1 ], ... [ thetaN, phiN ] ]; -:: - -argument:: pattern -Virtual microphone pattern, code::nil::, or 0 to 1. - -definitionList:: -## code::nil:: || strong::directions:: specifies virtual loudspeaker positions -## 0 to 1 || strong::directions:: specifies a microphone array with patterns: - table:: - ## strong::pattern:: || strong::microphone:: - ## 0.0 || Omni - ## 0.5 || Cardioid - ## (3-sqrt(3))/2 || Super-cardioid - ## 0.75 || Hyper-cardioid - ## 1.0 || Bi-directional - :: - If strong::pattern:: is an link::Classes/Array::, individual microphone patterns are specified. - - For equivalences to decoder strong::k::, please see link::Classes/FoaDecoderMatrix#decoder k::. -:: - - -discussion:: link::#-newDirections:: is the Ambisonic Toolkit's most versatile first order encoder. Arbitrary input loudspeaker and/or microphone arrays may be specified. - -code:: -// Periphonic (3D) encoder, a 1/2 dome of 13 loudspeakers -// [[0, 0], [45, 0], [90, 0], [135, 0], [-180, 0], [-135, 0], [-90, 0], [-45, 0], -// [45, 35.3], [135, 35.3], [-135, 35.3], [-45, 35.3], [0, 90]] - -~directions = [[0, 0], [45, 0], [90, 0], [135, 0], [-180, 0], [-135, 0], [-90, 0], - [-45, 0], [45, 35.3], [135, 35.3], [-135, 35.3], [-45, 35.3], [0, 90]].degrad; -~encoder = FoaEncoderMatrix.newDirections(~directions); - -// inspect -~encoder.dirChannels.raddeg; -:: - -code:: -// Periphonic (2D) encoder, 3 cardioid microphones -// See: http://www.michaelgerzonphotos.org.uk/microphones-calrecs.html -// [60, -180, -60] - -~directions = [60, -180, -60].degrad; -~pattern = 0.5; -~encoder = FoaEncoderMatrix.newDirections(~directions, ~pattern); - -// inspect -~encoder.dirChannels.raddeg; -:: - -code:: -// Periphonic (2D) encoder, 1 omni and 2 cardioid microphones -// [0, 45, -45] - -~directions = [0, 45, -45].degrad; -~pattern = [0, 0.5, 0.5]; -~encoder = FoaEncoderMatrix.newDirections(~directions, ~pattern); - -// inspect -~encoder.dirChannels.raddeg; -:: - - -METHOD:: newZoomH2 -link::http://www.zoom.co.jp/english/products/h2/##ZoomH2:: (pantophonic) encoder. - -argument:: angles -Angles for front left and back left microphones, in radians. (The corresponding right microphones are mirrored across the y-axis.) Defaults to code:: [pi/3, 3/4*pi] :: . - -note:: anchor::newzoomh2note:: The encoder reverses the labels for front and back of the link::http://www.zoom.co.jp/english/products/h2/##ZoomH2::. This is done so that directions are are preserved from the point of view of a field recording operator. With the link::http://www.zoom.co.jp/english/products/h2/##ZoomH2::'s display facing the operator (for ease of monitoring), sounds arriving in front of the operator will be encoded in the front of the soundfield. See also link::#newzoomdiscussion#Discussion:: below.:: - -argument:: pattern -Microphone pattern footnote::The default value, 0.5857, is derived from measurements made by Farina, and is a hyper-cardioid response with a zero at 135 degrees. See: link::http://pcfarina.eng.unipr.it/Public/Brahma/Zoom-H2/Polar-ZoomH2.xls:: ::, 0 to 1: - -table:: -## strong::pattern:: || strong::virtual microphone:: -## 0.0 || Omni -## 0.5 || Cardioid -## (3-sqrt(3))/2 || Super-cardioid -## 0.75 || Hyper-cardioid -## 1.0 || Bi-directional -:: - -argument:: k -Post-encoding Y scalar. -note::Please see further discussion of strong::k:: link::#newzoomh2k#here:::: - -discussion:: -anchor::newzoomdiscussion:: -A four channel recording made by the link::http://www.zoom.co.jp/english/products/h2/##ZoomH2:: will be returned as two stereo .wav files named: - -list:: -## SRxxxF.wav -## SRxxxR.wav -:: - -Presuming the link::http://www.zoom.co.jp/english/products/h2/##ZoomH2:: is oriented as described link::#newzoomh2note#here::, the following illustrates correct input for the encoder: -code:: -// ZoomH2 records two stereo .wav files: -// SRxxxF.wav -// SRxxxR.wav -// correct input for FoaEncoderMatrix.newZoomH2 is: - -~in = [ SRxxxR.at(0), SRxxxR.at(1), SRxxxF.at(0), SRxxxF.at(1) ] -:: - -anchor::newzoomh2k:: -The encoder includes a Y scalar, strong::k::, and an auditioned adjustment is usually necessary to improve the resulting image. As the link::http://www.zoom.co.jp/english/products/h2/##ZoomH2::'s polar patterns are not consistent across frequency, and the capsules are not coincident, imaging is not always consistent. Touching strong::k:: can go some way towards remedy-ing this. - -note:: -strong::k:: = 1.7378 is a value that has been found suitable for matching link::http://www.radio.uqam.ca/ambisonic/comparative_recording.html##Courville::'s link::http://www.zoom.co.jp/english/products/h2/##ZoomH2:: footnote:: Courville orients his ZoomH2 so that the labelled front of the device faces the front of the sound scene. This is front/back reversed as regards -newZoomH2. If you choose to encode Courville's example files, you'll need to follow with FoaMirrorX.:: and Soundfield recordings. footnote:: See: http://www.radio.uqam.ca/ambisonic/comparative_recording.html :: -:: - -METHOD:: newZoomH2n -A first order link::https://en.wikipedia.org/wiki/Ambisonic_data_exchange_formats##Ambisonic format exchange:: encoder, for use with the link::https://www.zoom-na.com/products/field-video-recording/field-recording/zoom-h2n-handy-recorder##ZoomH2n::. Encodes from AmbiX to traditional B-format. A convenience alias to link::#*newHoa1::. - - -discussion:: -Encoding means encoding from one Ambisonic channel componenent orderding and normalisation to that of traditional B-format. In this case, from AmbiX encoding scheme (strong::ACN:: ordering, strong::SN3D:: normalisation) to strong::Gerzon:: (aka strong::Furse-Malham::) ordering, strong::MaxN:: normalisation. - - -note:: -Requires a device firmware update to link::https://www.zoom-na.com/sites/default/files/products/downloads/software/H2n_v2.00E.zip##H2n System Version 2.00:: or higher. Set the link::https://www.zoom-na.com/products/field-video-recording/field-recording/zoom-h2n-handy-recorder##ZoomH2n:: to record in the code::SPATIAL AUDIO:: mode. Further details may be reviewed in the manual addendum link::https://www.zoom.co.jp/sites/default/files/products/downloads/pdfs/H2n_Ver2_OPmanual_E.pdf##found here::. -:: - - - -METHOD:: newAtoB -A-format to B-format encoder. Encodes to a variety of tetrahedral orientations and W channel weights. - - -argument:: orientation -Orientation of the A-format tetrahedron. - -table:: -## strong::orientation:: || strong::angles:: ([theta, phi] in degrees) -## code::'flu':: || code:: [[45.0, 35.3], [-45.0, -35.3], [135.0, -35.3], [-135.0, 35.3]] :: -## code::'fld':: || code:: [[45.0, -35.3], [-45.0 , 35.3], [135.0, 35.3], [-135.0, -35.3]] :: -## code::'flr':: || code:: [[54.7, 0.0], [-54.7, 0.0], [180.0, 54.7], [ 180.0, -54.7]] :: -## code::'fud':: || code:: [[ 0.0, 54.7], [ 0.0, -54.7], [125.7, 0.0], [-125.7, 0.0]] :: -## code::'fbd':: || code:: [[ 0.0, 0.0], [180.0, -70.5], [112.2, 28.1], [-112.2, 28.1]] :: -## code::'fbu':: || code:: [[ 0.0, 0.0], [180.0, 70.5], [112.2, -28.1], [-112.2, -28.1]] :: -## code::'flru':: || code:: [[67.8, 28.1], [-67.8, 28.1], [ 0.0, -70.5], [ 180.0, 0.0]] :: -## code::'flrd':: || code:: [[67.8, -28.1], [-67.8, -28.1], [ 0.0, 70.5], [ 180.0, 0.0]] :: -:: - -argument:: weight -The W weight factor. - -For convenience, equivalent virtual microphone strong::pattern:: and decoding strong::k:: are also listed. - -table:: -## strong::weight:: || strong::kind:: || strong::W scale:: || strong::virtual microphone:: || strong::pattern:: || strong::decoding:: || strong::k:: -## code::'dec':: || Decorrelated (on the sphere) || 1/sqrt(3) || Hyper-cardioid || 0.75 || strict soundfield || code::'velocity':: -## code::'can':: || Canonical (B-format) || 1/sqrt(2) || ||sqrt(6)/(1+sqrt(6)) || || sqrt(2/3) -## code::'uns':: || Unscaled || 1 || Super-cardioid || (3-sqrt(3))/2 || energy optimised || code::'energy':: -## code::'car':: || Cardioid || sqrt(3) || Cardioid || 0.5 || controlled opposites || code::'controlled':: -:: - - -discussion:: -The A-format encoder is often used in conjunction with the link::Classes/FoaDecoderMatrix#*newBtoA:: B-format decoder to form signal processing networks which preserve the spatial encoding as is described link::Classes/FoaDecoderMatrix#btoadiscuss#here::. - -On its own, link::#*newAtoB:: is often used to author immersive, periphonic (3D) decorrelated soundfields. - - -METHOD:: newHoa1 -A first order link::https://en.wikipedia.org/wiki/Ambisonic_data_exchange_formats##Ambisonic format exchange:: encoder. Encodes a variety of formats to traditional B-format. - -argument:: ordering -Input Ambisonic channel component ordering. - -table:: -## strong::ordering:: || strong::kind:: -## code::'acn':: || Ambisonic Channel Number (ACN) -## code::'sid':: || Single Index Designation (SID) -:: - -argument:: normalisation -Spherical harmonic normalisation method. - -table:: -## strong::normalisation:: || strong::kind:: -## code::'n3d':: || Orthonormal basis for 3D decomposition (N3D) -## code::'sn3d':: || Semi-normalised basis for 3D decomposition (SN3D) -:: - - -discussion:: -Encoding means encoding from one Ambisonic channel componenent orderding and normalisation to that of traditional B-format. In other words, from some standard scheme to strong::Gerzon:: (aka strong::Furse-Malham::) ordering with strong::MaxN:: normalisation. - -note::code::Hoa1:: in the method name link::#*newHoa1:: refers to Higher Order Ambisonic (HOA) encoding format, Ambisonic order = 1. The input signal should have four channels, with the given encoding format as specified in the arguments.:: - - -METHOD:: newAmbix1 -A first order link::https://en.wikipedia.org/wiki/Ambisonic_data_exchange_formats##Ambisonic format exchange:: encoder. Encodes from AmbiX to traditional B-format. A convenience alias to link::#*newHoa1::. - -discussion:: -Encoding means encoding from one Ambisonic channel componenent orderding and normalisation to that of traditional B-format. In this case, from AmbiX encoding scheme (strong::ACN:: ordering, strong::SN3D:: normalisation) to strong::Gerzon:: (aka strong::Furse-Malham::) ordering, strong::MaxN:: normalisation. - - -METHOD:: newFromFile -Create an FoaEncoderMatrix by loading a matrix from a file. - -argument:: filePathOrName -Can be a path relative to your code::/extensions/matrices/encoders:: folder: -code:: -Atk.getMatrixExtensionPath('encoders').fullPath -:: -Otherwise a full path to your matrix file. - -discussion:: -See the link::Guides/Guide-to-ATK-Matrix-Files:: for more information. - - -COPYMETHOD:: AtkMatrix, *newFromMatrix - - -INSTANCEMETHODS:: -private:: init2D, init3D, initInv2D, initInv3D, initAtoB, initOmni, initDirection, initStereo, initQuad, init5_0, init7_0, initDirections, initPanto, initPeri, initZoomH2, initHoa1, initAmbix1, initZoomH2n, printOn, initEncoderVarsForFiles - - -METHOD:: set - -Describes both the emphasis::signal set:: and the emphasis::tool set::, encompassing the Ambisonic order, as well as channel ordering and normalisation. - -Answers code::'FOA'::, aka traditional B-format: - -table:: -## strong::Ambisonic Order:: || strong::Channel Ordering:: || strong::Channel Normalisation:: -## 1st || Gerzon (aka Furse-Malham) || MaxN -:: - -METHOD:: type -returns:: code::'encoder':: - -COPYMETHOD:: AtkMatrix, -op - -METHOD:: kind -Answers the kind of encoder. - -discussion:: - -code:: -// encoder -~encoder = FoaEncoderMatrix.newQuad - -// inspect -~encoder.kind -:: - -code:: -// encoder -~encoder = FoaEncoderMatrix.newPeri - -// inspect -~encoder.kind -:: - - -METHOD:: dim -Answers the number of encoder dimensions: 2D or 3D. - -discussion:: - -code:: -// encoder -~encoder = FoaEncoderMatrix.newQuad - -// inspect -~encoder.dim -:: - -code:: -// encoder -~encoder = FoaEncoderMatrix.newPeri - -// inspect -~encoder.dim -:: - - - -METHOD:: numChannels -Answers the number of input channels (virtual loudspeakers or microphones). - -discussion:: - -code:: -// encoder -~encoder = FoaEncoderMatrix.newQuad - -// inspect -~encoder.numChannels -:: - -code:: -// encoder (two rings of 6) -~encoder = FoaEncoderMatrix.newPeri(6) - -// inspect -~encoder.numChannels -:: - - - -METHOD:: dirChannels -Answers the direction of virtual loudspeaker or microphone feeds, with angles in radians. - -returns:: A rank 1 array for pantophonic, and rank 2 array for periphonic. E.g., -code:: -// 2D: -[ theta0, theta1, ... thetaN ] -:: -code:: -// 3D -[ [ theta0, phi0 ], [ theta1, phi1 ], ... [ thetaN, phiN ] ] -:: - -code:: -// encoder -~encoder = FoaEncoderMatrix.newQuad - -// inspect -~encoder.dirChannels.raddeg -:: - -code:: -// encoder (two rings of 6) -~encoder = FoaEncoderMatrix.newPeri(6) - -// inspect -~encoder.dirChannels.raddeg -:: - - - -METHOD:: matrix -Answers the encoding matrix - - - - -METHOD:: numOutputs -Answers the number of outputs for the encoder. 3 for 2D and 4 for 3D. - - -METHOD:: dirOutputs -A convenience method providing polymorphism with link::Classes/FoaEncoderMatrix#-dirOutputs::. - -returns:: - -list:: -## for 2D: code:: [ inf, inf, inf ] :: -## for 3D: code:: [ inf, inf, inf , inf ] :: -:: - - -METHOD:: numInputs -A synonym for link::#-numChannels:: - - -METHOD:: dirInputs -A synonym for link::#-dirChannels:: - -COPYMETHOD:: AtkMatrix, -info - -COPYMETHOD:: AtkMatrix, -fileParse - -COPYMETHOD:: AtkMatrix, -filePath - -COPYMETHOD:: AtkMatrix, -fileName - -COPYMETHOD:: AtkMatrix, -writeToFile - -EXAMPLES:: - -Please see link::Classes/FoaEncode#Examples::. diff --git a/source/ATK/sc/HelpSource/Classes/FoaFocus.schelp b/source/ATK/sc/HelpSource/Classes/FoaFocus.schelp deleted file mode 100644 index f11d64ba5c..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaFocus.schelp +++ /dev/null @@ -1,47 +0,0 @@ -CLASS:: FoaFocus -summary:: First Order Ambisonic (FOA) focus transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaFocusX, Classes/FoaFocusY, Classes/FoaFocusZ, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply focus to a first order ambisonic signal (B-format) along an arbitrary axis. - - -NOTE:: -link::Classes/FoaFocus:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: theta -Azimuth, in radians. - -argument:: phi -Elevation, in radians. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: Applies focus along the axis defined by strong::theta:: and strong::phi::. See link::Classes/FoaFocusX::. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newFocus:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaFocusX.schelp b/source/ATK/sc/HelpSource/Classes/FoaFocusX.schelp deleted file mode 100644 index 5324f17a50..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaFocusX.schelp +++ /dev/null @@ -1,46 +0,0 @@ -CLASS:: FoaFocusX -summary:: First Order Ambisonic (FOA) focus transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaFocusY, Classes/FoaFocusZ, Classes/FoaFocus, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply focus to a first order ambisonic signal (B-format) along the x-axis. - - -NOTE:: -link::Classes/FoaFocusX:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: Focus is a normalised dominance variant, specified in terms of a distortion angle. Positive values of strong::angle:: maintain gain at code:: [0, 0] ::, while reducing at code:: [pi, 0] ::. Negative values do the inverse. The default, 0, results in no change. - -In contrast with zoom, gain is maintained at 0dB in the direction of distortion. - -anchor::figure:: - -image::focus_fig.png#Focus imaging:: - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newFocusX:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaFocusY.schelp b/source/ATK/sc/HelpSource/Classes/FoaFocusY.schelp deleted file mode 100644 index 04cffe1d37..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaFocusY.schelp +++ /dev/null @@ -1,42 +0,0 @@ -CLASS:: FoaFocusY -summary:: First Order Ambisonic (FOA) focus transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaFocusX, Classes/FoaFocusZ, Classes/FoaFocus, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply focus to a first order ambisonic signal (B-format) along the y-axis. - - -NOTE:: -link::Classes/FoaFocusY:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: Focus is a normalised dominance variant, specified in terms of a distortion angle. Positive values of strong::angle:: maintain gain at code:: [pi/2, 0] ::, while reducing at code:: [-pi/2, 0] ::. Negative values do the inverse. The default, 0, results in no change. - -In contrast with zoom, gain is maintained at 0dB in the direction of distortion. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newFocusY:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaFocusZ.schelp b/source/ATK/sc/HelpSource/Classes/FoaFocusZ.schelp deleted file mode 100644 index b7fafe6ef2..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaFocusZ.schelp +++ /dev/null @@ -1,42 +0,0 @@ -CLASS:: FoaFocusZ -summary:: First Order Ambisonic (FOA) focus transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaFocusX, Classes/FoaFocusY, Classes/FoaFocus, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply focus to a first order ambisonic signal (B-format) along the z-axis. - - -NOTE:: -link::Classes/FoaFocusZ:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: Focus is a normalised dominance variant, specified in terms of a distortion angle. Positive values of strong::angle:: maintain gain at code:: [0, pi/2] ::, while reducing at code:: [0, -pi/2] ::. Negative values do the inverse. The default, 0, results in no change. - -In contrast with zoom, gain is maintained at 0dB in the direction of distortion. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newFocusZ:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaMirror.schelp b/source/ATK/sc/HelpSource/Classes/FoaMirror.schelp deleted file mode 100644 index be8061289a..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaMirror.schelp +++ /dev/null @@ -1,47 +0,0 @@ -CLASS:: FoaMirror -summary:: First Order Ambisonic (FOA) mirror transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Mirror a first order ambisonic signal (B-format) across an arbitrary plane. - - -NOTE:: -link::Classes/FoaMirror:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: theta -Azimuth for the normal to the plane, in radians. - -argument:: phi -Elevation for the normal to the plane, in radians. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - - -discussion:: - -Mirroring across the origin and individual axes is implemented via link::Classes/FoaXformerMatrix#*newMirrorO:: and link::Classes/FoaXformerMatrix#*newMirrorX::, link::Classes/FoaXformerMatrix#*newMirrorY::, link::Classes/FoaXformerMatrix#*newMirrorZ::. - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newMirror:: :: - - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaNFC.schelp b/source/ATK/sc/HelpSource/Classes/FoaNFC.schelp deleted file mode 100644 index d1ce9b4b58..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaNFC.schelp +++ /dev/null @@ -1,48 +0,0 @@ -CLASS:: FoaNFC -summary:: First Order Ambisonic (FOA) nearfield compensation filter -categories:: Libraries>Ambisonic Toolkit>FOA>Decoding>UGens, Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaProximity, Classes/FoaTransform, Classes/FoaDecode - -DESCRIPTION:: -Apply nearfield compensation filtering to a first order ambisonic signal (B-format). - -note:: -link::Classes/FoaNFC:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: distance -The distance, in meters. - -warning:: strong::Distance:: = 0 is an invalid value! :: - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: - -link::Classes/FoaNFC:: facilitates the reduction or removal of the link::http://en.wikipedia.org/wiki/Proximity_effect_(audio)##proximity effect:: from encoded signals. The link::http://en.wikipedia.org/wiki/Proximity_effect_(audio)##proximity effect:: can be an important contributor to perceptions of nearness. - -Nearfield compensation footnote::Usually called distance compensation in the classic Ambisonics literature.:: is usually used in conjunction with link::Classes/FoaDecode:: to compensate for the distance of loudspeakers on playback. Additionally, link::Classes/FoaNFC:: can also be used to reduce the link::http://en.wikipedia.org/wiki/Proximity_effect_(audio)##proximity effect:: found in nearfield recordings. - - -The Ambisonic Toolkit's proximity filter, link::Classes/FoaProximity::, undoes link::Classes/FoaNFC:: given the same strong::distance:: argument. - - - - -EXAMPLES:: - -Please see link::Classes/FoaDecode#psychoacoustically_optimised_quadraphonic_decoder#this:: and link::Classes/FoaTransform#nfc_(soundfile)#this::. diff --git a/source/ATK/sc/HelpSource/Classes/FoaPanB.schelp b/source/ATK/sc/HelpSource/Classes/FoaPanB.schelp deleted file mode 100644 index a2ce5c1e9a..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaPanB.schelp +++ /dev/null @@ -1,37 +0,0 @@ -CLASS:: FoaPanB -summary:: First Order Ambisonic (FOA) panner -categories:: Libraries>Ambisonic Toolkit>FOA>Encoding>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaEncode - -DESCRIPTION:: -Encode a monophonic input to a first order ambisonic signal (B-format), as a planewave. link::Classes/PanB:: is the SuperCollider inbuilt equivalent. - - - -CLASSMETHODS:: - -METHOD:: ar - - -argument:: in -The input signal. - -argument:: azimuth -Azimuth, in radians. - -argument:: elevation -Elevation, in radians. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - - -discussion:: - -link::Classes/FoaPanB:: is provided primarily as a convenience. Encoding monophonic signals via link::Classes/FoaEncoderMatrix#*newOmni:: and transformation via link::Classes/FoaPush:: is often regarded as a more idiomatic option. See link::Classes/FoaEncode#omnidirectional_encoder#this example::. - -Additionally, use of link::Classes/FoaProximity:: to generate proximity cues is also encouraged. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaPress.schelp b/source/ATK/sc/HelpSource/Classes/FoaPress.schelp deleted file mode 100644 index bdfe980a28..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaPress.schelp +++ /dev/null @@ -1,47 +0,0 @@ -CLASS:: FoaPress -summary:: First Order Ambisonic (FOA) press transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaPressX, Classes/FoaPressY, Classes/FoaPressZ, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply press to a first order ambisonic signal (B-format) along an arbitrary axis. - - -NOTE:: -link::Classes/FoaPress:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: theta -Azimuth, in radians. - -argument:: phi -Elevation, in radians. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: Applies press along the axis defined by strong::theta:: and strong::phi::. See link::Classes/FoaPressX::. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newPress:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaPressX.schelp b/source/ATK/sc/HelpSource/Classes/FoaPressX.schelp deleted file mode 100644 index ac869e658c..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaPressX.schelp +++ /dev/null @@ -1,45 +0,0 @@ -CLASS:: FoaPressX -summary:: First Order Ambisonic (FOA) press transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaPressY, Classes/FoaPressZ, Classes/FoaPress, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply press to a first order ambisonic signal (B-format) along the x-axis. - - -NOTE:: -link::Classes/FoaPressX:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: Press is a dominance related transform, specified in terms of a distortion angle. Positive values of strong::angle:: press the image towards code:: [0, 0] ::. Negative values press towards code:: [pi, 0] ::. The default, 0, results in no change. - - -anchor::figure:: - -image::press_fig.png#Press imaging:: - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newPressX:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaPressY.schelp b/source/ATK/sc/HelpSource/Classes/FoaPressY.schelp deleted file mode 100644 index 6e1418c0e3..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaPressY.schelp +++ /dev/null @@ -1,40 +0,0 @@ -CLASS:: FoaPressY -summary:: First Order Ambisonic (FOA) press transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaPressX, Classes/FoaPressZ, Classes/FoaPress, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply press to a first order ambisonic signal (B-format) along the y-axis. - - -NOTE:: -link::Classes/FoaPressY:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: Press is a dominance related transform, specified in terms of a distortion angle. Positive values of strong::angle:: press the image towards code:: [pi/2, 0] ::. Negative values press towards code:: [-pi/2, 0] ::. The default, 0, results in no change. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newPressY:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaPressZ.schelp b/source/ATK/sc/HelpSource/Classes/FoaPressZ.schelp deleted file mode 100644 index 56e93304bf..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaPressZ.schelp +++ /dev/null @@ -1,40 +0,0 @@ -CLASS:: FoaPressZ -summary:: First Order Ambisonic (FOA) press transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaPressX, Classes/FoaPressY, Classes/FoaPress, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply press to a first order ambisonic signal (B-format) along the z-axis. - - -NOTE:: -link::Classes/FoaPressZ:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: Press is a dominance related transform, specified in terms of a distortion angle. Positive values of strong::angle:: press the image towards code:: [0, pi/2] ::. Negative values press towards code:: [0, -pi/2] ::. The default, 0, results in no change. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newPressZ:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaProximity.schelp b/source/ATK/sc/HelpSource/Classes/FoaProximity.schelp deleted file mode 100644 index 383c50789b..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaProximity.schelp +++ /dev/null @@ -1,46 +0,0 @@ -CLASS:: FoaProximity -summary:: First Order Ambisonic (FOA) proximity effect filter -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaNFC, Classes/FoaTransform - -DESCRIPTION:: -Apply proximity filtering to a first order ambisonic signal (B-format). - -NOTE:: -link::Classes/FoaProximity:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: distance -The distance, in meters. - -warning:: strong::Distance:: = 0 is an invalid value! :: - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: - -link::Classes/FoaProximity:: facilitates the introduction of the link::http://en.wikipedia.org/wiki/Proximity_effect_(audio)##proximity effect:: to encoded signals. At extremes, the proximity effect introduces a strong bass boost, as well as phase differences. The link::http://en.wikipedia.org/wiki/Proximity_effect_(audio)##proximity effect:: can be an important contributor to perceptions of nearness. - -The Ambisonic Toolkit's nearfield compensation filter, link::Classes/FoaNFC::, undoes link::Classes/FoaProximity:: given the same strong::distance:: argument. - - -warning:: As link::Classes/FoaProximity:: includes a 1st-order integration, signals must be highpass filtered before application. link::Classes/HPF:: is usually a suitable choice to control low frequency boost.:: - - - -EXAMPLES:: - -Please see link::Classes/FoaTransform#proximity#this::. diff --git a/source/ATK/sc/HelpSource/Classes/FoaPsychoShelf.schelp b/source/ATK/sc/HelpSource/Classes/FoaPsychoShelf.schelp deleted file mode 100644 index 569c5a1803..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaPsychoShelf.schelp +++ /dev/null @@ -1,47 +0,0 @@ -CLASS:: FoaPsychoShelf -summary:: First Order Ambisonic (FOA) psychoacoustic shelf filter -categories:: Libraries>Ambisonic Toolkit>FOA>Decoding>UGens, UGens>Multichannel>Ambisonics -related:: Classes/FoaNFC, Classes/FoaDecode - -DESCRIPTION:: -Apply psychoacoustic shelf filtering to a first order ambisonic signal (B-format). - -note:: -link::Classes/FoaPsychoShelf:: is usually called internally by link::Classes/FoaDecode::. -:: - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: freq -Shelf filter corner frequency, in Hz. - -argument:: k0 -High frequency scale for 0-order harmonic: W. - -argument:: k1 -High frequency scale for 1st-order harmonics: X, Y, Z. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: - -link::Classes/FoaPsychoShelf:: is invoked by link::Classes/FoaDecode:: when a dual-band psychoacoustically optimised decoder footnote::See: E. Benjamin, R. Lee, and A. Heller, "Is My Decoder Ambisonic?," in Proceedings of the 125th Audio Engineering Society Convention, San Francisco, 2008.:: is called by setting strong::k:: to code:: 'dual' ::. This kind of decoder is the optimum choice for small scale studio or domestic settings. - -note:: In normal circumstances, the user will not call link::Classes/FoaPsychoShelf:: directly.:: - - -EXAMPLES:: - -Please see link::Classes/FoaDecode#psychoacoustically_optimised_quadraphonic_decoder#this::. - diff --git a/source/ATK/sc/HelpSource/Classes/FoaPush.schelp b/source/ATK/sc/HelpSource/Classes/FoaPush.schelp deleted file mode 100644 index e1b0954b7b..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaPush.schelp +++ /dev/null @@ -1,47 +0,0 @@ -CLASS:: FoaPush -summary:: First Order Ambisonic (FOA) push transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaPushX, Classes/FoaPushY, Classes/FoaPushZ, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply push to a first order ambisonic signal (B-format) along an arbitrary axis. - - -NOTE:: -link::Classes/FoaPush:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: theta -Azimuth, in radians. - -argument:: phi -Elevation, in radians. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: Applies push along the axis defined by strong::theta:: and strong::phi::. See link::Classes/FoaPushX::. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newPush:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaPushX.schelp b/source/ATK/sc/HelpSource/Classes/FoaPushX.schelp deleted file mode 100644 index 9af96cfe42..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaPushX.schelp +++ /dev/null @@ -1,45 +0,0 @@ -CLASS:: FoaPushX -summary:: First Order Ambisonic (FOA) push transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaPushY, Classes/FoaPushZ, Classes/FoaPush, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply push to a first order ambisonic signal (B-format) along the x-axis. - - -NOTE:: -link::Classes/FoaPushX:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: Push is a dominance related transform, specified in terms of a distortion angle. Positive values of strong::angle:: push the image towards code:: [0, 0] ::. Negative values push towards code:: [pi, 0] ::. The default, 0, results in no change. - - -anchor::figure:: - -image::push_fig.png#Push imaging:: - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newPushX:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaPushY.schelp b/source/ATK/sc/HelpSource/Classes/FoaPushY.schelp deleted file mode 100644 index 25ca8a7ec2..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaPushY.schelp +++ /dev/null @@ -1,40 +0,0 @@ -CLASS:: FoaPushY -summary:: First Order Ambisonic (FOA) push transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaPushX, Classes/FoaPushZ, Classes/FoaPush, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply push to a first order ambisonic signal (B-format) along the y-axis. - - -NOTE:: -link::Classes/FoaPushY:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: Push is a dominance related transform, specified in terms of a distortion angle. Positive values of strong::angle:: push the image towards code:: [pi/2, 0] ::. Negative values push towards code:: [-pi/2, 0] ::. The default, 0, results in no change. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newPushY:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaPushZ.schelp b/source/ATK/sc/HelpSource/Classes/FoaPushZ.schelp deleted file mode 100644 index c9c7de2c1a..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaPushZ.schelp +++ /dev/null @@ -1,40 +0,0 @@ -CLASS:: FoaPushZ -summary:: First Order Ambisonic (FOA) push transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaPushX, Classes/FoaPushY, Classes/FoaPush, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply push to a first order ambisonic signal (B-format) along the z-axis. - - -NOTE:: -link::Classes/FoaPushZ:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: Push is a dominance related transform, specified in terms of a distortion angle. Positive values of strong::angle:: push the image towards code:: [0, pi/2] ::. Negative values push towards code:: [0, -pi/2] ::. The default, 0, results in no change. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newPushZ:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaRTT.schelp b/source/ATK/sc/HelpSource/Classes/FoaRTT.schelp deleted file mode 100644 index 0ee74bfba0..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaRTT.schelp +++ /dev/null @@ -1,51 +0,0 @@ -CLASS:: FoaRTT -summary:: First Order Ambisonic (FOA) multi-axes rotation transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaRotate, Classes/FoaTilt, Classes/FoaTumble, Classes/FoaTransform, Classes/FoaXform, Classes/Rotate2 - -DESCRIPTION:: -Rotate a first order ambisonic signal (B-format) around the z, x and y axes. - - -The inbuilt equivalent is link::Classes/Rotate2::. - - - -NOTE:: -link::Classes/FoaRTT:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: rotAngle -Rotation angle around z-axis, in radians. - -argument:: tilAngle -Rotation angle around x-axis, in radians. - -argument:: tumAngle -Rotation angle around y-axis, in radians. - - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: - -link::Classes/FoaRotate##Rotate:: is followed by link::Classes/FoaTilt##tilt:: and then link::Classes/FoaTumble##tumble::. - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newRTT:: :: - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaRotate.schelp b/source/ATK/sc/HelpSource/Classes/FoaRotate.schelp deleted file mode 100644 index 2120a94a71..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaRotate.schelp +++ /dev/null @@ -1,43 +0,0 @@ -CLASS:: FoaRotate -summary:: First Order Ambisonic (FOA) rotation transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaTilt, Classes/FoaTumble, Classes/FoaRTT, Classes/FoaTransform, Classes/FoaXform, Classes/Rotate2 - -DESCRIPTION:: -Rotate a first order ambisonic signal (B-format) around the z-axis. - - -The inbuilt equivalent is link::Classes/Rotate2::. - - -NOTE:: -link::Classes/FoaRotate:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -Rotation angle, in radians. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: -A rotation of pi/2 will rotate a source at code:: [0, 0] :: to code:: [pi/2, 0] ::. - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newRotate:: :: - - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaSpeakerMatrix.schelp b/source/ATK/sc/HelpSource/Classes/FoaSpeakerMatrix.schelp deleted file mode 100644 index 0f5bfff907..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaSpeakerMatrix.schelp +++ /dev/null @@ -1,84 +0,0 @@ -CLASS:: FoaSpeakerMatrix -summary:: First Order Ambisonic (FOA) diametric decoder speaker matrices -categories:: Libraries>Ambisonic Toolkit>Internals -related:: Classes/FoaDecoderMatrix - -DESCRIPTION:: -Generates speaker matrices required by the Ambisonic Toolkit's first order diametric decoder, link::Classes/FoaDecoderMatrix#*newDiametric::. footnote:: link::Classes/FoaSpeakerMatrix:: is Heller's speaker matrix helper used to generate matricies for diamatric decoding. See: See: E. Benjamin, R. Lee, and A. Heller, "Is My Decoder Ambisonic?," in Proceedings of the 125th Audio Engineering Society Convention, San Francisco, 2008. :: - - -NOTE:: -In normal circumstances, the user will not call link::Classes/FoaSpeakerMatrix:: directly. -:: - - -CLASSMETHODS:: - -METHOD:: new - -argument:: directions - -An array of directions for half of the loudspeaker feeds for the desired decoder. Specify in radians. - -Rank 1 arrays return pantophonic, while rank 2 arrays return periphonic. E.g., -code:: -// 2D: -~directions = [ theta0, theta1, ... thetaN ]; -:: -code:: -// 3D: -~directions = [ [ theta0, phi0 ], [ theta1, phi1 ], ... [ thetaN, phiN ] ]; -:: - -argument:: k -The k factor of the decoder. May be specified as a float: 0.5 to 1.0. - - -METHOD:: newPositions - -argument:: positions -An array of positions for half of the loudspeaker feeds for the desired decoder. Specify in cartesian coordinates. - -code:: -// 2D: -~positions = [ [ x0, y0 ], [ x1, y1 ], ... [ xN, yN ] ]; -:: -code:: -// 3D: -~positions = [ [ x0, y0, z0 ], [ x1, y1, z1 ], ... [ xN, yN, zN ] ]; -:: - - -argument:: k -The k factor of the decoder. May be specified as a float: 0.5 to 1.0. - - - - - - -INSTANCEMETHODS:: - -private:: initDiametric, printOn - - -METHOD:: dim -Answers the number of decoder dimensions: 2D or 3D. - - -METHOD:: numChannels -Answers the number of loudspeaker feeds (output channels). - - -METHOD:: positions -Answers the position of loudspeaker feeds, in cartesian coordinates. - - - -METHOD:: matrix -Answers the speaker matrix - - -METHOD:: k -Answer strong::k:: - diff --git a/source/ATK/sc/HelpSource/Classes/FoaTilt.schelp b/source/ATK/sc/HelpSource/Classes/FoaTilt.schelp deleted file mode 100644 index d2abffb402..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaTilt.schelp +++ /dev/null @@ -1,44 +0,0 @@ -CLASS:: FoaTilt -summary:: First Order Ambisonic (FOA) rotation transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaRotate, Classes/FoaTumble, Classes/FoaRTT, Classes/FoaTransform, Classes/FoaXform, Classes/Rotate2 - -DESCRIPTION:: -Rotate a first order ambisonic signal (B-format) around the x-axis. - - -The inbuilt equivalent is link::Classes/Rotate2::. - - - -NOTE:: -link::Classes/FoaTilt:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -Rotation angle, in radians. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -discussion:: -A rotation of pi/2 will rotate a source at code:: [pi/2, 0] :: to code:: [0, pi/2] ::. - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newTilt:: :: - - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaTransform.schelp b/source/ATK/sc/HelpSource/Classes/FoaTransform.schelp deleted file mode 100644 index e5439f10a1..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaTransform.schelp +++ /dev/null @@ -1,884 +0,0 @@ -CLASS:: FoaTransform -summary:: First Order Ambisonic (FOA) transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming, UGens>Multichannel>Ambisonics -related:: Classes/FoaXform - -DESCRIPTION:: -Transforms (spatial domain filter) a first order ambisonic signal (B-format). link::Classes/FoaTransform:: applies dynamic transforms, for static transforms see link::Classes/FoaXform::. - - - -NOTE:: -link::Classes/FoaTransform:: is a convenience wrapper around the various transformer UGens. -:: - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The input signal, an array: [in0, in1, ... inN] - -argument:: kind -The kind of transform to apply. -anchor::transforms:: - - -definitionList:: -## code:: 'rtt' rotAngle = 0, tilAngle = 0, tumAngle = 0, mul = 1, add = 0 :: || link::Classes/FoaRTT:: -## code:: 'mirror' theta = 0, phi = 0, mul = 1, add = 0 :: || link::Classes/FoaMirror:: -## code:: 'directO' angle = 0, mul = 1, add = 0 :: || link::Classes/FoaDirectO:: -## code:: 'direct' angle = 0, theta = 0, phi = 0, mul = 1, add = 0 :: || link::Classes/FoaDirect:: -## code:: 'dominate' gain = 0, theta = 0, phi = 0, mul = 1, add = 0 :: || link::Classes/FoaDominate:: -## code:: 'zoom' angle = 0, theta = 0, phi = 0, mul = 1, add = 0 :: || link::Classes/FoaZoom:: -## code:: 'focus' angle = 0, theta = 0, phi = 0, mul = 1, add = 0 :: || link::Classes/FoaFocus:: -## code:: 'push' angle = 0, theta = 0, phi = 0, mul = 1, add = 0 :: || link::Classes/FoaPush:: -## code:: 'press' angle = 0, theta = 0, phi = 0, mul = 1, add = 0 :: || link::Classes/FoaPress:: -## code:: 'asymmetry' angle = 0, mul = 1, add = 0 :: || link::Classes/FoaAsymmetry:: -## code:: 'balance' angle = 0, mul = 1, add = 0 :: || link::Classes/FoaBalance:: -## code:: 'nfc' distance = 1, mul = 1, add = 0 :: || link::Classes/FoaNFC:: -## code:: 'proximity' distance = 1, mul = 1, add = 0 :: || link::Classes/FoaProximity:: -:: - - -note:: strong:: Axial transforms - except as noted, all take args of angle = 0, mul = 1, add = 0 as defaults:: - -definitionList:: -## code:: 'rotate' :: || link::Classes/FoaRotate:: -## code:: 'tilt' :: || link::Classes/FoaTilt:: -## code:: 'tumble' :: || link::Classes/FoaTumble:: -## code:: 'directX' :: || link::Classes/FoaDirectX:: -## code:: 'directY' :: || link::Classes/FoaDirectY:: -## code:: 'directZ' :: || link::Classes/FoaDirectZ:: -## code:: 'dominateX' gain = 0, mul = 1, add = 0 :: || link::Classes/FoaDominateX:: -## code:: 'dominateY' gain = 0, mul = 1, add = 0 :: || link::Classes/FoaDominateY:: -## code:: 'dominateZ' gain = 0, mul = 1, add = 0 :: || link::Classes/FoaDominateZ:: -## code:: 'zoomX' :: || link::Classes/FoaZoomX:: -## code:: 'zoomY' :: || link::Classes/FoaZoomY:: -## code:: 'zoomZ' :: || link::Classes/FoaZoomZ:: -## code:: 'focusX' :: || link::Classes/FoaFocusX:: -## code:: 'focusY' :: || link::Classes/FoaFocusY:: -## code:: 'focusZ' :: || link::Classes/FoaFocusZ:: -## code:: 'pushX' :: || link::Classes/FoaPushX:: -## code:: 'pushY' :: || link::Classes/FoaPushY:: -## code:: 'pushZ' :: || link::Classes/FoaPushZ:: -## code:: 'pressX' :: || link::Classes/FoaPressX:: -## code:: 'pressY' :: || link::Classes/FoaPressY:: -## code:: 'pressZ' :: || link::Classes/FoaPressZ:: -:: - -:: - - -argument:: ... args -Arguments (listed above with each 'kind') for the wrapped transformer UGens. Arguments can NOT be passed in through keyword through the FoaTransform wrapper. You can pass values in by keyword if you use the transform UGens directly. - - - -EXAMPLES:: - -The examples below are intended to briefly illustrate some of the first order tranform options made available in the Ambisonic Toolkit. The user is encouraged to carefully review the features of the individual link::#transforms:: to gain a deeper understanding of the flexibility of these tools. - -Available transformers include rotations, mirroring, directivity (spatial low pass fitering), dominance (image warping), and a variety of dominance related transforms. - -As the Ambisonic technique is a hierarchal system, numerous options for playback are possible. These include two channel stereo, two channel binaural, pantophonic and full 3D periphonic. With the examples below, we'll take advantage of this by first choosing a suitable decoder with with to audition. - -subsection:: Choose a decoder - -Choose a decoder suitable for your system, as illustrated link::Guides/Intro-to-the-ATK#Choose a decoder#here::. You'll end up definining code:: ~decoder :: and code:: ~renderDecode :: . - -note:: If you choose a kernel decoder, link::Classes/FoaDecoderKernel::, be sure to free the kernel after use. :: - - -subsection:: Rotate (soundfile) - -Rotation is one of the most used soundfield transforms. In this case we'll it to centre the subject of a field recording. - -The soundfield is controlled by link::Classes/MouseX::, which specifies the rotation angle (pi to -pi; left to right of display). - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A UGen type transformer, see link::Classes/FoaRotate:: for further details.:: - -code:: -// ------------------------------------------------------------ -// rotate transformer -// b-format soundfile read from disk - -// choose transformer -~transformer = 'rotate' - - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Courville-Dialogue.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Hodges-Purcell.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Leonard-Orfeo_Trio.wav") - - -( -{ - var sig; // audio signal - var azim; // azimuth control - - - // display transformer & decoder - "Ambisonic transforming via % transformer".format(~transformer).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, ~transformer, azim); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - -note:: strong::Soundfile Credits:: - -list:: -## D. Courville, "Comparative Surround Recording," Ambisonic Studio | Comparative Surround Recording, 2007. [Online]. Available: http://www.radio.uqam.ca/ambisonic/comparative_recording.html [Accessed: 26-Jul-2011]. -## P. Hodges, "Purcell - Passacaglia (King Arthur)," Sound of Space: ambisonic surround sound. [Online]. Available: http://soundofspace.com/ambisonic_files/52 [Accessed: 03-Nov-2011]. -## J. Leonard, "The Orfeo Trio & TetraMic," Sound of Space: ambisonic surround sound. [Online]. Available: http://soundofspace.com/ambisonic_files/41 [Accessed: 03-Nov-2011]. - -:: - -:: - - - -subsection:: DominateX (soundfile) - -Dominance specified in gain is a classic Ambisonic production technique. Here we apply gain across the X axis. With these example recordings, we adjust both the stage width and the subject to reverb balance. - -The soundfield is controlled by link::Classes/MouseY::, which specifies the dominance gain (4.5 dB to -4.5 dB; top to bottom of display). - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A UGen type transformer, see link::Classes/FoaDominateX:: for further details.:: - -code:: -// ------------------------------------------------------------ -// dominateX transformer -// b-format soundfile read from disk - -// choose transformer -~transformer = 'dominateX' - - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Courville-Dialogue.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Hodges-Purcell.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Leonard-Orfeo_Trio.wav") - - -( -{ - var sig; // audio signal - var gain; // gain control - - - // display transformer & decoder - "Ambisonic transforming via % transformer".format(~transformer).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // gain ---> top = +4.5db for front - // bottom = -4.5db for front - gain = MouseY.kr(4.5, 4.5.neg); - - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, ~transformer, gain); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - -note:: strong::Soundfile Credits:: - -list:: -## D. Courville, "Comparative Surround Recording," Ambisonic Studio | Comparative Surround Recording, 2007. [Online]. Available: http://www.radio.uqam.ca/ambisonic/comparative_recording.html [Accessed: 26-Jul-2011]. -## P. Hodges, "Purcell - Passacaglia (King Arthur)," Sound of Space: ambisonic surround sound. [Online]. Available: http://soundofspace.com/ambisonic_files/52 [Accessed: 03-Nov-2011]. -## J. Leonard, "The Orfeo Trio & TetraMic," Sound of Space: ambisonic surround sound. [Online]. Available: http://soundofspace.com/ambisonic_files/41 [Accessed: 03-Nov-2011]. - -:: - -:: - - - - -subsection:: Focus - - -Here we encode four channels of decorrelated and comb filtered link::Classes/PinkNoise:: as a decorrelated soundfield, resulting in a maximally diffuse soundfield. link::Classes/FoaFocus:: is used to "focus" on various parts of the soundfield. At extremes, it becomes a planewave (infinite distance, in an anechoic environment) arriving from some direction. This technique gives the opportunity to continuously modulate between a directional and a diffuse soundfield. - -The soundfield is controlled by link::Classes/MouseX:: and link::Classes/MouseY::, where link::Classes/MouseX:: specifies the incident azimuth angle (pi to -pi; left to right of display) and link::Classes/MouseY:: the link::Classes/FoaFocus:: angle (0 to pi/2; bottom to top of display). With the mouse at the bottom of the display, the soundfield remains decorrelated. Placed at the top of the display, the soundfield becomes directional, and varying left/right position will vary the incident azimuth of the resulting planewave. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A UGen type transformer, see link::Classes/FoaFocus:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// focus transformer -// decorrelated, comb filtered pink noise source - - -// define encoder matrix -~encoder = FoaEncoderMatrix.newAtoB - -// choose transformer -~transformer = 'focus' - -( -{ - var sig; // audio signal - var angle, azim; // angle and azimuth control - var freq; - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic transforming via % transformer".format(~transformer).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // frequencies - freq = 220; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - - // ------------------------------------------------------------ - // test sig - sig = PinkNoise.ar([1, 1, 1, 1]); // 4 channels decorrelated pink noise - - // ------------------------------------------------------------ - // comb filter - sig = HPF.ar(sig, freq); - sig = CombL.ar(sig, freq.reciprocal, freq.reciprocal, mul: 9.neg.dbamp); - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, ~transformer, angle, azim); - - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) -// ------------------------------------------------------------ -:: - - -subsection:: Push and RTT - - - -Here we encode four channels of link::Classes/Klank:: resonated link::Classes/Dust:: from A-format. link::Classes/FoaPush:: is used to "push" the soundfield so that it becomes a planewave (infinite distance, in an anechoic environment) arriving from some direction. This technique gives the opportunity to continuously modulate between a directional and a spatially active soundfield. Additionally, link::Classes/FoaRTT:: is used to continuously reorient the granular stream so that individual A-format directions don't predominate, and the complete soundfield is filled with activity. - -The soundfield is controlled by link::Classes/MouseX:: and link::Classes/MouseY::, where link::Classes/MouseX:: specifies the incident azimuth angle (pi to -pi; left to right of display) and link::Classes/MouseY:: the link::Classes/FoaPush:: angle (0 to pi/2; bottom to top of display). With the mouse at the bottom of the display, the soundfield remains decorrelated. Placed at the top of the display, the soundfield becomes directional, and varying left/right position will vary the incident azimuth of the resulting planewave. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: UGen type transformers, see link::Classes/FoaPush:: and link::Classes/FoaRTT:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// push and rtt transformer -// granular klank stream source - - -// define encoder matrix -~encoder = FoaEncoderMatrix.newAtoB - -// choose transformer -~transformer1 = 'rtt' -~transformer2 = 'push' - -( -{ - var sig; // audio signal - var angle, azim; // angle and azimuth control - var freq; - - // ir... - var gain = -18; - - var freqs = [50.0, 7000.0], gains = [-24, 0], rtimes = [0.1, 2.0]; - var frequencies, amplitudes, ringTimes; - var numModes = 20; - - var density = 20; // grain/klank density - - var rttFreq = 10 * density; - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic transforming via % transformer".format(~transformer1).postln; - "Ambisonic transforming via % transformer".format(~transformer2).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - - // calculate klank args - frequencies = Array.rand(numModes, freqs.at(0), freqs.at(1)).sort; - amplitudes = Array.rand(numModes, gains.at(0), gains.at(1)).sort.reverse.dbamp; - ringTimes = Array.rand(numModes, rtimes.at(0), rtimes.at(1)).sort.reverse; - - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - - // ------------------------------------------------------------ - // test sig - sig = Dust.ar(Array.fill(4, density / 4)); - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform 1 (rtt) - sig = FoaTransform.ar( - sig, - ~transformer1, - LFSaw.ar(rttFreq, pi, add: pi), - LFSaw.ar(rttFreq**(1/3), pi, add: pi), - LFSaw.ar(rttFreq**(2/3), pi, add: pi) - ); - - - // ------------------------------------------------------------ - // Klank - sig = gain.dbamp * Klank.ar( - `[ frequencies, amplitudes, ringTimes ], - sig - ); - - - // ------------------------------------------------------------ - // transform 2 (push) - sig = FoaTransform.ar(sig, ~transformer2, angle, azim); - - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) -// ------------------------------------------------------------ -:: - - - -subsection:: Push and RTT with Spread Encoder (soundfile) - - -Here we encode the mono component of a stereo soundfile via the link::Classes/FoaEncoderKernel#*newSpread:: encoder. link::Classes/FoaPush:: is used to "push" the soundfield so that it becomes a planewave (infinite distance, in an anechoic environment) arriving from some direction. This technique gives the opportunity to continuously modulate between a directional and a spatially spread soundfield. Additionally, link::Classes/FoaRTT:: is used to continuously reorient the frequency spread soundfield so that individual frequencies are moved throughout the space, and the complete soundfield is constantly in motion. - -The soundfield is controlled by link::Classes/MouseX:: and link::Classes/MouseY::, where link::Classes/MouseX:: specifies the incident azimuth angle (pi to -pi; left to right of display) and link::Classes/MouseY:: the link::Classes/FoaPush:: angle (0 to pi/2; bottom to top of display). With the mouse at the bottom of the display, the soundfield remains decorrelated. Placed at the top of the display, the soundfield becomes directional, and varying left/right position will vary the incident azimuth of the resulting planewave. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: UGen type transformers, see link::Classes/FoaPush::, link::Classes/FoaRTT:: and link::Classes/FoaEncoderKernel#*newSpread:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// push and rtt transformer -// spreader encoder -// stereo soundfile read from disk - - -// define encoder matrix -~encoder = FoaEncoderKernel.newSpread(0000) -~encoder = FoaEncoderKernel.newSpread(0001) -~encoder = FoaEncoderKernel.newSpread(0006) -~encoder = FoaEncoderKernel.newSpread(0008) -~encoder = FoaEncoderKernel.newSpread(0010) -~encoder = FoaEncoderKernel.newSpread(0012) - -// free kernel (when you swap encoders!) -~encoder.free - -// inspect -~encoder -~encoder.kind -~encoder.numChannels -~encoder.dirChannels.raddeg - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/stereo/The_City_Waites-The_Downfall.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/stereo/The_City_Waites-An_Old.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/stereo/Aurora_Surgit-Lux_Aeterna.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/stereo/Aurora_Surgit-Dies_Irae.wav") - -// free buffer (when you swap buffers!) -~sndbuf.free - - -( -{ - var sig; // audio signal - var angle, azim; // angle and azimuth control - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - sig = 0.5 * sig.sum; // to mono - - - // ------------------------------------------------------------ - // encode - sig = FoaEncode.ar(sig, ~encoder); - - // ------------------------------------------------------------ - // transform - sig = FoaRTT.ar(sig, - LFNoise2.kr(1.0/5.0, pi), - LFNoise2.kr(1.0/5.0, pi), - LFNoise2.kr(1.0/5.0, pi) - ); - sig = FoaTransform.ar(sig, 'push', angle, azim); - - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// free kernel -~encoder.free -// ------------------------------------------------------------ -:: - - - - -subsection:: X-axis: FocusX, ZoomX & PushX - - -With this example we encode four channels of comb filtered link::Classes/Dust:: as planewaves arriving from the cardinal directions. link::Classes/FoaFocusX::, link::Classes/FoaZoomX:: and link::Classes/FoaPushX:: are used to distort the soundfield. At extremes, encoded planewaves are distorted to arrive from the same direction. This example allows one to get compare these transforms on the x-axis. - -The soundfield is controlled by link::Classes/MouseY::, with strong::angle:: varying between -pi/2 and pi/2. With the mouse in the centre of the display, the soundfield remains unchanged. Placed at the top or bottom of the display, the soundfield is distorted. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: UGen type transformers, see link::Classes/FoaFocusX::, link::Classes/FoaZoomX:: & link::Classes/FoaPushX:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// x-axis transformers -// comb filtered dust noise source, at cardinal points - - -// define encoder matricies, for each cardinal point -( -~encoder = [ - FoaEncoderMatrix.newDirection, - FoaEncoderMatrix.newDirection(pi/2), - FoaEncoderMatrix.newDirection(pi), - FoaEncoderMatrix.newDirection(pi.neg/2) -] -) - -// choose transformer -~transformer = 'focusX' -~transformer = 'zoomX' -~transformer = 'pushX' - -( -{ - var sig; // audio signal - var angle; // angle control - var freq; - var density = 10; // grain density - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.at(0).kind).postln; - "Ambisonic transforming via % transformer".format(~transformer).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // frequencies - freq = 220 * [ 4, 5, 7, 6 ] / 4; - - // angle ---> top = pi/2 - // bottom = -pi/2 - angle = MouseY.kr(pi/2, pi.neg/2); - - - // ------------------------------------------------------------ - // test sig - sig = Dust.ar(Array.fill(4, density / 4)); - - - // ------------------------------------------------------------ - // comb filter - sig = BPF.ar(sig, freq, mul: 18.dbamp); - sig = CombL.ar(sig, freq.reciprocal, freq.reciprocal, mul: 9.neg.dbamp); - - - // ------------------------------------------------------------ - // encode - sig = Mix.fill(sig.numChannels, { arg i; FoaEncode.ar(sig.at(i), ~encoder.at(i)) }); - - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, ~transformer, angle); - - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) -// ------------------------------------------------------------ -:: - - -subsection:: Y-axis: Balance and Asymmetry - - -With with the link::#x-axis:_focusx,_zoomx_&_pushx#above example:: we encode four channels of comb filtered link::Classes/Dust:: as planewaves arriving from the cardinal directions. link::Classes/FoaZoomY:: and link::Classes/FoaAsymmetry:: are used to distort the soundfield. At extremes, encoded planewaves are distorted to arrive from the same direction. This example allows one to get compare these transforms on the x-axis. - -The soundfield is controlled by link::Classes/MouseX::, with strong::angle:: varying between -pi/2 and pi/2. With the mouse in the centre of the display, the soundfield remains unchanged. Placed at the left or right of the display, the soundfield is distorted. - - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: UGen type transformers, see link::Classes/FoaZoomY:: and link::Classes/FoaAsymmetry:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// y-axis transformers -// comb filtered dust noise source, at cardinal points - - -// define encoder matricies, for each cardinal point -( -~encoder = [ - FoaEncoderMatrix.newDirection, - FoaEncoderMatrix.newDirection(pi/2), - FoaEncoderMatrix.newDirection(pi), - FoaEncoderMatrix.newDirection(pi.neg/2) -] -) - -// choose transformer -~transformer = 'balance' -~transformer = 'asymmetry' - -( -{ - var sig; // audio signal - var angle; // angle control - var freq; - var density = 10; // grain density - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.at(0).kind).postln; - "Ambisonic transforming via % transformer".format(~transformer).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // frequencies - freq = 220 * [ 4, 5, 7, 6 ] / 4; - - // angle ---> left = pi/2 - // right = -pi/2 - angle = MouseX.kr(pi/2, pi.neg/2); - - - // ------------------------------------------------------------ - // test sig - sig = Dust.ar(Array.fill(4, density / 4)); - - - // ------------------------------------------------------------ - // comb filter - sig = BPF.ar(sig, freq, mul: 18.dbamp); - sig = CombL.ar(sig, freq.reciprocal, freq.reciprocal, mul: 9.neg.dbamp); - - - // ------------------------------------------------------------ - // encode - sig = Mix.fill(sig.numChannels, { arg i; FoaEncode.ar(sig.at(i), ~encoder.at(i)) }); - - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, ~transformer, angle); - - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) -// ------------------------------------------------------------ -:: - - - -subsection:: Proximity - -link::Classes/FoaProximity:: facilitates the introduction of the link::http://en.wikipedia.org/wiki/Proximity_effect_(audio)##proximity effect:: to encoded signals. At extremes, the proximity effect introduces a strong bass boost, as well as phase differences. The link::http://en.wikipedia.org/wiki/Proximity_effect_(audio)##proximity effect:: can be an important contributor to perceptions of nearness. - - -The soundfield is controlled by link::Classes/MouseY::, with strong::distance:: varying between 0.05 and 0.5 meter. With the mouse at the bottom of the display, the soundfield receives the strongest effect, contributing to as sense of nearness. - - -warning:: As link::Classes/FoaProximity:: includes a 1st-order integration, signals must be highpass filtered before application. link::Classes/HPF:: is usually a suitable choice to control low frequency boost.:: - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: UGen type transformer, see link::Classes/FoaProximity:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// proximity transform -// comb filtered dust noise source, panned across the front - - -// define encoder matricies -( -~encoder = [ - FoaEncoderMatrix.newDirection(pi/6), - FoaEncoderMatrix.newDirection(pi/12), - FoaEncoderMatrix.newDirection(pi.neg/12), - FoaEncoderMatrix.newDirection(pi.neg/6) -] -) - -// choose transformer -~transformer = 'proximity' - -( -{ - var sig; // audio signal - var dist; // distance control - var freq; - var density = 10; // grain density - - - // display encoder and decoder - "Ambisonic encoding via % encoder".format(~encoder.at(0).kind).postln; - "Ambisonic transforming via % transformer".format(~transformer).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // frequencies - freq = 220 * [ 4, 5, 7, 6 ] / 4; - - // dist ---> top = 0.5 - // bottom = 0.05 - dist = MouseY.kr(0.5, 0.05); - - - // ------------------------------------------------------------ - // test sig - sig = Dust.ar(Array.fill(4, density / 4)); - - - // ------------------------------------------------------------ - // comb filter - sig = BPF.ar(sig, freq, mul: 18.dbamp); - sig = CombL.ar(sig, freq.reciprocal, freq.reciprocal, mul: 9.neg.dbamp); - - - // ------------------------------------------------------------ - // encode - sig = Mix.fill(sig.numChannels, { arg i; FoaEncode.ar(sig.at(i), ~encoder.at(i)) }); - - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, ~transformer, dist); - - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) -// ------------------------------------------------------------ -:: - - - -subsection:: NFC (soundfile) - -link::Classes/FoaNFC:: facilitates the reduction or removal of the link::http://en.wikipedia.org/wiki/Proximity_effect_(audio)##proximity effect:: from encoded signals. The link::http://en.wikipedia.org/wiki/Proximity_effect_(audio)##proximity effect:: can be an important contributor to perceptions of nearness. - - -The soundfield is controlled by link::Classes/MouseY::, with strong::distance:: varying between 0.5 and 0.05 meter. With the mouse at the top of the display, the soundfield receives the strongest effect (removal), contributing to as sense of distance. - - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: UGen type transformer, see link::Classes/FoaNFC:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// NFC transform -// b-format soundfile read from disk - - - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Anderson-Nearfield.wav") - - -// choose transformer -~transformer = 'nfc' - - -( -{ - var sig; // audio signal - var dist; // distance control - - - - // display encoder and decoder - "Ambisonic transforming via % transformer".format(~transformer).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // dist ---> top = 0.05 - // bottom = 1.0 - dist = MouseY.kr(0.05, 1.0); - - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, ~transformer, dist); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - - - -note:: strong::Soundfile Credits:: - -list:: -## Joseph Anderson, "Nearfield source," [unpublished recording] -:: - -:: diff --git a/source/ATK/sc/HelpSource/Classes/FoaTumble.schelp b/source/ATK/sc/HelpSource/Classes/FoaTumble.schelp deleted file mode 100644 index e38f1915c9..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaTumble.schelp +++ /dev/null @@ -1,44 +0,0 @@ -CLASS:: FoaTumble -summary:: First Order Ambisonic (FOA) rotation transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaRotate, Classes/FoaTilt, Classes/FoaRTT, Classes/FoaTransform, Classes/FoaXform, Classes/Rotate2 - -DESCRIPTION:: -Rotate a first order ambisonic signal (B-format) around the y-axis. - - -The inbuilt equivalent is link::Classes/Rotate2::. - - - -NOTE:: -link::Classes/FoaTumble:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -Rotation angle, in radians. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - -discussion:: -A rotation of pi/2 will rotate a source at code:: [0, 0] :: to code:: [0, pi/2] ::. - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newTumble:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaXform.schelp b/source/ATK/sc/HelpSource/Classes/FoaXform.schelp deleted file mode 100644 index 2059c81b11..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaXform.schelp +++ /dev/null @@ -1,274 +0,0 @@ -CLASS:: FoaXform -summary:: First Order Ambisonic (FOA) matrix transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming, UGens>Multichannel>Ambisonics -related:: Classes/FoaXformerMatrix, Classes/FoaTransform - -DESCRIPTION:: -Transforms (spatial domain filter) a first order ambisonic signal (B-format). link::Classes/FoaXform:: applies static transforms, for dynamic transforms see link::Classes/FoaTransform::. - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: xformer -link::Classes/FoaXformerMatrix:: instance. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - -returns:: -An array of channels, the transformed B-format signal. - - - -EXAMPLES:: - -The examples below are intended to briefly illustrate some of the first order tranform options made available in the Ambisonic Toolkit. The user is encouraged to carefully review the features of link::Classes/FoaXformerMatrix:: to gain a deeper understanding of the flexibility of these tools. - -Available transformers include rotations, mirroring, directivity (spatial low pass fitering), dominance (image warping), and a variety of dominance related transforms. - -As the Ambisonic technique is a hierarchal system, numerous options for playback are possible. These include two channel stereo, two channel binaural, pantophonic and full 3D periphonic. With the examples below, we'll take advantage of this by first choosing a suitable decoder with with to audition. - -subsection:: Choose a decoder - -Choose a decoder suitable for your system, as illustrated link::Guides/Intro-to-the-ATK#Choose a decoder#here::. You'll end up definining code:: ~decoder :: and code:: ~renderDecode :: . - -note:: If you choose a kernel decoder, link::Classes/FoaDecoderKernel::, be sure to free the kernel after use. :: - - -subsection:: Rotate - -Rotation is one of the most used soundfield transforms. In this case we'll it to centre the subject of a field recording. - -If you haven't already choose a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A matrix type transformer, see link::Classes/FoaXformerMatrix#*newRotate:: for further details.:: - -code:: -// ------------------------------------------------------------ -// rotate xformer -// b-format soundfile read from disk - - -// define xformer matrix -~xformer = FoaXformerMatrix.newRotate // no rotation --> try this 1st -~xformer = FoaXformerMatrix.newRotate(-110.degrad) // by -110deg --> try this 2nd - - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels.raddeg - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Leonard-Chinook.wav") - - -( -{ - var sig; // audio signal - - - // display xformer & decoder - "Ambisonic transforming via % xformer".format(~xformer.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - // ------------------------------------------------------------ - // transform - sig = FoaXform.ar(sig, ~xformer); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - -note:: strong::Soundfile Credits:: - -list:: -## J. Leonard, "A couple of Chinook helicopters," Sound of Space: ambisonic surround sound, 20-Mar-2008. [Online]. Available: http://soundofspace.com/ambisonic_files/47 [Accessed: 03-Nov-2011]. - -:: - -:: - - -subsection:: MirrorO - -In mirroring through the origin and delaying the soundfield, we can generate a new set of echos in this fireworks field recording. - -If you haven't already choose a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A matrix type transformer, see link::Classes/FoaXformerMatrix#*newMirrorO:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// mirrorO xformer -// b-format soundfile read from disk - - -// define xformer matrix -~xformer = FoaXformerMatrix.newMirrorO - - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels.raddeg - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Leonard-Fireworks.wav") - - -( -{ - var sig; // audio signal - var delSig; // delayed signal - var freq; // lp frequency - var delay; // delay time - var scale; // delay gain (as scale) - - // display xformer & decoder - "Ambisonic transforming via % xformer".format(~xformer.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // ------------------------------------------------------------ - // parameters - freq = 1200; // in Hz - delay = 0.5; // in seconds - scale = 9.neg.dbamp; - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - // ------------------------------------------------------------ - // delay, lp and gain - delSig = LPF.ar(DelayN.ar(sig, delay, delay), freq, scale); - - // ------------------------------------------------------------ - // transform - delSig = FoaXform.ar(delSig, ~xformer); - - // ------------------------------------------------------------ - // sum (comment this out to hear original signal) - sig = sig + delSig; -// sig = delSig; // or listen to the mirrored sig - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - -note:: strong::Soundfile Credits:: - -list:: -## J. Leonard, "Fireworks," Sound of Space: ambisonic surround sound, 25-Aug-2009. [Online]. Available: http://soundofspace.com/ambisonic_files/37 [Accessed: 03-Nov-2011]. - -:: - -:: - - -subsection:: DominateX - -Dominance adjusts the gain of a soundfield in a particular direction. Here we'll increase the amount of reverberation in this natural soundfield recording. As the image is warped at the same time, we'll also hear the frontal stage widen. - -If you haven't already choose a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: A matrix type transformer, see link::Classes/FoaXformerMatrix#*newDominateX:: for further details.:: - - -code:: -// ------------------------------------------------------------ -// dominateX xformer -// b-format soundfile read from disk - - -// define xformer matrix -~xformer = FoaXformerMatrix.newDominateX // no dominance --> try this 1st -~xformer = FoaXformerMatrix.newDominateX(-3.0) // increase gain at rear - - -// inspect -~encoder.kind -~encoder.numChannels -~encoder.dirChannels.raddeg - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Leonard-Orfeo_Trio.wav") - - -( -{ - var sig; // audio signal - - // display xformer & decoder - "Ambisonic transforming via % xformer".format(~xformer.kind).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - // ------------------------------------------------------------ - // transform - sig = FoaXform.ar(sig, ~xformer); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - -note:: strong::Soundfile Credits:: - -list:: -## J. Leonard, "The Orfeo Trio & TetraMic," Sound of Space: ambisonic surround sound. [Online]. Available: http://soundofspace.com/ambisonic_files/41 [Accessed: 03-Nov-2011]. - -:: - -:: diff --git a/source/ATK/sc/HelpSource/Classes/FoaXformerMatrix.schelp b/source/ATK/sc/HelpSource/Classes/FoaXformerMatrix.schelp deleted file mode 100644 index 1ef335d827..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaXformerMatrix.schelp +++ /dev/null @@ -1,610 +0,0 @@ -CLASS:: FoaXformerMatrix -summary:: First Order Ambisonic (FOA) transformer matrices -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming -related:: Classes/FoaXform - -DESCRIPTION:: -Generates transform matrices required by the Ambisonic Toolkit's first order (matrix) transformer, link::Classes/FoaXform::. - - - -CLASSMETHODS:: - -METHOD:: newRotate -Rotate around the z-axis. - -argument:: angle -Rotation angle, in radians. - -discussion:: -A rotation of pi/2 will rotate a source at code:: [0, 0] :: to code:: [pi/2, 0] ::. - -note:: Corresponding UGen: link::Classes/FoaRotate:: :: - - -METHOD:: newTilt -Rotate around the x-axis. - -argument:: angle -Rotation angle, in radians. - -discussion:: -A rotation of pi/2 will rotate a source at code:: [pi/2, 0] :: to code:: [0, pi/2] ::. - -note:: Corresponding UGen: link::Classes/FoaTilt:: :: - - -METHOD:: newTumble -Rotate around the y-axis. - -argument:: angle -Rotation angle, in radians. - -discussion:: -A rotation of pi/2 will rotate a source at code:: [0, 0] :: to code:: [0, pi/2] ::. - -note:: Corresponding UGen: link::Classes/FoaTumble:: :: - - -METHOD:: newRTT -Rotate around the z, x and y axes. - -argument:: rotAngle -Rotation angle around z-axis, in radians. - -argument:: tilAngle -Rotation angle around x-axis, in radians. - -argument:: tumAngle -Rotation angle around y-axis, in radians. - -discussion:: -link::#*newRotate#Rotate:: is followed by link::#*newTilt#Tilt:: and then link::#*newTumble#Tumble::. - -note:: Corresponding UGen: link::Classes/FoaRTT:: :: - - - -METHOD:: newMirrorO -Mirror across the origin. - -discussion:: -A source at code:: [pi/4, pi/6] :: will be mirrored to code:: [-3/4*pi, -pi/6] ::. - - -METHOD:: newMirrorX -Mirror in the x-axis (across the y-z plane). - -discussion:: -A source at code:: [pi/4, pi/6] :: will be mirrored to code:: [3/4*pi, pi/6] ::. - - -METHOD:: newMirrorY -Mirror in the y-axis (across the x-z plane). - -discussion:: -A source at code:: [pi/4, pi/6] :: will be mirrored to code:: [-pi/4, pi/6] ::. - - -METHOD:: newMirrorZ -Mirror in the y-axis (across the x-z plane). - -discussion:: -A source at code:: [pi/4, pi/6] :: will be mirrored to code:: [pi/4, -pi/6] ::. - - -METHOD:: newMirror -Mirror across an arbitrary plane. - -argument:: theta -Azimuth for the normal to the plane, in radians. - -argument:: phi -Elevation for the normal to the plane, in radians. - -discussion:: -note:: Corresponding UGen: link::Classes/FoaMirror:: :: - - - -METHOD:: newDirectO -Adjust the soundfield directivity (across the origin). - -argument:: angle -The distortion angle, in radians. 0 to pi/2 - -discussion:: - -strong::Angle:: = 0 retains the current directivity of the soundfield. Increasing strong::angle:: towards pi/2 decreases the directivity, reducing the gains on the directional compenents to zero, and is equivalent to a spatial low-pass filter. The resulting image becomes omnidirectional or directionless. - - -Imaging is illustrated link::Classes/FoaDirectO#figure#here::. - -note:: Corresponding UGen: link::Classes/FoaDirectO:: :: - - -METHOD:: newDirectX -Adjust the soundfield directivity along the x-axis. - -argument:: angle -The distortion angle, in radians. 0 to pi/2 - -discussion:: - -strong::Angle:: = 0 retains the current directivity of the soundfield. Increasing strong::angle:: towards pi/2 decreases the directivity along the x-axis, reducing the gain on this axis to zero, and is equivalent to a spatial low-pass filter. The resulting image becomes directionless on the x-axis. - -Imaging is illustrated link::Classes/FoaDirectX#figure#here::. - -note:: Corresponding UGen: link::Classes/FoaDirectX:: :: - - -METHOD:: newDirectY -Adjust the soundfield directivity along the y-axis. - -argument:: angle -The distortion angle, in radians. 0 to pi/2 - -discussion:: - -strong::Angle:: = 0 retains the current directivity of the soundfield. Increasing strong::angle:: towards pi/2 decreases the directivity along the y-axis, reducing the gain on this axis to zero, and is equivalent to a spatial low-pass filter. The resulting image becomes directionless on the y-axis. - -Imaging is illustrated link::Classes/FoaDirectY#figure#here::. - -note:: Corresponding UGen: link::Classes/FoaDirectY:: :: - - -METHOD:: newDirectZ -Adjust the soundfield directivity along the z-axis. - -argument:: angle -The distortion angle, in radians. 0 to pi/2 - -discussion:: - -strong::Angle:: = 0 retains the current directivity of the soundfield. Increasing strong::angle:: towards pi/2 decreases the directivity along the z-axis, reducing the gain on this axis to zero, and is equivalent to a spatial low-pass filter. The resulting image becomes directionless on the z-axis. - -note:: Corresponding UGen: link::Classes/FoaDirectZ:: :: - - -METHOD:: newDirect -Adjust the soundfield directivity across an arbitrary plane. - -argument:: angle -The distortion angle, in radians. 0 to pi/2 - -argument:: theta -Azimuth for the normal to the plane, in radians. - -argument:: phi -Elevation for the normal to the plane, in radians. - - -discussion:: - -strong::Angle:: = 0 retains the current directivity of the soundfield. Increasing strong::angle:: towards pi/2 decreases the directivity along the normal defined by strong::theta:: and strong::phi::, reducing the gain on this normal to zero, and is equivalent to a spatial low-pass filter. The resulting image becomes directionless on the normal. - -note:: Corresponding UGen: link::Classes/FoaDirect:: :: - - - - -METHOD:: newDominateX -Apply dominance along the x-axis. - -argument:: gain -Dominance gain, in dB. - -discussion:: Positive values of strong::gain:: increase the gain at code:: [0, 0] :: to strong::+gain:: dB, while decreasing the gain at code:: [pi, 0] :: to strong::-gain::. This simultaneously results in a distortion of the image towards code:: [0, 0] ::. Negative values of gain invert this distortion, distorting towards code:: [pi, 0] :: . The default, 0, results in no change. - -Imaging is illustrated link::Classes/FoaDominateX#figure#here::. - - -note:: Corresponding UGen: link::Classes/FoaDominateX:: :: - - -METHOD:: newDominateY -Apply dominance along the y-axis. - -argument:: gain -Dominance gain, in dB. - -discussion:: Positive values of strong::gain:: increase the gain at code:: [pi/2, 0] :: to strong::+gain:: dB, while decreasing the gain at code:: [-pi/2, 0] :: to strong::-gain::. This simultaneously results in a distortion of the image towards code:: [pi/2, 0] ::. Negative values of gain invert this distortion, distorting towards code:: [-pi/2, 0] :: . The default, 0, results in no change. - - -note:: Corresponding UGen: link::Classes/FoaDominateY:: :: - - - -METHOD:: newDominateZ -Apply dominance along the z-axis. - -argument:: gain -Dominance gain, in dB. - -discussion:: Positive values of strong::gain:: increase the gain at code:: [0, pi/2] :: to strong::+gain:: dB, while decreasing the gain at code:: [0, -pi/2] :: to strong::-gain::. This simultaneously results in a distortion of the image towards code:: [0, pi/2] ::. Negative values of gain invert this distortion, distorting towards code:: [0, -pi/2] :: . The default, 0, results in no change. - - -note:: Corresponding UGen: link::Classes/FoaDominateZ:: :: - - -METHOD:: newDominate -Apply dominance along an arbitrary axis. - -argument:: gain -Dominance gain, in dB. - -argument:: theta -Azimuth, in radians. - -argument:: phi -Elevation, in radians. - -discussion:: Applies dominance along the axis defined by strong::theta:: and strong::phi::. See link::#*newDominateX::. - -note:: Corresponding UGen: link::Classes/FoaDominate:: :: - - - - -METHOD:: newZoomX -Apply zoom along the x-axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: Zoom is a normailised dominance variant, specified in terms of a distortion angle. Positive values of strong::angle:: increase gain at code:: [0, 0] ::, while reducing at code:: [pi, 0] ::. Negative values do the inverse. The default, 0, results in no change. - -Imaging is illustrated link::Classes/FoaZoomX#figure#here::. - -note:: Corresponding UGen: link::Classes/FoaZoomX:: :: - - - -METHOD:: newZoomY -Apply zoom along the y-axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: Zoom is a normailised dominance variant, specified in terms of a distortion angle. Positive values of strong::angle:: increase gain at code:: [pi/2, 0] ::, while reducing at code:: [-pi/2, 0] ::. Negative values do the inverse. The default, 0, results in no change. - -Imaging is illustrated link::Classes/FoaZoomY#figure#here::. - -note:: Corresponding UGen: link::Classes/FoaZoomY:: :: - - -METHOD:: newZoomZ -Apply zoom along the z-axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: Zoom is a normailised dominance variant, specified in terms of a distortion angle. Positive values of strong::angle:: increase gain at code:: [0, pi/2] ::, while reducing at code:: [0, -pi/2] ::. Negative values do the inverse. The default, 0, results in no change. - -note:: Corresponding UGen: link::Classes/FoaZoomZ:: :: - - - -METHOD:: newZoom -Apply zoom along an arbitrary axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: theta -Azimuth, in radians. - -argument:: phi -Elevation, in radians. - - -discussion:: Applies zoom along the axis defined by strong::theta:: and strong::phi::. See link::#*newZoomX::. - -note:: Corresponding UGen: link::Classes/FoaZoom:: :: - - - - - - -METHOD:: newFocusX -Apply focus along the x-axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: Focus is a normalised dominance variant, specified in terms of a distortion angle. Positive values of strong::angle:: maintain gain at code:: [0, 0] ::, while reducing at code:: [pi, 0] ::. Negative values do the inverse. The default, 0, results in no change. - -In contrast with zoom, gain is maintained at 0dB in the direction of distortion. - -Imaging is illustrated link::Classes/FoaFocusX#figure#here::. - -note:: Corresponding UGen: link::Classes/FoaFocusX:: :: - - -METHOD:: newFocusY -Apply focus along the y-axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: Focus is a normalised dominance variant, specified in terms of a distortion angle. Positive values of strong::angle:: maintain gain at code:: [pi/2, 0] ::, while reducing at code:: [-pi/2, 0] ::. Negative values do the inverse. The default, 0, results in no change. - -In contrast with zoom, gain is maintained at 0dB in the direction of distortion. - -note:: Corresponding UGen: link::Classes/FoaFocusY:: :: - - - -METHOD:: newFocusZ -Apply focus along the x-axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: Focus is a normalised dominance variant, specified in terms of a distortion angle. Positive values of strong::angle:: maintain gain at code:: [0, pi/2] ::, while reducing at code:: [0, -pi/2] ::. Negative values do the inverse. The default, 0, results in no change. - -In contrast with zoom, gain is maintained at 0dB in the direction of distortion. - -note:: Corresponding UGen: link::Classes/FoaFocusZ:: :: - - - -METHOD:: newFocus -Apply focus along an arbitrary axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: theta -Azimuth, in radians. - -argument:: phi -Elevation, in radians. - -discussion:: Applies focus along the axis defined by strong::theta:: and strong::phi::. See link::#*newFocusX::. - -note:: Corresponding UGen: link::Classes/FoaFocus:: :: - - - -METHOD:: newPushX -Apply push along the x-axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: Push is a dominance related transform, specified in terms of a distortion angle. Positive values of strong::angle:: push the image towards code:: [0, 0] ::. Negative values push towards code:: [pi, 0] ::. The default, 0, results in no change. - -Imaging is illustrated link::Classes/FoaPushX#figure#here::. - -note:: Corresponding UGen: link::Classes/FoaPushX:: :: - - -METHOD:: newPushY -Apply push along the y-axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: Push is a dominance related transform, specified in terms of a distortion angle. Positive values of strong::angle:: push the image towards code:: [pi/2, 0] ::. Negative values push towards code:: [-pi/2, 0] ::. The default, 0, results in no change. - -note:: Corresponding UGen: link::Classes/FoaPushY:: :: - - - -METHOD:: newPushZ -Apply push along the x-axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: Push is a dominance related transform, specified in terms of a distortion angle. Positive values of strong::angle:: push the image towards code:: [0, pi/2] ::. Negative values push towards code:: [0, -pi/2] ::. The default, 0, results in no change. - -note:: Corresponding UGen: link::Classes/FoaPushZ:: :: - - -METHOD:: newPush -Apply push along an arbitrary axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: theta -Azimuth, in radians. - -argument:: phi -Elevation, in radians. - -discussion:: Applies push along the axis defined by strong::theta:: and strong::phi::. See link::#*PushX::. - -note:: Corresponding UGen: link::Classes/FoaPush:: :: - - - - - - -METHOD:: newPressX -Apply press along the x-axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: Press is a dominance related transform, specified in terms of a distortion angle. Positive values of strong::angle:: press the image towards code:: [0, 0] ::. Negative values press towards code:: [pi, 0] ::. The default, 0, results in no change. - -Imaging is illustrated link::Classes/FoaPressX#figure#here::. - -note:: Corresponding UGen: link::Classes/FoaPressX:: :: - - -METHOD:: newPressY -Apply press along the x-axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: Press is a dominance related transform, specified in terms of a distortion angle. Positive values of strong::angle:: press the image towards code:: [pi/2, 0] ::. Negative values press towards code:: [-pi/2, 0] ::. The default, 0, results in no change. - -note:: Corresponding UGen: link::Classes/FoaPressY:: :: - - -METHOD:: newPressZ -Apply press along the z-axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: Press is a dominance related transform, specified in terms of a distortion angle. Positive values of strong::angle:: press the image towards code:: [0, pi/2] ::. Negative values press towards code:: [0, -pi/2] ::. The default, 0, results in no change. - -Imaging is illustrated link::Classes/FoaPressZ##here::. - -note:: Corresponding UGen: link::Classes/FoaPressZ:: :: - - -METHOD:: newPress -Apply press along an arbitrary axis. - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: theta -Azimuth, in radians. - -argument:: phi -Elevation, in radians. - -discussion:: Applies press along the axis defined by strong::theta:: and strong::phi::. See link::#*PressX::. - -note:: Corresponding UGen: link::Classes/FoaPress:: :: - - -METHOD:: newAsymmetry -Apply soundfield asymmetry - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: Positive values of strong::angle:: rotate code:: [0, -pi/2] :: towards code:: [0, 0] ::, and at pi/2 collapse the soundfield to a planewave. Negative values rotate code:: [0, pi/2] :: toowards code:: [0, 0] ::. The default, 0, results in no change. - -Imaging is illustrated link::Classes/FoaAsymmetry#figure#here::. - -note:: Corresponding UGen: link::Classes/FoaAsymmetry:: :: - - - -METHOD:: newBalance -Soundfield balance. A synonym for link::#*newZoomY#ZoomY:: - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -discussion:: See link::#*newZoomY#ZoomY::. - -Imaging is illustrated link::Classes/FoaBalance#figure#here::. - -note:: Corresponding UGen: link::Classes/FoaBalance:: :: - - -METHOD:: newFromFile -Create an FoaEncoderMatrix by loading a matrix from a file. - -argument:: filePathOrName -Can be a path relative to your code::/extensions/matrices/xformers:: folder: -code:: -Atk.getMatrixExtensionPath('xformers').fullPath -:: -Otherwise a full path to your matrix file. - -discussion:: -See the link::Guides/Guide-to-ATK-Matrix-Files:: for more information. - - -COPYMETHOD:: AtkMatrix, *newFromMatrix - - - -INSTANCEMETHODS:: - -private:: initMirrorChan, initMirrorX, initMirrorY, initMirrorZ, initMirrorO, initRotate, initTilt, initTumble, initDirectO, initDirectX, initDirectY, initDirectZ, initDominateX, initDominateY, initDominateZ, initZoomX, initZoomY, initZoomZ, initFocusX, initFocusY, initFocusZ, initPushX, initPushY, initPushZ, initPressX, initPressY, initPressZ, initAsymmetry, initRTT, initMirror, initDirect, initDominate, initZoom, initFocus, initPush, initPress, printOn - - -METHOD:: set - -Describes both the emphasis::signal set:: and the emphasis::tool set::, encompassing the Ambisonic order, as well as channel ordering and normalisation. - -Answers code::'FOA'::, aka traditional B-format: - -table:: -## strong::Ambisonic Order:: || strong::Channel Ordering:: || strong::Channel Normalisation:: -## 1st || Gerzon (aka Furse-Malham) || MaxN -:: - -METHOD:: type -returns:: code::'xformer':: - -COPYMETHOD:: AtkMatrix, -op - -METHOD:: kind -Answers the kind of encoder - -discussion:: - -code:: -// encoder -~xformer = FoaXformerMatrix.newZoomX - -// inspect -~encoder.kind -:: - - -METHOD:: dim -Answers the number of transformer dimensions: 3D. - - -METHOD:: numChannels -Answers the number of channels. - -discussion:: All Transformer matricies are square: 4. - - -METHOD:: dirChannels -A convenience method providing polymorphism with link::Classes/FoaEncoderMatrix#-dirChannels:: and link::Classes/FoaDecoderMatrix#-dirChannels::. - -returns:: code:: [ inf, inf, inf , inf ] :: - - -METHOD:: matrix -Answers the transform matrix - - -METHOD:: numOutputs -A convenience method providing polymorphism with link::Classes/FoaEncoderMatrix#-numOutputs:: and link::Classes/FoaDecoderMatrix#-numOutputs::. - - -METHOD:: dirOutputs -A convenience method providing polymorphism with link::Classes/FoaEncoderMatrix#-dirOutputs:: and link::Classes/FoaDecoderMatrix#-dirOutputs::. - - -METHOD:: numInputs -A convenience method providing polymorphism with link::Classes/FoaEncoderMatrix#-numInputs:: and link::Classes/FoaDecoderMatrix#-numInputs::. - - -METHOD:: dirInputs -A convenience method providing polymorphism with link::Classes/FoaEncoderMatrix#-dirInputs:: and link::Classes/FoaDecoderMatrix#-dirInputs::. - - -COPYMETHOD:: AtkMatrix, -info - -COPYMETHOD:: AtkMatrix, -fileParse - -COPYMETHOD:: AtkMatrix, -filePath - -COPYMETHOD:: AtkMatrix, -fileName - -COPYMETHOD:: AtkMatrix, -writeToFile - -EXAMPLES:: - -Please see link::Classes/FoaXform#Examples::. diff --git a/source/ATK/sc/HelpSource/Classes/FoaZoom.schelp b/source/ATK/sc/HelpSource/Classes/FoaZoom.schelp deleted file mode 100644 index f9009a4550..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaZoom.schelp +++ /dev/null @@ -1,48 +0,0 @@ -CLASS:: FoaZoom -summary:: First Order Ambisonic (FOA) zoom transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaZoomX, Classes/FoaZoomY, Classes/FoaZoomZ, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply zoom to a first order ambisonic signal (B-format) along an arbitrary axis. - - -NOTE:: -link::Classes/FoaZoom:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: theta -Azimuth, in radians. - -argument:: phi -Elevation, in radians. - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - - -discussion:: Applies zoom along the axis defined by strong::theta:: and strong::phi::. See link::Classes/FoaZoomX::. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newZoom:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaZoomX.schelp b/source/ATK/sc/HelpSource/Classes/FoaZoomX.schelp deleted file mode 100644 index 0369513e42..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaZoomX.schelp +++ /dev/null @@ -1,46 +0,0 @@ -CLASS:: FoaZoomX -summary:: First Order Ambisonic (FOA) zoom transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaZoomY, Classes/FoaZoomZ, Classes/FoaZoom, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply zoom to a first order ambisonic signal (B-format) along the x-axis. - - -NOTE:: -link::Classes/FoaZoomX:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - - -discussion:: Zoom is a normailised dominance variant, specified in terms of a distortion angle. Positive values of strong::angle:: increase gain at code:: [0, 0] ::, while reducing at code:: [pi, 0] ::. Negative values do the inverse. The default, 0, results in no change. - - -anchor::figure:: - -image::zoom_fig.png#Zoom imaging:: - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newZoomX:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/FoaZoomY.schelp b/source/ATK/sc/HelpSource/Classes/FoaZoomY.schelp deleted file mode 100644 index 8108d0bfc1..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaZoomY.schelp +++ /dev/null @@ -1,47 +0,0 @@ -CLASS:: FoaZoomY -summary:: First Order Ambisonic (FOA) zoom transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaZoomX, Classes/FoaZoomZ, Classes/FoaZoom, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply zoom to a first order ambisonic signal (B-format) along the y-axis. - - -NOTE:: -link::Classes/FoaZoomY:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - - -discussion:: Zoom is a normailised dominance variant, specified in terms of a distortion angle. Positive values of strong::angle:: increase gain at code:: [0, pi/2] ::, while reducing at code:: [0, -pi/2] ::. Negative values do the inverse. The default, 0, results in no change. - - -anchor::figure:: - -image::balance_fig.png#ZoomY imaging:: - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newZoomY:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. diff --git a/source/ATK/sc/HelpSource/Classes/FoaZoomZ.schelp b/source/ATK/sc/HelpSource/Classes/FoaZoomZ.schelp deleted file mode 100644 index 5f015f9f36..0000000000 --- a/source/ATK/sc/HelpSource/Classes/FoaZoomZ.schelp +++ /dev/null @@ -1,42 +0,0 @@ -CLASS:: FoaZoomZ -summary:: First Order Ambisonic (FOA) zoom transformer -categories:: Libraries>Ambisonic Toolkit>FOA>Transforming>UGens, UGens>Multichannel>Ambisonics, UGens>Multichannel>Panners -related:: Classes/FoaZoomX, Classes/FoaZoomY, Classes/FoaZoom, Classes/FoaTransform, Classes/FoaXform - -DESCRIPTION:: -Apply zoom to a first order ambisonic signal (B-format) along the z-axis. - - -NOTE:: -link::Classes/FoaZoomZ:: is usually called via the convenience wrapper link::Classes/FoaTransform::. -:: - - - -CLASSMETHODS:: - -METHOD:: ar - -argument:: in -The B-format signal, an array: [w, x, y, z] - -argument:: angle -The distortion angle, in radians. -pi/2 to pi/2 - -argument:: mul -Output will be multiplied by this value. - -argument:: add -This value will be added to the output. - - - -discussion:: Zoom is a normailised dominance variant, specified in terms of a distortion angle. Positive values of strong::angle:: increase gain at code:: [0, pi/2] ::, while reducing at code:: [0, -pi/2] ::. Negative values do the inverse. The default, 0, results in no change. - - -note:: Corresponding matrix transformer: link::Classes/FoaXformerMatrix#*newZoomZ:: :: - - -EXAMPLES:: - -Please see various examples link::Classes/FoaTransform#examples#here::. \ No newline at end of file diff --git a/source/ATK/sc/HelpSource/Classes/asymmetry_fig.png b/source/ATK/sc/HelpSource/Classes/asymmetry_fig.png deleted file mode 100644 index 59ba43b7ea1532ef542b0ed67ef431b2e76167b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44083 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

saGRSYP>0C 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

6fC<*Z+I`_>l6YLY4_j&cKnO?t3Tm2>M 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 diff --git a/source/ATK/sc/HelpSource/Classes/direct_x_fig.png b/source/ATK/sc/HelpSource/Classes/direct_x_fig.png deleted file mode 100644 index 8258a449cb4d72cd923e144940dd655ec3821bb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43900 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

4hBxNAqtyRSCb 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 diff --git a/source/ATK/sc/HelpSource/Classes/focus_fig.png b/source/ATK/sc/HelpSource/Classes/focus_fig.png deleted file mode 100644 index dc38265f660670e85a2a4532cf96a9e91a55b2f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42528 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�&7pU$CZ;h9C52Ljr(?%7Xn8MT1j0m( zVPJ=V_o^+oe=e8~g2{w?;|-2nvPtMR$mU#dX>rlf_s6!_-PKR}e(mbj$IYMLIgCGU zVyoak0>qP;tU>J(qGcpP^18f--nH6$Hy|;|@t%IB;&F>&f$EjNjuX4vhi*O^bRY1g z$k!g`RDE6V%69jn{x<4bHX&UVl`2r-OJ8JyW}Y1HSes@ICmBo2(kJ&m9-z4gm^gNHf3VW2+OUcizAE z&*{cWvU7Q=Et{(T7Z~Kry=v#LoSk9VHvaO#sO_<#Mf(~-=XHnk0!P|bRi3yV<`LU7 z{*rINQAxQHaeLI2Ym#Hm{_(7;ZU|O>^=rJn3&t=hC_07r zL9C)z5lmGuk2?5dV)b2ZeLEe(fis2mk+TP_Jk;$gmT7?I{Ur8EWV%Q|v!nEI+eUXQRRGLW z#3E3z4|MN^f9B1v>gfC<6G^C!FKriTriaWl!uf|t9XP+?1X;q=vJan(vPU6SFiJ@}RJelgGEgy5CnlIO@lY^Y< zJ3bI-5KfXm8G~J`vnk)vP_f^8k#6%3Y3^m6B+2s!lLme5h22iYg)!Gl4Bs0T-1g>i z&D+}hD?{y0 zWNS(n*Us}lZrZ%;Hbe3u5uyaiOBjNs+lq=WhK4YRzkpJX5U~)e#z{^?G4O2+#Wrba zkS-%TyYQ2hnLExOI09axDN>=WqqP}qPN<9VfZgSmgToJ~cQG*UOTTTmI@@o)5WnyB zYi_v$QkI>V5ME=WAtW9j7`Fb%8Cbr_&gN3MVqLqf^sfKyGao*&SAQn0&#x?SslFe` zzrXF`J=(`x?Gv*ykf#$g3GH=PS7B(DK+6$kDr_IU@w&30H)8bZA5~iYJTuCf+)ICd zIZgD?|MRc%6|b)9y|G$ewS+05uW(lgO%6+#usk)ugJJdeT1!GGEGGIbz0vW^OKykj zet8MYM<~CQF6UuZUD9v!7_4iNF&-i#`6Xrsyp1O*Yv0wj6b zS)H)V>YL|tE1H_7_AbPLMj$EiHZU;IePgl@F1@nYsk%10nS)lG>yVF7VCp~saV^|T z@FKG#Y1x90Z4sTQ;LqSb!`GdektZY;@p&<0<>H$+e28Je_+=R1_tQV0o-fpLvt~Fb zApeJEY3cFEIe%w=`zLx+^w*7y67B9G+|2L$&GwR?wGs{lSqA6DAl zapFWtBi3%hjaX=TDi)GrWV$Hks_Kg_ygG#;ukpB{0e$#o4h@mEX7+8~l~ubrHr+@X z`^Y*K(ip;tCo!PQNla#89zy6Uy8WcB3Y2#n>Hbc$Z2n-JQ5D`2>>`?Xm_k$s%Oo-UQ zIo-vLtP@kp04YJ|dY+xR|C|diLNC8IQ}DGEvPJmfFhHHaiyI$q+0oRHd?5QBY53Ou zjHuy3LyO1v&9pKkK*9~~SHg$b@J;N%x#0qp6#B?E^-m_%2Ry46!pMUAc64^hir*Q1 zL`~9n2c~%bx4*R*B*}Xa#aCbj@rPb^cO6R`U43in=|74OnjNf*D~m4ABpQg%U*F$s zAoNGCx#fAKQ#=S zRghR>C*ueJKIW=KLf!uM{WQW4bAt7iBIav7fkgkv@?!3 zZc$0SxKv=boj%$A?8K-B3Ag(Z%a?W5KHWkWv6}-rAZU`ny*)q7EK55hc>a9PAKqB+ zOp29UFUqaVu(X&ZbGN2-T9dTeIf7VOn_YxSo2}&A6m!^Rozhz;aqTL-9M}tHSVL2j z*W;gykNjn`-kwKu)kQ)B>kn?snM|xP9W=Cc3{HIuv$Kj^!6{%+!~_z%tlP%~Vi;8? z{0EygB^A{r6_qEwrwKTa0P>-l0q9yU`?a9gHJb+Chp_JgZ6@|NFMw*C|5ZLmx2%$k zSWp5n*Sa^PbsMC(FlAq7=QEU|SOW$FpfK3NPE6yl8B6Nhk~)(JEUp8GBhY`04yV8k zvWkkvMH#y7i&5;F5WvV-7_*)_2xyduA3Gf?%)Et?e9h_O|yJ_JMoebz?=oAUvUO~S_^W4|}MGD~^M9e>g zTdyS3vXz>RE5jhC!T`Lmy4qdQg|uC8@&qw@-g$-==)*ZHxev%;QTl4C!rUH-<PV zqScZBML>!!nJYduLNEY?{0`Q_0Hb*L@S&W~*FLS;YzTA^Y=b=_bYhR7b(#KhU<(>! zA|(*-8Li_N%$+RWq%y$@EYee$>$I#maHf>X~O}EpjJLOS7rRUKx2GD$H;^9M{3Ce9*a`6-I=9%$r=oD_n9`s-7~`+j3Z z-(&6P5$CxsPvs+VNl8rD3G*3$2l$L-7%%M=kQES-!t)vjR=1T%n2Nt-Yp}@R@#g`U zyx(~9^+vbrE85u18cJLD^L5vmYJn|AoP)F&_vx6O%|YU(bpul8mkuA>+TV5Y;32!c zKO&i3C%z7w>Fo%pee1gSkf)Son*h@_Gs^ENW>W*gmr48t+-E&oC*KsAoKnHXT5)u) zZ(Q|?_{l5{PRxgmdbQ_o4R3?SKy0}~J?T?=p#UL5LF>Lc_w5ztS8kC=pdypp4IF#D zo3cM_gXAU#iUYIe=NaAA9Yk)@=Bnpb6xqc;UXW5eM{9!QITLlyprYH3jwxkjbVYiD zOk{$P^!xe=yj$&w4M9J18x*?i<71W@zaOKS2L?}2>%hSm@scLOx+;ySumSu-K;Myx<+K z-n%y%?tBW~bMI)dE=jw#7jOT=PR+dw4^``IKAgO`BO;ZtsNS^7G4kTSt*R2wg3XRC z{*QOYxFkWN5YiLe;CQtY`Dh#$rz}^QnN*iiTR^1oQX9^~Ky74Xh)J^J8%>Mwz{R1EosiX(Mul<`;_Ox2) z{1GX&elG_NV#e2DaBbLtg;l1Pkr|r9=?Fy#oUl$Of-4YdiMvqA&Km3p@&SG$l#z(K z9CGQo1luS6va9!btXmJhxs(OedF8y48vL|xjyS##ri zgX7U-3ZdQ&CSspPY|N-{k0%{2mS~g@-WWA6KRDa`Kp?5|b0J!^lZ3^%R$9Wx6c{>NQevHc2F0WwZAXcq9F zT9EtsrJ(_erZF61qKY*(HVU5E!z_rpGBfa&^30ht1&(^Pvd9OpXkk2d{P)@<+& z48C>9(;K{5QdaIb`2hnh@>)#rt^oIe6vf>6x>mFQq2dv8iSm*X-i_oW%o-pcL-=AK4wO(^3vTk+kqF8!R_+_pYGRr zJzKkWxexs%XQ3W921?r%iTa$>5zD%D@oSTgBGBL7a&-LI+Ikq*P={5KYUO9pKIkj2 z8W$*!xiGQ^Y%tvS@xc+1d-RMpjygvc64 zy!3zG+0lVvLk4#x@hydklwPm^iMTZ3BWcHLC{OnQH~|yHX4p=SiU>KkK-@@-M3TQ5 z@IxZd65>mO*-JNGN|5x4hPpcWI(37|2??p>^rM0#0P*Z@ATZs}mVgLU z0@nFx^P{bVuI^DB!-T>@s`#sNcwpE&_NH~uG`bICQ&SXCzY)E$xw$jF>3c%e_4ON| zuIh#Jnl8j2)1CN&imO`KsBs-O#GuDcL`)aq(xr>VRekQ@v4K*5VGci<_NJX>t_g>t z{r_(M?7VBFEOtM9ms969ovEyt+$-BP&7(c(_?w$f_+OrIfy{!~(LuMF%8Rm}*1AQ1 zaT;Zo9C0ORrrshJq2S@j;XWZm&(uHGK6>n!;;sBixwr6M-vF{n_>>8X4jLlBmHiVw zD&A`?7W@|cv2yS00cB^GEq?xa2Ou;78$pQjv9=bvGb0+~VuiMhe4~WX>n{ed0`yUE z@coaGq{{I^D-?PWe$>ISdseo#CL0oqsj_EoeB_@P(C6p#qv`IUTqgZ-uCKRu0d;X0 z7;CJ6HTHa1m&YZ_J$Z3T&ekFr4_{C)5|>m`rlh1(n&bbUb36#zLvh4=zv zaxLCg)2fn0xjo~ z+lKV`2_?%!7fVf3(dy0v8Bs4VP+-t zt3YxtbiUUMPTOH8;k$;N%#Hn04d%E>nKN33bxizh`z0-o#r-yQ`9GMzaS z3bH-Meaj|{H}Mo4X#+E@@|Ws-*-wUlhO|GA;c!|&O6D|8g^&mVYB$BnL9YSJEL>^z z`M<#4z56?rg*r%$6@n;=*b&6nw+Ycax9)Q}D~p*SM3w97>l?cMq$Y%&fEfOK4?5E_ zy$pkcs)h#PzlGA~tc@s?1&9>-^T}=-VI__iq0Z3?!a@R<`paoLKa9B#Mm9RZcJ+3MH!F#4f$3$ zz$+8hOvsrDy(VH88Ze$StXHX8Qy!&EVdG=Ftdv<6nUeSxP58sy^}#t0_S%y#d+?U5 zO<&(qFf=@2U%4TOohiT~LFLXbEfMMPh@|*nL7$`50CZ^$R?r83b9ca(#4aef@?c|p ze7pdWb=b-viRX*3B3T2HMvFgcK4^8s&sG+Jts@{-cn%2jBwl#RXSr*7Nx4c+1CO7) zu1BP_8Qw)q!EYem#lO|S{exFYDDJ4-rMgBr2fi*E;<&6tpUdFua-Ms5G1Y$_mx8K} z&LgSBVR*Jdzb14~6Eh9G(?V|cI4h_pJm6m>+_fJ-Vpr3>wz?%n$otU=Awxmf^*0Nl zQ4x8c@sQr45p52G4qN!=XsC5mJVh7hJh$#;Ip4O}$F16(CSoV|Nk@G*3CSB=C%_a5 zEFSOk{k5M_sIA2}_QlDWG~O3eszdaBw5w&Pa5$&&@!~{6gheP@2?QTADeR_35TOx9 z&UA(YOE}&HH-VJq?aLv##H5a{ZpeLgaL>xxEAfp081CVHl6G|DNAEw1>A<`rU6sgx zoT$LhZ3aQ1?f1wkWLgv6FGK*% z!P$KkhF=L49>RAlAeJ}=Alzf(B3+t+9$+QdtC`@p1^_1ghA-}1jG{kI2C6!`AX|IX z6?t2z%`EVg;esZj>+@X~%@Dn3%XanoBkYqwI@1_ZZ*D?ljcA*{Vdsp14WGlZ6r$O@ z|7U*ZG*o9`v#cEdM6S!LhB6t?J`^5nyq1?EwOHgF?_BDS>;&v4puwDmG=SQsIH8a( ze5im@6!4-#p>c1*kxkkepHO-a_`N-7KFOHq$b*cOT#fn9j*hp(lv9(=@O(~ zz-S4lZ6uGu7c><_2rsrUQ2wv|Timf9pQi&zS_GDSMf7NJ*RzNS;!TBF0n05ykF8t^ zbfY?IE#Am&K6c-hI<}t5$?C;U4S5cT__3H}8$L^-eu#-3OaGs)&OIv1IuGMBOM}CSPYKDe~HqxC?4u*0O2bG(GNx~2!(4d4RZYU;s*%(pr0tpF$fYTyg5Dl4?6qThF zwo!qY1(Q-I5M@Ny1;HRs+|Ho*F&ckbOh&vW>(36yBj3_>`nozVxOR`hmE zMM**G){(KlX|-aJ_rdJ!W#QpVC=;PMD1x)O14OrZNvW{N@mSw7I(W~T!fV}RVWa^{ ztd6s~ZNWEx@o*q1k*d{C)8x_L)udL0$9VQoREs?Y46??9$+^nvR~rBSDsLK2IbyXZ z_`9W-ygtv)wl9N$E5QkR{;Z%_P9KH5_g_PP2A7uQG~~O#Sf$)oP%xRqQug7b#GL_7 zwNUx^esZc;V4xMRqPWKX?v;X!Npnd)*0;3GPu|Ky!@60+9{5wuNahb@Wj*nlR;1PP zu(ThtK4Ra?p4TCOTk010_?$zH7Ckk!xDN`t4OFJH-J=;J@~xdqIfjY*t2$1)L`9@s z$vqPEmU2O;rpfM;O}ttq+!e(Gn&s`!a;mDUtDCfZHx|%RyS|M}Pz0gC*z&l>Oso~e zGCI)M9AANFo1yLc(7lEKdeFB#EX+YxU{y}j28+%RF(Z3PTyOTgLs12{Jbw(Y4Y1qG z0r)!))Zbrc_N*Ms$7j7=CYM24t#o&j+yy^b!Xuk#Yun!4{X@rB=7CRjoAE#MgnxqY zx8{B-MLfC;Y2V=av9@K$jLTwAj?B83pW9aX_NL7xrOgvs{Wicu;$@K@$jprH^JF2JIBr~>a60TqRXc*7=CkV#R>GLiD?z_SV`IEHl6O%5I|HKkDjsGQ(M&kTB#m?ZvC*L0jE_yg4#-{x)^8@CFsjC$Wf|?&KtE5ncdb zb)tYATFoM4*&7xH%gU6;>cnCgSz8RXQvuBg6Kh5 zi-I5e-FI1xYqb5&A8qPX9%b$jhlV>=rGoclcX9Mtf>@zOA9=_lMUJAzbQKAa^%=KM z7bxGDA(v-u+a^KjVx?oTvM_BeZ*4A*@+A1@Mb0Vix`hn?e~PwiOZP+LP~pWXXh0{T zM!qe*txV8s>fafPUg!Siy@V5u9wnurf7(|vCA@mQL^AHsVqfp&$h*bwt_d3-C~c5A zyx<)_`AD(z^S>_gadpKON&IOfo{%aMPQ)@KMNf%^Pv}Bl-vb8^`ZDF_ zh!bc-Lqc}Y$<}|-xEklD%RFK+U=$&cFdy@z} zSqq7bbdjs?Yn)xZ6$(=jcC~xZ$nbEzPNyj?9Zx9$t}SIq>YBGT%x21~%pb#|QeWEk z_1AOPu3anPI`8r__q0TOAZR-h+=&LL;r76>ug`6C6uBknXe}jxgz3;Hqk}3GsjtZU zJ%4hzmOLFZn7lk0QJFVF%s?@q+P!->?ndKi*~Q9md+nM-cE_V9tgn7|KRcv; zktPfYeSx$0?z?;Eju!9jbxHhTs&_9aWj~ zP%HE{W5}boy*g~FcuEYXRQ2{X>C&y zE`53Zdsa-F=~boMSy)$6VoIXtzw|O@c#k~nLFX?KEi37Wg&fmn&J2#VY-)VpRt&^Q zFHK(|C4x&&uVGzTS*eb)@bjyiadEcI#EIWfNma3Ekm{|2ZbrcG*4Fzcy=7K&VNroI z*%$9V#G?|?Jm6z__~S?JobblAm5v`w-lliokevJ;^zJ|4Fi+dCj=i#=h+;(@{i&mh zPuQE>$L5fTp+aycUV5>YjNt{N>eu9^_3iuwMvgahp_&rP0oI&|Wd@XLF-VJt@rUfB zjXzga#ZHE{?vaf~y*XYqqcHfnhfsap#s=yF8g7Ux}7R4`Ae(vLu*}uS+nD+x|eu>JCt_82e`Ws{Q qy_dSZehsMOUA!_h{|&i6jY;gH(mjG-_*g69XYs-y-%~!TcKioPYU=_3 diff --git a/source/ATK/sc/HelpSource/Classes/push_fig.png b/source/ATK/sc/HelpSource/Classes/push_fig.png deleted file mode 100644 index 5fd63cea64e71dec04803ae0fbd6bd752746acf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42563 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 diff --git a/source/ATK/sc/HelpSource/Classes/zoom_fig.png b/source/ATK/sc/HelpSource/Classes/zoom_fig.png deleted file mode 100644 index 7679a8595a9f2e52fb59de004ed51d663a442c09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42424 zcmZU*bySw!^F54(2na|@NrQBQw19MnbV-+@gmg)FcS(bkfJlSV9Rdm{DIL;Xzqy~! z`mXnn*R>GAJFe@TIWv3j*>i^|D@r{?B|=3)LV748{X!K9>2@moy8;Cn{?@1V>Va=} z9mHhRQQ(gUifJ(X{NSy$wgVCpN;=}}mQgR!OC%(6B$*eY>MrS98O|Pxziz(G4aYT8 z1;6NE5gQ;ciV0Tm|D?^#U!+m;r6!c9EHNj{%X_U#!m8#gWk_=^wK2^LZ0xDcl+_a{ zYP^sE3yI8=O((;$)lB!H)fKOQ^;z!!ETsLhZc|ByKV~=X2!2E*$rY|Xcl-Z-2!HI# z&Q6s2|NZY5v3xEraWS#e{eIRk+p!8mk;|(qKKmt<(a}-<*n!{zlm`#8y{^t3cV;t$ zJ&P-YqSiT&l8}Eiw&G zn_Z`Sf3@r0Qe2$u6qKg{iD zrW||o-|sxa!Xo#_%6Y#%Emo`^`nNkO%xbLQ0fqnCRJBEY7w^VoScFP<_}XpHjTDt` zhWpb$+12#5`vdzTh+SWW>!+6` z$UZ44gexm6=SM|UT+@mP}7{T=&8@*{mC6gTtnN&@2l zt+m6=(+DDNN^)|aik5R!qy*W7;q0k_0rY&;VgkYl%gDm3@OW98si`SJugk|aHk-F! zJ2>S&oy&_g8n5gN`0tYSHxZXimin_&*2c12zcDd78VhM_dwYGhSwOWoK1$>|xj-Rp zrRHF7@73|v)ak_qr&%AaXNXN+x}YbH$N75U>G`>_v2hzbQp?DjWoT#!otP)wuJsC^ zm$z0m%Ig3BPV6CU<<7*nSoG??!OqveUAV1~#$(nQig$W?x|CnGyT5O|Guy1CrDds) zpCH=_%N-ICLBqq7SXcM#iLi&Xjt&taAtB7DrV6uBld2V~cXW5Jj#W!VJy{lFC1BF>X>M-* zx%@O#wlT+wTIBWgmxZmV>MyTjeEb==hWa62QfGI!!}c_Hxnb)NyjXBZNN?@j_;@_Lud#(iPrd-{GuNX3 z&Fp(`Fa3^du|`P^t(**dxuu2}{7L4udjcup-ZA8oRK*Pb%6ESy1JMcFK8pHHetk`> zp`k&PKtV$jkSi5sf4HVXNlB?(td3MyU%#-h;M>^f-cqZr-$Y0>%5?sdGeGQny~8S` zr-l9Hep6FZBqIw8scQ4VBEwc;78Vv)H**V%!laOiaT_ zWg2Bf1_lNYsf!B>*$Ee#bNtA=r+X%mBz$dqf4l3QHZ?N$v>M;P78DdLdRd~8897m; z(mros9A2@V5WhMTJv%$wbanh&K7&8uV0D<&b>B2%hKnO5oYP_m3m3N|0F6MoWa62C z03zlDg@h36tf;6+MA#qv>Z6Siju_UHCyL6-SlyANR1kTLjEvJ?to#ZK>0mSJ8XKt+ zh}2M8pRSp(xF4=Pf+Pkx35S$4;ss?kB#G0rvxW6_8MtBef3FNjqh<5e%XAR8y|})f za?&W4JrAL)*Xor~qFG_TJ1=^?GZ$4|%_%G_4ELMZJ6HeoFxy01TRUCQHTL62@^ZcU z4_LQ(d3n!Ic9dY%E#X=*FffP+JVf7cxyFI1Y{oJRBI z2qMChVqz$+Pyb@>P1{sF@b>nG>V{HjzbyOi>f9+?qlB9yFk4?uJWh&iO?6nEA>oUzl20BsJc^dIu*NdTBRZ?)MuHrSsi8zBoT$dHw3u ztKn^^MX3_M9HwR(ojVsh!#cnD-U(=JZB6E~ik)onY?PLke(F3I6BE-mG4T>sCY0Tz z3wN59hetz8TRY@F<`cnMG6h35@n6+Yv??7|6%plQVP}UG%4+9_duSby%(;HFmOC+V zbHB8m{49!2CaeePFl;neDr}-eGb}h5B|?Z*vrLEP^77KZqM|~XA>r)U>Tjw>1KuD+ zjfuIrq_i}Ocn}7SuyE$aM9J#5;a6M2AWX6qxYSaE=2S?bbt7JxUhUfT_B5md?@fQ? z$>_Csq$D!yT3-pu_QPFG)!LC^hxq5^QRn33tU-04Jp?7i|#x& z8L!;WjjG=|-u`_T8QFegoL*i*VST2N*Yn~y-=NtoRgfDQ{qZ-rsH{eBNb!zqBiTK| zT&@a?A2Ru#J!3Qah6Mlr+|iK>0?lHs#WP*VJrUxW)8lm4V|0&3l#D+yHnuI2RA92& z0u!S6i{fcP`9X_+fp)8Rs%@@L) zoH*|8?vMx|IL+DvAD%@DIsYTUp;OFzGt)p#OS^KFxyib>)!rSQEbPfYR;YB}-a~O^ zIBR&JJqYb}#1FAFaxNz`&U|q8i@Q{d)wgCElOQBwV`4C~4odFNZ`@I~)32SbM*uq!s zfu&lNlv(Jkp^?Sv41T+;k7~^HqBdy{|f9xnp`w&3Gc^`h4%)msV2h9v+T@Qni1!nzgz;_LIBJG0@!Jo?|eL z_rCpy+xFGdtN;2H?iktF=#n!Wg|W66o&1}D+Bx$1ReRH%$m#qYd3pKI)z!J8e#rdK z(6%2D5%s|>A|T#FVxByR3`DR)-c4FNZFJtLf?NRg!g9Rmkx5th_pvdx5>fpB1*dqP zpj%>Q<`CTJBn1BP@v(gRvzRABZkCP-O>8`Nvja`82Wzlnx5$RKf7kwVx+RCN4n+u+-BBwm9(j;NtULhZZ(~6 zl;|8$RA^VzK6>;B$(6A{siLn!uRb;ehi)HWE5S1j-2+L9jD8XllE<9p=zjMx%^{m_ zO;-BJ#L*&B8~fY&=Ml|p2`8?EPo4}x(G3X=&2c?gY1-=|=6dr-i>gW}3Q{LUf-Ilo z8W!N(Wq6EhN%eF?LBbH#?C2=_PE=B2Vqk8r$$z`~e5id(Tk7|~fP8vJMrCDXwo0y~ zYios8<%epEVGhSN<*&9=Ieyh67-A^qL+JnkywIMPXp|*$n4v} zW&-KpPpfwpta!D{o^dL#UHOr;fp}v9rXZ%ApuprDXX<0*R{DJ`BY=%5YQL9IZ3VJJhO>1-v9Nxy+>t}lY8SD}^0fBsLs z17L{N?Xd9hC3wK$_U|O`o2w)U%Vhxw+O9B;B*;Et5@Go4RzIlW@N|5!8k?-K(M;K_ zPJ;cKY3v>^R-0;e=bdSA`dgUg)iyk=WKlf9|9-0n>e{V3w+_c$DgS?8fTvU~{tEX?k$F-hP!MERf2`@& zf-e7U$v%IbGV|YGU)%nvdvyQ)ec-?nakL7D%!x4s;Q-UBOnb3`tvnWZ&jb*sD{lk& zTeJHKg2{(KSRJm7BGM7wF`_sj9*Q_4b1gz@g^JwCszH)p#QzZ>kQ@}%Za8UjBu~}x zp`5@;|69>|-8MCqGAw){|CbOAoiI1sDsQ|qK8Q;JFygWM{XSs14P9y~w|Q6#Cf%>-Aurliv%DjNf`YovfsL+! zAg}~P17P$X;GcEsx1%F$Af(8K>#?kERBG+WTl6aw2vPuAPr>-$@w8aEYhj@1XuAC5#7HkETCc{ zB7s6YP+dC6Tf9TL?~L$veg2|GnNFu1YjXz>@XF7hM{2bsWo2rtCr&|Xl9864htfD! z`|RwQ_q8B^ZS&bC*P;n)xLAwB3vN{;kO2@^l#qaj*gW94Bm(bCUv!(BnN_+Tn75p* z5Vy6pJ?4F*XHY-Xr0NU9#DIsAmWTo%f;z0mMFzuT5 zB=e8hN4czP8dT3~g-cAtP_EBb$*y;9uA_8ntl44dO{`N;<)L7&O_UG-j9rB#c8gii zCiP42^xtW@h>VZNT^UGehx^LA-y5!e_s^d{TAz(>S=Xe3wvq^`iD3Glwh$U7rp3X^ zAOvS1yf=r-u91GQE=7@tQiDa^`)#6VPEn2bna%GqS*nwgleJbDP$f}wG)frrN3TmG zh1?E<{r&HfcMtEZqY6qg&;snwg{!+f{Tt;*|57_SJLQ5&Yhsu1{aH<~E4N#?wM?Q)o(7tN0IUu&(B4m7yY-iuAc6s@M=TBS&K^zs z;oz9I-NVBr$i~J1Hc6hn_3`)jH+GPigBOIY#KFSyNlMbp*OPX6!q3fR2Zu9HCN8>v zSw4lMll%h$UlwUrWRB9IqrRAWNXn1v?CkvaVeUQa@uKelYafZJe`?*S=KuLo^bQ;m zKhRJzsX1~U0$_ylfCC`a97+p6^V)7H0-Qs)s7kT=y{J2f(RI{X2Y<{@J4b;Ny%uBhbSSpH7@8uBG;$61CN@_AU3LNYPg9~B>TeQ{Ji|6 zPQUB^YFLgcAos{FyFM@!lmIBbP1om}P)URj)3(cKw5Z^S_Vk3=xqFl8%b7 zHApU}yV;pE?8YwyK%qe>oPNKpkC1A>8T4sV>&AjOWzg_HDk}YgBl=|k7QWtF#6o!Vt4%D{hh4z7We-Pl3Dpp?8W%83^6i!8`!XQ>Wr;U3=Kp+Lw8YB;p zwn%{N@jL$;0K$e!Lg&*vyza32x0@&lj!7D@6!qD>W^265$@@7&Vj8H@d2ekWhU;Sv zx^3z<5Ty1QTcT39Oty+lbw`RyA|ufodWf$4EUU{D3LEc}9mXaa#aBq>dUdwH%%t@h zNkE{H<0xBRhT_eU^^Zuh?glG0Jz9mfoanRj(=S$fhRsB0IGXW?YnJct-5mh|yO<11 z`J*Q&fF0MTRH3IXpPJ7ZUIt-ESTkW6<)N?)pU2nPB~cDv@9@T<{X!{z9b{;Ge1OT7 zlYyrI$ne9550h19Xb9#2@ivelKp-b4w`9+!Sz*A;wXcM#C1f#%3`7C)e)Ybjn&COx zzswP!UJHy6?;C}~SQ@=IGpX@ZQv0=X(&Qf7 z(>LJ*6yiwHG_>}Peet)g%%3nB4snx_Jt;R(STyv0XVZ3hSD5pq$R(VN5kOHLshiliS-0NcyzAGP1HcpeFE> zs3@5hiXWPdpRkIK^X2V5ipIwbQ86vaC#gNUL;j-)BgnQRw@c{{inCn!f{t)No1^6^Gc_0?11} z-K(~?T(k-?2re%_%gVL?g;J8reka85PC_F+mZ5kv3NliS&@3taHd&; zdMLe-xpkwRYG?SDNFXMGa#Uv*>VhZH^bW128$b-d( z9;5|)g(AAB4h_=}0nB+_&$pcF_A$Nr&}pZZ$XWVa{xIQjjT~=X+Nr~ z3h@&K)bpt*q|UpoVqjA|XSf$|`w?*%B~Rie10HXJED5jeM>lzN76!b3tgYcQ7ds}_ z=#wStMI4;HZW}aPASF`&tWdHZOf4E1jG?7b0d`6K{EY#+l`*BcHTOQP0$Zae@hj`l z7uh|(S>t7^mhFd{_K;Ty2`8nb{_f7-!WbP*?lbMMn=@-jL9CqGTaDbkhD+;kCvUY-v}goowv4B|9E`KM$%cP)-m&J*sm@~5A9*$ z=G27GU28Y7B&)0i=ymChK$|x!-s02RAx}1wD6(AW{dRE86=;s337A`Ta)l#AQIT^S}M9 zCTngIw7|8ema{~u#Ec#TeT;e` z26h5!VUIMf^UnTAA8L1q-K!Q$dTcqlnVVbTYY*%7BIDxJ448Vyim&7c2G|_f#P_6q zXK-dXVtPNfI^1`VvpiGt;{6yyB}JLk50SeJa)*CV&{($kef`Wx(O1fW1uU9e4kcCU zmg1a3G2zW~Z?}K&iM^vEH=|QjeCZJ0@}8=Asu8bcLdBo=!oLU(2l>k zgX6qnXJK~V>Gvy*TGD?)-$z( zej|_5#`prrt>?U40X|W)zMePFf0%r(LKblEu>0NfrzS4g)BVBgk>qLTH)HZFQj5z0 zGp8Y1k&k^#A_g5Axt*K~`*`P~xjgwd@~Ca&Vxu)m0=J3nAju=CGBTDnyzl&EqnYkg z;G>iM{Hp_93Zs|*7@Z2~gN5neb`%cwAFVhsw+cK$9siU>@1m%xeUyEo z=Q;iTuqEmN=I`a+A|$BqzH{>Of_}pf!bai9b>tHvS%B+|5-rvtY#%?Q4^m@mh*->Z z&(5avJIR`u=r_5<0EYQVe_2=yQ_yaCz%ege?vTK|Pm@X9VaQ+p)aRqU_ z3R-4f=j(Kk9`Z#*zrOLY+7WfrnN_-t@@7ZeWu}X(&LOT#6~}rgJ;G|0B|r1=%e_6* z%QHGkMzl>Iq=CM9;xcqJnpfAhVq{$o)s^?(?6EsGd4zuIRWi$C;|;3Bc{S>s|8FiB z-}NmXkD^bv^S2HX{;2zN#cX!ekFpm?%H{$-$wXOsG2)&m&aj^?>Q>p!EV>P6K3)8~ zAY+CClGj+bYzsj4qJf0Nm?HkCFX3qx6OS|# zb7hf!T4JG+xFm94ubl(qv9M<9mlw&>yOF};em<|H4YH8Er?pBoD{%t*d z(MULo5)u+}d9l+9v`^=YrEgG>R1AGB@VnmL-e-J#%W0cS>+9)Wo=^K6q_B=(?rPQC z`!$r&Pdx_uNS*yMD&U(h))S%75o!6{$%x)JVoMS8d4cbu%Vu%}9RtH0fz0$9zAUOE zhYF(U3j18F#-vO}@2YzLK~@^pPT|7E<-jfEedp>;zA^A(y1(3KPHM!NM{9aRm*09ohT`t11EVR9_y-TvNjdz9>{=sws~Hb0qIO-bUnpvp$px*c zJ)2OxEBAn}!e}YauVfZW7?T@Wn&=s{!J*N;nxDWJ4o4)BNn1=$j|3DN$L;9^h)3EGWBVt)%s(n0Ie#;rYMhX-DIgtG*z`Vj$2{34&GIBf2*=K z$4_>8BK3RdFZm_8Z5HwkOMpp9_72nT#pJ2X6+KWM8DQqm+zy|DRb?bgxFDaLm%Cjr zMda-5%#zFQW(v-@3Ar>i_JGHw<>}xm7y6X`XJ2;Ts#oufWE7{lo(JGY8+|~v^_ew! zn{w`;IIl&K+*qev5uM(@+78_ls8zB_vL)u+~VMGF&U>Am#Un)sH*E zjYw*K-+%bJ-(2=2Otl2N6C5$8h$0%AIk~y@URMnUU78gaA#sXBrDTW5pDZ-ZOJ9F9 z(QNK{Nqt1*qy2qY-k#Ip0}+?R^_i&&i%E8V3w6U~~l=`L1e{1M=gYM-q zR&39neV^1myZu*D$9btz=4Fp!K(dV+?oiKIUS8g3=uAVKQ|;4VQ14O%T{%EpQZLbn z0JN@L^T{i#lGko_sY^|`1CP*;gNw!|z;(#nEX8|_t3ZjC_cd`UYQTrqn`>exdNQ}g zYZ{h;f8V

0PGH#}48WcF%{6w7;Sf(}>z|uMocv45%$;ccEo(^NqNvP4D2g6Q{p9 zhT}%$l*NV%K8gT8zdPWQ5IyQ3DC0t*m~8bHfis&gu&aX3erxv9>s(M4jk7CotD|G7 znErb++4^26dL{Im&ensa_?6CSN8QQ!ftf?q?^-PL#>h0;M6% zZ!u)N1FaX($`byO*M!Pz-xeT2e)sbeX?xtAcWQ#Y5%e)Wek&zaR%TC1Ca_Dd54-D}}s-$LM0a$l{DqTXejKk3=N+0rThrtnt=#4G1}y+r33}wy$5i0_&=GKVi9# zLGtuy54yeh%sLPVKVym0ysslmrNkpOO1eJ|JZrF>_3K?nN#561OeN1U*u8jvYN}Yg zOph9|G3lc@KP)~ka#v9I`(%i8q(T0~EKc})uH{q*{cG(*zEAm_4*yDwqkBzlr>X*I z6;jn_tzStf7b=oMw27apJ(`z@bs_b7N3EqFRIm^CeCeBUF7r7h|BhqU?SfQHuaQ2% zm5rFV<3XnG`u>-M{gX>hTGFPaXi2e`HpI~ccIYS+D5$8EjErdRCMq9pgN$ipX4VP4 z201fZgU0s=L3OgyB#U_YiU}Md@|l7u^Ycc?7$iME^5yq&oGE*7RYVMR#Tri2W>Uxh#}7Nx;+JNJeR7 zqIBoN+vq}JFRI5PT$kX1-6Q~40zY=Saco8gGw3UHuSW{pkTaV@5f@}OwPHdo@wIgdRKso{k)B7J2hxcdfMP~$rR@y09Rag7c$_*f{Ph=rUg4AxrFn^^xl+S$` zSpiY`XQdAwCK?)=+sVJHOJuQcoiSLXDEI~Q?nu_>D_iakxo`Z(@oCNZZbf)nEMH8W zmF2!Qd!UzsLBT4Xwyf+eo2?Jx4z4!ou=Ef?D)i`Z=RTu9#YOcxUAPbaC4{MLf2kKQ z#~9J>fb&Z8W-eC>lUY{H4SjfIyv<_2?XyR$Au|<~IPV?d!7I7l{bRU!` zgg;=m*#M?zT%q!!?2w!GQsz!CR-V**!%3wp6w&Pmh(T zN!{0Vs|YY_KAf5ep|motE&jvEsQBPYxPPwkLPy?jT4>?4KX^AP#v<_5!dX-4h-9B1 zbTLM<#lcv>Y4^Q|IdWTPyRea*s)|Q|^*9be46g9okUb;g2 zQVS^Ha(ZNa@jOG6q{T84eFTM421CE9zoa!fn&N9FN)Zo4AHDjhN*{hjx^O@t zKs~FMpy~HTirVy(O6J9#uU>iXDTh7D>?UlyycUD0-1+Z=y%S4IOVfS)cF{;O&hU9N ztko>q(6x5cfFC!nJ^og=zUzSX>yOac#jl&}+3F|Y$ZPUd+{gh(e~65yTlsQx2aFnbuDe!;@V77YS55{O==Be%lwEF?H}tHr0Lrx(F6 z0NkGI_q%uLQ+HEjUZnD_ey(SoQe~Vr%giobr;=9k`9$Mj`V;w_shd6o%}m;!&HEV! z)%QGxS|&r|7eCCmSl$FJh^VLf_keB8>~wdb6fBg`eq?jmo#!}7NKNgV)8$$8IwF^4 zydN0uiX&6lLKOe?aII#^Mwe`wbcWcfxk5oTsls7CfxckKGLGA9zx2`O&0Cf%yRr@!8>b`?jL0VqE zK~sRPM8nz0uH6HD(i+ z`E`gjH0d%%&4?@D#7}OI+OI(gjjk8a<RsX;O+uY(U zesBJ!4{Wu8ZV4T{)og+n2O|Rs%@|iMbg%GO`slLKn6|&`X&&XE-@(Db5xzQ9`=n6@ zyxT(@irxA__Dt)ov4({h-0wD?SEqk}400?RyN@bA#kJ+bdNHgiwTRtc{NE1^lJAZ!(=4s2$Zy?wEVRa7g!yqGv&b%nK@eI?$ly+e zR#)NVS1}YYfwV#As93j_1^RBx3BEdy>YR6;NJWyoTI>ixCL7696F-2g47O=fAK2S> zV5j@=W35LD#~xiFMP3q|lkbtAq9>3n5$@*kS39o|@-wnhtnaf-YK&!&1bo!=u9@Zh z?EKb9YvX)57u`hJ?lre`e%giR25uumvGUW?e~mkn zP;tNkz@+m9g^q3zFQZ3d&TVCFt*0l3>fPJ7PZJn@g-43BQ@}=>l=pLJsQkJ8Iy#=7 z^zfA9E6axZ`de6}q-7bmGHK|EjyAH5)E)*__;<}@pCReZYCpU_aH0}_WDCYvZ@=Hq zUU6^YVt5vcwX=-uDXi^15Nvta8a0un=LQYjWg3iD0Fu3*kc%gZMAoBm9C?nMcl$!h z%b{IVoW5EUVBi!^GFJeAbLq0ZjDqRG?GT~@=K!uN;-`24)JMPav{5hz*(lwUpAmOIx?;HG#|TNuYKU8YNA6y zxvvDvZI-UDwdFe z{w`6Zc9xv}JF&nzt!J3Yt~53Nq)gPuSapiUQM#ugtk>jJdUbDo#o{^FjF9% z1Bhz6_}AEU^ivm)-%~{!8oE!_=uKYdsQu^cxqI*4t+z`(F}LOBdGJTNpas$yYJRja zQT(zbQE|hU_L9RFCx>1CQc7(5=kRN~r2eT^?^e-5h7nwV-QYF+x+ZCNsTl5X|NRsG z55df48Ox}V>J0fnmcf1#0iYYNQ6~@8U^r{9z>zmXl%r*B*b%%r`4tfcx4<+9wuM$p z5!);k(_@#oZFAvJMk=^ZW3p8EP)x2n2&{bw05c>WmHhI9WKk^4Yy$9eQf)XlBo zXP0uu?;(*Bg$HkwOh#ShV_pvq4!(1AWO99dh${PLdmp-wcrzm%@#bXLAMiL>Dw0tc zX4LIDxNL20L(9=)_M@XoH!WkG?w<_bF!3mvgB4j;leqbItZriyWLfFZGxy2X6OqgK zS6dD5$sT#BOJQpWDoS{_<+>{#{yQe5#m%6r9KQINEQV%jT3e8zn(JvS@4`2 z!;ilaNTZ1)EzoCZjJOPZaWJ_6Mw^#!3nRyfZ-GjLTBD<%!yCX66Vo&C&2BfkOZlqo zB@KVa@887G{>>mx1JnL!@3VTz6)-MBq7YTJ=uSO+%#~UlE1CD^RQckz2JVpU2iGTT z?Gaz+5TNULL1>lX}SlIBL)qq`yWgjz@O*YRt@0|8+w= zc>%e4v;CT8_jc=ULSWF=!jDHd9+$*MjIXtA-2v#rD9?8=u{l}WZpe1qM+`vE8|t>^ zRzJE=<545m$>7p%CL2dx?j3r@C#ypl?Z1CFz8FRZ&nEczz!p^q`JTV=_@jVOKR1U| z_+#G)g}stDz!t%~hfP8vuc48MLCy4}y#zh)?|=P6Fy_{~>_NKMI-zAA8y;DRNHNl| z599ka+4Oed!}}$MyZV2gfxY14$B(hZDN1Z7Pb7C39{g#x=PzXOFk4+Cn%ox_L=TF8 zytNedIHB@kh<@))L4DWCLVE+6^2o%J2bdw@iS^0aBVl75$$a9n=z=Y1?)WR08H{|W z9Q8xS(-G1g?F(_(WJxx*25`{9+sG_?O4jhB5@vJ~`g-n0lV|tK8Jeu;E$VeybSbR` z0J6OgGNFpCK#dLpo_x!fOG4N$!K(bTxFnF}P(EAvExa!_yswt7?%%(E+d(M&@>IV! z1|@?whA9=}h$cPtI^DC?6-?3eW#Jc77Fm0MG@;9{w)i0Tg+JMc9rx$m?{>Q?%r?YO zvb9steK@kzrcIL7$ZXS%7Piy(6A~U#%vbYAJGRcZXjFXj{~;kxsGYzLJ|!CA*>AcpQJ#^zVQm+e6MoxPaxBPV`piDmbUi zK<@xbyStKRw{mrzvpyB}c4tjwu6Im&L}y+}1spnoFxX)ahOQ>*L;GBf?}5(We%uO7 zm?4u&LwhX?kUG*;!s2~ESnRhvB3;%I4VSF872qAA0@SL4mj{>(2@FcZ;3$&nPdpQ8W=N2YC@^FgRA(dv!qU9R&M}G84T!v$!1@oTY#T`9~`}}%*~Jgm;_+i&NdO& z=qP~8d++eDqwkaB#7Ahm7ZemMyHkAnb*p@bUTa^S()W{7|E%4;Rp|{P_4hwrWVu$w zl<^VcD>v7krX1S7u5Ms6hN&EaGiBj-i+90R`w=?Y2r=7wLROPp9K~0U;o*yaU$PG=A}WB<4tuq44mfrhm>Gk8*UYv16Z zFj#|;7F>MHRjq4lmM{jQ1ceY`u7z)mN2f%d21F=6aWs0Q+WeqHavHMWy+9Y4Bl|)Q5V`MiS)9 zleE`Pk547)8wPuNjKDbvk{#|`a{3`9G+dX!tVKmnU;OPZeS+)(VM@Sy@(aoZAS4!G zB?8s)iYAhwsc;M$9c0BY(+uQ2ndSbS=du zb1*9*Iw=)Rwth=FTWKN{a>pO!Kp4nd0*@fV);2kfuNMJ#*5m$Bgf-?pcuHIk26^8( zJFkN488S<5$NmcPb-J);Lq|8R6dsXL_8Xaz?dr>cLR%Ah!uYKg_feQwc?MQghOaYV z_BmS!BD0+QOu=bB@O1y)F?ck$W}6#3XbN_~7Y&nili;%jk@{Yw`>{j;n^1{bA;wPA z0R~XUC793v>qdb(j|8Y(x?gQaU9`8ry&f-nWoFA>gg1!Jr{@xVaPvB}*DcrT{BXS; z2pZ)cA?@5m1!1Qz~=w4%B zal&p*79`a-fN3La(gTlMBnxAIKOa#A3kK-0OxjGORhHdX*%L8HNau<@O(W}}e&||9 zLtB&YuWgvmEY7xkhI#yh&2oesxXx{5+iyQXRRQpZ2nyEGP|cV#CIxwLAhCmn#Iomi zGPP!}5F;iy8jH&jH7z<}%0XgR6=4>>;vion7}8Z;RaNJ(iqX;{LBJ9Mc1|#7t5+Cg zfK-OBi`U)X9|m0V{m!hy&Gl7SdKSniFd3H%OGLwxdoCyxCru4wfg`ncbE@?=OOi=Z z;9CBh)lVkq@?1>p!>pn_X2khfvj2k^Tb5#@|d3>5Zye#S5OT))=mtA+9% zdVr{cOfbAyV`3`&Jn#;zg- zB@@=~|NW5xs9%516c%~Q@!uapF!TQBXi3C*2Yw!<_P}ZOFAl{VZz)tm$W4aP%OXvr z#|!UiOukxV>8_Guz?T2q9`Y%Ej5`|(F=cglIB;}%4N0{0w%W+rt}HGuOITVKX>_|h2{f~m z9WBYWf;)g|13pC2wVP$~yl?dY%kxnhe)G2`N0n+b8fNAQnB3Y0^L^59O#7Z_3N!wp zwzdy2{1q1)EB5y7+j`Td4>ekF9;Z}s)7`u>TikL6s7di!`HPaid4lr)c>&@IUU>Ou_Y*_Vr2A86#-?C}j_1h}z50n;)qYR!iRc5n$V$mk5 zSALSjncic_!qxtzhojf*mH@76eBHT*XMLYckU-x=Y%3Vk6GiGuAD32IJkC;0D^TC7 z`j&Uk@f9xi9d{<1v>fahDJiLHuPe7yE-SI;&(97bR)|tyl9TzQUtIeLk&Z#WdqhZB zJUU;s2>12$SF_3!bh%uIF=D*0>%nltCeWjSNg#uB-ppt`zMJi<^wI+&T1Lh&SRlxH zhS=EHhdRVUEG&^cucu+wOn>H~^_ze%m8^gGZcR;>ytGrMp7R~J7_tANi2W0d0)|Wo zz=01bbFGG_L7rB;Oal;l?$msharFC)TRrpUQ>~8b)OSCiMIO>oaCrFmhL!|{KRE+KsHTCd1RcHkR&kdREvIAyQc51tulnpGc1BdN$%1DZ z1FZirjiLU}U6`9Y0gw>P?LU{75AULCloN*$L%Ck4ca4*i&h;!ocCo~DL5eLwtUJnyLr+x|8)Qnvyeb6EW)qJa zOTDiMEiElLe{~B3X%%jN>q8#8DQaXtl15H>ffYeO>d29a^#SB+7`zCD1~;8z`bZe7 z_M3SnxC0m}HoLxSh(Ewy$P>ZW&3zYHtyHN3lYFq4^9nO7c~dkXx0_NCo?Ey4$I2qj&et6 z*qsxx3-Mg=fmy;3**Z+OLJDE{5)myOot8|{u#OF5+Q8980gQp-L&GoWWsas%J6mUnM1bnQ(n`lF>Vm zrzwWbpN->&CjH=}k0aJSQDt?exe5J~P5c&{xt;RTx{@`!BO7tE1eV~#C%2_{vSm@I zDVk4uzqosQ`-eP8kvFGxu%KPLIBH;hXTQT|VV=o%QokxVyvm*;k1){#>_mFIRT%cA z2wlq0W>ufFCSx!>9KEr^xuXj@!DAoe=w-0;^Yh==TCrwW1`WH~Ego!+Ij1E&~C^r%yj`m^QR^A?@$)!w6Qo+&PEI9&tL` ztJ^d*G?q0wAJ2PDK-PF1AqjCeuPg-tW(FU70-cYjDB<&-MLtSYhP@h>I>eyp7!(Z{ zjMG+o(oa-7OfxbR|Da5-8g&E6VYw-M?m)Fu30fO% zgM4AMaww}8tG6M`5=>nqjxS=g2v{HuzkKbdwYlOf-R}HROOWTv#d|FxC$*r$5bMDx zOawH5G>-2R-Mjrdn40r!)^Jo_MkX5^4)`~Kl=(q|@8ld7{OhRSKb@R02vfg&j?K;Q z@nJ+3rhVWQs>?CI|Zd-23iC4320SqXlBxBh|* zD_UTUZEa#Dt94b1pK4k_0qpFJqcdamT%K@7weEesJmoH+O|{wQm80&8#s2)KS6^Qr z(ahIFTw)slZt!6We_A|sXGM!H*X9jnWvxS-uIjKd6uaU5ZMd#rKV*x`A?wx;+e!j|L|Ftm3QJl)(dOp$#m*|&JgRnXpP!z7{I#jC6Z>Pa;uHqTY-bu0 zU?pNrN5-2MOIYQx1Dr(W#tEaIu4-vLHNDRUVCX#^fPDtp^ST^sr*3#k2y?H zz{z9;83NKJH_3%ov{(U_Vxw2CDQVQxQ25l3zkf}#9Ah~j{>uCc+_Bm1$lfyGJIn1h zE4rmPH)fStuRjCZf5fJ1u|%U!RyKnpvm0&E$yr#27PeX4*G4Mu(Bs`Q8tItNoi>b>FzEm2?5DVw~`W)f(ioC-6`GDhyl_K(%mH` z4Zqo+XMNXm*Yb~R9M0Ki@Au5SYIJLCI|ecfHQqh3VtLm&aSWq2I8e)&2nNS_%vC(u z+1X(x{-gPI;z9i#SrdkV*NUBS)f8?~U~zG%*3BE*YrR7;x4PPn#oE}v#HZ6_&rn;{@f;aLBR*#MCd)PxZ{4}iM=Sn2`NTx! zB>+31mikRTIqJuDSIs+_StSB4W#y~+?;eFCB)s+z1(O2(d1`-uuIQQ`C_w?08OL9U zij7^VLd^gd7Ieo}W8BdEFT%s8w9~*2u-WS1JLQl{d6=c&0AT%QyLxQnq5*DISGO{7 zSR>YQcyu9WMhZ_FjDku~(3+gMy$z(W(dj(I*gUvg?zvFlQ8Irsi@$%ix%+9 z)0aC4o5Eh5r=FXnFh$?K)L;DBv%8Y-J6TVMUvH?syK&4?QtRK4(j6R(3CEoR{2{fh zfJIotn>{L+gsV3b0k@w>hWFD8@8|XF*RDsqtE*$#IMOdc7g~N^X@yCke+e$uiFGpJ z%flhW6-KKV`}c52<>jZQFUn}vYj;*s3rICJH9?`BrNIbw3>1)KY3Uret@K2A`&Q?V z?xGD_S4*mRtSFGof+8JT_)s)w)kghjQ8zKHTEs81I^ z5z}daFT#z1r=aF=0C+7DjXcZWZHbJ=OAkp7Y_JsYmnh;|SQB)>1b=#Zig>WO(^4LM z#9HF~Fk1011z<@447Qs=y4&o!t?P@no&A`^rr=#fVbx2QZ~XhO96Hl%#+%;?;^X6Y zCoGb>e}n4-;KFt+4hKCtEe%Z>7#6@CK9!!rWon@m!{%sq(NI{nW*J7pdtV%fjp**u z(h`y(V_-lI2_|qR2@b1?iHT)RmOS*28BsjuO9VPX=zOaZNvHvXi?%CQ2xms%@?8Oo zjOSkxHAEPBcnHLCes^?~3q~ElT(vXQQ5D1EmfFj~I-L||-odZ>q_s4(Xc}0ro_U*| z-W8bN9&wm{&>zdq&aPFVAJRfax%i%*>Hfmu2{W@P&@YG!*zcB)_bd5~PhJ|%VlyY* z@kH%dx=_`?R0xR;=5dusvI>p7J@T{eSD6ytCc;s3*WMH1@3*c7P&EOHA-`QrPhVf( zeBCn~RHS~v5b}hPvBLB9DxhI4d@0>+WtP7H8a9JRrOIY3OxW|^DQ8JQ-Da5Z=2pcr2ceO z^>Ymc-+w8-3-~-XB5wmeI6w%^%*^08Y0qj-0=cn3Rlv!&Ti6#HrZa&f?Kw;@O8P6z z6w?JpccCe$xZj4qF9Z5?A^3f%yrGc?VLo6vM%195|Fj8BwZ3S$81~0Hes2(MW9xIf zNt~6RFIQ6oefLt2qk2K@@=(lo(qlmsrD}G?Y&-^e-rq^+OPEVl>;bJ}|7A9I-ZBIH z%V7BVsEBQ=8cA1A4|1)+k6)1*Hm@?_Rb}De;p;iX1^*yFEGDkN8jQ8Zz~J1XD_X+bdHK>&=bCl@^+-tBI^NpL=*-t z9ReHEDJTCXacF$JX+-nRqe4b0f>+?p-}GNgF_1OG0TE*c9_u-YV>4a{N;4jtEa!q9 z&CdeoLehNFB~6^^!Jz3v*9~3#&Ch9RyUwA-@I1LIcFI2-??mSa>1ti7XTys7L!_EZ zh>m{f>Ktz`Svc|>{yVrfCmC9IR!+-rYHZ|l-_KT`Y$OR#A$c0>dTYRi*txf=9Hu9# zU@AaMi;uq!S3LZAL)42!R>Pe+k|qLdB*+Uy(R>6&UEXnAax$|`n?2u*R7w{$_PM4( zqJQBEM^uLf?ryzBA9-*{NCFVdvc=}QRP^+D%Ko3ndv}_{1p*cp{sW<5%EZbv99>-{ z!^Uj|S^V&ck+P90?D-))+yW9iD(=fj`4LcrywBn?ZM;4kYvF?cEGRL{pymLPEVuTT zZ&Y-*ym+v#N(Jsqm0v2ItXS!EQpU!`bx{>YBqr*zk_f}(4xZX^T2>P*;L()^jjI*@ zalgsJnyJ58z}PuIa{rZ8oX}exF&>h_Km(1;y?d6OY$S-gP}!lfswx`j?~yw8BwU|l z;f{osJN!9SUj9^H9yYZyl%_6B^ZjV!;NU>sZFf97;PRrQyw6K%Bo=pvU(fbHfIx}} zHZ=Eu2y3p2k0zf`zYi)ca(aa0iz%9uXcT1=8E(B8T-QDI9wrFz1LQ$@;KnHI1@=*l zfTa^@`?_RQ}6zLo9t> zr^|7m0+Fj}{lJi1pJ}xnG*stgVc@kVjpPx`USGKxK&I6>@$3bo-ULdFo0eID!d$li z-`@;LlWG}v_d4duUc~AJ$N_h6ZmUs#$5U+dS0(BIT2P0pg-~61QZ3PE5xA_~#*a4r z?nD0mx%*dgF>|}$IU6cHg4S_vFWrtZ_ z)TV5-f!jwTyK~GWFDuROVFqTlcF&l!Q9W;5(*L5Qq~vlYl>YpSwRKifijtG-DYUgI z6NJC{;-*_aNHr6OZ5F@qb>b;W?CM4W6a4*elDjWG$kXy=1j?lH`!+MQ@tU${a&SnP z#!WJ{j}kdf5^40sgjr?@`u`G+gm0zNZP!5L;_r{d@5lP}&WK1z=yWNn;$CjS_n)Da zBbk%MXi|K`ZP31q!ztxYsj8tNWo^v}1B`Se4XQXY?4^T@=SCygjJ+VV0MaVId$(^4 z6SHZNe9s;v8!269n(L>3b?qa_^)IM@-MK=ZJU)%)MTwrgxHwA7<+g*F`~{e$_lb^r zvPP6e(xs&Ec8YFl5VUs0{QcIYygO*dqZRTvV)ZX}L<@5|X?*1XK&FcDZ-G6CWZ9D~ z*2)@MS1nwA^0H9Xomv4CXZc>=tD4a1=C?^8899JA`0&vqtG#5Dhyhd7E)t)Du}!mt zuI}+Q5U)QL6-~>}XBe;O>fxay6k$MDe={T*mgo1=S3F4<-Su~M} zHJ_W=t!KfJ0B6T{aQef0AF$-Am>|;Va_M+vqX(l|E+slrXfi%kO zC`Mxm$=i=C>~_d4UcF)imb^?|l<-DDrx;fSyCp$_ff~_m{4uU+40e3>!U}uRm^x8N zRm4>h^2@62Zrdq){R1udIsJD#AHK?|C$n{rUN#F_9MT6<-M)SML#7;PXHz)hdP!FS zBiTE;)XDiio~CH5%y>HSDzHeXnClWV(Dl{}W_!~+SC@hZ-<%KW3zYMK2JbfyYp;`v5D&K(Kbz<58h#D^QZlc0f2qzFf>+`uX zxi%6_WR~w!KR#g%qfAtMu11wC2bS0?$$=!AqPZy~r&)dlwU=Qeg1u#F>~&;1Y18?bcjig@0ZV=LBLKjln#Ht5tROb?8e z90$=|CF`z-;1wQ(EHLr~=-JMRsm(B*nmJjZ6#tAeP0;8#;6}MY*vbeiz zNN+xr@Vh2uo$SWY3|b4p;jq53-13vZ_X7PYGn6P+k5`{Y8~8T9_Cu2Kh9(;u7Q%Il zOK>Zn$oe?iCEd!$i|O91M8WHkMM1cz=-AkO=%TcRS&6xuOjB*>pT+mjjW%V;MM{B0 zASNc}St1ukpoAJL@;P12P8?L=79CClx@Tk)qXB!Bfq2 z1rdLcE@9+Ur{Ea@B?vqUa-{|(1J^ZYED#-1327>cl-|AwG+ooG(M8g6KA-rdpx{3^ zSfOYC+bg)6K4R^@Q@3jCK$(57@%3%jmH^i=&o|iKca3*i#FsBfK1*c0vM#Gi0ExB- zzR!OqCU81N$Hn0itqFDH!Wn?p^^hmwK}hYRP|-DgCY91FtNGOrh|g80IsI zkDPqDPu>1g3&zaSg>ZgzPC>!RbspoH#F%@MD3rc~oYrcS|CvC@2n4&84hT$-Nm1Jz z(l#z^YkM`a{GQi_G7Z261Ur_Dw{f-Grt&+rtzY635DY@~%=>CXM?x){zN&`(oXcfJ z&s^(kEkNzb{6C4881WO6l3wN^Kk@*M2MtY4e(uL|qvts!WoLzHkfqmheYv|1N>xQP zbry%E#ynsGYS9*zpp5fFTH266|4HlGY{lLi%u0!@y@=M1=%}ELd$VMH^LGI>v>eC` z9GWc7Fk9WwJ$Nv!zhT;GZ{o(6Hc6sc9_jrr?t?26^!5aWYTSn&>iI=Q&L00Pgg+(B z>+41Ph@au=wbrO7HNbwytr@h!}TS=RRE}tx%U~=73hqV9mby3 zW-s0LUt_8@ANci&X@x^R5^*>IdlGZ(O?fMpF%`pqPQ!|hvtpK2|C6R{CG3 zoacjchyG$c{-z5v(D z#PpLt;*B$NR8=?q=kyh0a~_19GBe9z4tZ1}qbzuEeC&1>P%Bto->#vj*ZuZ*x*c%F zAILArV`kbkl8UwjIQ0#)0=^$6S&sC+HBW3zOhn8`)qXGp1j7x-dvZK6Zc`2ME#^@s zJU~o7-Nnw!{A^R8{GnK=Wu=iC74>WSGp1dA*+?3gWD$Bi7ahKQ0r?HH6y}oCkt0jK4OM;dCt}n>618h=4A*8YacX(JT6YR_|zN zHEx+_nE2;(ENA+dra~|<=E^9tlnS6pNM7XA^Bzt4UXidy zUzRxdqublrNkvT^00i84HoeX#so*$&GF|u83dkCLPbRXi{EI?17%M)fTF*Ve<(-Os zUfK28y>Ql!HFP+MsD*^|M)8gF4dSg7_$LrVYIkP4|8gHLYy}NEKdyXa;*!dr5NTN_ z03mLW@;heF7-KF#K8()5_Dv@|=+FMX~&N-;~Zw+AYe4$8`bghuIaaC1oNb;wcWD7vPcSYK`uZ~OW4 z6_kmFQcl4H-Qv;5?5e8v{{)|G7IqEy`_M(q)C=I-Nic0eqFNIa_OVlnP%1HuD7#t!@MPz`s2 z6!`$U;nUV@M!`T=siGz*bW7GaDYQ$#F=p%+)$8DWKoa7^si~pn^^f3} zg+qp{{_0=L`mmBKhr!1>4T#nP^iWk@IN+Z}_zWc#R<{>;wUCvg4UD3V)2wQ70;GZ) zjd6#4j(H)Lt$W8&VX_ui6H7HntZunT)#Aa!hyIl4u2y=G?gmm_V|AU5Hd|)kS0J)^ zZrjdN%S}@gf7a_DbPLy6r&s)DW7jvgvZ71ATk?^$fD1wlRhdnaqeU6-frhn?sG>N| z8U)P)9O$Y)mZw6Iq{Tr}$zEAG4jfR!*=(8dt-!$jQ3_T<+OrtE^6X-#Y8hca7*AmC zdfX6Yg{Yw*B&@f@1_9Y22*pmf!?wFuCY*daKl{%#WDPdUzr3n}2YlIC_@#|@6H^Nk z>ZbZ(jKOZ7+^BxV{!%gLiH(ucYp1Zml_p6B+Y zJ@>D*^D9`qa-ImmJmzXs%dhUl&BoUMltdJOY&bxogmZgdOtc3CJoO#?u}WR=f_eYo zV4J{Hq$GeIlXllHr{x5JAk~M*7AnvZ z;Fdzpa~@+m3zJcANNB9udK;*4^QGX|?0~VR7<6Yy`uC+9F>`yj!W9Qm*1=Fm{v6#{ zVgTh##S8L+P)%9&tN}{-hw%SiknqdXE(p1c9QIRukRRL!6FACAm*JHJNNwO#F6YD< zRJ_rzjOMME)a-jwv?{{T;kwBOMl|clx~1I4#$-sfdihDepr~jG!tI|XB=etXR%?64 z@tvMK5=LSiHt2XRsU1E#plqU!_MVT;SaTLY!WrLJ4sDwO)N#*#d3T~Z1d3wEi+ge; z*k1+3Mu}86#e`5Y8+FEe=YWia@Va{E_5a3P{3*+}`mJJ98>xnV+x|#CiAqh~iM#@i zeA>vrA6)+sS4c@E(HtyqZf=3qXz1*~pP<^*kN5E5^C$*w4GmMb#uifGnT9nOBa;A1 zKzI&z=A7*8cW`vqO+9eK*RoiJki!4Chyfu`kyBJOfdFS7?g@A(|LsgG0u~J-9aPH4 zkNvK|VisJ$rjuWfFzWQnZ1J7(P9XHGokU0s zK!Ba|lhdgM;vj~=x{T)xF7tB8>BFwaZcpPm#2C>~*z^J~R+rcNJ_4UN04?l$EoYIf zp;(beV{CN{##*IgWAa?Z`VEcH!nuB3{SbNtdV*HlL-36LE=j>q{m;Me<+or@W}zWV zE=LesL&vXuAVvg|dRNyPNuBvHO8Mtab=}GOJNf@gn#KZyf)=*7?bu0#VGRQ$h;%*A z9KkKyums^25{La#b1SbN%XozhKjSTslh!( zZ)SKC|IpSgrqIf*VD`gp)n+JF5Rvz?^4`mr-}5tmQt;b$>yb=HRz9&2Hrh7$T=0T* z=wKq9GarRoqi%(FhXH`ixVY6@~raaLA-i7K! ziNNvW)IqS-{)CpfHa`4}{AGW4XXkfIu7_k~`Ui=W=t!g|v?p<&GAb$}LEboKc`-p{ zykslLIVN*_a8S5v3l$=-t&aB{jl63i3*W86uoZ-=g@oT8m|e9iOfjy{Tdup*RfNri zdn+*HGHgQYC@nQmv z*gQ~f{?@~Ghs1SKQSW5%R|9`pERf(h5f9rlV7UFU`^z2`f9gwb#pZATdc4Ek)NKrC zn$6o!QBJT zjEsy-)JzmLSnl|rf-cb@P@PPn zT)PVw4_~Y2({%VA5Jp68`p3e; zLSoJ-beRIH4pX%ekdX-Ab}I*IUyrRjopIDQ%CAPBRwU3@|4%wkHzxzfg zJ`fon_5}4TMsiJ5oYrT08%j1@b4hW(qZp4mJ7&P@0m^H5`ttewy$7>S0#@j^8Vqho zEB;MEG2U%JE|g$mSc&D$#$oE@W$K1>7q!Q1ut@{VA`n-g6*#b5Q(jQO2t&&Y)>IYy zpNFPsuGT7gYfXe%afyivAoptu#1Y5QOT8F`6kQ~9Uq>flF->k389#q>pzCQe`R8aq3Yga>NU>(os;|zZy6T=qnw?!o`+3nqI14&+p9y z4gVczTuRDa)bO6L#_`^oO7Ek~%ctEwe;QE3o3Tth{sTWTn3J?emGy+-mPZHa7dWj$ zdmsn^1SRH2D@=Kz%gf7qu+fME5C~uapC8oMiPkajwhrD}WpjD-TR7JmRio5$rYUjV z+S=zmR2y3jY|W>FLz_olkVgo@C4k%`5(5)}5g*4=Mx>gsG%0R9eiT@oMA#Do`p5A24;kN&0n|6uWM1}Z0+IUhw4b_(Lt->%TiY3kcKJ6#yYe%(z8u)AgOb_sIm1bnXrL3dq({`!}%$ zt}OGvM#mc52SpxlAEviBX-vCt5o!<M^I5EBqvT=gG0qbgn%7IYZ z+?6|Apd~3ND1f~6EbsyYNLOJ!!gz!H&75B%Uo=3bqa}OrXhuT!KI*Bk0e(#AD)P!# zZlmT9ZY21)c~ADBT)Q!pGUPPQ+2rx+3pPwmNY$Hl5x@|w&$-uWW&-+LV~|7~)pScr zO4?Xwb*}k02dQ6Yts>Ymp~%}2BT3fT@Y)g+ux15n;@BGZsO_^znlEK# zstO7U74D6Zrn9@>wWQRde=catGk=PuQFGR9C_&(eK_FF921i#88P~UceCQs9%H&m9 zm;;V62=$C+AgGTAwDDl!PXVJ8<2sDsp{cX+p&w7)bq?qPqesCYgBcHl#Z z?on(Hr-(cBc$+n*UC9~M0l{alB^g18VABmLJfA_zVjXA4b4Q42U;C!>4*5IWzt|>H zV+=gBn;(@0-}jfas3#un?^iGyYmh*df(wqs2trZdDQ29}|8LloBLWBym<;3<6|Wucd%+$Pu-47qb!fLDxkc@LsSK#5{ z{h`4y>1gZDQE-@P1U>)*Bt;)GEh~HCbHbDB_G3!}GTs|+Q?88)WpZrgKDNqgK=O*= zbxa^&Te;Z6LFs!w4?NDFpoawmcc1xbTElj?5!-OL2~afP8=2WDIsI0@r9ki-5g(7PO-S>? z!^L!K?Z&@d(XOpJT|CUL47`6pyKdc|B1COnaIQ2kGHxO*3j^u>XS0kUav4MyXMye40e(^&-c1H`-V+RH;+6*2BoSw zy@dTP8r^DR2*juU#NnVOWKWs?91mNOw9`ZlC+)?WO_{%xmBraIE`JA#Y?v=HN2~`n zj|jSmWn^UqkNm!VNoI=HuCt=>d236ob_H+23#@JvdQ@;1MAL5S_+q!mynk4G=$EAEYyK;xHT<$Tp{*HYdbXQE3tPquzCV~O#Pg17K zOgKPsBG@h5*A++VNuWu2kNd7fpYMm=Yz->v%eZl?UJVTm5Xd+j+(&kbKojdy+XCIL zj-oE6zc0w8K-Uh@X7y5iV@7O{qVV9ocVA#&AhJsgR`+zUah(5UmK|!$v|6_eV~A$( zu6%SD^Y_;e*N?SHm0c-Kv}^XT&H+xEE8D{@8(UHDkFT4*`u~{6yO?5o4*JSrs|9Gc3=efFjdyCA>%qWvZH9#c7YX*|bp~_#``uu$xc?*Bt z)E|~Hv31#wR|amcxmNNwG=7ORNDYdMBlKvR*|Bv7KBwM=36$ZkUl_b3e{=YQ&||RD zLIw6M7#>W3?Cg<%GXsEQCNMz7vU0Us&QODiuWI|w>+9R{7_SbQlAeBHF*PoN8X$$0QLBAvr3VvWclguj&WTuTe_)GNd1YWQ*vwh>3SEd)tx0VJ`B0h} z)OZvalv)71|J046)diR9V#^lRE!OTuy?E;1NKzGFiMrE@O34XF(p0@m2xy1@T;dgI z+!xDv6IA5Sgr`|#d3XVYS>03z>KHOM!{4&W!mWykT04pU+|TFLXi;bRZhvlZF+e%5 zl2LV=ftSLcesa@&SJgbrr62YIY&g>6>e-lp2O%?)s&JKHeXa?s%p{p`R@suTW7nWn zuVNx1##TPknq#zBO-D!G%d4>~<=Ly0lo3}Rl@tN91DBE_>RF-+zC;kO9xV_eF+pl- z58y&_b4zU+$MRMIA{Co+$y@JFJT8tC6+jUR-bJ@P;VV4St#1tp-zGlmrk2eaG zc-;r0N#b+iVtzvjS%+JiDw6GJqdGg>-7ixE)M7pi#KnSl~r zlqAOIl5byT`$2$YLxZ`q0z}>_2qlp@%WcLgJv-@lUznLwv5Wof<#gG2?pk3_Cf%rm zHp-I~`4bP3+%ZAP$a^n;A9G}WI6Srec`Vb)t3vfwAZj}8I;9H|uvOZ{TpVa0PW6DM z2kN8C8}6Y`{zeNyEi%%9K|k^gq%u9uHEI$MdOlC2{ra`E`f+yjL3J%E?R1geh!=b- z{QRz_+kfQGdDKYN+bdQYLb)A*;?#*IIHP@j?!>@SNNGIjp=HP*K6Ei$L7Mv{j83B~ z3#{=WFo=y}D4vY86+r(_M~VGd$7c;@9LglwM6$0an2P5b-rpG>L4 z+!O8jJBcVG?M;z)oe90E2{{U#u>{m^M5Qvbe;DaJk7)M7dxrKk%x;vKw=I|KrTE5? zqF3oB$>_O!DzvP0Qz@eds9zmtYxRCYo2ABpcO-Q{CQf^3G%@U+|CW)#lujTe40egs z3=na=nA0Lzw0LkD8Tqip;>s`Uj#mPI1EEOp3Vrts4lpZX)fZvOUe%OAtK?g)#}ggx|;`Yo1av;!$!+zX(CPL zBqFdO6dF_kGcToI)2<*5tWHGD0O8*Q*hB;*__RQ7&}XwAes*?*3x}vGcMyr9e?wNg zK(C9K)l`H>#EPby67OmxsTZPiuMGCSN@6Z$sJX3VtlL3=`Zj0s1vg0udt{7cT7Sj@ zquo6#W^8?_`uclO3T~8mx&8yL9jPmw(1=@2*H@1yi2a+(B2{cLP*KfcT9~XZg_Ok2 zncd_2JLCZhIf#VAt8(M5t3!}gxYWaqAu$FO&R>uq3I>jGG9?Puwb_O{;k#;k9mjV- z&`kb7a>btHRy-J-pcgagN-X8y7LGR1pU65flX@_0WH4Y`AmRjTZa~1zJ-&=oqPD+@ zpBlD{piKdhNhORW&}*5ry|E8`qH~Ck82rKM4wgaK+64)nrk4^CLAXA|ak#eRAE@Mp z`4TEaMsaCkZ-`S~`hVr!Z9M+d8MXALT8jS7t(N2jez3IyFp*dDrC-VTc*4}9J(aTP z+|XA^*{-E-0r!agQidk-jVYz~MO?#sYAkqD74|7f5i}o51<1ao4`pt0eN=S6*`%Kp zw=?iF&t{G5;xXfKvGLM3!(Jh+q+I)yu{QmOGO5bo9dUPeC#S&L)={gXI*v7JphfGu z)uLLV8Nsb=9$X;oo+&CdySg(_7cQc1bH!imOp7Vstg>qW)HG?aaarS4zfr^;sw+nA9!NgyBRu=-T10Wry z;XT~Mp{Qq8@d9QKS$Be#1^X_ECGT8#vwFQ@{~)a*Dlh%zTvBVw&%I&t5&kOZO01K+ z!S?aSb}*z6vN!IFxIrtqu=) zXFO4>a$I?JG&Ft!naA8Ivprt<9vTNuIKw(Si`pq`S%P-IoBugb!NHqTZ*mb5Q=ntx zB2CrZPGztATvf$&BTq09XkhTY+!G~#tZ_Lz)i@E^bDq{lY4&GY%jqjSZr~C-1&b`k zTnok$Hg{TIlN|U`LD^DN&Qb^KbV0K~Dvl#}75eRhD8lD$O)!2QX1hNPdW1hk4Re(fy%j{;cTwQs=Iah(T$Qx)# zrj)>z@C@8sNpSv*T`$&(ek)ux-nniyNyGgYUf4}Bk-E5?L3({oE%&w9=KZvikr5?K zd6n8qD^15U)Ue7FK$uvNr%zc6KEgpo+dl9G^%x~{^97Qry|XOr#j7DRD|k%_j3f0^69ZIJ5X z=E4sUfwE3dV-nmYknM|vWo_aIl?SfaT1ZPvgL_oErqj@IUPm<0lk!o1db%&TOxR$3 znZcX+z{Ek*|0!a|f>F@z?@^}(WP}Ge;E1Rjn(a_mGCbhUZsEnfe<7M=lf@LH0J+SY zj||PsXn{Sn{_BO$$t$0L)s^LCwdcS1 z#%Px>zZ)$odpK2>leo)}pSLTAr74?s?Vj)7VS1nnlQBZtg!ZH$0xr_Dgw#}f7bZSn zvmnj{Y*1S2>eE_@;P$C^{s{R5Y^J|I%b0LPMMVjBK00ES#r^i@+rTp<>=*PcAj1c7 z7wk<#1IHN{@~Q{^(3)L8dUkSfJ;0-ivT5k=6XyGT^2O~Po@N9|-$sGEQbBQhHa70o z-cJSB>qVXprrrilPS+m9FuUL&-*~n7x;FbV^{nt9zI^Q6%mHya8qK;)ATn3z$@9!?}$L5X4 z%i%9?Ez@19p6760@6{dJ9-(30ByQpX1;-Qh+%oUWGf%3F9Jk#Wm?rt`ZnLnn50p$S zXJr|$MvdGzU%LKYA(<)3vtz|$zB2D%)aDc2oyZ=;-9jO?ncgNEHBmjVt^d)+9^K#Q z_!u$>CziGxWeKT;MtUKb6wH+W!6U;Hcfd6!BkH*Hp*yScp3YJzX*+2)Mo;<95~OAI zfI$YJYXTr{KtMz6HYYze?X}&&Y{YW^X&BuT8wN``h3% z3}_30k${81rpFr)WLrM54Vng9iY(!^LZbtwSAQ3+A7z!d-PZtbxX$k z&#j@^H2>&x=bW}Ub*r{Ny?PP(Nr%!0rh5b)0$t(&r~$tJ_~8y&eRU9Di1d>qb6X&? zZ*LpNK_kPToSFaDiT&YZ-IL4i{F|cZdvX8f);)~F5G5GoJakis3oZQZX&n$FVpg9PhAxMd%6QhJRteNK2Qa$-x$> zZl+VIV)s3y`rV_j_`AcY@omK|r*p|?G*vET&9HQ`k$$ye0z#h>;bbKDJ~2jS`3!k% zcd+jwOfAT}5QYOPAs{G6A~q`3l^|CE!r2Nqb9Hhlpl9_|$<>8JX zLK(aNTLx4(C)2y$vSMO4z;GNTYyM4D`d82xU-SuXK$l8CRVMy3cdRqzuU4DmInk@? zjmu=pGzN<`9Kq+&ylZ=ZUZPJYdRI0egabENWXwQ_W*?LP`E!3_$-!bBc0ZH-fP)z8 z1(7lvCyvlFAw!8wZJ&2TtH-a7ydIF%xBfNeMAr5eR|RpJ|A02i7m^aQKqZ zg5-|3x#_!0+DFp!fCkwiHV_5?YCWq(nrDYaVc_j`HzOlshg_?2Zb(Jc3?v4&6HBQQ z55Ub&D&YJ9;DEVZhuPks!j8VaRiG8X`-N=L07`I+T{)BUZ&|fx#7d2seOMPL<1V%x ze4_f)RNWVOj}4zC8{BQULb)UIuFu@x4QKH8>VutYVN`Awo4O9YncJQ-ITxe1YtB?2 zkB)siSs%hVQ?|R9Fk~~olU`9VSR9t?>swkuvUumM1poWrtD;K>v?qa! z6LyQY*wmCC%&L7`O`dw7_{tRJAoa~Bww_u;vS(ORKz)FA^A+ec085_VnIG#=3DrE5bq_n+G!9>GtVd#OOi}tr158_%i_m zjXQ=2`JcmIj&_A3m-uxBuqX>0ejUp~2#M_~&dV3s$4prc}D?(WI@ z(w3%n!ig!IfLETlS(oY}_iZz%DEg++JM*>1uAX3R`oM_7LJ%3`4jr5QaTNw~SNE#lX z2zrxs5*V-hB&QC3uFRyb_8!+c_x#S~{5sd2B$PWF+FwHP^O=8%$>UCmC++)QZ$$4a zaG?Al;tJ7enDtw5jz6}#6k!VfY@d?8c406W^)#{wi?Xlqwq(`VIwAfo>a_Qd4|Yx? zBYN9NH=|NglmMuj5=yMkw~|Knp%GfRUC%1?eI%{-)mFRIzZF*FpPw8hbcr#{o;LqX zr@4_6xRm7h^i>EU+w<;(P)Q<=O$^=2cs9T(UPy&}WZY-Oj);8i-~IA)f|iWYn@5Ye zZjY1cF^thLg}!12(L?`^z>**&$%Rpe&VFj>WRmL!O8LPe=~>I99PJBO8T_`WVIcfH z1!=cWXkbzu&I-1;*39?Zp;u>fGUOhX1h)ivyk@o~{(k>ZP8H%)q$ruCl&eC5I}lNc zepG5u<5e=>*kxGmHxXtoCbn3BT|x!nK44G;G1O0B+x89)Dw)EDyP<&rQ&Q}R6OB9- zc&I=g1G;O(2n^A?hiiLXy6^VNh%|w{zM*_+ylC6|$>P}+pVso(bnknjXN*bp^U+D~F^w=maKsakAGKyJ ztPx9mm-_gINLUB&$>{SArHeI117k)ji~1psDlC)?nVUELKcbUL#h%?e)WGVXFu1xw zO}H)jI0#4Q=>D$>EMLr)GLGPJznc_z`CwH0*3}>D3L$pQ`t-VQluli2ro_RuEDilW zq72ZQbc{sxIqm(q^;iMT+4nQydy;;_iaD-!R(w5beN0y zynLZr{~^F9g3n34Z>>Z(`afFMYn)$G#y5w~CF8FBt{!(VZ(ZVkb+K!0!R-q@ct+n? z_gqi!nY%kb4Cv%3#ts|_8^y_nkev!hjRd6AVPLcZJ25vmC(x3HxceaQ9r{n*VuE6= zkd_vol=u7)$^k-gz&p4>`v?a?kiUXn=5BIsq z`jzva_}a~j>Hm_-%e#bn2W$zJXj(&mL>q{TE1L@hE(>5v-_vbP`UvY^BD`bMPFl*Y zC0HK8O%|U2i{#ej-7(A3FYgEj`i;?@TPOtXqEYnq6P@E9o2295=0tC>MkTxZ27kYS ziFLrhTAHrzz~=w3!jCSBZ;B@0EdNR@vdk^3%V=z})!+XjCMM6osXFlRo?8B^ zXCF>q>?l3W7S~`S>f+R?|AJHf<+B=@B46^u@2hb#Y#G=^q9`G{tgAsaSjS(RT95R& zZwa3F*TrBf_6q;5%!(0WzvinUtwB zv80?IzdBJL{%FFxW_13t>{uA*-i>_PTX0(k7!qA9GXp569klksn?E02TAE>I<9^i^ z+am#umZ!#2-+#NTWGyT7oc-fg{A?zxqNbvUz*wg1QW!qPf3d<>*f6 zUqUh(y}%|ng$6_Rw!M+X*C$q#Lg~8kCi_cilNWWwubi@csj zLFSCq8K0F&6YyAG(#9w_ADmtetn0>g+P(Oiwz@bVDU!B(eDK!Cv!!JB=*oL%=58V; zS$zkk`o7*;`unFr+Lf5X0+|6KG6d2LW#59s`+qz`ONd;RF~ny6WL(6#m4rR2fE9K} zJY3nxYU0qlwhT^drfPP*+mlHI%Lbk#a-{#xNB*wcH_Cp!)Wav7(xFii5 zc&dcJwH=Me@gE!_N)Wdi7d>30SyUzW#{5Twn0H71_3+oLqkK`D4wIYg0B-P=8Ztq|q9R`L05RFkt~h}o>pLVnlvh{hfEWQ;tXw!2 zWmhw;(O*+avRTg}Z34n0vHpU|_&_q(Bo7AK%!< zCIt38GsYC?G)>8c%2$QfcooNpIRPf%GTH<=_!G5D>YQ*0fsI=diOEw{#etv~2#5F_ z6BC${LIx>^MSEs(QBgkt_df-3i(luLo5)585N2>sw7`^xEVKr$6AUQ}J3A%pX6YDq zh6O8d8X(pvVl&8K&V!&h@Jgh@(7m{`Gb1-DEO<1(*;a3F(;puZ@c{Cl5UD(XDPMF} zB4ded1cr0jZx|Xv7PEw$y!PbAlUpmjzBLJq_6P%PH$ZYXZmex=?2olvRg35G4d3~{H%o-j+-PWM@P`#(P-wn7 zvq6Ha{?uE@S{JRW#o0Q4WE!HCuceCf9sk8c8o!I+ww3dt+@`FHC9%|O-xgL-Gyx~dMSJ;1{d z<^uA7jo=%E)D%=eFrbIXdA$X(^M8+y>@I&OHjF36g{lTQDI8P)bUw42nG%qev#J=q2F8*gTV!eGj5iSXU3PN-H3c2wG?y z3W`}%&z=JK77n>brv_r%5;ZUttsM#wM|&*lfoE4h>%i|!9Y#m!1rU@5x-tXl&fhnA8OS&EHT zraJiWP2{ekJS|6mv=ArfXo-;)GU(#q?gfqt ztPK4n`huViLbhMAb8uMO9?-D7gY)aC7ax!fNHPVoUj^LH73cwe|I#(E$%TI0qRC zZ}q?iZ*1&vUHTG`buX-}1c786K(^w_(1I#O0Qrz-5f(PH1DRhuJ{1iIL$><7Z`SQpx%KL-IQ0e8gJ{t!6_sp^y>9%W8j9lH*Vd$37M>>AdU&w zGt)PFsp(M$@{T=Nt{@a=*K-eI4rhF>-(Ky7`^+u;zn0EDF6XImx}3mf1k}? zc-8N|f4}eVdtIOJb$zbS=dVi)_z3wYF$@C@{4&h&7ruWV%gu+>y@QIiIVju9)03ff ztxcQWd7W7!i?{p`Nf93a z9H~^A(jnYr>*~(bo&y+wrng^@K5UYx>gnm(vF+(J_53}M&5GE4%z(T7vg*6M)K zmXVcZi~Pp2Jnu6FRU6sg(du&r3lYGfsvAYAGU+Ua3Q4AGeDw_tV`((+rpz{o;P|ku zZDQlL_rb$Pjx-SBcX)QRwR<_=Jq|-*?m%6jXmm_WjGYfms!*aUmqp-gH!tYy+S54^ z(dw6O-D*#65B%&yPg|iM0a4G$$YGE6R~}@h-HeIsMmNy`+c8gy%s+AeVI{TfZDG0> zl>Z)K+AC};u1WoH4n+^eT^4RSEstRu8lFMkv{EwA4H~Fxi+$W#G!=F>)ZRCqGDU;U z`?-*pM_^$XB~`z-Pip*dPw*pI2^WsPh@PU9!LhJc)-c(~Nd4W5KkK@}J=c+B>FZ`K zPD)BLIQH$4kM$dK$9gI^N+dGg#w{lAQ!h6%FAxi*8DX9AOmw!*+=Te&kky4vcNqa4 z!3WBUXIoo)<$0ZQ9QZ2cHcJ+DE#a^zQ8e+X$RykuzDm67qcUw2zV6r&a| z#y>v({URdh@My-8$QMr=OTXd{TVKmGVj@d0Ry7c870R4$$|Kf9vL8@ z@5@Vrrr=ii4R=Qrap`sIy^x-+OWUZaxp^Hb>hutQoxU!k!py_9Q#LnUC5^+w?5#Zk z3MA_}6!f{ulzq|SZn}zHt+|DoX3HbbE%;FAc~&l$Uwb~KZjn)Bk9Wq$ z4}~>*oH5$2?(W4N9(In7s(gPT{RaSW<+zQ`hxL=N5n*9rL=MT8?Uo@&CIgTWmkivp zJY9MfWkNMx9ZH*d=FgV-`c|^%ZuP@@wyqxLJ7@ zcD;Orj=CmT0+A4WkCb5xq|&Kq(bra=RMg)|XIWEHQYuC|FwG+fS|mQi(b-8P#wf~1 zEsoR0Mxk4KY%x4_D7}45-X)DO_lxS8(ZvYXFZ=h~A~8%aQP0FgH4-0>FA^QULHmb7 zb@-3rIpcGjx95BeSKjC@=j>8w7yo*f-1BuPlHEe*nMoZ3AO}3j!Gi}|{9Y_poPV%@vvKH?cJK5*oSnp@}hBn8P~@1;xk96dTA zvckKbgeFW3dq1?;Al3gM&Z@DxGuXoW?c2AC(iG*J3{_pkWZVa&xZAKh%IoVjx$4bZ zx6Caq3u-3bQEc&=^~XWbAG$v)?w~FsXZCPh;XD3*HV6Af6G?zF@DIyXMA087j za=4+PVaE*B=((kfgenq)1{rQ9N9s@4M)JZS;k@^L22yxYP_*B6bWrD?#N2=^J=esB z#n<4I*%D@EW@Qx>ySQA3r4yT&1=h}1EbA!kkT+MhYTe^82}MEx1)#}N(eOH`}@1Pxn*rDjk7QSV2$)T*(I-R2xH=BLD)yBCE zHT2X5g6w5J>|9ktgIB3$3t(hgLxJi*Cnu*ir7sfGTyGWYKCbI)orV;Ve9b>A#2ORKu_YkqcD?C)V#R#tG=^ClCP?2o$WMx_BW>+jvODGuIe zXo&VV@MJiXOC(O7jQjf{NaIX_YhaRv2;YRb?&Kj4E74PY_~M0{5C}ITDc(z>63%!Z z;ivyNQ_}^1Oym%IR>V*SkA?WMaJK?VMqWRVC}7Ff`&2!IJty?iM-Wgimz71r@sgaM zzTxSA`w>iM&YGnxb$wa6XoEyz49L2D>cYC;!dwU$q6_)dzvbvk|t5RYdB%cu2Ha-z6@}F$=@DNY%u-Y&g zhXnCYiRSld#{d4kMwLU#zdsewZ&ZNezrP^gG1y|lKfkN*m97k4qc4jP`lvu(#}zAd zNn#s-)J4ww8C^(v9!^P_alrhHkBUk^o%yz3yOAT1 z*Pm@^X~_tufD!X zv5S#DzB!7@NBS@ROZ7IpfVr?Y8IL&u@e73nXAh5&qB^BSSBo0_^1 zu(|nt`x!<+ez8uNX@v$VoiFv_!*`OGfyF4Ptc3u`5a7{@pVwPV__mBFA*m}!u{Jzg zT>K>_pazpB4G9kqr&S$!eQCDx%}gi#y?O=)yZE`jiBG5Jx)?fgm$7tFg;XDiZToda z4C+A%oQ;amZ0^1>`D9Lens%^0ZIY?Sc*J&5z+gV za9w}`2l(x~Ry^nepWNBUP0Zcg&l&4}%1z?^Jtlf?pE+J$2kln-XWzV)LR}|&ai-?1 zFbfi1xk9lYT1H`?=WhR96yW5lGIZ$B)<4NJHy~1*Sz0EA1w{uq`NN{3&$%xtsY2#@ z94W*~=z)BsQ_88S@}uTR!ly}_ZdX^UN77QEYCzE_L2F+BgOhfFeDCCYTXD04%l1uh zT7s}FuAW-M_e?T19XMpj)*PYV8Q64qnuSFZ7gQm%{ngsqb9mD@Nnn7htNYRWz|l zzoE|U3;G0OA7ZrbtV zl~m*u^ZIVwxKYrzwu+_*ke*^d-J2ALgQ^X+3QhzxtR68W%>O=m`t%y_5zR?6euZzE zd;36GP)UHd|C9?KrY@4Do8SvzG;w12#fx9_h|+@NzHWZm4TGT1*{$y_dBcII>p9oT z%)d{&tJihs$VUnQMRwnT7I_y)i#wsh&u5*eF;zBx}& z+S_&Xod*R6Ii@dq@Z`yVTx6dvsVV$MRt5(H6vtXl zl-H`Nj&Z86>FvI~1bSr3sZV%{!oL-#yw%VfAR7tqRbpo}6!iIVeRwt=c>$}&>)(#S ztbr2&6ERZ0J!wiXQU&aw%z{fa9x4g`tCx9t9-y#NOr=1&em!DbDoA-7!{aTi{OxCp z3G#enij=9TI?xpb3xa@JyrR56wX&>6uVD?fqslPm6Gq=u@x;Uf1&N1Go*0GHItC1k zqhiEi6R$TTfGFTkOIur8R@9q5UMF?VxPN2rFN(g>vCjXG%S2m`u82U77;Pu>{X10n OGyj`~wgq#S@Ax0>$RWl6 diff --git a/source/ATK/sc/HelpSource/Guides/ATK-SynthDef-Examples.schelp b/source/ATK/sc/HelpSource/Guides/ATK-SynthDef-Examples.schelp deleted file mode 100644 index 8e069e916b..0000000000 --- a/source/ATK/sc/HelpSource/Guides/ATK-SynthDef-Examples.schelp +++ /dev/null @@ -1,582 +0,0 @@ -title:: SynthDef and NRT examples for ATK -summary:: SynthDef and NRT examples for ATK -categories:: Libraries>Ambisonic Toolkit -keyword::Atk - -section:: ATK with SynthDef and Synth - -For a more in-depth overview of the paradigm of ATK and a complete presentation -of its capabilities, see link::Guides/Intro-to-the-ATK::. These examples show a -limited set of the ATK's functionality, but illustrate how to work with the -library when using link::Classes/SynthDef##SynthDefs:: and -link::Classes/Synth##Synths::, and a single decoder that reads the Ambisonic -signal through audio bus routing. Additionally, examples for -link::Guides/Non-Realtime-Synthesis##Non-Realtime (NRT):: processing are found -in this guide. - -subsection:: Mono Encoder using FoaPanB - -link::Classes/FoaPanB:: encodes a monophonic input to a first order ambisonic -signal (B-format), as a planewave. link::Classes/PanB:: is the SuperCollider -inbuilt equivalent. - -This first example encodes a link::Classes/PinkNoise:: source as a planewave and -decodes to stereo. - - -code:: - -Server.default = s = Server.local.boot; - -( -var decoder; - -// First we will define our decoder -// stereo decoder -decoder = FoaDecoderMatrix.newStereo((131/2).degrad, 0.5); - -// next we define a synth using FoaPanB, and decoder using FoaDecode -SynthDef(\foaEncode1, { - var src, theta, phi, foa, out; - - // our source: pink noise - src = PinkNoise.ar(-6.dbamp); - - // theta is our angle on the X-Y plane and phi is our elevation - // use a MouseX to control theta in real time, from pi to -pi - theta = MouseX.kr(pi, -pi); - phi = 0; - - // Encode into our foa signal - foa = FoaPanB.ar(src, theta, phi); - - // decode our signal using our decoder defined above - out = FoaDecode.ar(foa, decoder); - - Out.ar(0, out); -}).add; -) - -// play the synth -a = Synth(\foaEncode1); - -//free the synth -a.free; -:: - -subsection:: Omni Encoder using FoaEncoderMatrix, Transforms using FoaTransform - -Encodes a monophonic input as an -link::Classes/FoaEncoderMatrix#*newOmni#omnidirectional:: soundfield, then -re-image via two transforms using the link::Classes/FoaTransform:: UGen wrapper. - -code:: - -( -var decoder, encoder; -// First we will define our decoder and encoder -// stereo decoder -decoder = FoaDecoderMatrix.newStereo((131/2).degrad, 0.5); - -// a matrix for an omni image -encoder = FoaEncoderMatrix.newOmni; - -// define a synth using FoaEncode and FoaDecode -SynthDef(\foaEncode2, { - var src, angle, azim, foa, out; - - // our source: Pink Noise (could be any mono signal) - src = PinkNoise.ar(-6.dbamp); - - - // for the 'push' transform later - // see FoaPush help for details - // angle ---> top = push to plane wave - // bottom = omni-directional - angle = MouseY.kr(pi/2, 0); - - - // for 'rotate' transform - // azimuth -> hard left = back - // centre = centre - // hard right = back - azim = MouseX.kr(pi, -pi); - - - // Encode into our foa signal - foa = FoaEncode.ar(src, encoder); - - - // push transform using angle - foa = FoaTransform.ar(foa, 'pushX', angle); - - // rotate transform using azim - foa = FoaTransform.ar(foa, 'rotate', azim); - - - // decode our signal - out = FoaDecode.ar(foa, decoder); - - - Out.ar(0, out); -}).add; - -) - -// play the synth -a = Synth(\foaEncode2); - -// free the synth -a.free; - -:: - - -subsection:: Route Encoding Synth to a separate Decoding Synth - -Encode a planewave, and route to a single decoder: - -code:: - -( -var decoder; - -// define our deocder -decoder = FoaDecoderMatrix.newStereo((131/2).degrad, 0.5); - -// allocate four channels for routing -a = Bus.audio(s, 4); - -// Encoding Synth -SynthDef(\foaEncode3, {arg outBus, duration = 0.05, theta, phi; - var src, foa, env; - - // our mono source - src = PinkNoise.ar(-6.dbamp); - - // amplitude scaling envelope - env = EnvGen.kr( - Env([0, 1, 0], [0.5, 0.5], \sin), - timeScale: duration, - doneAction: 2); - - // Encode into our foa signal - foa = FoaPanB.ar(src, theta, phi, env); - - Out.ar(outBus, foa); -}).add; - -// Decoding Synth -SynthDef(\foaDecode, {arg inBus; - var foa, out; - - // read in 4 channels (B-format) from inBus - foa = In.ar(inBus, 4); - - // decode to stereo - out = FoaDecode.ar(foa, decoder); - - Out.ar(0, out); -}).add; - -) - - -// start the decoder, reading bus 'a' at the \tail -b = Synth(\foaDecode, [\inBus, a], 1, \addToTail); - -// use a Routine to start many encoded signals at random angles -Routine.run({ - 20.do({ - Synth(\foaEncode3, [\outBus, a, \theta, pi.rand2, \phi, 0]); - 0.1.wait; - }) -}); - - -b.free; // free the decoder -a.free; // free the audio bus - -:: - -section:: Kernel Decoders and Encoders - -subsection:: B-format Sound File and Binaural Decoder - -In this example we're working with a B-format sound file. As the source is -already encoded, an encoding stage is not needed. For audition, a -link::Classes/FoaDecoderKernel#*newListen#binaural (HRTF) decoder:: is used. -This decoder takes a subjectID as an argument. It would be wise to experiment -with various subjectIDs to discover which suits your own head. - -code:: - - -( -var cond, decoder, sndbuf, synth; - -// boot the server -s.boot; - -// wait for the server to boot -cond = Condition.new; -s.waitForBoot({ - - - Routine.run({ - - // define a binaural decoder - decoder = FoaDecoderKernel.newListen(1013); - - // load sound file into a buffer - sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Pampin-On_Space.wav"); - - s.sync(cond); - - // synth to decode our B-format sound file - SynthDef(\kernelDecode, {arg buffer; - var out, src; - - // play B-format sound file - src = PlayBuf.ar(sndbuf.numChannels, buffer, BufRateScale.kr(buffer), loop: 1); - - // decode using decoder - out = FoaDecode.ar(src, decoder); - - - Out.ar(0, out); - }).add; - - s.sync(cond); - - synth = Synth(\kernelDecode, [\buffer, sndbuf]); - - // press command period when done - CmdPeriod.doOnce({ - synth.free; - decoder.free; - sndbuf.free - }); - }) -}) -) - -:: - -subsection:: Encode an Ambisonic UHJ Stereo File, Decode to HRTF - -link::https://en.wikipedia.org/wiki/Ambisonic_UHJ_format##Ambisonic UHJ:: is -the stereo compatible Ambisonic format, and a suitable Ambisonic B-format -signal can be retrieved from UHJ encoded signals. footnote:: -See further discussion -link::https://en.wikipedia.org/wiki/Ambisonic_UHJ_format##here::. -:: - -Here we will encode (emphasis::transcode::, actually!) a UHJ Stereo file to -B-format. For audition, a -link::Classes/FoaDecoderKernel#*newListen#binaural (HRTF) decoder:: is used. -This decoder takes a subjectID as an argument. It would be wise to experiment -with various subjectIDs to discover which suits your own head. suits your own -head. - -code:: -( -var cond, encoder, decoder, sndbuf, synth; - -// boot the server -s.boot; - -// wait for the server to boot -cond = Condition.new; -s.waitForBoot({ - - Routine.run({ - - // define an UHJ encoder - encoder = FoaEncoderKernel.newUHJ; - - // define an HRTF decoder - decoder = FoaDecoderKernel.newListen(1013); - - // load a UHJ sound file into a buffer - sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/uhj/Palestrina-O_Bone.wav"); - - s.sync(cond); - - // synth to encode a UHJ file and decode using an HRTF - SynthDef(\kernelEncodeDecode, {arg buffer; - var out, src, encode; - - // our stereo source signal - src = PlayBuf.ar(sndbuf.numChannels, buffer, BufRateScale.kr(buffer)); - - // encode using a UHJ encoder - encode = FoaEncode.ar(src, encoder); - - // decode using an HRTF decoder - out = FoaDecode.ar(encode, decoder); - - Out.ar(0, out); - }).add; - - s.sync(cond); - - // play the synth - synth = Synth(\kernelEncodeDecode, [\buffer, sndbuf]); - - // press command period when done - CmdPeriod.doOnce({ - synth.free; - encoder.free; - decoder.free; - sndbuf.free}); - }) -}) -) -:: - -section:: ATK in Non-Realtime - -subsection:: ATK and Score - -In many cases, examples using link::Classes/Score:: are often trickier due to -the need for the use of link::Guides/Bundled-Messages##bundles::. Since the -Kernels footnote:: -link::Classes/FoaEncoderKernel:: and link::Classes/FoaDecoderKernel:: -:: also pass in hardcoded buffer IDs, we need to make sure those are referenced, -as well. - -The example below decodes a B-format input file to Stereo Ambisonic UHJ using -the ATK's link::Classes/FoaDecoderKernel#*newUHJ:: decoder. - -code:: -( -var score, bufnum, sndPath, duration, decoder, sampleRate, headerFormat, sampleFormat, numChannels; -var offset = 0.1; - -// deinfe our score -score = Score.new; - -// get a buffer number from the server -bufnum = Server.default.bufferAllocator.alloc(1); - -// the path to our B-Format sound file -sndPath = Atk.userSoundsDir ++ "/b-format/Pampin-On_Space.wav"; - -// get some info about the soundfile we are decoding for the Score requirements -SoundFile.use( - sndPath, - {arg soundFile; - headerFormat = soundFile.headerFormat; - sampleFormat = soundFile.sampleFormat; - sampleRate = soundFile.sampleRate; - numChannels = soundFile.numChannels; - duration = soundFile.duration; - } -); - -// define a decoder of your choosing -// the decoder takes a score argument so that it will add the kernels to the score for you -decoder = FoaDecoderKernel.newUHJ( - sampleRate: sampleRate, - score: score -); - -// define an encoding and decoding synth -SynthDef(\kernelDecode, {arg buffer; - var out, src; - - // play B-format sound file from a buffer - src = PlayBuf.ar(numChannels, buffer, BufRateScale.kr(buffer)); - - // decode our B-format signal - out = FoaDecode.ar(src, decoder); - - Out.ar(0, out); -}).load; - -score.add( - [ 0.0, - [ 'b_allocRead', bufnum, sndPath, 0, 0 ], - [ 's_new', 'kernelDecode', 1001, 0, 1, 'buffer', bufnum ] - ], -); - -// add commands to free the synth and buffer -score.add([ duration, [ 'n_free', 1001 ] ],); -score.add([ duration + 0.1, [ 'b_free', bufnum ] ],); - -// free the kernel buffers -decoder.kernel.do({arg bufs; - bufs.do({arg buf; - offset = offset + 0.1; - score.add([ duration + offset, [ 'b_free', buf.bufnum ]]) - }); -}); - -// add the needed dummy command to stop NRT -score.add([offset + duration + 0.2, [0]] ); - -// render our score to a sound file -score.recordNRT( - "/tmp/trashme", - "~/Desktop/myDecode.wav".standardizePath, - sampleRate: sampleRate, - headerFormat: headerFormat, - sampleFormat: sampleFormat, - options: ServerOptions.new.numOutputBusChannels_(decoder.numChannels) -); - -) -:: - - -subsection:: ATK and the Composer's Toolkit (Ctk) - -The -link::https://github.com/supercollider-quarks/Ctk##Composer's Toolkit:: (Ctk) -link::Guides/UsingQuarks##quark:: offers a convenient model for working in a -score based paradigm in both Realtime and Non-Realtime. - -The example here, link::#ATK and Score#as above::, decodes a B-format input -file to Stereo Ambisonic UHJ using the ATK's -link::Classes/FoaDecoderKernel#*newUHJ:: decoder. - - -code:: -( -var score, sndbuf, sndPath, decoder, synth, duration, sampleRate, headerFormat, sampleFormat, numChannels; - -// define our CtkScore -score = CtkScore.new; - -// the path to our B-Format sound file -sndPath = Atk.userSoundsDir ++ "/b-format/Pampin-On_Space.wav"; - -// get some info about the soundfile we are decoding for the Score requirements -SoundFile.use( - sndPath, - {arg soundFile; - headerFormat = soundFile.headerFormat; - sampleFormat = soundFile.sampleFormat; - sampleRate = soundFile.sampleRate; - numChannels = soundFile.numChannels; - duration = soundFile.duration; - } -); - -// define a CtkBuffer and add it to our score -sndbuf = CtkBuffer.playbuf(sndPath).addTo(score); - -// define a decoder of your choosing -// the decoder takes a score argument so that it will add the kernels to the score for you -decoder = FoaDecoderKernel.newUHJ( - sampleRate: sampleRate, - score: score -); - -// define a CtkSynthDef -synth = CtkSynthDef(\kernelDecode, {arg buffer; - var out, src; - - // play a sound file from a buffer - src = PlayBuf.ar(numChannels, buffer, BufRateScale.kr(buffer)); - - // decode our B-format sound file - out = FoaDecode.ar(src, decoder); - - Out.ar(0, out); -}); - -// create a synth note and add it to the score -score.add( - synth.note(0.0, duration).buffer_(sndbuf) -); - -// write our score to disk -score.write("~/Desktop/myDecode.wav".standardizePath, - sampleRate: sampleRate, - headerFormat: headerFormat, - sampleFormat: sampleFormat, - options: ServerOptions.new.numOutputBusChannels_(decoder.numChannels) -); -) -:: - -And, this example uses both a Kernel -link::Classes/FoaEncoderKernel##Encoder:: and -link::Classes/FoaDecoderKernel##Decoder::. First an -link::https://en.wikipedia.org/wiki/Ambisonic_UHJ_format##Ambisonic UHJ:: soundfile -is encode to B-format. Then, it is decoded using the ATK's -link::Classes/FoaDecoderKernel#*newListen#binaural (HRTF) decoder:: decoder. - -code:: -( -var score, sndbuf, sndPath, encoder, decoder, synth, duration, sampleRate, headerFormat, sampleFormat, numChannels; - -// define our CtkScore -score = CtkScore.new; - -// the path to our B-Format sound file -sndPath = Atk.userSoundsDir ++ "/uhj/Palestrina-O_Bone.wav"; - -// get some info about the soundfile we are decoding for the Score requirements -SoundFile.use( - sndPath, - {arg soundFile; - headerFormat = soundFile.headerFormat; - sampleFormat = soundFile.sampleFormat; - sampleRate = soundFile.sampleRate; - numChannels = soundFile.numChannels; - duration = soundFile.duration; - } -); - -// define a CtkBuffer and add it to our score -sndbuf = CtkBuffer.playbuf(sndPath).addTo(score); - -// define the UHJ encoder -// the decoder takes a score argument so that it will add the kernels to the score for you -encoder = FoaEncoderKernel.newUHJ( - sampleRate: sampleRate, - score: score -); - -// define a decoder of your choosing -// the decoder takes a score argument so that it will add the kernels to the score for you -decoder = FoaDecoderKernel.newListen( - subjectID: 1013, - sampleRate: sampleRate, - score: score -); - -// define a CtkSynthDef -synth = CtkSynthDef(\kernelEncodeDecode, {arg buffer; - var out, encoded, src; - - // play a sound file from a buffer - src = PlayBuf.ar(numChannels, buffer, BufRateScale.kr(buffer)); - - // encode our UHJ sound file - encoded = FoaEncode.ar(src, encoder); - - // decode our B-format sound file - out = FoaDecode.ar(encoded, decoder); - - Out.ar(0, out); -}); - -// create a synth note and add it to the score -score.add( - synth.note(0.0, duration).buffer_(sndbuf) -); - -// write our score to disk -score.write("~/Desktop/myDecode.wav".standardizePath, - sampleRate: sampleRate, - headerFormat: headerFormat, - sampleFormat: sampleFormat, - options: ServerOptions.new.numOutputBusChannels_(decoder.numChannels) -); -) -:: diff --git a/source/ATK/sc/HelpSource/Guides/Guide-to-ATK-Matrix-Files.schelp b/source/ATK/sc/HelpSource/Guides/Guide-to-ATK-Matrix-Files.schelp deleted file mode 100644 index 4137102abb..0000000000 --- a/source/ATK/sc/HelpSource/Guides/Guide-to-ATK-Matrix-Files.schelp +++ /dev/null @@ -1,500 +0,0 @@ -title:: Guide to ATK Matrix Files -summary:: A guide to reading, writing, and storing ATK matrices. -categories:: Libraries>Ambisonic Toolkit - - -SECTION:: Directory Structure - -The ATK store assets in its Application Support directory: -code:: -Atk.userSupportDir -:: -This includes three default directories: -list:: -##strong::kernels:: (FIR filters for kernel en/decoders), -##strong::sounds:: (example sound files in A-format, B-format, &c.), -##strong::matrices:: (for encoding, decoding, xforming). -:: -These folders store the files shipped with the ATK. -You can also optionally add your own code::extensions:: folder, -in which you can store kernels and matrices of your own design. -Note this is different from SuperCollider's code::Extensions:: folder. -If you haven't yet added an code::extensions:: directory, you can see where -to put it by executing the following method: -code:: -Atk.userExtensionsDir // view it -Atk.userExtensionsDir.openOS // open it... if it exists! -:: - -There's a handy method that will build it for you in the expected structure: -code:: -Atk.createExtensionsDir -:: - -This will create a directory structure that lives in your next to your default -ATK assets. Note this creates both a strong::matrices:: folder structure, -and an identical strong::kernels:: folder structure for storing your custom kernels. -The full structure will look like this: -tree:: - ## teletype::Application Support:: - tree:: - ## teletype::ATK:: - tree:: - ## teletype::kernels:: (ATK default) - ## teletype::matrices:: (ATK default) - ## teletype::sounds:: (ATK default) - ## teletype::extensions:: (your custom additions) - tree:: - ## teletype::kernels:: - ## teletype::matrices:: - tree:: - ##teletype::FOA:: - tree:: - ##teletype::decoders:: - tree:: - ##myDecoderMatrix.txt - ##myDecoderMatrixForReaper.mosl.txt - ##myDecoderMatrixWithMetadata.yml - :: - ##teletype::encoders:: - ##teletype::xformers:: - :: - ##teletype::HOA1:: - ##teletype::HOA2:: - ##teletype::...:: - ##teletype::HOAN:: - :: - :: - :: - :: -:: -Each of the folders (code::FOA>encoders::, code::HOA5>decoders::, etc.) are -empty and ready to store matrices (and kernels) for use with the ATK-SC3 (this package) -and link::http://www.ambisonictoolkit.net/download/reaper/##ATK-Reaper:: (more -on that later). When you write a matrix using the ATK, it -will store it in this directory structure by default, and will look here by -default when asked to read in a matrix from file. - -You can view this structure and any files you've stored there using the following method: -code:: -Atk.postMyMatrices(); // All sets, all matrices types -Atk.postMyMatrices('FOA'); // FOA matrices hierarchy -Atk.postMyMatrices('FOA', 'encoders'); // FOA encoders only -Atk.postMyMatrices('FOA', 'decoders'); // FOA decoders only -Atk.postMyMatrices('FOA', 'xformers'); // FOA xformers only -:: - -Each of these matrix subdirectories can have further subdirectories at your -discretion, e.g. for particular projects or categories of matrices. - -SECTION::Writing Matrices - -We'll start by writing a matrix file. - -Let's create a first order A-format encoding matrix from a nine-point -link::https://en.wikipedia.org/wiki/Spherical_design##spherical t-design::. For -our purposes, we'll use a spherical designs with emphasis::d:: = 2, giving a -collection of uniformly distributed points on a sphere. -The t-design we're using below can be found in Hardin and Sloan's -link::http://neilsloane.com/sphdesigns/dim3##Library of 3-D Designs::. -footnote::Hardin, R. H. and Sloane, N. J. A., "Sperical Designs", http://neilsloane.com/sphdesigns/, accessed on July 29, 2016.:: - -code:: -( -// Spherical coordinates of the nine-point t-design. -~directions = [ - [ 0, 45 ], [ 120, 45 ], [ -120, 45 ], - [ 0, 0 ], [ 120, 0 ], [ -120, 0 ], - [ 0, -45 ], [ 120, -45 ], [ -120, -45 ] -].degrad; - -// Here's our 9-point A-format to B-format (planewave, aka velocity) encoder: -~encoder = FoaEncoderMatrix.newDirections(~directions); -) -:: - -This link::Classes/FoaEncoderMatrix:: is now ready to be used for encoding -planewaves arriving from those nine uniformly distributed incidences. Within -the ATK's classification hierarchy, code::~encoder:: looks like this: - -table:: - ## strong::set:: || strong::type:: || strong::op:: || strong::kind:: - ## code::'FOA':: || code::'encoder':: || code::'matrix':: || code::'dirs':: -:: - -For fun, let's inspect: - -code:: -( -var methodsToInspect = ['class', 'set', 'type', 'op', 'kind' ]; - -methodsToInspect.do({arg item; (item.asString ++ " : " ++ ~encoder.perform(item)).postln;}) -) -:: - - -After all that hard work (thanks ATK!), we want to store the result to a file for -use in the future, and to use in -link::http://www.ambisonictoolkit.net/download/reaper/##ATK-Reaper:: plugins! -footnote::ATK-Reaper will support matrix loading in an upcoming release.:: - -There are three available file formats, each with a special purpose: - -list:: -##code::.txt:: : the most basic text file, writing the raw matrix only. -##code::.yml:: : store the matrix along with metadata in a human readable format. -##code::.mosl.txt:: : a text file formatted for use with ATK-Reaper JSFX-plugins. -:: - -Let's write this encoder matrix out in all three formats: - -code:: -// .txt extension writes the matrix only -~encoder.writeToFile("my9PointEncoder.txt"); - -// .yml writes metadata as well -~encoder.writeToFile("my9PointEncoder.yml"); - -// .mosl.txt writes matrix only, single lines for Reaper to read -~encoder.writeToFile("my9PointEncoder.mosl.txt"); -:: - -Because we only specified a file name, not a full path, -the ATK will store the matrix in the default location. -As we're writing an link::Classes/FoaEncoderMatrix::, ATK can infer that -it's an strong::encoder:: in the strong::FOA:: set. (We also know, we're dealing -with a strong::matrix:: operation.) -Therefore, the ATK knows to put it in: code::../extensions/matrices/FOA/encoders::. - -Had we specified a full path instead, it would have saved to that location. - -code:: -// Here are our encoders (defaults to showing the FOA set) -Atk.postMyMatrices('FOA', 'encoders'); -:: - - -SUBSECTION::Writing Metadata - -Because this matrix encoder is somewhat unique, it would be helpful to provide a bit more information -about it for future reference. This is where the code::.yml:: file format comes in. - -Note that the link::Classes/AtkMatrix#-writeToFile:: method has some optional -arguments: code::note:: and code::attributeDictionary::. A code::note:: can be a -brief description, while an code::attributeDictionary:: is a Dictionary for storing any -info you'd like in the form of key:value pairs. - -code:: -( -// A 'note': a description or note about the matrix. -~note = "This is a nine-point t-design encoder made for a matrix file writing demo."; - -// A Dictionary of more metadata to add. -~properties = ( - author: "Me, the Reader", - dateCreated: Date.getDate.stamp, - ordering: 'FuMa', - normalisation: 'MaxN', - dirInputs: ~directions -); -) -:: - -NOTE:: -If keys in the strong::attributeDictionary:: match instance variables of FoaEncoderMatrix, -they can be retrieved with getters once loaded from the file. This is the case for -strong::dirInputs:: specified in the code::~properties:: dictionary above. -We'll see the effect this has below. -:: - -Now write this matrix and metadata to file... -Be sure to specify the code::.yml:: extension in order to write the metadata. -Set strong::overwrite:: code::= true:: to force overwrite the file we wrote before with -the same name and extension. - -code:: -( -~encoder.writeToFile( "my9PointEncoder.yml", - note: ~note, - attributeDictionary: ~properties, - overwrite: true -) -) -:: - -SUBSECTION:: Writing Raw Matrices -In the above examples, we've been reading/writing matrices encapsulated in -the link::Classes/AtkMatrix:: subclasses. When writing from these objects, some the information -can be inferred from them, such as the strong::set:: (Ambisonic order, -channel ordering, channel normalisation, e.g. code::'FOA'::, code::'HOA3'::, -etc.) and strong::type:: of matrix (e.g. code::'encoder', 'decoder', 'xformer'::). -In the case of a raw matrix, you must cast it to an code::AtkMatrix::, specifying the -strong::set:: and strong::type:: explicitly, before writing it to a file. - -code:: -( // Here's a raw A-to-B encoder matrix: -~matrix = Matrix.with([ - [ 0.61237243569579, 0.61237243569579, 0.61237243569579, 0.61237243569579 ], - [ 0.5, 0.5, -0.5, -0.5 ], - [ 0.5, -0.5, 0.5, -0.5 ], - [ 0.5, -0.5, -0.5, 0.5 ] -]) -) -:: - -Metadata is useful to record more information about the matrix: - -code:: -( -~note = "A 4-channel A-to-B encoder matrix, in Front-Left-Up orientation."; - -// A Dictionary of more metadata to add. -~properties = ( - author: "Me, the Reader", - dateCreated: Date.getDate.stamp, - ordering: 'FuMa', - normalisation: 'MaxN', - dirInputs: [ [ 0.78539816339745, 0.61547970867039 ], [ -0.78539816339745, -0.61547970867039 ], [ 2.3561944901923, -0.61547970867039 ], [ -2.3561944901923, 0.61547970867039 ] ] -); -) -:: - -Be sure to specify the strong::set:: and strong::type:: when creating an -code::AtkMatrix:: from your code::Matrix::. This is how the ATK will know where -to store the file by default (unless a full path is provided to the file name -argument). - -code:: -( -~atkMatrix = ~matrix.asAtkMatrix('FOA', 'encoder'); // set, type -// be sure to use .yml extension for metadata -~atkMatrix.writeToFile("myA2B_flu_Matrix.yml", ~note, ~properties); -) -:: - -NOTE:: If providing a file path relative to your code::/ATK/extension/matrices/...:: -directory, strong::set:: and strong::type:: arguments are necessary when creating the -code::AtkMatrix:: from your code::Matrix:: in order to locate the -proper directory to store your file. If providing an absolute file path, -strong::set:: and strong::type:: are recommended but not strictly enforced. This -allows storing matrices outside the ATK paradigm, e.g. VBAP matrices, etc. -:: - -There it is: -code:: -Atk.postMyMatrices('FOA', 'encoders'); -:: - -SUBSECTION:: Subfolders: Organizing your matrices - -If you'll be generating many matrices, it's advisable to organize your matrices into -subfolders. For example, if you're algorithmically generating hundreds of matrices -for a particular project or process, it makes sense to store them in a subfolder. - -To do this, you can create subfolders inside your code::/encoders::, code::/decoders::, -and code::/xformers:: folders. - -code:: -// Store your encoder matrix with the other encoders, which live here: -Atk.getMatrixExtensionSubPath('FOA', 'encoders'); - -// You can make subfolder for a group of matrices, say, for a particular project: -( -~projSubFolderName = "myProject"; - -File.mkdir( Atk.getMatrixExtensionSubPath('FOA', 'encoders').fullPath +/+ ~projSubFolderName ) -) - -// For convenience, we'll write the 9-point ~encoder matrix, -// which we created above, to a new file in your new project folder. -// (We'll need to reset ~note and ~properties, as we clobbered them above!) -( - -// A 'note': a description or note about the matrix. -~note = "This is a nine-point t-design encoder made for a matrix file writing demo."; - -// A Dictionary of more metadata to add. -~properties =  ( -    author: "Me, the Reader", -    dateCreated: Date.getDate.stamp, -    ordering: 'FuMa', -    normalisation: 'MaxN', -    dirInputs: ~directions -); - -~encoder.writeToFile(~projSubFolderName +/+ "projectEncoder1.yml", - note: ~note, - attributeDictionary: ~properties -) -) -:: - -NOTE:: Remember that because code::~encoder:: is an link::Classes/FoaEncoderMatrix::, -the strong::set:: (code::'FOA'::) and strong::type:: (code::'encoder'::) -arguments are inferred. -:: - -code:: -// There it is, in the 'myProject' subdirectory. -Atk.postMyMatrices('FOA', 'encoders') -:: - -Later you'll use link::Classes/FoaEncoderMatrix:: to read the file back in. -ATK will know where to look ( code::extensions/matrices/enocoders/FOA:: ) -so you can simply specify the emphasis::relative:: path of your code::subfolder/file.yml::: - -code:: -~projectEncoder1 = FoaEncoderMatrix.newFromFile(~projSubFolderName +/+ "projectEncoder1.yml"); - -~projectEncoder1.info; -:: - -SECTION:: Reading Matrices - -We wrote three encoder matrix files earlier. Let's now read them in. As when writing, -the ATK looks in the strong::extensions/matrices:: directory by default. Unless -the matrix file is somewhere outside the default location, a filename -will suffice to read it in. The strong::type:: (code::'encoder'::, code::'decoder'::, -code::'xformer'::) is inferred from the object being instantiated. - -We can even omit the file extension if we don't expect multiple file -emphasis::formats:: (code::.txt, .yml, .mosl.txt::) stored under the same emphasis::name::: - -code:: -~encoder = FoaEncoderMatrix.newFromFile("my9PointEncoder") -// >> ERROR: It sees we have more than one file with that name. -:: - -So, we'll need to specify the extension. As mentioned before, each file format -determines what kind of information is stored in the file. - -Lets have a look at what each file format gives us back: - -code::.txt:: format: -code:: -// Reading the .txt file, we just get a matrix and basic info. -~encoder = FoaEncoderMatrix.newFromFile("my9PointEncoder.txt"); - -// All the standard instance vars are preserved. -~encoder.matrix; -~encoder.kind; // Defaults to filename -~encoder.dirOutputs; // Outputs are inf, becuase the output is b-format, i.e "all directions". -~encoder.dirInputs; // With no metadata, we can't know input directions, so 'unspecified' -~encoder.dirInputs.size;// ...but knowing how large the array is tells us how many inputs the matrix expects -~encoder.dim; // We see it's a 3-D matrix -:: - -code::.mosl.txt:: format: -code:: -// reading the mosl.txt file, we just get a matrix and basic info -~encoder = FoaEncoderMatrix.newFromFile("my9PointEncoder.mosl.txt"); - -// all the standard instance vars are preserved -~encoder.matrix; -~encoder.kind; // Defaults to filename -~encoder.dirOutputs; // inf, by nature of encoding to b-format -~encoder.dirInputs; // With no metadata, we can't know input directions -~encoder.dim; -:: - -code::.yml:: format: -code:: -// reading the .yml file, we get the matrix plus metadata -~encoder = FoaEncoderMatrix.newFromFile("my9PointEncoder.yml"); - -// all the standard instance vars are preserved -~encoder.matrix; -~encoder.kind; -~encoder.dirOutputs; -~encoder.dim; - -// NOTE: because we provided the 'dirInputs' to the attributeDictionary -// when we wrote it to file, we now have that info for reference. Useful! -~encoder.dirInputs; - - -// Plus the other data written to it: -~encoder.info; // Formatted post - -// Metadata is loaded as an IndentityDictionary, so values -// from the attributeDictionary can be accessed by their -// keys as pseudo-methods. -~encoder.fileParse; // For direct access to the dictionary of values -~encoder.fileParse.note; // What was this matrix again?? Oh yea... -~encoder.fileParse.ordering; -~encoder.fileParse.keysValuesDo{|k,v| postf("% : %\n", k, v)}; -:: - - -SUBSECTION:: Test case: Creating a decoder from an FoaEncoderMatrix - -We've now instantiated a new code::~encoder:: by reading in the file that stored -the matrix that we originally built using the planewave encoder: -link::Classes/FoaEncoderMatrix#*newDirections:: (using the points of a nine-point t-design). -As it turns out, a matrix emphasis::encoder:: created by -link::Classes/FoaEncoderMatrix#*newDirections:: can be used to build -a emphasis::decoder:: of the same geometry. footnote::Recall -the ATK's matching A-format link::Classes/FoaEncoderMatrix#*newAtoB#encoders:: and -link::Classes/FoaDecoderMatrix#*newBtoA#decoders::!:: -Doing so just involves performing the link::Classes/Matrix#-pseudoInverse:: on the -encoder's Matrix. footnote::This decoder design method is often described -as emphasis::pseudo-inverse:: or emphasis::mode-matching::.:: - -code:: -// Retrieve the Matrix object stored in the FoaEncoderMatrix -// (Should be the 9-point t-design from above!) -~encoderMatrix = ~encoder.matrix; - -// Perform the pseudoinverse on that matrix to find decoding coefficients -~decoderMatrix = ~encoderMatrix.pseudoInverse; -:: - -Using these coefficients will return a code::'velocity':: decode (aka "strict -soundfield" or "basic"). Loudspeakers should be positioned in the following -directions (and in this order): -code:: -~encoder.dirInputs.do{|azElPairs, i| postf("chan %: %\n", i, azElPairs.raddeg) } -:: - - -NOTE:: -Because we're inverting an encoder to produce a decoder, the original -emphasis::input directions:: of the strong::encoder:: will now be the -emphasis::output directions:: of the strong::decoder::. -The channel ordering will be in the same order the input directions were -specified in the encoder. Therefore, in the above code we query the -emphasis::encoder:: for its code::-dirInputs:: to know where our output channel -signals are expected to be sent (in space!). -:: - -It's important to note here that the code::~decoderMatrix:: matrix is a link::Classes/Matrix:: object, -not an link::Classes/FoaDecoderMatrix:: object. As such, we'll need to use care when building -the decoding SynthDef. Instead of using the link::Classes/FoaDecode:: UGen -(which expects an FoaDecoderMatrix or FoaDecoderKernel decoder), -we'll use the link::Classes/AtkMatrixMix:: UGen, which will decode our B-format -signal by using our newly authored decoding Matrix, code::~decoderMatrix::. - -code:: -( -~decoderDef = SynthDef(\pinv_decoder, { arg outbus=0, amp=1; - var foa, out; - - // Test signal: panning noise - foa = FoaPanB.ar( PinkNoise.ar, LFSaw.kr( 12.reciprocal, 1 ), 0 ); - - // ~decoderMatrix is just a Matrix of decoding coefficients, so we use AtkMatrixMix - out = AtkMatrixMix.ar(foa, ~decoderMatrix, amp); - - Out.ar(outbus, out); - -}).load(Server.default); -) - -~decoderSynth = Synth(\pinv_decoder, [\outbus, 0, \amp, -8.dbamp]); - -// Scope the 9 channels of the decoded output -s.scope(9, 0); - -// Clean up -~decoderSynth.free; -:: diff --git a/source/ATK/sc/HelpSource/Guides/Intro-to-the-ATK.schelp b/source/ATK/sc/HelpSource/Guides/Intro-to-the-ATK.schelp deleted file mode 100644 index 54b9cd68ad..0000000000 --- a/source/ATK/sc/HelpSource/Guides/Intro-to-the-ATK.schelp +++ /dev/null @@ -1,467 +0,0 @@ -title:: Introducing the Ambisonic Toolkit -summary:: Introduction to the Ambisonic Toolkit -categories:: Libraries>Ambisonic Toolkit -keyword::Atk - -section:: The paradigm - -The Ambisonic Toolkit (ATK) brings together a number of classic and novel tools and transforms for the artist working with Ambisonic surround sound and makes these available to the SuperCollider3 user. The toolset in intended to be both ergonomic and comprehensive, and is framed so that the user is encouraged to ‘think Ambisonically’. By this, it is meant the ATK addresses the holistic problem of creatively controlling a complete soundfield, allowing and encouraging the artist to think beyond the placement of sounds in a sound-space (sound-scene paradigm). Instead the artist is encouraged to attend to the impression and imaging of a soundfield, therefore taking advantage of the native soundfield-kernel paradigm the Ambisonic technique presents. - -The ATK's production model is illustrated below: - -image::atknetwork.png#ATK paradigm:: - -Here you'll see that the ATK breaks down the task of working with Ambisonics into three separate elements: - -definitionlist:: -## Author || Capture or synthesise an Ambisonic soundfield. -## Image || Spatially filter an Ambisonic soundfield. -## Monitor || Playback or render an Ambisonic soundfield. -:: - -The below sections go into more detail as to the specifics of each task. For examples that show more concise examples for usage in SynthDef and NRT, see link::Guides/ATK-SynthDef-Examples:: - - -section:: Authoring - -Most users approaching Ambisonics are usually presented with two avenues to author an Ambisonic soundfield: capture a natural soundfield directly with a Soundfield microphone, footnote::J.-M. Batke, "The B-Format Microphone Revised," presented at the Ambisonics Symposium 2009, Graz, 2009. -:: or author a planewave from a monophonic signal. footnote::D. G. Malham and A. Myatt, "3-D Sound Spatialization using Ambisonic Techniques," Computer Music Journal, vol. 19, no. 4, pp. 58-70, 1995.:: SuperCollider's inbuilt link::Classes/PanB:: provides the latter solution. - -The ATK provides a much wider palate of authoring tools via link::Classes/FoaEncode::. These include: - -list:: -## emphasis::planewave: :: classic directional encoding -## emphasis::omnidirectional: :: a soundfield from everywhere -## emphasis::virtual loudspeaker array: :: transcoding standard formats -## emphasis::pseudoinverse microphone array: :: encoding from discrete microphones or signals -:: - -The emphasis::pseudoinverse:: encoding technique provides the greatest flexibility, and can be used with both microphone arrays and synthetic signals. In the absence of a Soundfield microphone, this feature gives the opportunity to deploy real-world microphone arrays (omni, cardioid, etc.) to capture natural soundfields. With synthetic signals, emphasis::pseudoinverse:: encoding is usually regarded as the method of choice to generate spatially complex synthetic Ambisonic images. In combination with the ATK's link::#Imaging#imaging:: tools these can then be compositionally controlled as required. - -See link::Classes/FoaEncode::, link::Classes/FoaEncoderMatrix:: and link::Classes/FoaEncoderKernel:: for more details about encoding. - - - -section:: Imaging - -For the artist, the real power of the ATK is found in the imaging transforms. These are spatial domain filters which reorient, reshape or otherwise spatially filter an input soundfield. Many users will be familiar with the soundfield rotation transform, as SuperCollider provides the inbuilt link::Classes/Rotate2::. - -The ATK provides a much wider and comprehensive toolset, including: - -list:: -## emphasis::rotation: :: soundfield rotation about an axis -## emphasis::mirror: :: soundfield reflection across an axis -## emphasis::directivity: :: soundfield directivity -## emphasis::dominance: :: adjust directional gain of soundfield -## emphasis::focus: :: focus on a region of a soundfield -## emphasis::push: :: push a soundfield in a direction -:: - -The imaging tools are provided in two forms: link::Classes/FoaXform##static:: and link::Classes/FoaTransform##dynamic:: implementations. While most transforms are provided in both categories, a number are found in only one guise. footnote::It is also useful to note that the link::Classes/FoaTransform##dynamic:: transforms are also available as individual UGens. However, users are advised to use link::Classes/FoaTransform:: for convenience.:: - -See link::Classes/FoaTransform::, link::Classes/FoaXform:: and link::Classes/FoaXformerMatrix:: for more details about imaging. - - -subsection:: Reading imaging illustrations - -As artists working with sound, we should expect most users to be very capable expert listeners, and able to audition the results of spatial filtering of an input soundfield. However, it is often very convenient to view a visual representation of the effect of a soundfield transform. The ATK illustrates a number of its included transforms in the form shown below. - -The emphasis::X-Y:: axis is shown, as viewed from above with the top of the plot corresponding to the front of the soundfield, emphasis::+X::. On the left hand side of the figures, an unchanged soundfield composed of eight planewave is shown. These are indicated as coloured circles, and arrive from cardinal directions: - -list:: -## Front -## Front-Left -## Left -## Back-Left -## Back -## Back-Right -## Right -## Front-Right -:: - -Three useful features are displayed in these plots, providing inportant insight as to how an input soundfield will be modified by a transform: - -list:: -## emphasis::incidence:: footnote::emphasis::Incidence:: is measured in terms of the emphasis::(Active) Intensity:: vector.:: : illustrated as emphasis::polar angle:: -## emphasis::quality:: footnote::emphasis::Quality:: is measured as the magnitude of the emphasis::Energy Normalised (Active) Intensity:: vector, aka emphasis::rE::.:: : illustrated as emphasis::radius:: -## emphasis::gain:: footnote::emphasis::Gain:: reported is the emphasis::Potential-Kinetic Energy Mean::, aka emphasis::Soundfield Energy::.:: : illustrated via emphasis::colour:: -:: - - -Individual planewaves are coloured with respect to the gain scale at the far left of the figures. Additionally, emphasis::Front::, emphasis::Left::, emphasis::Back-Left:: and emphasis::Back:: are annotated with a numerical figure for emphasis::gain::, in dB. - - -subsection:: Soundfield quality - -The meaning of transformation to soundfield emphasis::incidence:: and emphasis::gain:: should be clear. Understading the meaning of soundfield emphasis::quality:: takes a little more effort. This feature describes how emphasis::apparently localised:: an element in some direction will appear. - -A planewave has a emphasis::quality:: measure of code::1.0::, and is heard as localised. At the opposite end of the scale, with a emphasis::quality:: measure of code::0.0::, is an omnidirectional soundfield. This is heard to be emphasis::without direction:: or emphasis::"in the head"::. As you'd expect, intermediate measures are heard as scaled between these two extremes. - - -subsection:: Reading ZoomX - -anchor::zoom:: -image::../Classes/zoom_fig.png#ZoomX imaging:: - -With changing link::Classes/FoaZoomX##ZoomX::'s strong::angle::, we see the eight cardinal planewaves both move towards the front of the image and change gain. When strong::angle:: is 90 degrees, the gain of the planewave at emphasis::Front:: has been increased by 6dB, while emphasis::Back:: has disappeared. footnote::Decreased to -inf dB:: We also see the soundfield appears to have collapsed to a single planewave, incident at 0 degrees. footnote::Or, we might describe this as applying directionally dependent gains across the whole soundfield, mixing, and then re-incoding to a single planewave.:: - -subsection:: Reading PushX - -anchor::push:: -image::../Classes/push_fig.png#PushX imaging:: - -link::Classes/FoaPushX##PushX:: also distorts the incident angles of the cardinal planewaves. However, here we see two differences with link::#zoom#ZoomX::. The gains of the individual elements don't vary as considerably. More intriguingly, a number of the encoded planewaves are illustrated as moving off the perimeter of the plot, indicating a change in soundfield link::#Soundfield quality#quality::. - -Moving from the edge of the plot towards the centre emphasis::does not imply:: the sound moves from the edge of the loudspeakers towards the centre, as one might expect. Instead, what we are seeing is the loss of directivity. Moving towards the centre means a planewave moves toward becoming omnidirectional, or without direction. (This becomes clearer when we look at link::#Reading DirectO#DirectO::.) A reducing radius indicates a reducing soundfield emphasis::quality::. - -When link::Classes/FoaPushX##PushX::'s strong::angle:: is 90 degrees, all encoded planewaves have been emphasis::pushed:: to the front of the image. Unlike link::#Reading ZoomX#ZoomX::, gain is retained at 0 dB for all elements. footnote::Equivalent to mixing all elements (scaled by 0dB), and then re-incoding to a single planewave.:: - -subsection:: Reading DirectO - -anchor::direct:: -image::../Classes/direct_fig.png#DirectO imaging:: - -link::#direct#DirectO:: adjusts the directivity of the soundfield across the origin. Here we see the cardinal planewaves collapsing towards the centre of the plot. At this point the soundfield is omnidirectional, or directionless. See further discussion of soundfield link::#Soundfield quality#quality:: above. - -See link::Classes/FoaZoomX::, link::Classes/FoaPushX:: and link::Classes/FoaDirectO:: for more details regarding use of these associated UGens. - - -subsection:: Illustrated transforms - -Additionally, the following UGens include figures illustration imaging transformation: - -list:: -## link::Classes/FoaAsymmetry:: -## link::Classes/FoaBalance:: -## link::Classes/FoaDirectO:: -## link::Classes/FoaDirectX:: -## link::Classes/FoaDirectY:: -## link::Classes/FoaDominateX:: -## link::Classes/FoaFocusX:: -## link::Classes/FoaPressX:: -## link::Classes/FoaPushX:: -## link::Classes/FoaZoomX:: -:: - -Explore these to get a sense of the wide variety of image transformation tools available in the ATK. - -section:: Monitoring - -Perhaps one of the most celebrated aspects of the Ambisonic sound technique has been its design as a hierarchal reproduction system, able to target a number of varying loudspeaker arrays. Users may be familiar with SuperCollider's inbuilt regular polygon decoder, link::Classes/DecodeB2::. - -The ATK provides a much wider palate of optimised monitoring tools via link::Classes/FoaDecode::. These include: - -list:: -## emphasis::stereo UHJ: :: classic Ambisonic stereo decoding -## emphasis::binaural: :: measured and synthetic HRTFs -## emphasis::regular 2D & 3D: :: single and dual polygons -## emphasis::diametric 2D & 3D: :: flexible semi-regular arrays -## emphasis::5.0: :: link::http://www.brucewiggins.co.uk/##Wiggins:: optimised decoders -:: - -While the emphasis::regular:: decoders will be suitable for many users, emphasis::diametric:: decoding enables the greatest flexibility, and allows the user to design substantially varying semi-regular arrays suitable for a wide variety of playback situations. - -note:: All decoders presume loudspeakers are placed at equal radii from the origin of the array, and gain is normalised. Loudspeaker arrays with unequal radii may be realised if the resulting wavefront arrival times are compensated through the use of delay lines.:: - - -See link::Classes/FoaDecode::, link::Classes/FoaDecoderMatrix:: and link::Classes/FoaDecoderKernel:: for more details about decoding. - - -section:: Installation - -The ATK library for SuperCollider3 is distributed via the link::https://github.com/supercollider/sc3-plugins/##sc3-plugins:: project. If you're reading this document, these extensions have most likely been corectly installed. - -Additionally, the ATK has a number of dependencies. Please install the following: - -list:: -##link::https://github.com/supercollider-quarks/MathLib/##MathLib:: Quark. - -##link::https://github.com/supercollider-quarks/FileLog##FileLog:: Quark. - -##link::http://www.ambisonictoolkit.net/download/kernels/##ATK Kernels:: - -##link::http://www.ambisonictoolkit.net/download/recordings/##ATK Example Soundfiles:: -:: - -For link::Classes/Quark:: installation, see: link::Guides/UsingQuarks:: and the link::https://github.com/supercollider-quarks/quarks/##Quarks for SuperCollider:: project. - -section:: Examples - -The examples below are intended to briefly illustrate playback and imaging of soundfields with the ATK. The user is encouraged to explore the ATK's documentation to gain a deeper understanding of the flexibility of these tools. - -As the Ambisonic technique is a hierarchal system, numerous options for playback are possible. These include two channel stereo, two channel binaural, pantophonic and full 3D periphonic. With the examples below, we'll take advantage of this by first choosing a suitable decoder with with to audition. - -subsection:: Choose a decoder - -A number of decoders are defined below. Please choose one suitable for your system. Also, don't forget to define code:: ~renderDecode :: ! - -note:: If you choose a kernel decoder, link::Classes/FoaDecoderKernel::, be sure to free the kernel after use. :: - -code:: -// ------------------------------------------------------------ -// boot server -( - s = Server.default; - s.boot; -) - - -// ------------------------------------------------------------ -// define convenience function to verify number of server outputs -( -~checkMyServerOutputs = { arg server, decoder; - server.serverRunning.if({ - (decoder.numOutputs > server.options.numOutputBusChannels).if({ - "Number of Server output bus channels is less than number required by Decoder!".warn; - "Server Outputs: %\n".postf(server.options.numOutputBusChannels); - "Decoder Outputs: %\n\n".postf(decoder.numOutputs); - "Update number of Server outputs as illustrated here: ".post; - "http://doc.sccode.org/Classes/ServerOptions.html#examples".postln; - }, { - "Server has an adequate number of output bus channels for use with this Decoder!".postln; - }) - }) -} -) - - -// ------------------------------------------------------------ -// choose a decoder - -// stereophonic / binaural -~decoder = FoaDecoderMatrix.newStereo((131/2).degrad, 0.5) // Cardioids at 131 deg -~decoder = FoaDecoderKernel.newUHJ // UHJ (kernel) -~decoder = FoaDecoderKernel.newSpherical // synthetic binaural (kernel) -~decoder = FoaDecoderKernel.newCIPIC // KEMAR binaural (kernel) - - -// pantophonic (2D) -~decoder = FoaDecoderMatrix.newQuad(k: 'dual') // psycho optimised quad -~decoder = FoaDecoderMatrix.newQuad(pi/6, 'dual') // psycho optimised narrow quad -~decoder = FoaDecoderMatrix.new5_0 // 5.0 -~decoder = FoaDecoderMatrix.newPanto(6, k: 'dual') // psycho optimised hex - - -// periphonic (3D) -~decoder = FoaDecoderMatrix.newPeri(k: 'dual') // psycho optimised cube -~decoder = FoaDecoderMatrix.newDiametric( // psycho optimised bi-rectangle - [[30, 0], [-30, 0], [90, 35.3], [-90, 35.3]].degrad, - 'dual' -) - - -// inspect -~decoder.kind -~checkMyServerOutputs.value(s, ~decoder) - - -// ------------------------------------------------------------ -// define ~renderDecode -( -~renderDecode = { arg in, decoder; - var kind; - var fl, bl, br, fr; - var fc, lo; - var sl, sr; - var flu, blu, bru, fru; - var fld, bld, brd, frd; - var slu, sru, sld, srd; - - - kind = decoder.kind; - - case - { decoder.numChannels == 2 } - { - // decode to stereo (or binaural) - FoaDecode.ar(in, decoder) - } - { kind == 'quad' } - { - // decode (to quad) - #fl, bl, br, fr = FoaDecode.ar(in, decoder); - - // reorder output to match speaker arrangement - [fl, fr, bl, br] - } - { kind == '5.0' } - { - // decode (to 5.0) - #fc, fl, bl, br, fr = FoaDecode.ar(in, decoder); - lo = Silent.ar; - - // reorder output to match speaker arrangement - [fl, fr, fc, lo, bl, br] - } - { kind == 'panto' } - { - // decode (to hex) - #fl, sl, bl, br, sr, fr = FoaDecode.ar(in, decoder); - - // reorder output to match speaker arrangement - [fl, fr, sl, sr, bl, br] - } - { kind == 'peri' } - { - // decode (to cube) - #flu, blu, bru, fru, fld, bld, brd, frd = FoaDecode.ar(in, decoder); - - // reorder output to match speaker arrangement - [flu, fru, blu, bru, fld, frd, bld, brd] - } - { kind == 'diametric' } - { - // decode (to bi-rectangle) - #fl, fr, slu, sru, br, bl, srd, sld = FoaDecode.ar(in, decoder); - - // reorder output to match speaker arrangement - [fl, fr, bl, br, slu, sru, sld, srd] - }; -} -) - -// ------------------------------------------------------------ -// now we're ready to try the examples below! -// ------------------------------------------------------------ -:: - - -subsection:: Produced via the Ambisonic Toolkit - -The following three sound examples are excerpts from recordings produced via the ATK. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - - -code:: -// ------------------------------------------------------------ -// B-format examples, produced via the ATK -// B-format soundfile read from disk - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Anderson-Pacific_Slope.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Howle-Calling_Tunes.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Pampin-On_Space.wav") - - - -( -{ - var sig; // audio signal - - - // display encoder and decoder - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - -note:: strong::Soundfile Credits:: - -list:: -## Joseph Anderson, "Pacific Slope," Epiphanie Sequence, Sargasso SCD28056 -## Tim Howle, "Calling Tunes," 20 Odd Years, FMR FMRCD316-0711 -## Juan Pampin, "On Space," Les Percussions de Strasbourg 50th Anniversary Edition, Classics Jazz France 480 6512 -:: - -:: - - -subsection:: Natural soundfields, with imaging transforms - -This example illustrates the application of various spatial filtering transforms to natural soundfields, recorded via the Soundfield microphone. - -The soundfield is controlled by link::Classes/MouseY::, which specifies the transform strong::angle:: argument (90 deg to 0 deg; top to bottom of display). With the mouse at the bottom of the display, the recorded soundfield is unchanged. At the top, the transform is at its most extreme. - -If you haven't already choosen a code:: ~decoder:: and defined code:: ~renderDecode ::, do so link::#Choose a decoder#now::. - -note:: See link::Classes/FoaTransform:: for further details.:: - -code:: -// ------------------------------------------------------------ -// B-format examples, natural soundfield with imaging transform -// B-format soundfile read from disk - -// choose transformer -~transformer = 'zoomX' -~transformer = 'pushX' -~transformer = 'directO' - - - -// read a whole sound into memory -// remember to free the buffer later! -// (boot the server, if you haven't!) -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Hodges-Purcell.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Leonard-Orfeo_Trio.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Courville-Dialogue.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Leonard-Chinook.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Leonard-Fireworks.wav") -~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/b-format/Anderson-Nearfield.wav") - - -( -{ - var sig; // audio signal - var angle; // angle control - - - // display transformer & decoder - "Ambisonic transforming via % transformer".format(~transformer).postln; - "Ambisonic decoding via % decoder".format(~decoder.kind).postln; - - // gain ---> top = 90 deg - // bottom = 0 deg - angle = MouseY.kr(pi/2, 0); - - - // ------------------------------------------------------------ - // test sig - sig = PlayBuf.ar(~sndbuf.numChannels, ~sndbuf, BufRateScale.kr(~sndbuf), doneAction:2); // soundfile - - // ------------------------------------------------------------ - // transform - sig = FoaTransform.ar(sig, ~transformer, angle); - - - // ------------------------------------------------------------ - // decode (via ~renderDecode) - ~renderDecode.value(sig, ~decoder) - -}.scope; -) - -// free buffer -~sndbuf.free -// ------------------------------------------------------------ -:: - -note:: strong::Soundfile Credits:: - -list:: -## P. Hodges, "Purcell - Passacaglia (King Arthur)," Sound of Space: ambisonic surround sound. [Online]. Available: http://soundofspace.com/ambisonic_files/52 [Accessed: 03-Nov-2011]. -## J. Leonard, "The Orfeo Trio & TetraMic," Sound of Space: ambisonic surround sound. [Online]. Available: http://soundofspace.com/ambisonic_files/41 [Accessed: 03-Nov-2011]. -## D. Courville, "Comparative Surround Recording," Ambisonic Studio | Comparative Surround Recording, 2007. [Online]. Available: http://www.radio.uqam.ca/ambisonic/comparative_recording.html [Accessed: 26-Jul-2011]. -## J. Leonard, ""A couple of Chinook helicopters," Sound of Space: ambisonic surround sound, 20-Mar-2008. [Online]. Available: http://soundofspace.com/ambisonic_files/47. [Accessed: 03-Nov-2011]. -## J. Leonard, “Fireworks,” Sound of Space: ambisonic surround sound, 25-Aug-2009. [Online]. Available: http://soundofspace.com/ambisonic_files/37. [Accessed: 03-Nov-2011]. -## Joseph Anderson, "Nearfield source," [unpublished recording] -:: - -:: diff --git a/source/ATK/sc/HelpSource/Guides/atk-network.pdf b/source/ATK/sc/HelpSource/Guides/atk-network.pdf deleted file mode 100644 index 3a79a9f8b2fbdc57168441b7365e95b5d8fe6563..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115837 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

`4RF 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 z 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 Toolkit>Licensing -related:: Other/ATKLicensing - - -image::ccbysa3_88x31.png:: - -link::Guides/Intro-to-the-ATK##Ambisonic Toolkit help documentation:: for SuperCollider is licensed under a link::http://creativecommons.org/licenses/by-sa/3.0/##Creative Commons Attribution-Share Alike 3.0 Unported License::. - -Executable Ambisonic Toolkit code for SuperCollider remains under the GPL as stated in the Ambisonic Toolkit's and SuperCollider's main link::Other/ATKLicensing##license conditions::. - -To supply attribution for a help document (which may have multiple contributors), unless otherwise indicated you may credit "Ambisonic Toolkit for SuperCollider 3 documentation contributors". - diff --git a/source/ATK/sc/HelpSource/Other/ATKLicensing.schelp b/source/ATK/sc/HelpSource/Other/ATKLicensing.schelp deleted file mode 100644 index f8e6743d6d..0000000000 --- a/source/ATK/sc/HelpSource/Other/ATKLicensing.schelp +++ /dev/null @@ -1,133 +0,0 @@ -title:: ATK Licensing and Notices -summary:: Ambisonic Toolkit Licensing and Notices -categories:: Libraries>Ambisonic Toolkit>Licensing -related:: Other/ATKDocsLicensing - -section:: Ambisonic Toolkit for SuperCollider License - -image::gplv3-88x31.png:: - -The SuperCollider3 version of the Ambisonic Toolkit is copyright the Ambisonic Toolkit Community, Joseph Anderson, and Josh Parmenter, 2011. - -The SuperCollider3 version of the Ambisonic Toolkit is free software: you can redistribute it and/or modify it under the terms of the strong::GNU General Public License:: as published by the link::http://www.fsf.org/##Free Software Foundation::, either version 3 of the License, or (at your option) any later version. - -The SuperCollider3 version of the Ambisonic Toolkit 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 link::http://www.gnu.org/licenses/gpl.html##GNU General Public License:: for more details. - -You should have received a copy of the GNU General Public License along with the SuperCollider3 version of the Ambisonic Toolkit. If not, see . - -subsection:: Ambisonic Toolkit Filter Kernels - -The filter kernels distributed with the Ambisonic Toolkit are licensed under a link::http://creativecommons.org/licenses/by-sa/3.0/##Creative Commons Attribution-Share Alike 3.0 Unported License:: and are copyright the Ambisonic Toolkit Community and Joseph Anderson, 2011. - - -section:: Third Party Notices - -subsection:: CIPIC HRTF Database (University of California) - -The Ambisonic Toolkit includes binaural decoders derived from HRIRs found in the link::http://interface.cipic.ucdavis.edu/sound/hrtf.html##CIPIC HRTF Database::. footnote::See: V. R. Algazi, R. O. Duda, D. M. Thompson, and C. Avendano, "The CIPIC HRTF Database," in Proceedings of the 2001 IEEE ASSP Workshop on Applications of Signal Processing to Audio and Acoustics, New Paltz, NY, 2001.:: - - -Copyright (c) 2001 The Regents of the University of California. All Rights Reserved - -Disclaimer - -THE REGENTS OF THE UNIVERSITY OF CALIFORNIA MAKE NO REPRESENTATION OR WARRANTIES WITH RESPECT TO THE CONTENTS HEREOF AND SPECIFICALLY DISCLAIM ANY IMPLIED WARRANTIES OR MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE. - -Further, the Regents of the University of California reserve the right to revise this software and/or documentation and to make changes from time to time in the content hereof without obligation of the Regents of the University of California to notify any person of such revision or change. - -Use of Materials - -The Regents of the University of California hereby grant users permission to reproduce and/or use materials available therein for any purpose-educational, research or commercial. However, each reproduction of any part of the materials must include the copyright notice, if it is present. In addition, as a courtesy, if these materials are used in published research, this use should be acknowledged in the publication. If these materials are used in the development of commercial products, the Regents of the University of California request that written acknowledgment of such use be sent to: - -CIPIC- Center for Image Processing and Integrated Computing University of California, -1 Shields Avenue, -Davis, CA 95616-8553 - - -subsection:: Listen HRTF Database (IRCAM) - -The Ambisonic Toolkit includes binaural decoders derived from HRIRs found in the link::http://recherche.ircam.fr/equipes/salles/listen/##Listen HRTF Database::. - - -Copyright (c) 2002 IRCAM (Institut de Recherche et Coordination Acoustique/Musique). All Rights Reserved - - -Use of Materials - -The Listen database is public and available for any use. We would however appreciate an acknowledgment of the database somewhere in the description of your work (e.g. paper) or in your development. - - -Contacts: - -Olivier Warusfel, -Room Acoustics Team, IRCAM -1, place Igor Stravinsky -75004 PARIS, France - - -subsection:: Aaron Heller diametric decoder - -Support for Gerzon's Diametric Decoder Theorem (DDT) footnote::See: E. Benjamin, R. Lee, and A. Heller, "Is My Decoder Ambisonic?," in Proceedings of the 125th Audio Engineering Society Convention, San Francisco, 2008.:: decoding algorithm is derived from Aaron Heller's Octave code available link::http://www.ai.sri.com/ajh/ambisonics/##here::. - -Implementation in the SuperCollider3 version of the ATK is by Joseph Anderson. - - -subsection:: Bruce Wiggins irregular decoders - -Irregular array decoding coefficients footnote::See: B. Wiggins, "An Investigation into the Real-time Manipulation and Control of Three-dimensional Sound Fields," PhD Thesis, University of Derby, Derby, 2004. -:: (5.0) are kindly provided by link::http://www.brucewiggins.co.uk/##Bruce Wiggins::. - - - - -section:: Included musical/sound examples - -The SuperCollider3 version of the Ambisonic Toolkit optionally includes a number of 30 second extracts from published and unpublished recordings. - -Copyright remains with the cited authors and owners. - -definitionList:: -## Ambisonic A-format recordings || - list:: - ## David Cross, "Tenor saxophone improvisations," [unpublished recording] - ## Niall Thomas, "Rob Mackay: flute improvisations," [unpublished recording] - :: -## Ambisonic B-format recordings || - list:: - ## Joseph Anderson, "Nearfield source," [unpublished recording] - ## Joseph Anderson, "Pacific Slope," Epiphanie Sequence, Sargasso SCD28056 - ## D. Courville, "Comparative Surround Recording," Ambisonic Studio | Comparative Surround Recording, 2007. [Online]. Available: http://www.radio.uqam.ca/ambisonic/comparative_recording.html [Accessed: 26-Jul-2011]. - ## P. Hodges, "Purcell - Passacaglia (King Arthur)," Sound of Space: ambisonic surround sound. [Online]. Available: http://soundofspace.com/ambisonic_files/52 [Accessed: 03-Nov-2011]. - ## Tim Howle, "Calling Tunes," 20 Odd Years, FMR FMRCD316-0711 - ## J. Leonard, ""A couple of Chinook helicopters," Sound of Space: ambisonic surround sound, 20-Mar-2008. [Online]. Available: http://soundofspace.com/ambisonic_files/47. [Accessed: 03-Nov-2011]. - ## J. Leonard, “Fireworks,” Sound of Space: ambisonic surround sound, 25-Aug-2009. [Online]. Available: http://soundofspace.com/ambisonic_files/37. [Accessed: 03-Nov-2011]. - ## J. Leonard, "The Orfeo Trio & TetraMic," Sound of Space: ambisonic surround sound. [Online]. Available: http://soundofspace.com/ambisonic_files/41 [Accessed: 03-Nov-2011]. - ## Juan Pampin, "On Space," Les Percussions de Strasbourg 50th Anniversary Edition, Classics Jazz France 480 6512 :: -## Multichannel recordings || - list:: - ## Robert Mackay, "Augustine's Message," [unpublished recording] - ## John Young, "Allting Runt Omkring," [unpublished recording] - :: -## Stereophonic recordings || - list:: - ## Aurora Surgit, "Lux aeterna," Ego sum Resurrectio, NAXOS 8.557672 - ## Aurora Surgit, "Dies irae," Ego sum Resurrectio, NAXOS 8.557672 - ## The City Waites, "The Downfall of Dancing," Penny Merriments, NAXOS 8.557672 - ## The City Waites, "An Old Song on the Spanish Armada," Penny Merriments, NAXOS 8.557672 - :: -## Ambisonic UHJ stereophonic recordings || - list:: - ## Christ Church Cathedral Choir, "Palestrina: O Bone Jesu, exaudi me," Ambisonic Sampler, NI 1417 - ## The Gulbenkian Orchestra, "Waldteufel: The Skaters' Waltz," Ambisonic Sampler, NI 1417 - ## C. Lobato, J. del Gastor, & P. del Gastor, "Alegrias," Ambisonic Sampler, NI 1417 - ## The Wallace Collection, "Gabrieli: Canzon Duodecimi Toni a 10 (No 2)," Ambisonic Sampler, NI 1417 - :: -## link::http://www.zoom.co.jp/english/products/h2/##ZoomH2:: quadraphonic recordings || - list:: - ## Joseph Anderson, "Pickering Steam Fair: Engine," [unpublished recording] - ## Joseph Anderson, "Pickering Steam Fair: Waltz," [unpublished recording] - ## Joseph Anderson, "St Peter & St Paul," [unpublished recording] - ## Joseph Anderson, "Stape Silver Band: March," [unpublished recording] - ## D. Courville, "Comparative Surround Recording," Ambisonic Studio | Comparative Surround Recording, 2007. [Online]. Available: http://www.radio.uqam.ca/ambisonic/comparative_recording.html [Accessed: 26-Jul-2011]. - :: -:: diff --git a/source/ATK/sc/HelpSource/Other/ccbysa3_88x31.png b/source/ATK/sc/HelpSource/Other/ccbysa3_88x31.png deleted file mode 100644 index f0a944e0b89642ae282047846e55393007b04686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5083 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 diff --git a/source/ATK/sc/HelpSource/Other/gplv3-88x31.png b/source/ATK/sc/HelpSource/Other/gplv3-88x31.png deleted file mode 100644 index ba78d4c4941dabf2fcac5409a92ac4c57920c69f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2666 zcmV-w3YGPVP)Px#32;bRa{vGVivR!tivi)#(!2lw00(qQO+^RT0uvMpF24YJ`L;(K) z{{a7>y{D4^014_zL_t(&-tC%skW|$b#(x5`77PlZ01Xf|tXfvU1+9P)Nl;9MMIeIW zf~A;|yxWx-F&@d<9Z!mSGK`{-NXD*+V< z1U?qnFHjo71r>243NtglEQV7Q5|M$wwPW#3mU1Xa75(4)}+D^1dj!r-wg;N!7wPTlz6cv~* zaG8PJ%ocdxi%_r(8VF2J2gJd((|x~-stE3f0*?zktgtfz_z{7D0<}|XS^^CmbayaJ zV6ea`S+E+%|4L05^x|!{8+(dT?jEM~Js`$27+y6h2%>GgYF0wJYE0l-O z)7o925Tv&W;2eAZgu;B5;j^dJ8-bz3oKpjkZt1g)zX^66mI| z)j_Xp5wNzxdh2k6HU6=}>lr5fjzC|47oe%aZiQ_MKeNs1Wz;5au`^ddqYxT8_`O0| z2+eKGVG3K)+k_Uu1%|7S@cDv!RA5U0Jp{%pe3tfppM%?rytQ5}8P;njwoMwi^#raG z_|!q~0P19O58V`YC~Ow^rGefh%fweYXuAOFEA&%1pirdH-T=NSi#0u9by^9`QxJv5 zHjl?NEpVEPINjb~s%aLOrIZQ$Er2cpYhwES(!o;>ZWd4fj>h!yt-vP^&Rzf~rSJ-% zg@aKFTLZW-2{m&$=#dIvD=Zf1XvcR*1&`sq0ThV$zmI09^NGMv1M6&ojS7EJsBiOF z8n;M=9{?nvrNFcK_*#Yg1^TDhK}Ke?#C57YX(PO#~hmZ&YIfXpm0?Of77b zcz4lUy){(?;9j;d=Zg=NarIQ8n^{2*frBCRE`gImI7i`?I3Q90+X5fTF_*Oh*9+WO z1x|lZpeTTXIJ}Zj$9dYg#Asf_jNm>ECo6nxzAm326$kDY0%zN14N};eq2A;GS}N34 z_?^POB%Ep+b3>f}wIrZv1mNKjYL#A=I=IZiomF5OUkN;%%t28n`n7hnwKmOUxi!^C z?!7sJ)RYjqCgH3A+6T}!^hf+gd!G=mbKa5;2^2Z#5Q*l| zfdhdl0@EDyF+dtC++#s#w6j4H&?112wh__NE(zy`FhF3r<@t|C0A7{B|L)KTzz$ld zr)$xAGn~&v$ExqQqQD+9qd48hXc$805H1yOr8Q%W^E8V!qcoEr7HA|sO)M9(j7va) zLPO)u<>K8*eH(mXo|E4b6{n4!WlMoas%ZhvALqY1(?UYejX$qum2H*6CFz(2o?R^x zDEv(hmVvj&jg=p^uDHvkZKlwQXnG#Q_KXL#Ubbsr9Nn7x7-IFOx}g0W@Fj z20>x8!ootY1Jtn~{dF~g`?~m)`Q!|iyHa6%kmfQnQM3*U9~p3ePDSc@Q2%*2Wf?S% zmJ%okp_W5IHRG)GOwilcdW(Gu*4g{T~>dyLTd*<7nqH5>P4bO#m15lF^bQk0@fXG4I;>Zi8G4~)h=aS0UnUjaR`^J~?z=+$ zHTWKdViR&!n`TiY-;I@$Nas4sHq*3$R%RqSBP!U};>Y>BK#9N@@vNzKHf)UY&9JQQ zCMxp?bTg|ev(NnmCWO%6!B~MAp&w|lz>EMc4xx`RjCHn%FPzVQekwkb8YeK{!Gi*~ zsNb|P0)6c!`IJklP`iK9vb6vc-7RoHJ0Nq5dRwk5m+UDA)gAo?O?LN0*eFN#QW*D#LIwjzkygL(4{)S zRcNGevoWb@0%ujrt~sxh79Qi@G*o92@TaP*zZ6=F7pc}Mlq8{3Nv<1-3c80vD-#)#iR!fAg3`3i=|n0Ep+VCB*yVN$x?2_YiZ5k$@3&Tcz#W!=Gm9%=?NxpL Y19h*OP%`Tk_W%F@07*qoM6N<$g8#_jNdN!< From 9a7ac21ceb4c03270900200e826475c13932d982 Mon Sep 17 00:00:00 2001 From: Joseph Anderson Date: Thu, 15 Jun 2017 17:00:37 -0700 Subject: [PATCH 3/3] Update README Readme updated to reflect changes. --- source/ATK/sc/README.md | 85 ++++++++++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 30 deletions(-) diff --git a/source/ATK/sc/README.md b/source/ATK/sc/README.md index 03f6072d43..0cd7910b04 100644 --- a/source/ATK/sc/README.md +++ b/source/ATK/sc/README.md @@ -1,10 +1,11 @@ -ATK for SuperCollider3 : Read Me +ATK UGens for SuperCollider3 : Read Me ======================== -This is the SuperCollider3 version of the Ambisonic Toolkit (ATK). -It can be used with [SuperCollider3](http://supercollider.github.io/) on OSX, -Linux and Windows, and is distributed via the -[sc3-plugins](https://github.com/supercollider/sc3-plugins) project. +This is the unit generator plugin (UGen) component of the SuperCollider3 version +of the Ambisonic Toolkit (ATK), which is distributed via the +[sc3-plugins](https://github.com/supercollider/sc3-plugins) project. It can be +used with [SuperCollider3](http://supercollider.github.io/) on OSX, Linux and +Windows. The Ambisonic Toolkit (ATK) is intended to bring together a number of tools and methods for working with Ambisonic surround sound. The intention @@ -23,8 +24,8 @@ technique. We hope you enjoy the ATK! -For more information please visit the [Ambisonic Toolkit -website](http:www.ambisonictoolkit.net/) or send us an +For more information please visit the +[Ambisonic Toolkit website](http:www.ambisonictoolkit.net) or send us an [e-mail](mailto:info[at]ambisonictoolkit.net). See also [Introducing the Ambisonic Toolkit](http://doc.sccode.org/Guides/Intro-to-the-ATK.html) for an overview on working with the ATK for SuperCollider3. @@ -50,22 +51,41 @@ or later. Download the latest version   +atk-sc3 Quark +----------- + +The ATK for [SuperCollider3](http://supercollider.github.io)'s classes, +extension methods and documentation are distributed via the +[atk-sc3 Quark](https://github.com/ambisonictoolkit/atk-sc3). Start by reviewing +the Quark installation instructions +[found here](https://github.com/supercollider-quarks/quarks#installing). See +also [Using Quarks](http://doc.sccode.org/Guides/UsingQuarks.html). + +With [git](https://git-scm.com/) installed, you can easily install the +[atk-sc3 Quark](https://github.com/ambisonictoolkit/atk-sc3) directly by +running the following line of code in SuperCollider: + + Quarks.install("https://github.com/ambisonictoolkit/atk-sc3.git"); + + sc3-plugins ----------- -Compiled releases are available from the +The ATK's compiled UGen component releases are available from the [sc3-plugins](https://github.com/supercollider/sc3-plugins/releases) releases page. -Place the downloaded `SC3plugins` folder in your `Extensions` folder. On Mac OS X, this resolves to: +Place the downloaded `SC3plugins` folder in your `Extensions` folder. On Mac +OS X, this resolves to: ~/Library/Application Support/SuperCollider/Extensions You may need to create the `Extensions` folder if it does not already exist. -On other platforms, you can find where this is by running the following line of code in SuperCollider: +On other platforms, you can find where this is by running the following line of +code in SuperCollider: - ( + ( // post the directory in which to move the SC3Plugins folder Platform.userExtensionDir.postln; ) @@ -75,26 +95,21 @@ On other platforms, you can find where this is by running the following line of Platform.userExtensionDir.openOS; ) -Additionally, the SuperCollider3 version of the ATK has a number of -dependencies. Please install the following: -* Install the [MathLib Quark](https://github.com/supercollider-quarks/MathLib) -most simply by running `Quarks.gui` in the SuperCollider IDE. Further install -options and information on Quarks can be found in SuperCollider's Help system. -See [Using Quarks](http://doc.sccode.org/Guides/UsingQuarks.html) and also the -[supercollider-quarks](https://github.com/supercollider-quarks/quarks) GitHub page. -* Install the [FileLog Quark](https://github.com/supercollider-quarks/FileLog) +Kernels & Recordings +-------------------- + +Additionally, the SuperCollider3 version of the ATK has further dependencies: + * Download and install [ATK Kernels](http://www.ambisonictoolkit.net/download/kernels/). * Download and install [ATK Sound File Example Recordings](http://www.ambisonictoolkit.net/download/recordings/). -__NOTE:__ The ATK requires SuperCollider3 version 3.5 or later. Download the latest version [here](http://supercollider.github.io/download), or fork the source code at [GitHub](http://supercollider.github.io/). -   ### Source code -You can build ATK for SuperCollider from the [sc3-plugins](https://github.com/supercollider/sc3-plugins) source-code. +You can build the ATK for SuperCollider UGen components from the [sc3-plugins](https://github.com/supercollider/sc3-plugins) source-code.   @@ -158,7 +173,12 @@ Ambisonic Toolkit. List of Changes --------------- -Unreleased +Unreleased 3.9.0 + +* Refactoring: + * Quark-ify: classes, extension methods & documentation moved to + [atk-sc3 Quark](https://github.com/ambisonictoolkit/atk-sc3). UGens remain + in [sc3-plugins](https://github.com/supercollider/sc3-plugins). * Issue fixes: * Class library: fix inline warnings @@ -249,14 +269,16 @@ Version 3.5 __A note on the ATK's version numbers__: As part of the [sc3-plugins](https://github.com/supercollider/sc3-plugins) project, the -SuperCollider3 ATK's versioning is synced to the release numbers assigned to -[sc3-plugins releases](https://github.com/supercollider/sc3-plugins/releases). -As a result, at this time the versioning for -[atk-sc3](https://github.com/ambisonictoolkit/atk-sc3) does not adhere to the +SuperCollider3 ATK's versioning for UGen components is synced to the release +numbers assigned to +[sc3-plugins releases](https://github.com/supercollider/sc3-plugins/releases). A +separate versioning trajectory for +[atk-sc3](https://github.com/ambisonictoolkit/atk-sc3) adheres to the familiar system known as [Semantic Versioning](http://semver.org/). As SuperCollider3's plugin system continues to develop, we expect to adopt -[Semantic Versioning](http://semver.org/) when it is possible to do so. +[Semantic Versioning](http://semver.org/) for all components when it is possible +to do so.   @@ -268,7 +290,8 @@ Credits   -Copyright the ATK Community, Joseph Anderson, and Joshua Parmenter, 2011, 2016. +Copyright the ATK Community, Joseph Anderson, and Joshua Parmenter, 2011, +2016-17. * J Anderson : [[e-mail]](mailto:j.anderson[at]ambisonictoolkit.net) * J Parmenter : [[e-mail]](mailto:j.parmenter[at]ambisonictoolkit.net) @@ -286,8 +309,10 @@ are copyright the Ambisonic Toolkit Community and Joseph Anderson, Contributors ------------ -Unreleased +Unreleased 3.9.0 +* Joseph Anderson (@joslloand) * Julian Rohrhuber (@telephon) +* Michael McCrea (@mtmccrea) Version 3.8.0 * Daniel Peterson (@dmartinp)