├── Changes.txt ├── Software ├── Max │ ├── palette │ │ ├── np_nifalcon.mxo │ │ │ └── Contents │ │ │ │ ├── Pkginfo │ │ │ │ ├── Frameworks │ │ │ │ ├── MaxAudioAPI.framework │ │ │ │ │ ├── Headers │ │ │ │ │ │ ├── MaxAudioAPI.h │ │ │ │ │ │ ├── z_altivec.h │ │ │ │ │ │ ├── r_pfft.h │ │ │ │ │ │ └── buffer.h │ │ │ │ │ ├── Versions │ │ │ │ │ │ ├── A │ │ │ │ │ │ │ ├── Headers │ │ │ │ │ │ │ │ ├── MaxAudioAPI.h │ │ │ │ │ │ │ │ ├── z_altivec.h │ │ │ │ │ │ │ │ ├── r_pfft.h │ │ │ │ │ │ │ │ └── buffer.h │ │ │ │ │ │ │ ├── MaxAudioAPI │ │ │ │ │ │ │ └── Resources │ │ │ │ │ │ │ │ └── Info.plist │ │ │ │ │ │ └── Current │ │ │ │ │ │ │ ├── Headers │ │ │ │ │ │ │ ├── MaxAudioAPI.h │ │ │ │ │ │ │ ├── z_altivec.h │ │ │ │ │ │ │ └── r_pfft.h │ │ │ │ │ │ │ ├── MaxAudioAPI │ │ │ │ │ │ │ └── Resources │ │ │ │ │ │ │ └── Info.plist │ │ │ │ │ ├── MaxAudioAPI │ │ │ │ │ └── Resources │ │ │ │ │ │ └── Info.plist │ │ │ │ └── MaxAPI.framework │ │ │ │ │ ├── Headers │ │ │ │ │ ├── ext_user.h │ │ │ │ │ ├── ext_oms.h │ │ │ │ │ ├── ext_anim.h │ │ │ │ │ ├── ext_event.h │ │ │ │ │ ├── ext_menu.h │ │ │ │ │ ├── ext_midi.h │ │ │ │ │ ├── ext_numc.h │ │ │ │ │ ├── ext_track.h │ │ │ │ │ ├── ext_support.h │ │ │ │ │ ├── ext_timeline.h │ │ │ │ │ ├── macho-prefix.pch │ │ │ │ │ ├── edit.h │ │ │ │ │ ├── ext_fun.h │ │ │ │ │ ├── commonsyms.c │ │ │ │ │ ├── ext_colors.h │ │ │ │ │ ├── ext_byteorder.c │ │ │ │ │ ├── ext_default.h │ │ │ │ │ ├── ext_sndfile.h │ │ │ │ │ ├── ext.h │ │ │ │ │ ├── ext_preferences.h │ │ │ │ │ ├── macho-gl-prefix.pch │ │ │ │ │ ├── ext_obstring.h │ │ │ │ │ ├── ext_common.h │ │ │ │ │ ├── ext_drag.h │ │ │ │ │ ├── ext_qtimage.h │ │ │ │ │ ├── mouse.c │ │ │ │ │ ├── ext_wind.h │ │ │ │ │ ├── ext_symobject.h │ │ │ │ │ ├── jpatcher_utils.h │ │ │ │ │ ├── ext_strings.h │ │ │ │ │ ├── ext_sysparallel.h │ │ │ │ │ ├── ext_globalsymbol.h │ │ │ │ │ └── basic_c_strings.c │ │ │ │ │ ├── Versions │ │ │ │ │ ├── A │ │ │ │ │ │ ├── Headers │ │ │ │ │ │ │ ├── ext_user.h │ │ │ │ │ │ │ ├── ext_oms.h │ │ │ │ │ │ │ ├── ext_anim.h │ │ │ │ │ │ │ ├── ext_menu.h │ │ │ │ │ │ │ ├── ext_midi.h │ │ │ │ │ │ │ ├── ext_numc.h │ │ │ │ │ │ │ ├── ext_event.h │ │ │ │ │ │ │ ├── ext_track.h │ │ │ │ │ │ │ ├── ext_support.h │ │ │ │ │ │ │ ├── ext_timeline.h │ │ │ │ │ │ │ ├── macho-prefix.pch │ │ │ │ │ │ │ ├── edit.h │ │ │ │ │ │ │ ├── ext_fun.h │ │ │ │ │ │ │ ├── commonsyms.c │ │ │ │ │ │ │ ├── ext_colors.h │ │ │ │ │ │ │ ├── ext_byteorder.c │ │ │ │ │ │ │ ├── ext_default.h │ │ │ │ │ │ │ ├── ext_sndfile.h │ │ │ │ │ │ │ ├── ext.h │ │ │ │ │ │ │ ├── ext_preferences.h │ │ │ │ │ │ │ ├── macho-gl-prefix.pch │ │ │ │ │ │ │ ├── ext_obstring.h │ │ │ │ │ │ │ ├── ext_common.h │ │ │ │ │ │ │ ├── ext_drag.h │ │ │ │ │ │ │ ├── ext_qtimage.h │ │ │ │ │ │ │ ├── mouse.c │ │ │ │ │ │ │ ├── ext_wind.h │ │ │ │ │ │ │ ├── ext_symobject.h │ │ │ │ │ │ │ ├── jpatcher_utils.h │ │ │ │ │ │ │ ├── ext_strings.h │ │ │ │ │ │ │ ├── ext_sysparallel.h │ │ │ │ │ │ │ ├── ext_globalsymbol.h │ │ │ │ │ │ │ └── basic_c_strings.c │ │ │ │ │ │ ├── MaxAPI │ │ │ │ │ │ └── Resources │ │ │ │ │ │ │ ├── English.lproj │ │ │ │ │ │ │ └── InfoPlist.strings │ │ │ │ │ │ │ └── Info.plist │ │ │ │ │ └── Current │ │ │ │ │ │ ├── Headers │ │ │ │ │ │ ├── ext_user.h │ │ │ │ │ │ ├── ext_oms.h │ │ │ │ │ │ ├── ext_anim.h │ │ │ │ │ │ ├── ext_menu.h │ │ │ │ │ │ ├── ext_midi.h │ │ │ │ │ │ ├── ext_numc.h │ │ │ │ │ │ ├── ext_event.h │ │ │ │ │ │ ├── ext_track.h │ │ │ │ │ │ ├── ext_support.h │ │ │ │ │ │ ├── ext_timeline.h │ │ │ │ │ │ ├── macho-prefix.pch │ │ │ │ │ │ ├── edit.h │ │ │ │ │ │ ├── ext_fun.h │ │ │ │ │ │ ├── commonsyms.c │ │ │ │ │ │ ├── ext_colors.h │ │ │ │ │ │ ├── ext_byteorder.c │ │ │ │ │ │ ├── ext_default.h │ │ │ │ │ │ ├── ext_sndfile.h │ │ │ │ │ │ ├── ext.h │ │ │ │ │ │ ├── ext_preferences.h │ │ │ │ │ │ ├── macho-gl-prefix.pch │ │ │ │ │ │ ├── ext_obstring.h │ │ │ │ │ │ ├── ext_common.h │ │ │ │ │ │ ├── ext_drag.h │ │ │ │ │ │ ├── ext_qtimage.h │ │ │ │ │ │ ├── mouse.c │ │ │ │ │ │ ├── ext_wind.h │ │ │ │ │ │ ├── ext_symobject.h │ │ │ │ │ │ ├── jpatcher_utils.h │ │ │ │ │ │ ├── ext_strings.h │ │ │ │ │ │ ├── ext_sysparallel.h │ │ │ │ │ │ ├── ext_globalsymbol.h │ │ │ │ │ │ └── basic_c_strings.c │ │ │ │ │ │ ├── MaxAPI │ │ │ │ │ │ └── Resources │ │ │ │ │ │ ├── English.lproj │ │ │ │ │ │ └── InfoPlist.strings │ │ │ │ │ │ └── Info.plist │ │ │ │ │ ├── MaxAPI │ │ │ │ │ └── Resources │ │ │ │ │ ├── English.lproj │ │ │ │ │ └── InfoPlist.strings │ │ │ │ │ └── Info.plist │ │ │ │ └── MacOS │ │ │ │ └── np_nifalcon │ │ └── CA │ │ │ ├── posx.wav │ │ │ ├── posy.wav │ │ │ └── posz.wav │ ├── _Documentation_HSP.pdf │ ├── models-Falcon │ │ └── Catching snow │ │ │ ├── god.wav │ │ │ ├── christ.wav │ │ │ ├── gurus.wav │ │ │ ├── intro.wav │ │ │ ├── default.wav │ │ │ ├── noise-samples │ │ │ ├── 0.wav │ │ │ ├── god.wav │ │ │ ├── christ.wav │ │ │ ├── gurus.wav │ │ │ ├── god-old1.wav │ │ │ ├── gurus-old1.wav │ │ │ ├── outputfile1.wav │ │ │ ├── outputfile2.wav │ │ │ ├── outputfile3.wav │ │ │ ├── outputfile4.wav │ │ │ └── outputfile5.wav │ │ │ ├── original-sounds │ │ │ ├── god.wav │ │ │ ├── gurus.wav │ │ │ └── christ.wav │ │ │ ├── gamelan-very-short-HP │ │ │ ├── 0.wav │ │ │ ├── god.wav │ │ │ ├── christ.wav │ │ │ └── gurus.wav │ │ │ └── less-exciting-samples │ │ │ ├── gamelan-long │ │ │ ├── god.wav │ │ │ ├── christ.wav │ │ │ └── gurus.wav │ │ │ ├── noise-no-fades │ │ │ ├── 0.wav │ │ │ ├── god.wav │ │ │ ├── christ.wav │ │ │ └── gurus.wav │ │ │ ├── gamelan-shorter │ │ │ ├── 0.wav │ │ │ ├── god.wav │ │ │ ├── gurus.wav │ │ │ └── christ.wav │ │ │ ├── gamelan-very-short │ │ │ ├── 0.wav │ │ │ ├── god.wav │ │ │ ├── gurus.wav │ │ │ ├── christ.wav │ │ │ ├── god-old1.wav │ │ │ ├── gurus-old1.wav │ │ │ └── christ-old1.wav │ │ │ ├── gamelan-many-notes │ │ │ ├── god.wav │ │ │ └── christ.wav │ │ │ └── gamelan-shorter-with-extra-silence │ │ │ ├── 0.wav │ │ │ ├── god.wav │ │ │ ├── christ.wav │ │ │ └── gurus.wav │ ├── physical-modeling-lecture-FireFader │ │ ├── zsax-chinese.wav │ │ ├── zdubstep-drum-loop.wav │ │ ├── zhappy-drum-loop.wav │ │ ├── zelectro-house-loop.wav │ │ ├── 21-Granular synthesis │ │ │ ├── god.wav │ │ │ ├── christ.wav │ │ │ ├── gurus.wav │ │ │ └── intro.wav │ │ ├── 24-Scrubbing-with-phase-vocoder │ │ │ ├── sax1m.wav │ │ │ └── sax3m.wav │ │ └── Readme.txt │ ├── physical-modeling-lecture-Falcon │ │ └── 13-Granular synthesis │ │ │ ├── god.wav │ │ │ ├── christ.wav │ │ │ ├── gurus.wav │ │ │ └── intro.wav │ └── Readme.txt ├── Pd │ ├── Notes.txt │ └── two_examples-FireFader │ │ ├── super220.wav │ │ ├── comport │ │ ├── comport.c │ │ ├── comport.o │ │ ├── comport.dsp │ │ ├── comport.dsw │ │ ├── comport.pd_linux │ │ ├── comport-meta.pd │ │ ├── CHANGES.txt │ │ ├── README.txt │ │ ├── makefile_win │ │ └── comport-stress-test.pd │ │ ├── Note.txt │ │ ├── mycounter2.pd │ │ ├── link~.pd │ │ └── Haptic-Scrubber.pd └── Synth-A-Modeler │ ├── Documentation │ └── Websites_for_Wikis.txt │ └── extras │ ├── vim-sam-syntax │ └── sam.vim │ └── emacs-sam-mode │ └── sam-mode.el ├── .gitignore ├── Hardware ├── FireFader │ ├── Firmware │ │ ├── haptics_firmware │ │ │ ├── Notes.txt │ │ │ └── Firmware.png │ │ ├── haptics_firmware_unomotorshield │ │ │ └── Notes.txt │ │ └── haptics_firmware_old_lesssensitive_capsensing_level │ │ │ └── Firmware.png │ ├── Parts List.xlsx │ ├── TopPlate-TwoFaders.pdf │ ├── arduino-micro-schematic.pdf │ ├── _FireFader_Design_SMC_2012.pdf │ ├── 2MOTOR_H-bridge_datasheet_L298.pdf │ ├── arduino-micro-reference-design.zip │ ├── 2MOTOR_H-bridge_board_dimensions.pdf │ ├── 2MOTOR_H-bridge_board_schematic.pdf │ ├── PCB │ │ └── FireFaderRev1 │ │ │ ├── Gerbers │ │ │ ├── testschematic.GTP │ │ │ ├── testschematic.dri │ │ │ ├── testschematic.gpi │ │ │ └── testschematic.TXT │ │ │ ├── Notes.txt │ │ │ ├── FireFaderRev1.pro │ │ │ └── FireFaderRev1.TXT │ ├── Analog inputs.rtf │ └── Advice for building.rtf ├── FireFaderDerivatives │ ├── RotaryDevice │ │ ├── Firmware │ │ │ └── haptics_firmware_rotary │ │ │ │ └── Notes.txt │ │ ├── arduino-micro-schematic.pdf │ │ ├── Encoder-Datasheets │ │ │ ├── HEDL_5540.pdf │ │ │ ├── HEDS_and_similar.pdf │ │ │ └── HEDS_and_similar_older.pdf │ │ ├── 2MOTOR_H-bridge_board_schematic.pdf │ │ ├── 2MOTOR_H-bridge_datasheet_L298.pdf │ │ ├── arduino-micro-reference-design.zip │ │ ├── 2MOTOR_H-bridge_board_dimensions.pdf │ │ ├── FirmwareModels │ │ │ └── Readme.md │ │ └── Readme.md │ └── RotaryDevice-2Motors │ │ └── Readme.md ├── ThePlank │ ├── make:break:disk.pdf │ ├── Further Resources.txt │ ├── haptics_firmware_plank_fsr │ │ └── Notes.txt │ └── haptics_firmware_plank │ │ └── Notes.txt └── Falcon │ ├── libnifalcon-1.0.1.tar.gz │ ├── DerivationOfFalconInverseKinematics.pdf │ └── README.rtf ├── Documentation ├── HAID-HSPv2.pdf └── FireFader_Design_SMC_2012.pdf ├── LICENSE.md ├── .gitmodules └── README.md /Changes.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Pkginfo: -------------------------------------------------------------------------------- 1 | iLaX???? 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.dsp 2 | *.mdx 3 | jackqtdir 4 | mspdir 5 | .DS_Store 6 | -------------------------------------------------------------------------------- /Hardware/FireFader/Firmware/haptics_firmware/Notes.txt: -------------------------------------------------------------------------------- 1 | Use this for the Arduino Micro. 2 | -------------------------------------------------------------------------------- /Hardware/FireFader/Firmware/haptics_firmware_unomotorshield/Notes.txt: -------------------------------------------------------------------------------- 1 | Use this for the Arduino Uno. -------------------------------------------------------------------------------- /Software/Pd/Notes.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Pd/Notes.txt -------------------------------------------------------------------------------- /Hardware/FireFaderDerivatives/RotaryDevice/Firmware/haptics_firmware_rotary/Notes.txt: -------------------------------------------------------------------------------- 1 | Use this for the Arduino Micro. 2 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Headers/MaxAudioAPI.h: -------------------------------------------------------------------------------- 1 | #include "z_dsp.h" 2 | -------------------------------------------------------------------------------- /Documentation/HAID-HSPv2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Documentation/HAID-HSPv2.pdf -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | All components in this repository must be open source. Please see the individual licenses in the components themselves. 2 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Versions/A/Headers/MaxAudioAPI.h: -------------------------------------------------------------------------------- 1 | #include "z_dsp.h" 2 | -------------------------------------------------------------------------------- /Software/Max/palette/CA/posx.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/palette/CA/posx.wav -------------------------------------------------------------------------------- /Software/Max/palette/CA/posy.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/palette/CA/posy.wav -------------------------------------------------------------------------------- /Software/Max/palette/CA/posz.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/palette/CA/posz.wav -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Versions/Current/Headers/MaxAudioAPI.h: -------------------------------------------------------------------------------- 1 | #include "z_dsp.h" 2 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Software/Synth-A-Modeler/SaM"] 2 | path = Software/Synth-A-Modeler/SaM 3 | url = https://github.com/eberdahl/SaM.git 4 | -------------------------------------------------------------------------------- /Hardware/FireFader/Parts List.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFader/Parts List.xlsx -------------------------------------------------------------------------------- /Software/Max/_Documentation_HSP.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/_Documentation_HSP.pdf -------------------------------------------------------------------------------- /Hardware/ThePlank/make:break:disk.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/ThePlank/make:break:disk.pdf -------------------------------------------------------------------------------- /Hardware/Falcon/libnifalcon-1.0.1.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/Falcon/libnifalcon-1.0.1.tar.gz -------------------------------------------------------------------------------- /Hardware/FireFader/TopPlate-TwoFaders.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFader/TopPlate-TwoFaders.pdf -------------------------------------------------------------------------------- /Documentation/FireFader_Design_SMC_2012.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Documentation/FireFader_Design_SMC_2012.pdf -------------------------------------------------------------------------------- /Hardware/FireFader/arduino-micro-schematic.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFader/arduino-micro-schematic.pdf -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/god.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/god.wav -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/super220.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Pd/two_examples-FireFader/super220.wav -------------------------------------------------------------------------------- /Hardware/FireFader/_FireFader_Design_SMC_2012.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFader/_FireFader_Design_SMC_2012.pdf -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/christ.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/christ.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/gurus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/gurus.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/intro.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/intro.wav -------------------------------------------------------------------------------- /Hardware/FireFader/2MOTOR_H-bridge_datasheet_L298.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFader/2MOTOR_H-bridge_datasheet_L298.pdf -------------------------------------------------------------------------------- /Hardware/FireFader/arduino-micro-reference-design.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFader/arduino-micro-reference-design.zip -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/default.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/default.wav -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/comport/comport.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Pd/two_examples-FireFader/comport/comport.c -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/comport/comport.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Pd/two_examples-FireFader/comport/comport.o -------------------------------------------------------------------------------- /Hardware/Falcon/DerivationOfFalconInverseKinematics.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/Falcon/DerivationOfFalconInverseKinematics.pdf -------------------------------------------------------------------------------- /Hardware/FireFader/2MOTOR_H-bridge_board_dimensions.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFader/2MOTOR_H-bridge_board_dimensions.pdf -------------------------------------------------------------------------------- /Hardware/FireFader/2MOTOR_H-bridge_board_schematic.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFader/2MOTOR_H-bridge_board_schematic.pdf -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/comport/comport.dsp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Pd/two_examples-FireFader/comport/comport.dsp -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/comport/comport.dsw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Pd/two_examples-FireFader/comport/comport.dsw -------------------------------------------------------------------------------- /Hardware/FireFader/Firmware/haptics_firmware/Firmware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFader/Firmware/haptics_firmware/Firmware.png -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/noise-samples/0.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/noise-samples/0.wav -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/comport/comport.pd_linux: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Pd/two_examples-FireFader/comport/comport.pd_linux -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/noise-samples/god.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/noise-samples/god.wav -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_user.h: -------------------------------------------------------------------------------- 1 | #ifndef __EXT_USER 2 | #define __EXT_USER 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif 7 | 8 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/MacOS/np_nifalcon: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/palette/np_nifalcon.mxo/Contents/MacOS/np_nifalcon -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/Note.txt: -------------------------------------------------------------------------------- 1 | You need to have comport.pd_linux in this directory also. To get it, go into the comport directory and run make, then copy comport.pd_linux into here. 2 | -------------------------------------------------------------------------------- /Software/Synth-A-Modeler/Documentation/Websites_for_Wikis.txt: -------------------------------------------------------------------------------- 1 | A laboratory exercise on controlling the FireFader using Synth-A-Modeler: 2 | https://ccrma.stanford.edu/wiki/SynthAModelerFireFaderLab 3 | -------------------------------------------------------------------------------- /Hardware/FireFader/PCB/FireFaderRev1/Gerbers/testschematic.GTP: -------------------------------------------------------------------------------- 1 | G75* 2 | G70* 3 | %OFA0B0*% 4 | %FSLAX24Y24*% 5 | %IPPOS*% 6 | %LPD*% 7 | %AMOC8* 8 | 5,1,8,0,0,1.08239X$1,22.5* 9 | % 10 | M02* 11 | -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/noise-samples/christ.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/noise-samples/christ.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/noise-samples/gurus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/noise-samples/gurus.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/original-sounds/god.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/original-sounds/god.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/original-sounds/gurus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/original-sounds/gurus.wav -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-FireFader/zsax-chinese.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-FireFader/zsax-chinese.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/gamelan-very-short-HP/0.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/gamelan-very-short-HP/0.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/noise-samples/god-old1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/noise-samples/god-old1.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/original-sounds/christ.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/original-sounds/christ.wav -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_oms.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_OMS_H_ 2 | #define _EXT_OMS_H_ 3 | 4 | // OMS is no longer supported 5 | 6 | #endif /* _EXT_OMS_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_user.h: -------------------------------------------------------------------------------- 1 | #ifndef __EXT_USER 2 | #define __EXT_USER 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif 7 | 8 | -------------------------------------------------------------------------------- /Hardware/FireFaderDerivatives/RotaryDevice/arduino-micro-schematic.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFaderDerivatives/RotaryDevice/arduino-micro-schematic.pdf -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/gamelan-very-short-HP/god.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/gamelan-very-short-HP/god.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/noise-samples/gurus-old1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/noise-samples/gurus-old1.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/noise-samples/outputfile1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/noise-samples/outputfile1.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/noise-samples/outputfile2.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/noise-samples/outputfile2.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/noise-samples/outputfile3.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/noise-samples/outputfile3.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/noise-samples/outputfile4.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/noise-samples/outputfile4.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/noise-samples/outputfile5.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/noise-samples/outputfile5.wav -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_user.h: -------------------------------------------------------------------------------- 1 | #ifndef __EXT_USER 2 | #define __EXT_USER 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif 7 | 8 | -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-FireFader/zdubstep-drum-loop.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-FireFader/zdubstep-drum-loop.wav -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-FireFader/zhappy-drum-loop.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-FireFader/zhappy-drum-loop.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/gamelan-very-short-HP/christ.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/gamelan-very-short-HP/christ.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/gamelan-very-short-HP/gurus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/gamelan-very-short-HP/gurus.wav -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_anim.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_ANIM_H_ 2 | #define _EXT_ANIM_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_ANIM_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_event.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_EVENT_H_ 2 | #define _EXT_EVENT_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_EVENT_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_menu.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_MENU_H_ 2 | #define _EXT_MENU_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_MENU_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_midi.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_MIDI_H_ 2 | #define _EXT_MIDI_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_MIDI_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_numc.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_NUMC_H_ 2 | #define _EXT_NUMC_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_NUMC_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_track.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_TRACK_H_ 2 | #define _EXT_TRACK_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_TRACK_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_oms.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_OMS_H_ 2 | #define _EXT_OMS_H_ 3 | 4 | // OMS is no longer supported 5 | 6 | #endif /* _EXT_OMS_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-FireFader/zelectro-house-loop.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-FireFader/zelectro-house-loop.wav -------------------------------------------------------------------------------- /Hardware/FireFaderDerivatives/RotaryDevice/Encoder-Datasheets/HEDL_5540.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFaderDerivatives/RotaryDevice/Encoder-Datasheets/HEDL_5540.pdf -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-Falcon/13-Granular synthesis/god.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-Falcon/13-Granular synthesis/god.wav -------------------------------------------------------------------------------- /Hardware/FireFaderDerivatives/RotaryDevice/2MOTOR_H-bridge_board_schematic.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFaderDerivatives/RotaryDevice/2MOTOR_H-bridge_board_schematic.pdf -------------------------------------------------------------------------------- /Hardware/FireFaderDerivatives/RotaryDevice/2MOTOR_H-bridge_datasheet_L298.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFaderDerivatives/RotaryDevice/2MOTOR_H-bridge_datasheet_L298.pdf -------------------------------------------------------------------------------- /Hardware/FireFaderDerivatives/RotaryDevice/arduino-micro-reference-design.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFaderDerivatives/RotaryDevice/arduino-micro-reference-design.zip -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_support.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_SUPPORT_H_ 2 | #define _EXT_SUPPORT_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_SUPPORT_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_timeline.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_TIMELINE_H_ 2 | #define _EXT_TIMELINE_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif // _EXT_TIMELINE_H_ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_anim.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_ANIM_H_ 2 | #define _EXT_ANIM_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_ANIM_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_menu.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_MENU_H_ 2 | #define _EXT_MENU_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_MENU_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_midi.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_MIDI_H_ 2 | #define _EXT_MIDI_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_MIDI_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_numc.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_NUMC_H_ 2 | #define _EXT_NUMC_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_NUMC_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_oms.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_OMS_H_ 2 | #define _EXT_OMS_H_ 3 | 4 | // OMS is no longer supported 5 | 6 | #endif /* _EXT_OMS_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-Falcon/13-Granular synthesis/christ.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-Falcon/13-Granular synthesis/christ.wav -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-Falcon/13-Granular synthesis/gurus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-Falcon/13-Granular synthesis/gurus.wav -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-Falcon/13-Granular synthesis/intro.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-Falcon/13-Granular synthesis/intro.wav -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-FireFader/21-Granular synthesis/god.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-FireFader/21-Granular synthesis/god.wav -------------------------------------------------------------------------------- /Hardware/FireFaderDerivatives/RotaryDevice/2MOTOR_H-bridge_board_dimensions.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFaderDerivatives/RotaryDevice/2MOTOR_H-bridge_board_dimensions.pdf -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/MaxAPI: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/MaxAPI -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_event.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_EVENT_H_ 2 | #define _EXT_EVENT_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_EVENT_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_track.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_TRACK_H_ 2 | #define _EXT_TRACK_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_TRACK_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_anim.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_ANIM_H_ 2 | #define _EXT_ANIM_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_ANIM_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_menu.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_MENU_H_ 2 | #define _EXT_MENU_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_MENU_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_midi.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_MIDI_H_ 2 | #define _EXT_MIDI_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_MIDI_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_numc.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_NUMC_H_ 2 | #define _EXT_NUMC_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_NUMC_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-FireFader/21-Granular synthesis/christ.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-FireFader/21-Granular synthesis/christ.wav -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-FireFader/21-Granular synthesis/gurus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-FireFader/21-Granular synthesis/gurus.wav -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-FireFader/21-Granular synthesis/intro.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-FireFader/21-Granular synthesis/intro.wav -------------------------------------------------------------------------------- /Hardware/FireFaderDerivatives/RotaryDevice/Encoder-Datasheets/HEDS_and_similar.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFaderDerivatives/RotaryDevice/Encoder-Datasheets/HEDS_and_similar.pdf -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-long/god.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-long/god.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/noise-no-fades/0.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/noise-no-fades/0.wav -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_support.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_SUPPORT_H_ 2 | #define _EXT_SUPPORT_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_SUPPORT_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_timeline.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_TIMELINE_H_ 2 | #define _EXT_TIMELINE_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif // _EXT_TIMELINE_H_ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_event.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_EVENT_H_ 2 | #define _EXT_EVENT_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_EVENT_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_track.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_TRACK_H_ 2 | #define _EXT_TRACK_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_TRACK_H_ */ 7 | -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-long/christ.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-long/christ.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-long/gurus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-long/gurus.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter/0.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter/0.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter/god.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter/god.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/noise-no-fades/god.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/noise-no-fades/god.wav -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_support.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_SUPPORT_H_ 2 | #define _EXT_SUPPORT_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif /* _EXT_SUPPORT_H_ */ 7 | -------------------------------------------------------------------------------- /Hardware/FireFaderDerivatives/RotaryDevice/Encoder-Datasheets/HEDS_and_similar_older.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFaderDerivatives/RotaryDevice/Encoder-Datasheets/HEDS_and_similar_older.pdf -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter/gurus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter/gurus.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/0.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/0.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/noise-no-fades/christ.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/noise-no-fades/christ.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/noise-no-fades/gurus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/noise-no-fades/gurus.wav -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_timeline.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_TIMELINE_H_ 2 | #define _EXT_TIMELINE_H_ 3 | 4 | // NOTE: This file is obsolete. 5 | 6 | #endif // _EXT_TIMELINE_H_ 7 | -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-many-notes/god.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-many-notes/god.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter/christ.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter/christ.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/god.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/god.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/gurus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/gurus.wav -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/MaxAPI: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/MaxAPI -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/MaxAudioAPI: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/MaxAudioAPI -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-FireFader/24-Scrubbing-with-phase-vocoder/sax1m.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-FireFader/24-Scrubbing-with-phase-vocoder/sax1m.wav -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-FireFader/24-Scrubbing-with-phase-vocoder/sax3m.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/physical-modeling-lecture-FireFader/24-Scrubbing-with-phase-vocoder/sax3m.wav -------------------------------------------------------------------------------- /Hardware/FireFader/Firmware/haptics_firmware_old_lesssensitive_capsensing_level/Firmware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Hardware/FireFader/Firmware/haptics_firmware_old_lesssensitive_capsensing_level/Firmware.png -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-many-notes/christ.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-many-notes/christ.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/christ.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/christ.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/god-old1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/god-old1.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/gurus-old1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/gurus-old1.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/christ-old1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-very-short/christ-old1.wav -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/MaxAPI: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/MaxAPI -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/comport/comport-meta.pd: -------------------------------------------------------------------------------- 1 | #N canvas 15 49 200 200 10; 2 | #N canvas 25 49 420 300 META 1; 3 | #X text 13 41 NAME comport; 4 | #X text 10 25 AUTHOR Winfried Ritsch and others; 5 | #X text 10 10 VERSION 0.2; 6 | #X restore 10 10 pd META; 7 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Versions/A/MaxAudioAPI: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Versions/A/MaxAudioAPI -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter-with-extra-silence/0.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter-with-extra-silence/0.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter-with-extra-silence/god.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter-with-extra-silence/god.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter-with-extra-silence/christ.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter-with-extra-silence/christ.wav -------------------------------------------------------------------------------- /Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter-with-extra-silence/gurus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/models-Falcon/Catching snow/less-exciting-samples/gamelan-shorter-with-extra-silence/gurus.wav -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/macho-prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'MaxExternal' target in the 'MaxExternal' project. 3 | // 4 | 5 | #include 6 | #include 7 | 8 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Versions/Current/MaxAudioAPI: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Versions/Current/MaxAudioAPI -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/macho-prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'MaxExternal' target in the 'MaxExternal' project. 3 | // 4 | 5 | #include 6 | #include 7 | 8 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Resources/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Resources/English.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/macho-prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'MaxExternal' target in the 'MaxExternal' project. 3 | // 4 | 5 | #include 6 | #include 7 | 8 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/edit.h: -------------------------------------------------------------------------------- 1 | /*************************/ 2 | /* Copyright 1988 IRCAM. */ 3 | /*************************/ 4 | 5 | #ifndef _EDIT_H_ 6 | #define _EDIT_H_ 7 | 8 | // NOTE: This file is obsolete. 9 | 10 | #endif /* _EDIT_H_ */ 11 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_fun.h: -------------------------------------------------------------------------------- 1 | /*************************/ 2 | /* Copyright 1988 IRCAM. */ 3 | /*************************/ 4 | 5 | #ifndef _EXT_FUN_H_ 6 | #define _EXT_FUN_H_ 7 | 8 | // NOTE: This file is obsolete. 9 | 10 | #endif /* _EXT_FUN_H_ */ 11 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/edit.h: -------------------------------------------------------------------------------- 1 | /*************************/ 2 | /* Copyright 1988 IRCAM. */ 3 | /*************************/ 4 | 5 | #ifndef _EDIT_H_ 6 | #define _EDIT_H_ 7 | 8 | // NOTE: This file is obsolete. 9 | 10 | #endif /* _EDIT_H_ */ 11 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Resources/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Resources/English.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/edit.h: -------------------------------------------------------------------------------- 1 | /*************************/ 2 | /* Copyright 1988 IRCAM. */ 3 | /*************************/ 4 | 5 | #ifndef _EDIT_H_ 6 | #define _EDIT_H_ 7 | 8 | // NOTE: This file is obsolete. 9 | 10 | #endif /* _EDIT_H_ */ 11 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_fun.h: -------------------------------------------------------------------------------- 1 | /*************************/ 2 | /* Copyright 1988 IRCAM. */ 3 | /*************************/ 4 | 5 | #ifndef _EXT_FUN_H_ 6 | #define _EXT_FUN_H_ 7 | 8 | // NOTE: This file is obsolete. 9 | 10 | #endif /* _EXT_FUN_H_ */ 11 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Resources/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eberdahl/Open-Source-Haptics-For-Artists/HEAD/Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Resources/English.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_fun.h: -------------------------------------------------------------------------------- 1 | /*************************/ 2 | /* Copyright 1988 IRCAM. */ 3 | /*************************/ 4 | 5 | #ifndef _EXT_FUN_H_ 6 | #define _EXT_FUN_H_ 7 | 8 | // NOTE: This file is obsolete. 9 | 10 | #endif /* _EXT_FUN_H_ */ 11 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/commonsyms.c: -------------------------------------------------------------------------------- 1 | /* 2 | commonsyms.c 3 | 4 | Copyright 2001-2008 - Cycling '74 5 | Joshua Kit Clayton jkc@cycling74.com 6 | 7 | */ 8 | 9 | #include "ext.h" 10 | #include "commonsyms.h" 11 | 12 | t_common_symbols_table *_common_symbols=NULL; 13 | 14 | void common_symbols_init(void) 15 | { 16 | _common_symbols = common_symbols_gettable(); 17 | } 18 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/commonsyms.c: -------------------------------------------------------------------------------- 1 | /* 2 | commonsyms.c 3 | 4 | Copyright 2001-2008 - Cycling '74 5 | Joshua Kit Clayton jkc@cycling74.com 6 | 7 | */ 8 | 9 | #include "ext.h" 10 | #include "commonsyms.h" 11 | 12 | t_common_symbols_table *_common_symbols=NULL; 13 | 14 | void common_symbols_init(void) 15 | { 16 | _common_symbols = common_symbols_gettable(); 17 | } 18 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/commonsyms.c: -------------------------------------------------------------------------------- 1 | /* 2 | commonsyms.c 3 | 4 | Copyright 2001-2008 - Cycling '74 5 | Joshua Kit Clayton jkc@cycling74.com 6 | 7 | */ 8 | 9 | #include "ext.h" 10 | #include "commonsyms.h" 11 | 12 | t_common_symbols_table *_common_symbols=NULL; 13 | 14 | void common_symbols_init(void) 15 | { 16 | _common_symbols = common_symbols_gettable(); 17 | } 18 | -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/comport/CHANGES.txt: -------------------------------------------------------------------------------- 1 | 1.0 - 25.1.2006 2 | released with pd_darwin makefile extension 3 | 4 | 1.0RC2 - 18.11.2005 5 | 6 | made more C-compatible and LGPL 7 | added some code for NT and a Test SWITCH for W2000 8 | 9 | 1.0RC1 - (12.4.2005) 10 | 11 | first check in pure-data.sourceforge.net 12 | added print feature and USB devices from posted by Marc Boon 13 | 14 | 0.9beta2 (somedate before 2004) 15 | 16 | CHANGES.txt startet 17 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_colors.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_COLORS_H_ 2 | #define _EXT_COLORS_H_ 3 | 4 | /* 5 | #define P_WHITE 0 6 | #define P_BLACK 1 7 | #define P_GRAYULITE 20 8 | #define P_GRAYVLITE 21 9 | #define P_GRAYLITE 22 10 | #define P_GRAYMED 25 11 | #define P_GRAYDARK 27 12 | #define P_COLOR1 4 13 | #define P_COLOR16 19 14 | #define P_YELLOW 32 15 | #define P_RED 33 16 | */ 17 | 18 | #endif /* _EXT_COLORS_H_ */ 19 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_colors.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_COLORS_H_ 2 | #define _EXT_COLORS_H_ 3 | 4 | /* 5 | #define P_WHITE 0 6 | #define P_BLACK 1 7 | #define P_GRAYULITE 20 8 | #define P_GRAYVLITE 21 9 | #define P_GRAYLITE 22 10 | #define P_GRAYMED 25 11 | #define P_GRAYDARK 27 12 | #define P_COLOR1 4 13 | #define P_COLOR16 19 14 | #define P_YELLOW 32 15 | #define P_RED 33 16 | */ 17 | 18 | #endif /* _EXT_COLORS_H_ */ 19 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_colors.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_COLORS_H_ 2 | #define _EXT_COLORS_H_ 3 | 4 | /* 5 | #define P_WHITE 0 6 | #define P_BLACK 1 7 | #define P_GRAYULITE 20 8 | #define P_GRAYVLITE 21 9 | #define P_GRAYLITE 22 10 | #define P_GRAYMED 25 11 | #define P_GRAYDARK 27 12 | #define P_COLOR1 4 13 | #define P_COLOR16 19 14 | #define P_YELLOW 32 15 | #define P_RED 33 16 | */ 17 | 18 | #endif /* _EXT_COLORS_H_ */ 19 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_byteorder.c: -------------------------------------------------------------------------------- 1 | 2 | float byteorder_swapf32(float f){ 3 | unsigned char c,*a; 4 | 5 | a = (unsigned char *)&f; 6 | c=a[3]; a[3]=a[0]; a[0]=c; 7 | c=a[2]; a[2]=a[1]; a[1]=c; 8 | 9 | return f; 10 | } 11 | 12 | double byteorder_swapf64(double f){ 13 | unsigned char c,*a; 14 | 15 | a = (unsigned char *)&f; 16 | c=a[7]; a[7]=a[0]; a[0]=c; 17 | c=a[6]; a[6]=a[1]; a[1]=c; 18 | c=a[5]; a[5]=a[2]; a[2]=c; 19 | c=a[4]; a[4]=a[3]; a[3]=c; 20 | 21 | return f; 22 | } -------------------------------------------------------------------------------- /Hardware/ThePlank/Further Resources.txt: -------------------------------------------------------------------------------- 1 | Please see the papers for more info! 2 | 3 | William Verplank. 2005. Haptic music exercises. In Proceedings of the 2005 conference on New interfaces for musical expression (NIME '05). National University of Singapore, Singapore, Singapore, 256-257. 4 | 5 | Bill Verplank, Michael Gurevich, and Max Mathews. 2002. The Plank: designing a simple haptic controller. In Proceedings of the 2002 conference on New interfaces for musical expression (NIME '02), Eoin Brazil (Ed.). National University of Singapore, Singapore, Singapore, 1-4. 6 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_byteorder.c: -------------------------------------------------------------------------------- 1 | 2 | float byteorder_swapf32(float f){ 3 | unsigned char c,*a; 4 | 5 | a = (unsigned char *)&f; 6 | c=a[3]; a[3]=a[0]; a[0]=c; 7 | c=a[2]; a[2]=a[1]; a[1]=c; 8 | 9 | return f; 10 | } 11 | 12 | double byteorder_swapf64(double f){ 13 | unsigned char c,*a; 14 | 15 | a = (unsigned char *)&f; 16 | c=a[7]; a[7]=a[0]; a[0]=c; 17 | c=a[6]; a[6]=a[1]; a[1]=c; 18 | c=a[5]; a[5]=a[2]; a[2]=c; 19 | c=a[4]; a[4]=a[3]; a[3]=c; 20 | 21 | return f; 22 | } -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_byteorder.c: -------------------------------------------------------------------------------- 1 | 2 | float byteorder_swapf32(float f){ 3 | unsigned char c,*a; 4 | 5 | a = (unsigned char *)&f; 6 | c=a[3]; a[3]=a[0]; a[0]=c; 7 | c=a[2]; a[2]=a[1]; a[1]=c; 8 | 9 | return f; 10 | } 11 | 12 | double byteorder_swapf64(double f){ 13 | unsigned char c,*a; 14 | 15 | a = (unsigned char *)&f; 16 | c=a[7]; a[7]=a[0]; a[0]=c; 17 | c=a[6]; a[6]=a[1]; a[1]=c; 18 | c=a[5]; a[5]=a[2]; a[2]=c; 19 | c=a[4]; a[4]=a[3]; a[3]=c; 20 | 21 | return f; 22 | } -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_default.h: -------------------------------------------------------------------------------- 1 | // default value mechanism 2 | #include "ext.h" 3 | 4 | #define DEFAULT_GLOBAL (void *)-1L // this will be changed to NULL once hashtab supports it 5 | 6 | #ifdef __cplusplus 7 | extern "C" { 8 | #endif 9 | 10 | t_max_err patcher_setdefault(t_object *patcher, t_symbol *key, long argc, t_atom *argv); 11 | t_max_err patcher_getdefault(t_object *patcher, t_symbol *key, long *argc, t_atom *argv); 12 | t_max_err patcher_removedefault(t_object *patcher, t_symbol *key); 13 | 14 | #ifdef __cplusplus 15 | } 16 | #endif 17 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_default.h: -------------------------------------------------------------------------------- 1 | // default value mechanism 2 | #include "ext.h" 3 | 4 | #define DEFAULT_GLOBAL (void *)-1L // this will be changed to NULL once hashtab supports it 5 | 6 | #ifdef __cplusplus 7 | extern "C" { 8 | #endif 9 | 10 | t_max_err patcher_setdefault(t_object *patcher, t_symbol *key, long argc, t_atom *argv); 11 | t_max_err patcher_getdefault(t_object *patcher, t_symbol *key, long *argc, t_atom *argv); 12 | t_max_err patcher_removedefault(t_object *patcher, t_symbol *key); 13 | 14 | #ifdef __cplusplus 15 | } 16 | #endif 17 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_default.h: -------------------------------------------------------------------------------- 1 | // default value mechanism 2 | #include "ext.h" 3 | 4 | #define DEFAULT_GLOBAL (void *)-1L // this will be changed to NULL once hashtab supports it 5 | 6 | #ifdef __cplusplus 7 | extern "C" { 8 | #endif 9 | 10 | t_max_err patcher_setdefault(t_object *patcher, t_symbol *key, long argc, t_atom *argv); 11 | t_max_err patcher_getdefault(t_object *patcher, t_symbol *key, long *argc, t_atom *argv); 12 | t_max_err patcher_removedefault(t_object *patcher, t_symbol *key); 13 | 14 | #ifdef __cplusplus 15 | } 16 | #endif 17 | -------------------------------------------------------------------------------- /Hardware/FireFader/Analog inputs.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 2 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 3 | {\colortbl;\red255\green255\blue255;} 4 | \paperw11905\paperh16837\margl1440\margr1440\vieww22100\viewh10260\viewkind0 5 | \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural 6 | 7 | \f0\fs24 \cf0 A0: Current sense of motor A\ 8 | A1: Current sense of motor B\ 9 | A2: Position of Motor A\ 10 | A3: Position of Motor B\ 11 | \ 12 | \ 13 | A6: FSR for Plank motor A (CiiD only uses a single Plank and puts this between A6 and A4 and uses the Arduino-internal pull-down resistor)} -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/mycounter2.pd: -------------------------------------------------------------------------------- 1 | #N canvas 182 418 450 300 10; 2 | #X text 19 -44 Since counter is gone in pd vanilla; 3 | #X obj 100 8 inlet; 4 | #X obj 38 7 inlet; 5 | #X obj 287 13 inlet; 6 | #X obj 167 9 inlet; 7 | #X obj 229 10 inlet; 8 | #X floatatom 49 101 5 0 0 0 - - -, f 5; 9 | #X obj 49 132 + 1; 10 | #X msg 71 166 set \$1; 11 | #X obj 20 71 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 12 | -1; 13 | #X msg 162 60 set -1; 14 | #X obj 68 221 outlet; 15 | #X connect 2 0 6 0; 16 | #X connect 4 0 10 0; 17 | #X connect 6 0 7 0; 18 | #X connect 7 0 8 0; 19 | #X connect 7 0 11 0; 20 | #X connect 8 0 6 0; 21 | #X connect 9 0 6 0; 22 | #X connect 10 0 6 0; 23 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | MaxAudioAPI 9 | CFBundleIdentifier 10 | com.cycling74.MaxAudioAPI 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | FMWK 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | 20 | 21 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | MaxAudioAPI 9 | CFBundleIdentifier 10 | com.cycling74.MaxAudioAPI 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | FMWK 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | 20 | 21 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Versions/Current/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | MaxAudioAPI 9 | CFBundleIdentifier 10 | com.cycling74.MaxAudioAPI 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | FMWK 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | 20 | 21 | -------------------------------------------------------------------------------- /Hardware/FireFaderDerivatives/RotaryDevice-2Motors/Readme.md: -------------------------------------------------------------------------------- 1 | This design is the same as the FireFader except that in place of fader A, a rotary motor with rotary encoder is connected. In place of fader B, a second rotary motor with rotary encoder is connected. For those motors, we have the same power connections as with the motorized fader. 2 | 3 | 4 | 5 | 6 | This is how it works using two motors: 7 | 8 | We could use one hardware interrupt per motor. In this case, we will have to rewrite the interrupt handlers CountA() and CountB() to do the logic for each motor separately. In that case, whenever an interrupt is triggered, we need to manually check the value of the other phase (connected to some other digital input pin that doesn’t support hardware interrupts) and then figure out how to do the right state machine logic. 9 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | MaxAPI 9 | CFBundleIdentifier 10 | com.cycling74.MaxAPI 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | FMWK 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | CSResourcesFileMapped 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | MaxAPI 9 | CFBundleIdentifier 10 | com.cycling74.MaxAPI 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | FMWK 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | CSResourcesFileMapped 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Headers/z_altivec.h: -------------------------------------------------------------------------------- 1 | #ifdef __ALTIVEC__ 2 | #pragma altivec_model on 3 | 4 | #ifdef __cplusplus 5 | #include // for vec_malloc 6 | #endif 7 | 8 | #define SIXTEENIZE(p) ((((unsigned long)(p)) + 16) & 0xFFFFFFF0L); 9 | 10 | typedef union 11 | { 12 | float flt[4]; 13 | vector float vFlt; 14 | } floatToVector; 15 | 16 | static floatToVector __vsf_temp; 17 | 18 | // this is what was needed to convince the compiler to copy a float to 19 | // the four float locations in a vector 20 | 21 | #define vec_splat_float(v,f) { \ 22 | __vsf_temp.flt[0] = f; \ 23 | v = vec_splat( vec_lde( 0, __vsf_temp.flt ), 0 ); } 24 | 25 | #define VRSAVE asm { li r0,-1 ; mtspr vrsave,r0 } 26 | 27 | #pragma altivec_model off 28 | #endif 29 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | MaxAPI 9 | CFBundleIdentifier 10 | com.cycling74.MaxAPI 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | FMWK 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | CSResourcesFileMapped 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Versions/A/Headers/z_altivec.h: -------------------------------------------------------------------------------- 1 | #ifdef __ALTIVEC__ 2 | #pragma altivec_model on 3 | 4 | #ifdef __cplusplus 5 | #include // for vec_malloc 6 | #endif 7 | 8 | #define SIXTEENIZE(p) ((((unsigned long)(p)) + 16) & 0xFFFFFFF0L); 9 | 10 | typedef union 11 | { 12 | float flt[4]; 13 | vector float vFlt; 14 | } floatToVector; 15 | 16 | static floatToVector __vsf_temp; 17 | 18 | // this is what was needed to convince the compiler to copy a float to 19 | // the four float locations in a vector 20 | 21 | #define vec_splat_float(v,f) { \ 22 | __vsf_temp.flt[0] = f; \ 23 | v = vec_splat( vec_lde( 0, __vsf_temp.flt ), 0 ); } 24 | 25 | #define VRSAVE asm { li r0,-1 ; mtspr vrsave,r0 } 26 | 27 | #pragma altivec_model off 28 | #endif 29 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Versions/Current/Headers/z_altivec.h: -------------------------------------------------------------------------------- 1 | #ifdef __ALTIVEC__ 2 | #pragma altivec_model on 3 | 4 | #ifdef __cplusplus 5 | #include // for vec_malloc 6 | #endif 7 | 8 | #define SIXTEENIZE(p) ((((unsigned long)(p)) + 16) & 0xFFFFFFF0L); 9 | 10 | typedef union 11 | { 12 | float flt[4]; 13 | vector float vFlt; 14 | } floatToVector; 15 | 16 | static floatToVector __vsf_temp; 17 | 18 | // this is what was needed to convince the compiler to copy a float to 19 | // the four float locations in a vector 20 | 21 | #define vec_splat_float(v,f) { \ 22 | __vsf_temp.flt[0] = f; \ 23 | v = vec_splat( vec_lde( 0, __vsf_temp.flt ), 0 ); } 24 | 25 | #define VRSAVE asm { li r0,-1 ; mtspr vrsave,r0 } 26 | 27 | #pragma altivec_model off 28 | #endif 29 | -------------------------------------------------------------------------------- /Hardware/FireFader/PCB/FireFaderRev1/Notes.txt: -------------------------------------------------------------------------------- 1 | The FireFader is a haptic device, whose electronics can be easily realized using a simple breadboard. In our opinion, the PCB is not really part of the original concept of the FireFader. However, some folks have been asking for the PCB design, with the potential for creating other derivative designs, which is a nice possibility, so the PCB version is posted here as well. 2 | 3 | This design is specifically for the ALPS RSA0N11M9A06. This specific part might no longer be available new; however, new ALPS parts with a very similar part number (that to us are indistinguishable) appear to be drop-in replacements. 4 | 5 | Additional notes: 6 | • The schematic part symbol in the .brd file is not accurate; however, the manufactured board has verified as working. 7 | • There might potentially be other issues with the ALPS-motorfader.lbr which was found on the Internet and whose footprint had to be modified in order to generate correct Gerber files. 8 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Headers/r_pfft.h: -------------------------------------------------------------------------------- 1 | // public fftpatcher struct 2 | 3 | #if C74_PRAGMA_STRUCT_PACKPUSH 4 | #pragma pack(push, 2) 5 | #elif C74_PRAGMA_STRUCT_PACK 6 | #pragma pack(2) 7 | #endif 8 | 9 | /** Public FFT Patcher struct. 10 | @ingroup pfft 11 | */ 12 | typedef struct _pfftpub { 13 | t_pxobject x_obj; 14 | t_object *x_parent; ///< parent patcher 15 | t_object *x_patcher; ///< patcher loaded 16 | struct _dspchain *x_chain; ///< dsp chain within pfft 17 | long x_fftsize; ///< fft frame size 18 | long x_ffthop; ///< hop between fft frames 19 | long x_fftoffset; ///< n samples offset before fft is started 20 | long x_fftindex; ///< current index into fft frame 21 | short x_fullspect; ///< process half-spectrum (0) or full mirrored spectrum (1)? 22 | } t_pfftpub; 23 | 24 | 25 | #if C74_PRAGMA_STRUCT_PACKPUSH 26 | #pragma pack(pop) 27 | #elif C74_PRAGMA_STRUCT_PACK 28 | #pragma pack() 29 | #endif 30 | 31 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Versions/A/Headers/r_pfft.h: -------------------------------------------------------------------------------- 1 | // public fftpatcher struct 2 | 3 | #if C74_PRAGMA_STRUCT_PACKPUSH 4 | #pragma pack(push, 2) 5 | #elif C74_PRAGMA_STRUCT_PACK 6 | #pragma pack(2) 7 | #endif 8 | 9 | /** Public FFT Patcher struct. 10 | @ingroup pfft 11 | */ 12 | typedef struct _pfftpub { 13 | t_pxobject x_obj; 14 | t_object *x_parent; ///< parent patcher 15 | t_object *x_patcher; ///< patcher loaded 16 | struct _dspchain *x_chain; ///< dsp chain within pfft 17 | long x_fftsize; ///< fft frame size 18 | long x_ffthop; ///< hop between fft frames 19 | long x_fftoffset; ///< n samples offset before fft is started 20 | long x_fftindex; ///< current index into fft frame 21 | short x_fullspect; ///< process half-spectrum (0) or full mirrored spectrum (1)? 22 | } t_pfftpub; 23 | 24 | 25 | #if C74_PRAGMA_STRUCT_PACKPUSH 26 | #pragma pack(pop) 27 | #elif C74_PRAGMA_STRUCT_PACK 28 | #pragma pack() 29 | #endif 30 | 31 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Versions/Current/Headers/r_pfft.h: -------------------------------------------------------------------------------- 1 | // public fftpatcher struct 2 | 3 | #if C74_PRAGMA_STRUCT_PACKPUSH 4 | #pragma pack(push, 2) 5 | #elif C74_PRAGMA_STRUCT_PACK 6 | #pragma pack(2) 7 | #endif 8 | 9 | /** Public FFT Patcher struct. 10 | @ingroup pfft 11 | */ 12 | typedef struct _pfftpub { 13 | t_pxobject x_obj; 14 | t_object *x_parent; ///< parent patcher 15 | t_object *x_patcher; ///< patcher loaded 16 | struct _dspchain *x_chain; ///< dsp chain within pfft 17 | long x_fftsize; ///< fft frame size 18 | long x_ffthop; ///< hop between fft frames 19 | long x_fftoffset; ///< n samples offset before fft is started 20 | long x_fftindex; ///< current index into fft frame 21 | short x_fullspect; ///< process half-spectrum (0) or full mirrored spectrum (1)? 22 | } t_pfftpub; 23 | 24 | 25 | #if C74_PRAGMA_STRUCT_PACKPUSH 26 | #pragma pack(pop) 27 | #elif C74_PRAGMA_STRUCT_PACK 28 | #pragma pack() 29 | #endif 30 | 31 | -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/comport/README.txt: -------------------------------------------------------------------------------- 1 | comport - PD external for unix/windows to use the serial ports 2 | 3 | (c) 1998-2005 Winfried Ritsch (see LICENCE.txt) 4 | Institute for Electronic Music - Graz 5 | 6 | on Windows the COM0, COM1, ... are used and 7 | under Unix devices /dev/ttyS0, /dev/ttyS1, ... 8 | and new on unix /dev/USB0, ... and can be accessed via a Index. 9 | 10 | Please see testcomport.pd for more help. 11 | 12 | USE: There should be a external comport.dll for windows, comport.pd_linux for linux and so on. 13 | 14 | just copy it to the extra folder of your pd Installation or working directory. 15 | Please see testcomport.pd for more help. 16 | 17 | compile: 18 | 19 | Unix (Linux): 20 | make pd_linux, make pd_irix5, make pd_irix6, make pd_darwin 21 | should produce a comport.pd_linux, .... 22 | 23 | 24 | Windows: use nmake or just use Fast Build under MSVC++ 25 | nmake pd_nt 26 | 27 | 28 | 29 | If you have improvements or questions feel free to contact me under 30 | ritsch _at_ iem.at 31 | -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/comport/makefile_win: -------------------------------------------------------------------------------- 1 | 2 | all: comport.dll 3 | 4 | VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio\Vc98" 5 | 6 | PD_INST_PATH = "C:\Programme\pd" 7 | 8 | PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include 9 | 10 | PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -DPA_LITTLE_ENDIAN 11 | 12 | PD_WIN_L_FLAGS = /nologo 13 | 14 | PD_WIN_LIB = /NODEFAULTLIB:libc /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel /NODEFAULTLIB:uuid \ 15 | $(VIS_CPP_PATH)\lib\libc.lib \ 16 | $(VIS_CPP_PATH)\lib\oldnames.lib \ 17 | $(VIS_CPP_PATH)\lib\kernel32.lib \ 18 | $(VIS_CPP_PATH)\lib\wsock32.lib \ 19 | $(VIS_CPP_PATH)\lib\winmm.lib \ 20 | $(PD_INST_PATH)\bin\pthreadVC.lib \ 21 | $(PD_INST_PATH)\bin\pd.lib 22 | 23 | 24 | SRC = comport.c 25 | 26 | 27 | OBJ = $(SRC:.c=.obj) 28 | 29 | .c.obj: 30 | cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c 31 | 32 | comport.dll: $(OBJ) 33 | link $(PD_WIN_L_FLAGS) /dll /export:comport_setup \ 34 | /out:comport.dll $(OBJ) $(PD_WIN_LIB) 35 | 36 | clean: 37 | del *.obj 38 | -------------------------------------------------------------------------------- /Hardware/FireFader/Advice for building.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 2 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 3 | {\colortbl;\red255\green255\blue255;} 4 | \paperw11905\paperh16837\margl1440\margr1440\vieww22100\viewh10260\viewkind0 5 | \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural 6 | 7 | \f0\fs24 \cf0 Construction process:\ 8 | \ 9 | \ 10 | - carefully push on the knobs with sliders at one end (also solder the brown ground wire to the case of the sliders to improve the capacitive sensing performance)\ 11 | \ 12 | - load firmware onto the arduino\ 13 | \ 14 | - test sensing capability using only usb power\ 15 | \ 16 | - solder/connect remaining high current wires\ 17 | \ 18 | - test the springs model in Max/MSP, while holding the power cord ready to remove it in case of force polarity error\ 19 | \ 20 | Note: Be careful with heat gun -- it is possible to melt a part of the fader.\ 21 | \ 22 | Note: If building by soldering wires directly to the motor controller board, use heat shrink when soldering to pins A2 and D2.\ 23 | } -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_sndfile.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_SNDFILE_H_ 2 | #define _EXT_SNDFILE_H_ 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | #if C74_PRAGMA_STRUCT_PACKPUSH 9 | #pragma pack(push, 2) 10 | #elif C74_PRAGMA_STRUCT_PACK 11 | #pragma pack(2) 12 | #endif 13 | 14 | typedef struct _sndfileinfo 15 | { 16 | long sr; 17 | long length; 18 | long sampsize; // in bytes 19 | unsigned long filetype; 20 | unsigned long comptype; 21 | unsigned long format; 22 | char name[128]; 23 | long byteswap; 24 | long nchans; 25 | long frames; 26 | void *inst; 27 | void *markers; 28 | long framesize; 29 | long offset; 30 | } t_sndfileinfo; 31 | 32 | short sndfile_info(char *filename, short vol, unsigned long type, t_sndfileinfo *info); 33 | long sndfile_writeheader(t_filehandle fh, long type, long size, long nchans, long ssize, long srate, unsigned long samptype); 34 | 35 | #if C74_PRAGMA_STRUCT_PACKPUSH 36 | #pragma pack(pop) 37 | #elif C74_PRAGMA_STRUCT_PACK 38 | #pragma pack() 39 | #endif 40 | 41 | #ifdef __cplusplus 42 | } 43 | #endif 44 | 45 | #endif // _EXT_SNDFILE_H_ 46 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_sndfile.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_SNDFILE_H_ 2 | #define _EXT_SNDFILE_H_ 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | #if C74_PRAGMA_STRUCT_PACKPUSH 9 | #pragma pack(push, 2) 10 | #elif C74_PRAGMA_STRUCT_PACK 11 | #pragma pack(2) 12 | #endif 13 | 14 | typedef struct _sndfileinfo 15 | { 16 | long sr; 17 | long length; 18 | long sampsize; // in bytes 19 | unsigned long filetype; 20 | unsigned long comptype; 21 | unsigned long format; 22 | char name[128]; 23 | long byteswap; 24 | long nchans; 25 | long frames; 26 | void *inst; 27 | void *markers; 28 | long framesize; 29 | long offset; 30 | } t_sndfileinfo; 31 | 32 | short sndfile_info(char *filename, short vol, unsigned long type, t_sndfileinfo *info); 33 | long sndfile_writeheader(t_filehandle fh, long type, long size, long nchans, long ssize, long srate, unsigned long samptype); 34 | 35 | #if C74_PRAGMA_STRUCT_PACKPUSH 36 | #pragma pack(pop) 37 | #elif C74_PRAGMA_STRUCT_PACK 38 | #pragma pack() 39 | #endif 40 | 41 | #ifdef __cplusplus 42 | } 43 | #endif 44 | 45 | #endif // _EXT_SNDFILE_H_ 46 | -------------------------------------------------------------------------------- /Hardware/FireFaderDerivatives/RotaryDevice/FirmwareModels/Readme.md: -------------------------------------------------------------------------------- 1 | Simple models can be implemented directly in firmware for a higher quality result. However, it's more challenging to program such models. Here is an example designed for the rotary device when using a rotary encoder with 1000 counts/revolution. 2 | 3 | I suggest uncommenting one line for unsignedForceA under 4 | 5 | // -------- BEGIN USER CODE TO CONTROL KNOB --------- 6 | 7 | and one line for unsignedForceB under 8 | 9 | // -------- END USER CODE TO CONTROL KNOB AND FADER --------- 10 | 11 | to try out some examples. It should also be possible to superimpose the control laws specified by these lines of code. 12 | 13 | It's necessary to use integers only to avoid slowing the control loop down too much. (Even a single floating point multiply can take 0.5ms!) I use mostly 8-bit and 16-bit integers, while occasionally using a few 32-bit integers when necessary. 14 | 15 | With models like these, it's very hard to get high quality audio by programming, but as you will be able to see, the haptic quality can still be intriguing, and it is "more stable", allowing higher stiffnesses and damping parameters to be rendered. -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_sndfile.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_SNDFILE_H_ 2 | #define _EXT_SNDFILE_H_ 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | #if C74_PRAGMA_STRUCT_PACKPUSH 9 | #pragma pack(push, 2) 10 | #elif C74_PRAGMA_STRUCT_PACK 11 | #pragma pack(2) 12 | #endif 13 | 14 | typedef struct _sndfileinfo 15 | { 16 | long sr; 17 | long length; 18 | long sampsize; // in bytes 19 | unsigned long filetype; 20 | unsigned long comptype; 21 | unsigned long format; 22 | char name[128]; 23 | long byteswap; 24 | long nchans; 25 | long frames; 26 | void *inst; 27 | void *markers; 28 | long framesize; 29 | long offset; 30 | } t_sndfileinfo; 31 | 32 | short sndfile_info(char *filename, short vol, unsigned long type, t_sndfileinfo *info); 33 | long sndfile_writeheader(t_filehandle fh, long type, long size, long nchans, long ssize, long srate, unsigned long samptype); 34 | 35 | #if C74_PRAGMA_STRUCT_PACKPUSH 36 | #pragma pack(pop) 37 | #elif C74_PRAGMA_STRUCT_PACK 38 | #pragma pack() 39 | #endif 40 | 41 | #ifdef __cplusplus 42 | } 43 | #endif 44 | 45 | #endif // _EXT_SNDFILE_H_ 46 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_H_ 2 | #define _EXT_H_ 3 | 4 | #define C74_MAX_SDK_VERSION 0x0508 5 | 6 | #include "ext_prefix.h" /* this header must always be first */ 7 | 8 | BEGIN_USING_C_LINKAGE 9 | 10 | #include "ext_mess.h" 11 | 12 | typedef short (*fretint)(void *, ...); /* kludge to cast to function returning int */ 13 | typedef short (*eachdomethod)(void *, ...); 14 | typedef long (*exprmethod)(void *, ...); 15 | typedef long (*fptr)(void *, ...); 16 | typedef void *(*methodptr)(void *, ...); 17 | 18 | #define clock_free freeobject 19 | #define binbuf_free freeobject 20 | #define wind_free freeobject 21 | 22 | #define ASSIST_INLET 1 23 | #define ASSIST_OUTLET 2 24 | 25 | /** 26 | This macro being defined means that getbytes and sysmem APIs for memory management are unified. 27 | This is correct for Max 5, but should be commented out when compiling for old max targets. 28 | @ingroup memory 29 | */ 30 | #define MM_UNIFIED 31 | 32 | #include "ext_types.h" 33 | #include "ext_maxtypes.h" 34 | #include "ext_byteorder.h" 35 | 36 | #include "ext_proto.h" 37 | 38 | END_USING_C_LINKAGE 39 | 40 | #endif /* _EXT_H_ */ 41 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_H_ 2 | #define _EXT_H_ 3 | 4 | #define C74_MAX_SDK_VERSION 0x0508 5 | 6 | #include "ext_prefix.h" /* this header must always be first */ 7 | 8 | BEGIN_USING_C_LINKAGE 9 | 10 | #include "ext_mess.h" 11 | 12 | typedef short (*fretint)(void *, ...); /* kludge to cast to function returning int */ 13 | typedef short (*eachdomethod)(void *, ...); 14 | typedef long (*exprmethod)(void *, ...); 15 | typedef long (*fptr)(void *, ...); 16 | typedef void *(*methodptr)(void *, ...); 17 | 18 | #define clock_free freeobject 19 | #define binbuf_free freeobject 20 | #define wind_free freeobject 21 | 22 | #define ASSIST_INLET 1 23 | #define ASSIST_OUTLET 2 24 | 25 | /** 26 | This macro being defined means that getbytes and sysmem APIs for memory management are unified. 27 | This is correct for Max 5, but should be commented out when compiling for old max targets. 28 | @ingroup memory 29 | */ 30 | #define MM_UNIFIED 31 | 32 | #include "ext_types.h" 33 | #include "ext_maxtypes.h" 34 | #include "ext_byteorder.h" 35 | 36 | #include "ext_proto.h" 37 | 38 | END_USING_C_LINKAGE 39 | 40 | #endif /* _EXT_H_ */ 41 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_H_ 2 | #define _EXT_H_ 3 | 4 | #define C74_MAX_SDK_VERSION 0x0508 5 | 6 | #include "ext_prefix.h" /* this header must always be first */ 7 | 8 | BEGIN_USING_C_LINKAGE 9 | 10 | #include "ext_mess.h" 11 | 12 | typedef short (*fretint)(void *, ...); /* kludge to cast to function returning int */ 13 | typedef short (*eachdomethod)(void *, ...); 14 | typedef long (*exprmethod)(void *, ...); 15 | typedef long (*fptr)(void *, ...); 16 | typedef void *(*methodptr)(void *, ...); 17 | 18 | #define clock_free freeobject 19 | #define binbuf_free freeobject 20 | #define wind_free freeobject 21 | 22 | #define ASSIST_INLET 1 23 | #define ASSIST_OUTLET 2 24 | 25 | /** 26 | This macro being defined means that getbytes and sysmem APIs for memory management are unified. 27 | This is correct for Max 5, but should be commented out when compiling for old max targets. 28 | @ingroup memory 29 | */ 30 | #define MM_UNIFIED 31 | 32 | #include "ext_types.h" 33 | #include "ext_maxtypes.h" 34 | #include "ext_byteorder.h" 35 | 36 | #include "ext_proto.h" 37 | 38 | END_USING_C_LINKAGE 39 | 40 | #endif /* _EXT_H_ */ 41 | -------------------------------------------------------------------------------- /Hardware/FireFader/PCB/FireFaderRev1/FireFaderRev1.pro: -------------------------------------------------------------------------------- 1 | EAGLE AutoRouter Statistics: 2 | 3 | Job : /Users/eberdahl/Documents/eagle/2faders-first-wiring-complete-cleaner-schematic-autoroute-3-bigger-no-extra-connectors-routed/testschematic.brd 4 | 5 | Start at : 00:05:19 (5/13/13) 6 | End at : 00:05:20 (5/13/13) 7 | Elapsed time : 00:00:01 8 | 9 | Signals : 18 RoutingGrid: 50 mil Layers: 2 10 | Connections : 30 predefined: 0 ( 0 Vias ) 11 | 12 | Router memory : 44000 13 | 14 | Passname : Busses Route Optimize1 Optimize2 Optimize3 Optimize4 15 | 16 | Time per pass : 00:00:00 00:00:01 00:00:00 00:00:00 00:00:00 00:00:00 17 | Number of Ripups : 0 0 0 0 0 0 18 | max. Level : 0 6 0 0 0 0 19 | max. Total : 0 5 0 0 0 0 20 | 21 | Routed : 2 10 10 10 10 10 22 | Vias : 0 8 0 0 0 0 23 | Resolution : 6.7 % 33.3 % 33.3 % 33.3 % 33.3 % 33.3 % 24 | 25 | Final : 33.3% finished 26 | -------------------------------------------------------------------------------- /Hardware/Falcon/README.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 2 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 3 | {\colortbl;\red255\green255\blue255;} 4 | \paperw11905\paperh16837\margl1440\margr1440\vieww22100\viewh10260\viewkind0 5 | \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural 6 | 7 | \f0\fs24 \cf0 Although the Falcon is not an open-source hardware device, it has been hacked. Thanks to Kyle Machulis for taking the lead on writing the driver for it! The driver source is included here for those who wish to compile it. However, a compiled version of the Max/MSP 5 external for OS X (Intel) "np_nifalcon.mxo" has been installed into the Software:MaxMSP:palette directory and might work for you.\ 8 | \ 9 | A very good list of references on the Falcon hardware can be found here:\ 10 | {\field{\*\fldinst{HYPERLINK "http://qdot.github.io/libnifalcon/documentation.html"}}{\fldrslt http://qdot.github.io/libnifalcon/documentation.html}}\ 11 | \ 12 | This reference looks particularly good:\ 13 | {\field{\*\fldinst{HYPERLINK "http://docs.nonpolynomial.com/libnifalcon/pdf/CharacterizationOfANovintFalconForApplicationAsARobotManipulator.pdf"}}{\fldrslt http://docs.nonpolynomial.com/libnifalcon/pdf/CharacterizationOfANovintFalconForApplicationAsARobotManipulator.pdf}}\ 14 | } -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/link~.pd: -------------------------------------------------------------------------------- 1 | #N canvas 100 391 617 272 10; 2 | #X obj 6 7 inlet~; 3 | #X obj 78 9 inlet~; 4 | #X obj 62 68 -~; 5 | #X obj 129 109 biquad~ 0 0 1 -1 0; 6 | #X obj 426 12 block~ 1; 7 | #X obj 7 223 *~ -1; 8 | #X obj 7 246 outlet~; 9 | #X obj 98 248 outlet~; 10 | #X obj 62 182 +~; 11 | #X text 213 233 Edgar Berdahl \, Oct 2010; 12 | #X obj 61 130 *~ \$2; 13 | #X msg 129 77 clear; 14 | #X obj 129 37 r clearall; 15 | #X obj 129 58 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 16 | -1; 17 | #X obj 295 28 r \$1; 18 | #X obj 295 51 unpack 0 0; 19 | #X obj 426 58 loadbang; 20 | #X text 467 77 For now assume; 21 | #X text 466 85 this audio sampling rate; 22 | #X obj 426 143 * \$3; 23 | #X obj 441 120 t b f; 24 | #X obj 129 132 *~ 0; 25 | #X text 211 166 Arg 1: Object label; 26 | #X text 211 185 Arg 2: Stiffness in N/m; 27 | #X text 211 202 Arg 3: Damping in N/(m/s); 28 | #X msg 426 81 44100; 29 | #X connect 0 0 2 0; 30 | #X connect 1 0 2 1; 31 | #X connect 2 0 3 0; 32 | #X connect 2 0 10 0; 33 | #X connect 3 0 21 0; 34 | #X connect 5 0 6 0; 35 | #X connect 8 0 5 0; 36 | #X connect 8 0 7 0; 37 | #X connect 10 0 8 0; 38 | #X connect 11 0 3 0; 39 | #X connect 12 0 13 0; 40 | #X connect 13 0 11 0; 41 | #X connect 14 0 15 0; 42 | #X connect 15 0 10 1; 43 | #X connect 15 1 20 0; 44 | #X connect 16 0 25 0; 45 | #X connect 19 0 21 1; 46 | #X connect 20 0 19 0; 47 | #X connect 20 1 19 1; 48 | #X connect 21 0 8 1; 49 | #X connect 25 0 19 0; 50 | -------------------------------------------------------------------------------- /Hardware/FireFader/PCB/FireFaderRev1/Gerbers/testschematic.dri: -------------------------------------------------------------------------------- 1 | Generated by EAGLE CAM Processor 6.4.0 2 | 3 | Drill Station Info File: /Users/eberdahl/Documents/eagle/2faders-first-wiring-complete-cleaner-schematic-autoroute-3-bigger-no-extra-connectors-routed/testschematic.dri 4 | 5 | Date : 5/13/13 2:22 PM 6 | Drills : generated 7 | Device : Excellon drill station 8 | 9 | Parameter settings: 10 | 11 | Tolerance Drill + : 0.00 % 12 | Tolerance Drill - : 0.00 % 13 | Rotate : no 14 | Mirror : no 15 | Optimize : yes 16 | Auto fit : yes 17 | OffsetX : 0inch 18 | OffsetY : 0inch 19 | Layers : Drills Holes 20 | 21 | Drill File Info: 22 | 23 | Data Mode : Absolute 24 | Units : 1/10000 Inch 25 | 26 | Drills used: 27 | 28 | Code Size used 29 | 30 | T01 0.0236inch 1 31 | T02 0.0315inch 30 32 | T03 0.0320inch 8 33 | T04 0.0354inch 4 34 | T05 0.0440inch 6 35 | T06 0.0472inch 8 36 | T07 0.0700inch 4 37 | T08 0.0709inch 12 38 | T09 0.0728inch 16 39 | T10 0.0787inch 4 40 | T11 0.1102inch 2 41 | T12 0.1260inch 1 42 | T13 0.1300inch 4 43 | 44 | Total number of drills: 100 45 | 46 | Plotfiles: 47 | 48 | /Users/eberdahl/Documents/eagle/2faders-first-wiring-complete-cleaner-schematic-autoroute-3-bigger-no-extra-connectors-routed/testschematic.TXT 49 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_preferences.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_PREFERENCES_H_ 2 | #define _EXT_PREFERENCES_H_ 3 | 4 | BEGIN_USING_C_LINKAGE 5 | 6 | t_max_err preferences_getatomforkey(t_symbol *key, t_atom *value); 7 | t_symbol *preferences_getsym(char *name); 8 | void preferences_setsym(char *name, t_symbol *value); 9 | long preferences_getlong(char *name); 10 | void preferences_setlong(char *name, long value); 11 | long preferences_getchar(char *name); 12 | void preferences_setchar(char *name, long value); 13 | t_max_err preferences_getatoms(char *name, long *argc, t_atom **argv); 14 | t_max_err preferences_setatoms(char *name, long argc, t_atom *argv); 15 | void *preferences_define(char *name, char *type, char *label, char *style, char *category, long attrflags, method get, method set, long flags); 16 | void *preferences_class_define(t_class *c, char *name, char *type, char *label, char *style, char *category, long attrflags, method get, method set, long flags); 17 | void *preferences_defineoption(char *name, char *label, char *category, char *ptr, method notify, long flags); 18 | void *preferences_class_defineoption(t_class *c, char *name, char *label, char *category, char *ptr, method notify, long flags); 19 | t_max_err preferences_writedictionary(t_dictionary *d, char *filename); 20 | t_max_err preferences_readdictionary(char *filename, t_dictionary **d); 21 | 22 | END_USING_C_LINKAGE 23 | 24 | enum { 25 | PREFERENCES_FLAGS_INVISIBLE = 1, 26 | PREFERENCES_FLAGS_DONTSAVE = 2 27 | }; 28 | 29 | 30 | #endif // _EXT_PREFERENCES_H_ 31 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_preferences.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_PREFERENCES_H_ 2 | #define _EXT_PREFERENCES_H_ 3 | 4 | BEGIN_USING_C_LINKAGE 5 | 6 | t_max_err preferences_getatomforkey(t_symbol *key, t_atom *value); 7 | t_symbol *preferences_getsym(char *name); 8 | void preferences_setsym(char *name, t_symbol *value); 9 | long preferences_getlong(char *name); 10 | void preferences_setlong(char *name, long value); 11 | long preferences_getchar(char *name); 12 | void preferences_setchar(char *name, long value); 13 | t_max_err preferences_getatoms(char *name, long *argc, t_atom **argv); 14 | t_max_err preferences_setatoms(char *name, long argc, t_atom *argv); 15 | void *preferences_define(char *name, char *type, char *label, char *style, char *category, long attrflags, method get, method set, long flags); 16 | void *preferences_class_define(t_class *c, char *name, char *type, char *label, char *style, char *category, long attrflags, method get, method set, long flags); 17 | void *preferences_defineoption(char *name, char *label, char *category, char *ptr, method notify, long flags); 18 | void *preferences_class_defineoption(t_class *c, char *name, char *label, char *category, char *ptr, method notify, long flags); 19 | t_max_err preferences_writedictionary(t_dictionary *d, char *filename); 20 | t_max_err preferences_readdictionary(char *filename, t_dictionary **d); 21 | 22 | END_USING_C_LINKAGE 23 | 24 | enum { 25 | PREFERENCES_FLAGS_INVISIBLE = 1, 26 | PREFERENCES_FLAGS_DONTSAVE = 2 27 | }; 28 | 29 | 30 | #endif // _EXT_PREFERENCES_H_ 31 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_preferences.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_PREFERENCES_H_ 2 | #define _EXT_PREFERENCES_H_ 3 | 4 | BEGIN_USING_C_LINKAGE 5 | 6 | t_max_err preferences_getatomforkey(t_symbol *key, t_atom *value); 7 | t_symbol *preferences_getsym(char *name); 8 | void preferences_setsym(char *name, t_symbol *value); 9 | long preferences_getlong(char *name); 10 | void preferences_setlong(char *name, long value); 11 | long preferences_getchar(char *name); 12 | void preferences_setchar(char *name, long value); 13 | t_max_err preferences_getatoms(char *name, long *argc, t_atom **argv); 14 | t_max_err preferences_setatoms(char *name, long argc, t_atom *argv); 15 | void *preferences_define(char *name, char *type, char *label, char *style, char *category, long attrflags, method get, method set, long flags); 16 | void *preferences_class_define(t_class *c, char *name, char *type, char *label, char *style, char *category, long attrflags, method get, method set, long flags); 17 | void *preferences_defineoption(char *name, char *label, char *category, char *ptr, method notify, long flags); 18 | void *preferences_class_defineoption(t_class *c, char *name, char *label, char *category, char *ptr, method notify, long flags); 19 | t_max_err preferences_writedictionary(t_dictionary *d, char *filename); 20 | t_max_err preferences_readdictionary(char *filename, t_dictionary **d); 21 | 22 | END_USING_C_LINKAGE 23 | 24 | enum { 25 | PREFERENCES_FLAGS_INVISIBLE = 1, 26 | PREFERENCES_FLAGS_DONTSAVE = 2 27 | }; 28 | 29 | 30 | #endif // _EXT_PREFERENCES_H_ 31 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/macho-gl-prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'MaxExternal' target in the 'MaxExternal' project. 3 | // 4 | 5 | #include 6 | #include 7 | 8 | #ifdef __glext_h_ 9 | #undef __glext_h_ 10 | #endif 11 | 12 | // should be defined in jit.glext.h but is not for some reason 13 | 14 | #define GL_NV_half_float 15 | typedef unsigned short GLhalfNV; 16 | 17 | #define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC 18 | 19 | #define GL_VERTEX_PROGRAM_NV 0x8620 20 | #define GL_FRAGMENT_PROGRAM_NV 0x8870 21 | 22 | #define GL_PROGRAM_ERROR_POSITION_NV 0x864B 23 | 24 | #define GL_PROGRAM_ERROR_STRING_NV 0x8874 25 | 26 | #define GL_TEXTURE_RECTANGLE_NV 0x84F5 27 | 28 | #define GL_HALF_FLOAT_NV 0x140B 29 | 30 | #define GL_FLOAT_R_NV 0x8880 31 | #define GL_FLOAT_RG_NV 0x8881 32 | #define GL_FLOAT_RGB_NV 0x8882 33 | #define GL_FLOAT_RGBA_NV 0x8883 34 | #define GL_FLOAT_R16_NV 0x8884 35 | #define GL_FLOAT_R32_NV 0x8885 36 | #define GL_FLOAT_RG16_NV 0x8886 37 | #define GL_FLOAT_RG32_NV 0x8887 38 | #define GL_FLOAT_RGB16_NV 0x8888 39 | #define GL_FLOAT_RGB32_NV 0x8889 40 | #define GL_FLOAT_RGBA16_NV 0x888A 41 | #define GL_FLOAT_RGBA32_NV 0x888B 42 | #define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C 43 | #define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D 44 | #define GL_FLOAT_RGBA_MODE_NV 0x888E 45 | 46 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/macho-gl-prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'MaxExternal' target in the 'MaxExternal' project. 3 | // 4 | 5 | #include 6 | #include 7 | 8 | #ifdef __glext_h_ 9 | #undef __glext_h_ 10 | #endif 11 | 12 | // should be defined in jit.glext.h but is not for some reason 13 | 14 | #define GL_NV_half_float 15 | typedef unsigned short GLhalfNV; 16 | 17 | #define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC 18 | 19 | #define GL_VERTEX_PROGRAM_NV 0x8620 20 | #define GL_FRAGMENT_PROGRAM_NV 0x8870 21 | 22 | #define GL_PROGRAM_ERROR_POSITION_NV 0x864B 23 | 24 | #define GL_PROGRAM_ERROR_STRING_NV 0x8874 25 | 26 | #define GL_TEXTURE_RECTANGLE_NV 0x84F5 27 | 28 | #define GL_HALF_FLOAT_NV 0x140B 29 | 30 | #define GL_FLOAT_R_NV 0x8880 31 | #define GL_FLOAT_RG_NV 0x8881 32 | #define GL_FLOAT_RGB_NV 0x8882 33 | #define GL_FLOAT_RGBA_NV 0x8883 34 | #define GL_FLOAT_R16_NV 0x8884 35 | #define GL_FLOAT_R32_NV 0x8885 36 | #define GL_FLOAT_RG16_NV 0x8886 37 | #define GL_FLOAT_RG32_NV 0x8887 38 | #define GL_FLOAT_RGB16_NV 0x8888 39 | #define GL_FLOAT_RGB32_NV 0x8889 40 | #define GL_FLOAT_RGBA16_NV 0x888A 41 | #define GL_FLOAT_RGBA32_NV 0x888B 42 | #define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C 43 | #define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D 44 | #define GL_FLOAT_RGBA_MODE_NV 0x888E 45 | 46 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/macho-gl-prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'MaxExternal' target in the 'MaxExternal' project. 3 | // 4 | 5 | #include 6 | #include 7 | 8 | #ifdef __glext_h_ 9 | #undef __glext_h_ 10 | #endif 11 | 12 | // should be defined in jit.glext.h but is not for some reason 13 | 14 | #define GL_NV_half_float 15 | typedef unsigned short GLhalfNV; 16 | 17 | #define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC 18 | 19 | #define GL_VERTEX_PROGRAM_NV 0x8620 20 | #define GL_FRAGMENT_PROGRAM_NV 0x8870 21 | 22 | #define GL_PROGRAM_ERROR_POSITION_NV 0x864B 23 | 24 | #define GL_PROGRAM_ERROR_STRING_NV 0x8874 25 | 26 | #define GL_TEXTURE_RECTANGLE_NV 0x84F5 27 | 28 | #define GL_HALF_FLOAT_NV 0x140B 29 | 30 | #define GL_FLOAT_R_NV 0x8880 31 | #define GL_FLOAT_RG_NV 0x8881 32 | #define GL_FLOAT_RGB_NV 0x8882 33 | #define GL_FLOAT_RGBA_NV 0x8883 34 | #define GL_FLOAT_R16_NV 0x8884 35 | #define GL_FLOAT_R32_NV 0x8885 36 | #define GL_FLOAT_RG16_NV 0x8886 37 | #define GL_FLOAT_RG32_NV 0x8887 38 | #define GL_FLOAT_RGB16_NV 0x8888 39 | #define GL_FLOAT_RGB32_NV 0x8889 40 | #define GL_FLOAT_RGBA16_NV 0x888A 41 | #define GL_FLOAT_RGBA32_NV 0x888B 42 | #define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C 43 | #define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D 44 | #define GL_FLOAT_RGBA_MODE_NV 0x888E 45 | 46 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_obstring.h: -------------------------------------------------------------------------------- 1 | /* 2 | * obstring.h 3 | * 4 | * Copyright 2006 Cycling '74. All rights reserved. 5 | * 6 | */ 7 | 8 | #ifndef __OBSTRING_H__ 9 | #define __OBSTRING_H__ 10 | 11 | #ifdef __cplusplus 12 | extern "C" { 13 | #endif // __cplusplus 14 | 15 | #if C74_PRAGMA_STRUCT_PACKPUSH 16 | #pragma pack(push, 2) 17 | #elif C74_PRAGMA_STRUCT_PACK 18 | #pragma pack(2) 19 | #endif 20 | 21 | 22 | /** 23 | The string object. This struct is provided for debugging convenience, 24 | but should be considered opaque and is subject to change without notice. 25 | 26 | @ingroup string 27 | */ 28 | typedef struct _string 29 | { 30 | t_object s_obj; 31 | char *s_text; 32 | } t_string; 33 | 34 | #if C74_PRAGMA_STRUCT_PACKPUSH 35 | #pragma pack(pop) 36 | #elif C74_PRAGMA_STRUCT_PACK 37 | #pragma pack() 38 | #endif 39 | 40 | 41 | /** 42 | Create a new string object. 43 | @ingroup string 44 | @param psz Pointer to a C-string that will be copied to memory internal to this string object instance. 45 | @return The new string object instance pointer. 46 | */ 47 | t_string* string_new(const char *psz); 48 | 49 | 50 | /** 51 | Create a new string object. 52 | @ingroup string 53 | @param x The string object instance. 54 | @return A pointer to the internally maintained C-string. 55 | */ 56 | const char* string_getptr(t_string *x); 57 | 58 | 59 | // TODO: This object has a number of additional methods exposed via Max's messaging interface 60 | 61 | 62 | #ifdef __cplusplus 63 | } 64 | #endif // __cplusplus 65 | 66 | #endif //__OBSTRING_H__ 67 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_obstring.h: -------------------------------------------------------------------------------- 1 | /* 2 | * obstring.h 3 | * 4 | * Copyright 2006 Cycling '74. All rights reserved. 5 | * 6 | */ 7 | 8 | #ifndef __OBSTRING_H__ 9 | #define __OBSTRING_H__ 10 | 11 | #ifdef __cplusplus 12 | extern "C" { 13 | #endif // __cplusplus 14 | 15 | #if C74_PRAGMA_STRUCT_PACKPUSH 16 | #pragma pack(push, 2) 17 | #elif C74_PRAGMA_STRUCT_PACK 18 | #pragma pack(2) 19 | #endif 20 | 21 | 22 | /** 23 | The string object. This struct is provided for debugging convenience, 24 | but should be considered opaque and is subject to change without notice. 25 | 26 | @ingroup string 27 | */ 28 | typedef struct _string 29 | { 30 | t_object s_obj; 31 | char *s_text; 32 | } t_string; 33 | 34 | #if C74_PRAGMA_STRUCT_PACKPUSH 35 | #pragma pack(pop) 36 | #elif C74_PRAGMA_STRUCT_PACK 37 | #pragma pack() 38 | #endif 39 | 40 | 41 | /** 42 | Create a new string object. 43 | @ingroup string 44 | @param psz Pointer to a C-string that will be copied to memory internal to this string object instance. 45 | @return The new string object instance pointer. 46 | */ 47 | t_string* string_new(const char *psz); 48 | 49 | 50 | /** 51 | Create a new string object. 52 | @ingroup string 53 | @param x The string object instance. 54 | @return A pointer to the internally maintained C-string. 55 | */ 56 | const char* string_getptr(t_string *x); 57 | 58 | 59 | // TODO: This object has a number of additional methods exposed via Max's messaging interface 60 | 61 | 62 | #ifdef __cplusplus 63 | } 64 | #endif // __cplusplus 65 | 66 | #endif //__OBSTRING_H__ 67 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_obstring.h: -------------------------------------------------------------------------------- 1 | /* 2 | * obstring.h 3 | * 4 | * Copyright 2006 Cycling '74. All rights reserved. 5 | * 6 | */ 7 | 8 | #ifndef __OBSTRING_H__ 9 | #define __OBSTRING_H__ 10 | 11 | #ifdef __cplusplus 12 | extern "C" { 13 | #endif // __cplusplus 14 | 15 | #if C74_PRAGMA_STRUCT_PACKPUSH 16 | #pragma pack(push, 2) 17 | #elif C74_PRAGMA_STRUCT_PACK 18 | #pragma pack(2) 19 | #endif 20 | 21 | 22 | /** 23 | The string object. This struct is provided for debugging convenience, 24 | but should be considered opaque and is subject to change without notice. 25 | 26 | @ingroup string 27 | */ 28 | typedef struct _string 29 | { 30 | t_object s_obj; 31 | char *s_text; 32 | } t_string; 33 | 34 | #if C74_PRAGMA_STRUCT_PACKPUSH 35 | #pragma pack(pop) 36 | #elif C74_PRAGMA_STRUCT_PACK 37 | #pragma pack() 38 | #endif 39 | 40 | 41 | /** 42 | Create a new string object. 43 | @ingroup string 44 | @param psz Pointer to a C-string that will be copied to memory internal to this string object instance. 45 | @return The new string object instance pointer. 46 | */ 47 | t_string* string_new(const char *psz); 48 | 49 | 50 | /** 51 | Create a new string object. 52 | @ingroup string 53 | @param x The string object instance. 54 | @return A pointer to the internally maintained C-string. 55 | */ 56 | const char* string_getptr(t_string *x); 57 | 58 | 59 | // TODO: This object has a number of additional methods exposed via Max's messaging interface 60 | 61 | 62 | #ifdef __cplusplus 63 | } 64 | #endif // __cplusplus 65 | 66 | #endif //__OBSTRING_H__ 67 | -------------------------------------------------------------------------------- /Hardware/ThePlank/haptics_firmware_plank_fsr/Notes.txt: -------------------------------------------------------------------------------- 1 | To use The Plank with the Open-Source-Haptics-For-Artists repository, it's necessary to have a way 2 | to disable the force feedback if the user isn't touching the device. This can be accomplished 3 | by using the FSR as a sensor to check if the user is exerting pressure on it. 4 | 5 | 6 | • Build the circuit as shown in Figure 5 of the Computer Music Journal article 7 | "The FireFader: Simple, Open-Source, and Reconfigurable Haptic Force Feedback for Musicians" 8 | replacing "Motor A." Instead of connecting the 2nd pin of the potentiometer to Arduino pin A2, 9 | connect the voltage output of the Hall-effect sensor to Arduino pin A2. 10 | • Repeat the same procedure analogously for a second Plank motor as "Motor B." 11 | 12 | 13 | 14 | USE THE ARDUINO MICRO FOR BUILDING THIS WITH THE MOTOR DRIVER http://www.gravitech.us/2mwfecoadfor.html, ALSO AVAILABLE THROUGH MOUSER. 15 | 16 | 17 | 18 | // Anyone trying to use The Plank with Open-Source-Haptics-For-Artists should first try the 19 | // Synth-A-Modeler models, which are compatible with this firmware. To do this, run 20 | // 'make jackqt' inside the SaM subdirectory of the part of the repo 21 | // https://github.com/eberdahl/Open-Source-Haptics-For-Artists/tree/master/Software/Synth-A-Modeler 22 | // and visit https://ccrma.stanford.edu/wiki/SynthAModelerFireFaderLab for additional instructions 23 | // to set that up. 24 | // 25 | // After getting those working, then try the models in Max using the FireFader~ object to interface 26 | // with the firmware--see 27 | // https://github.com/eberdahl/Open-Source-Haptics-For-Artists/blob/master/Software/Max/Readme.txt -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_common.h: -------------------------------------------------------------------------------- 1 | /* common.h -- those things we define often */ 2 | #ifndef _EXT_COMMON_H_ 3 | #define _EXT_COMMON_H_ 4 | 5 | 6 | /** 7 | If a value is within the specified range, then return true. Otherwise return false. 8 | 9 | @ingroup misc 10 | @param v The value to test. 11 | @param lo The low bound for the range. 12 | @param hi The high bound for the range. 13 | @return Returns true if within range, otherwise false. 14 | */ 15 | #define InRange(v,lo,hi) ((v)<=(hi)&&(v)>=(lo)) 16 | 17 | 18 | /** 19 | Return the higher of two values. 20 | 21 | @ingroup misc 22 | @param a The first value to compare. 23 | @param b The second value to compare. 24 | @return Returns the higher of a or b. 25 | */ 26 | #ifndef MAX 27 | #define MAX(a,b) ((a)>(b)?(a):(b)) 28 | #endif 29 | 30 | 31 | /** 32 | Return the lower of two values. 33 | 34 | @ingroup misc 35 | @param a The first value to compare. 36 | @param b The second value to compare. 37 | @return Returns the lower of a or b. 38 | */ 39 | #ifndef MIN 40 | #define MIN(a,b) ((a)<(b)?(a):(b)) 41 | #endif 42 | 43 | 44 | /** 45 | Limit values to within a specified range. 46 | 47 | @ingroup misc 48 | @param a The value to constrain. 49 | @param lo The low bound for the range. 50 | @param hi The high bound for the range. 51 | @return Returns the value a constrained to the range specified by lo and hi. 52 | */ 53 | #define CLIP(a, lo, hi) ( (a)>(lo)?( (a)<(hi)?(a):(hi) ):(lo) ) 54 | 55 | 56 | #define OSTAsChars(x) (int)((x)>>24)&0xFF,(int)((x)>>16)&0xFF,(int)((x)>>8)&0xFF,(int)((x)&0xFF) 57 | 58 | 59 | #endif /* _EXT_COMMON_H_ */ 60 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_common.h: -------------------------------------------------------------------------------- 1 | /* common.h -- those things we define often */ 2 | #ifndef _EXT_COMMON_H_ 3 | #define _EXT_COMMON_H_ 4 | 5 | 6 | /** 7 | If a value is within the specified range, then return true. Otherwise return false. 8 | 9 | @ingroup misc 10 | @param v The value to test. 11 | @param lo The low bound for the range. 12 | @param hi The high bound for the range. 13 | @return Returns true if within range, otherwise false. 14 | */ 15 | #define InRange(v,lo,hi) ((v)<=(hi)&&(v)>=(lo)) 16 | 17 | 18 | /** 19 | Return the higher of two values. 20 | 21 | @ingroup misc 22 | @param a The first value to compare. 23 | @param b The second value to compare. 24 | @return Returns the higher of a or b. 25 | */ 26 | #ifndef MAX 27 | #define MAX(a,b) ((a)>(b)?(a):(b)) 28 | #endif 29 | 30 | 31 | /** 32 | Return the lower of two values. 33 | 34 | @ingroup misc 35 | @param a The first value to compare. 36 | @param b The second value to compare. 37 | @return Returns the lower of a or b. 38 | */ 39 | #ifndef MIN 40 | #define MIN(a,b) ((a)<(b)?(a):(b)) 41 | #endif 42 | 43 | 44 | /** 45 | Limit values to within a specified range. 46 | 47 | @ingroup misc 48 | @param a The value to constrain. 49 | @param lo The low bound for the range. 50 | @param hi The high bound for the range. 51 | @return Returns the value a constrained to the range specified by lo and hi. 52 | */ 53 | #define CLIP(a, lo, hi) ( (a)>(lo)?( (a)<(hi)?(a):(hi) ):(lo) ) 54 | 55 | 56 | #define OSTAsChars(x) (int)((x)>>24)&0xFF,(int)((x)>>16)&0xFF,(int)((x)>>8)&0xFF,(int)((x)&0xFF) 57 | 58 | 59 | #endif /* _EXT_COMMON_H_ */ 60 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_common.h: -------------------------------------------------------------------------------- 1 | /* common.h -- those things we define often */ 2 | #ifndef _EXT_COMMON_H_ 3 | #define _EXT_COMMON_H_ 4 | 5 | 6 | /** 7 | If a value is within the specified range, then return true. Otherwise return false. 8 | 9 | @ingroup misc 10 | @param v The value to test. 11 | @param lo The low bound for the range. 12 | @param hi The high bound for the range. 13 | @return Returns true if within range, otherwise false. 14 | */ 15 | #define InRange(v,lo,hi) ((v)<=(hi)&&(v)>=(lo)) 16 | 17 | 18 | /** 19 | Return the higher of two values. 20 | 21 | @ingroup misc 22 | @param a The first value to compare. 23 | @param b The second value to compare. 24 | @return Returns the higher of a or b. 25 | */ 26 | #ifndef MAX 27 | #define MAX(a,b) ((a)>(b)?(a):(b)) 28 | #endif 29 | 30 | 31 | /** 32 | Return the lower of two values. 33 | 34 | @ingroup misc 35 | @param a The first value to compare. 36 | @param b The second value to compare. 37 | @return Returns the lower of a or b. 38 | */ 39 | #ifndef MIN 40 | #define MIN(a,b) ((a)<(b)?(a):(b)) 41 | #endif 42 | 43 | 44 | /** 45 | Limit values to within a specified range. 46 | 47 | @ingroup misc 48 | @param a The value to constrain. 49 | @param lo The low bound for the range. 50 | @param hi The high bound for the range. 51 | @return Returns the value a constrained to the range specified by lo and hi. 52 | */ 53 | #define CLIP(a, lo, hi) ( (a)>(lo)?( (a)<(hi)?(a):(hi) ):(lo) ) 54 | 55 | 56 | #define OSTAsChars(x) (int)((x)>>24)&0xFF,(int)((x)>>16)&0xFF,(int)((x)>>8)&0xFF,(int)((x)&0xFF) 57 | 58 | 59 | #endif /* _EXT_COMMON_H_ */ 60 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_drag.h: -------------------------------------------------------------------------------- 1 | // ext_drag.h copyright 2008 cycling '74 2 | 3 | #ifndef __EXT_DRAG_H__ 4 | 5 | #define __EXT_DRAG_H__ 6 | 7 | BEGIN_USING_C_LINKAGE 8 | 9 | char *jdrag_getitemstring(t_object *dg, long index, long quote, long backslash); 10 | t_object *jdrag_getobject(t_object *dg, long index); 11 | void jdrag_getlocation(t_object *dg, long index, double *xpos, double *ypos); 12 | t_object *jdrag_createobject(t_object *dg, t_object *pv, void *d); 13 | t_object *jdrag_createnewobj(t_object *dg, t_object *pv, char *classname, char *str); 14 | t_object *jdrag_createmessage(t_object *dg, t_object *pv, t_symbol *msg, long ac, t_atom *av); 15 | 16 | 17 | // dg the jdrag object 18 | // rcv the jbox which will have a message called when the dragged thing is released 19 | // msg the message name that will be sent to the box when the dragged thing is released 20 | // desc a description to be displayed in a contextual menu for the drop action 21 | // arg user data to be passed to the drag function (for example, the t_symbol* of the message to call in the case of jdrag_box_add()) 22 | void jdrag_add(t_object *dg, t_object *rcv, t_symbol *msg, char *desc, void *arg); 23 | 24 | 25 | long jdrag_matchdragrole(t_object *dx, t_symbol *role, long flags); 26 | 27 | 28 | void jdrag_setboxlocation(t_object *dg, t_object *box); 29 | 30 | 31 | void jdrag_object_add(t_object *dg, t_object *obj, t_symbol *msg); 32 | 33 | // a wrapper around jbox_add() used by most ui objects; demonstrated in the pictmeter~ example project in the sdk 34 | void jdrag_box_add(t_object *dg, t_object *box, t_symbol *msg); 35 | 36 | 37 | END_USING_C_LINKAGE 38 | 39 | #endif // __EXT_DRAG_H__ 40 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_drag.h: -------------------------------------------------------------------------------- 1 | // ext_drag.h copyright 2008 cycling '74 2 | 3 | #ifndef __EXT_DRAG_H__ 4 | 5 | #define __EXT_DRAG_H__ 6 | 7 | BEGIN_USING_C_LINKAGE 8 | 9 | char *jdrag_getitemstring(t_object *dg, long index, long quote, long backslash); 10 | t_object *jdrag_getobject(t_object *dg, long index); 11 | void jdrag_getlocation(t_object *dg, long index, double *xpos, double *ypos); 12 | t_object *jdrag_createobject(t_object *dg, t_object *pv, void *d); 13 | t_object *jdrag_createnewobj(t_object *dg, t_object *pv, char *classname, char *str); 14 | t_object *jdrag_createmessage(t_object *dg, t_object *pv, t_symbol *msg, long ac, t_atom *av); 15 | 16 | 17 | // dg the jdrag object 18 | // rcv the jbox which will have a message called when the dragged thing is released 19 | // msg the message name that will be sent to the box when the dragged thing is released 20 | // desc a description to be displayed in a contextual menu for the drop action 21 | // arg user data to be passed to the drag function (for example, the t_symbol* of the message to call in the case of jdrag_box_add()) 22 | void jdrag_add(t_object *dg, t_object *rcv, t_symbol *msg, char *desc, void *arg); 23 | 24 | 25 | long jdrag_matchdragrole(t_object *dx, t_symbol *role, long flags); 26 | 27 | 28 | void jdrag_setboxlocation(t_object *dg, t_object *box); 29 | 30 | 31 | void jdrag_object_add(t_object *dg, t_object *obj, t_symbol *msg); 32 | 33 | // a wrapper around jbox_add() used by most ui objects; demonstrated in the pictmeter~ example project in the sdk 34 | void jdrag_box_add(t_object *dg, t_object *box, t_symbol *msg); 35 | 36 | 37 | END_USING_C_LINKAGE 38 | 39 | #endif // __EXT_DRAG_H__ 40 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_drag.h: -------------------------------------------------------------------------------- 1 | // ext_drag.h copyright 2008 cycling '74 2 | 3 | #ifndef __EXT_DRAG_H__ 4 | 5 | #define __EXT_DRAG_H__ 6 | 7 | BEGIN_USING_C_LINKAGE 8 | 9 | char *jdrag_getitemstring(t_object *dg, long index, long quote, long backslash); 10 | t_object *jdrag_getobject(t_object *dg, long index); 11 | void jdrag_getlocation(t_object *dg, long index, double *xpos, double *ypos); 12 | t_object *jdrag_createobject(t_object *dg, t_object *pv, void *d); 13 | t_object *jdrag_createnewobj(t_object *dg, t_object *pv, char *classname, char *str); 14 | t_object *jdrag_createmessage(t_object *dg, t_object *pv, t_symbol *msg, long ac, t_atom *av); 15 | 16 | 17 | // dg the jdrag object 18 | // rcv the jbox which will have a message called when the dragged thing is released 19 | // msg the message name that will be sent to the box when the dragged thing is released 20 | // desc a description to be displayed in a contextual menu for the drop action 21 | // arg user data to be passed to the drag function (for example, the t_symbol* of the message to call in the case of jdrag_box_add()) 22 | void jdrag_add(t_object *dg, t_object *rcv, t_symbol *msg, char *desc, void *arg); 23 | 24 | 25 | long jdrag_matchdragrole(t_object *dx, t_symbol *role, long flags); 26 | 27 | 28 | void jdrag_setboxlocation(t_object *dg, t_object *box); 29 | 30 | 31 | void jdrag_object_add(t_object *dg, t_object *obj, t_symbol *msg); 32 | 33 | // a wrapper around jbox_add() used by most ui objects; demonstrated in the pictmeter~ example project in the sdk 34 | void jdrag_box_add(t_object *dg, t_object *box, t_symbol *msg); 35 | 36 | 37 | END_USING_C_LINKAGE 38 | 39 | #endif // __EXT_DRAG_H__ 40 | -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/comport/comport-stress-test.pd: -------------------------------------------------------------------------------- 1 | #N canvas 459 49 508 349 12; 2 | #N canvas 0 0 502 352 stress 0; 3 | #X obj 83 28 inlet; 4 | #X obj 73 288 outlet; 5 | #X obj 100 101 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 6 | 1; 7 | #X obj 74 130 spigot; 8 | #X obj 74 154 bang; 9 | #X obj 74 181 random 300; 10 | #X obj 74 207 moses 256; 11 | #X text 86 238 make it send somewhat slower than full speed; 12 | #X connect 0 0 3 0; 13 | #X connect 2 0 3 1; 14 | #X connect 3 0 4 0; 15 | #X connect 4 0 5 0; 16 | #X connect 5 0 6 0; 17 | #X connect 6 0 1 0; 18 | #X coords 0 -1 1 1 85 17 1 100 100; 19 | #X restore 30 280 pd stress test; 20 | #X text 12 263 hard test:; 21 | #X text 14 27 soft test:; 22 | #X msg 116 48 bang; 23 | #X msg 191 48 stop; 24 | #X obj 117 89 random 256; 25 | #X obj 116 117 trigger bang float; 26 | #X obj 161 200 float; 27 | #X obj 161 173 delay; 28 | #X obj 52 117 bang; 29 | #X obj 274 165 metro 1000; 30 | #X msg 269 194 246; 31 | #X text 237 254 keep data coming from the arduino; 32 | #X obj 277 140 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 33 | 1; 34 | #X msg 330 196 240; 35 | #X text 362 195 stop; 36 | #X obj 149 280 comport 3; 37 | #X obj 196 150 / 10; 38 | #X msg 112 226 close; 39 | #X msg 334 223 238; 40 | #X connect 0 0 16 0; 41 | #X connect 3 0 5 0; 42 | #X connect 4 0 8 0; 43 | #X connect 5 0 6 0; 44 | #X connect 6 0 8 0; 45 | #X connect 6 1 7 1; 46 | #X connect 6 1 17 0; 47 | #X connect 7 0 16 0; 48 | #X connect 8 0 7 0; 49 | #X connect 8 0 9 0; 50 | #X connect 9 0 5 0; 51 | #X connect 10 0 11 0; 52 | #X connect 11 0 16 0; 53 | #X connect 13 0 10 0; 54 | #X connect 14 0 16 0; 55 | #X connect 16 0 0 0; 56 | #X connect 17 0 8 1; 57 | #X connect 18 0 16 0; 58 | #X connect 19 0 16 0; 59 | -------------------------------------------------------------------------------- /Hardware/FireFader/PCB/FireFaderRev1/Gerbers/testschematic.gpi: -------------------------------------------------------------------------------- 1 | Generated by EAGLE CAM Processor 6.4.0 2 | 3 | Photoplotter Info File: /Users/eberdahl/Documents/eagle/2faders-first-wiring-complete-cleaner-schematic-autoroute-3-bigger-no-extra-connectors-routed/testschematic.gpi 4 | 5 | Date : 5/13/13 2:22 PM 6 | Plotfile : /Users/eberdahl/Documents/eagle/2faders-first-wiring-complete-cleaner-schematic-autoroute-3-bigger-no-extra-connectors-routed/testschematic.GBS 7 | Apertures : generated: 8 | Device : Gerber RS-274-X photoplotter, coordinate format 2.4 inch 9 | 10 | Parameter settings: 11 | 12 | Emulate Apertures : no 13 | Tolerance Draw + : 0.00 % 14 | Tolerance Draw - : 0.00 % 15 | Tolerance Flash + : 0.00 % 16 | Tolerance Flash - : 0.00 % 17 | Rotate : no 18 | Mirror : no 19 | Optimize : yes 20 | Auto fit : yes 21 | OffsetX : 0inch 22 | OffsetY : 0inch 23 | 24 | Plotfile Info: 25 | 26 | Coordinate Format : 2.4 27 | Coordinate Units : Inch 28 | Data Mode : Absolute 29 | Zero Suppression : None 30 | End Of Block : * 31 | 32 | Apertures used: 33 | 34 | Code Shape Size used 35 | 36 | D10 square 0.0780inch 1 37 | D11 round 0.0780inch 33 38 | D12 round 0.1300inch 16 39 | D13 round 0.0789inch 12 40 | D14 round 0.0867inch 4 41 | D15 round 0.1740inch 1 42 | D16 round 0.1582inch 2 43 | D17 round 0.0820inch 20 44 | D18 draw 0.0820inch 6 45 | D19 round 0.1380inch 4 46 | D20 square 0.0476inch 1 47 | 48 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_qtimage.h: -------------------------------------------------------------------------------- 1 | #ifndef _qtimage_H_ 2 | #define _qtimage_H_ 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | #define QTI_SCALEMODE_NONE 0 9 | #define QTI_SCALEMODE_MATRIX 1 10 | #define QTI_SCALEMODE_RECT 2 11 | #define QTI_SCALEMODE_AUTOFIT 3 12 | 13 | #define QTI_FLAG_QTML_GWORLD 0x00000001L 14 | 15 | #ifdef MAC_VERSION 16 | #ifndef __QUICKDRAW__ 17 | struct CGrafPort { 18 | long opaque; 19 | }; 20 | typedef struct CGrafPort CGrafPort; 21 | typedef struct CGrafPort* CGrafPtr; 22 | 23 | struct RGBColor { 24 | unsigned short red; 25 | unsigned short green; 26 | unsigned short blue; 27 | }; 28 | typedef struct RGBColor RGBColor; 29 | #endif // __QUICKDRAW__ 30 | #endif // MAC_VERSION 31 | 32 | long qtimage_open(char *name, short path, CGrafPtr *gp, void *extra); 33 | long qtimage_getrect(char *name, short path, Rect *r, void *extra); 34 | void *qti_extra_new (void); 35 | void qti_extra_free (void *p); 36 | long qti_extra_pixelformat_get(void *p, OSType *pixelformat); 37 | long qti_extra_pixelformat_set(void *p, OSType pixelformat); 38 | long qti_extra_matrix_get (void *p, void *m); 39 | long qti_extra_matrix_set (void *p, void *m); 40 | long qti_extra_rect_get (void *p, Rect *r); 41 | long qti_extra_rect_set (void *p, Rect *r); 42 | long qti_extra_scalemode_get (void *p, long *scalemode); 43 | long qti_extra_scalemode_set (void *p, long scalemode); 44 | long qti_extra_time_get (void *p, double *time); 45 | long qti_extra_time_set (void *p, double time); 46 | long qti_extra_flags_get (void *p, long *flags); 47 | long qti_extra_flags_set (void *p, long flags); 48 | 49 | #ifdef __cplusplus 50 | } 51 | #endif 52 | 53 | #endif // _qtimage_H_ 54 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_qtimage.h: -------------------------------------------------------------------------------- 1 | #ifndef _qtimage_H_ 2 | #define _qtimage_H_ 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | #define QTI_SCALEMODE_NONE 0 9 | #define QTI_SCALEMODE_MATRIX 1 10 | #define QTI_SCALEMODE_RECT 2 11 | #define QTI_SCALEMODE_AUTOFIT 3 12 | 13 | #define QTI_FLAG_QTML_GWORLD 0x00000001L 14 | 15 | #ifdef MAC_VERSION 16 | #ifndef __QUICKDRAW__ 17 | struct CGrafPort { 18 | long opaque; 19 | }; 20 | typedef struct CGrafPort CGrafPort; 21 | typedef struct CGrafPort* CGrafPtr; 22 | 23 | struct RGBColor { 24 | unsigned short red; 25 | unsigned short green; 26 | unsigned short blue; 27 | }; 28 | typedef struct RGBColor RGBColor; 29 | #endif // __QUICKDRAW__ 30 | #endif // MAC_VERSION 31 | 32 | long qtimage_open(char *name, short path, CGrafPtr *gp, void *extra); 33 | long qtimage_getrect(char *name, short path, Rect *r, void *extra); 34 | void *qti_extra_new (void); 35 | void qti_extra_free (void *p); 36 | long qti_extra_pixelformat_get(void *p, OSType *pixelformat); 37 | long qti_extra_pixelformat_set(void *p, OSType pixelformat); 38 | long qti_extra_matrix_get (void *p, void *m); 39 | long qti_extra_matrix_set (void *p, void *m); 40 | long qti_extra_rect_get (void *p, Rect *r); 41 | long qti_extra_rect_set (void *p, Rect *r); 42 | long qti_extra_scalemode_get (void *p, long *scalemode); 43 | long qti_extra_scalemode_set (void *p, long scalemode); 44 | long qti_extra_time_get (void *p, double *time); 45 | long qti_extra_time_set (void *p, double time); 46 | long qti_extra_flags_get (void *p, long *flags); 47 | long qti_extra_flags_set (void *p, long flags); 48 | 49 | #ifdef __cplusplus 50 | } 51 | #endif 52 | 53 | #endif // _qtimage_H_ 54 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_qtimage.h: -------------------------------------------------------------------------------- 1 | #ifndef _qtimage_H_ 2 | #define _qtimage_H_ 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | #define QTI_SCALEMODE_NONE 0 9 | #define QTI_SCALEMODE_MATRIX 1 10 | #define QTI_SCALEMODE_RECT 2 11 | #define QTI_SCALEMODE_AUTOFIT 3 12 | 13 | #define QTI_FLAG_QTML_GWORLD 0x00000001L 14 | 15 | #ifdef MAC_VERSION 16 | #ifndef __QUICKDRAW__ 17 | struct CGrafPort { 18 | long opaque; 19 | }; 20 | typedef struct CGrafPort CGrafPort; 21 | typedef struct CGrafPort* CGrafPtr; 22 | 23 | struct RGBColor { 24 | unsigned short red; 25 | unsigned short green; 26 | unsigned short blue; 27 | }; 28 | typedef struct RGBColor RGBColor; 29 | #endif // __QUICKDRAW__ 30 | #endif // MAC_VERSION 31 | 32 | long qtimage_open(char *name, short path, CGrafPtr *gp, void *extra); 33 | long qtimage_getrect(char *name, short path, Rect *r, void *extra); 34 | void *qti_extra_new (void); 35 | void qti_extra_free (void *p); 36 | long qti_extra_pixelformat_get(void *p, OSType *pixelformat); 37 | long qti_extra_pixelformat_set(void *p, OSType pixelformat); 38 | long qti_extra_matrix_get (void *p, void *m); 39 | long qti_extra_matrix_set (void *p, void *m); 40 | long qti_extra_rect_get (void *p, Rect *r); 41 | long qti_extra_rect_set (void *p, Rect *r); 42 | long qti_extra_scalemode_get (void *p, long *scalemode); 43 | long qti_extra_scalemode_set (void *p, long scalemode); 44 | long qti_extra_time_get (void *p, double *time); 45 | long qti_extra_time_set (void *p, double time); 46 | long qti_extra_flags_get (void *p, long *flags); 47 | long qti_extra_flags_set (void *p, long flags); 48 | 49 | #ifdef __cplusplus 50 | } 51 | #endif 52 | 53 | #endif // _qtimage_H_ 54 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/mouse.c: -------------------------------------------------------------------------------- 1 | // mouse.c -- mouse moving code 2 | 3 | void MoveMouseTo(Point *pt); 4 | void MoveToCenter(Rect *b); 5 | 6 | enum // old low memory globals for old systems 7 | { 8 | CrsrNew = 0x8CE, 9 | CrsrCouple = 0x8CF, 10 | MTemp = 0x828, 11 | RawMouse = 0x82C, 12 | jCrsrTask = 0x8EE, 13 | _CrsrDevDispatch = 0xAADB 14 | }; 15 | 16 | #ifdef powerc 17 | UniversalProcPtr jCrsrTaskUPP = 0; 18 | #define crsrProcInfo kPascalStackBased 19 | 20 | static pascal void CallCrsr() 21 | { 22 | if (jCrsrTaskUPP == NULL) 23 | jCrsrTaskUPP = NewRoutineDescriptor(*(ProcPtr *)jCrsrTask, crsrProcInfo, kM68kISA); 24 | CallUniversalProc(jCrsrTaskUPP, crsrProcInfo); 25 | } 26 | #else 27 | 28 | static pascal void asm CallCrsr() // = {0x2078, 0x08EE, 0x4E90}; 29 | { 30 | MOVE.L D3,-(A7) 31 | MOVE.L jCrsrTask,A0 32 | JSR (A0) 33 | MOVE.L (A7)+,D3 34 | RTS 35 | } 36 | 37 | #endif 38 | 39 | void MoveMouseTo(Point *pt) 40 | { 41 | #if 0 42 | if (TrapAvailable((short)_CrsrDevDispatch)) { 43 | // If we get here we have the CDM 44 | CrsrDev *firstMouse; 45 | 46 | firstMouse = nil; // start at head of cursor dev list 47 | CrsrDevNextDevice(&firstMouse); // get the next cursor device 48 | // Call CDM to move the mouse 49 | CrsrDevMoveTo(firstMouse, (long)pt->h, (long)pt->v); 50 | } else { 51 | #endif 52 | static short phase = 1; 53 | // No CDM so we use the low memory globals 54 | 55 | *(Boolean *)CrsrCouple = FALSE; 56 | ((Point *)RawMouse)->h = pt->h + phase; 57 | ((Point *)RawMouse)->v = pt->v + phase; 58 | *(Point *)MTemp = *(Point *)RawMouse; 59 | phase = -phase; 60 | *(Ptr)CrsrNew = 0xFF; 61 | *(Ptr)CrsrCouple = 0xFF; 62 | CallCrsr(); // must call jCrsrTask to update system 63 | #if 0 64 | } 65 | #endif 66 | } 67 | 68 | void MoveToCenter(Rect *b) 69 | { 70 | Point p; 71 | 72 | p.h = (b->right - b->left)>>1; 73 | p.v = (b->bottom - b->top)>>1; 74 | MoveMouseTo(&p); 75 | } 76 | 77 | 78 | -------------------------------------------------------------------------------- /Software/Synth-A-Modeler/extras/vim-sam-syntax/sam.vim: -------------------------------------------------------------------------------- 1 | " There has to be a file called filetype.vim in your ~/.vim directory 2 | " with the following content: 3 | " sam filetype file 4 | " if exists("did_load_filetypes") 5 | " finish 6 | " endif 7 | " augroup filetypedetect 8 | " au! BufRead,BufNewFile *.mdl setfiletype sam 9 | " augroup END 10 | " 11 | " 12 | " Synth-A-Modeler syntax file 13 | " Language: Synth-A-Modeler 14 | " Maintainer: Peter Vasil 15 | " Version: 0.1 16 | " Last change: 2012-10-04 17 | 18 | " remove any old syntax stuff hanging around 19 | syn clear 20 | 21 | """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 22 | " sam primitives 23 | syn keyword samPrims mass ground port resonator link touch pluck waveguide termination junction audioout faustcode 24 | 25 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 26 | " sam operators 27 | syn keyword samOps simpleString simpleStringTerm 28 | 29 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 30 | " sam comments 31 | syn match samComment "#.*$" 32 | " syn region samComment start="/\*" end="\*/" contains=samOperator keepend extend 33 | 34 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 35 | " sam operators 36 | syn match samOperator "+" 37 | syn match samOperator "-" 38 | syn match samOperator "*" 39 | syn match samOperator ":" 40 | syn match samOperator "," 41 | 42 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 43 | " sam brackets 44 | syn match samAoperator "(" 45 | syn match samAoperator ")" 46 | 47 | " String 48 | syn region samString start=+"+ skip=+\\\\\|\\"+ end=+"+ 49 | 50 | " Color definition 51 | hi link samAoperator Statement 52 | hi link samPrims Label 53 | hi link samOps Identifier 54 | hi link samOperator Special 55 | hi link samComment Comment 56 | hi link samString String 57 | 58 | " The name of the syntax is sam 59 | let b:current_syntax = "sam" 60 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_wind.h: -------------------------------------------------------------------------------- 1 | /*************************/ 2 | /* Copyright 1988 IRCAM. */ 3 | /*************************/ 4 | #ifndef _EXT_WIND_H_ 5 | #define _EXT_WIND_H_ 6 | 7 | #ifdef __cplusplus 8 | extern "C" { 9 | #endif 10 | 11 | 12 | /** Returned values from wind_advise() 13 | @ingroup misc 14 | */ 15 | typedef enum { 16 | aaYes = 1, ///< Yes button was choosen 17 | aaNo, ///< No button was choosen 18 | aaCancel ///< Cancel button was choosen 19 | } e_max_wind_advise_result; 20 | 21 | 22 | /** Throw a dialog which may have text and up to three buttons. 23 | For example, this can be used to ask "Save changes before..." 24 | @ingroup misc 25 | @param w The window with which this dialog is associated. 26 | @param s A string with any sprintf()-like formatting to be displayed. 27 | @param ... Any variables that should be substituted in the string defined by s. 28 | @return One of the values defined in #e_max_wind_advise_result, depending on what the user selected. 29 | */ 30 | short wind_advise(t_object *w, char *s, ...); 31 | 32 | 33 | /** Change the cursor. 34 | @ingroup misc 35 | 36 | @param which One of the following predefined cursors: 37 | @code 38 | #define C_ARROW 1 39 | #define C_WATCH 2 40 | #define C_IBEAM 3 41 | #define C_HAND 4 42 | #define C_CROSS 5 43 | #define C_PENCIL 6 44 | #define C_GROW 8 45 | @endcode 46 | 47 | @remark wind_setcursor() keeps track of what the cursor was previously set 48 | to, so if something else has changed the cursor, you may not see a new 49 | cursor if you set it to the previous argument to wind_setcursor(). 50 | 51 | The solution is to call wind_setcursor(0) before calling it with the 52 | desired cursor constant. Use wind_setcursor(-1) to tell Max you’ll set 53 | the cursor to your own cursor directly. 54 | */ 55 | void wind_setcursor(short which); 56 | 57 | 58 | #ifdef __cplusplus 59 | } 60 | #endif 61 | 62 | #endif // _EXT_WIND_H_ 63 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/mouse.c: -------------------------------------------------------------------------------- 1 | // mouse.c -- mouse moving code 2 | 3 | void MoveMouseTo(Point *pt); 4 | void MoveToCenter(Rect *b); 5 | 6 | enum // old low memory globals for old systems 7 | { 8 | CrsrNew = 0x8CE, 9 | CrsrCouple = 0x8CF, 10 | MTemp = 0x828, 11 | RawMouse = 0x82C, 12 | jCrsrTask = 0x8EE, 13 | _CrsrDevDispatch = 0xAADB 14 | }; 15 | 16 | #ifdef powerc 17 | UniversalProcPtr jCrsrTaskUPP = 0; 18 | #define crsrProcInfo kPascalStackBased 19 | 20 | static pascal void CallCrsr() 21 | { 22 | if (jCrsrTaskUPP == NULL) 23 | jCrsrTaskUPP = NewRoutineDescriptor(*(ProcPtr *)jCrsrTask, crsrProcInfo, kM68kISA); 24 | CallUniversalProc(jCrsrTaskUPP, crsrProcInfo); 25 | } 26 | #else 27 | 28 | static pascal void asm CallCrsr() // = {0x2078, 0x08EE, 0x4E90}; 29 | { 30 | MOVE.L D3,-(A7) 31 | MOVE.L jCrsrTask,A0 32 | JSR (A0) 33 | MOVE.L (A7)+,D3 34 | RTS 35 | } 36 | 37 | #endif 38 | 39 | void MoveMouseTo(Point *pt) 40 | { 41 | #if 0 42 | if (TrapAvailable((short)_CrsrDevDispatch)) { 43 | // If we get here we have the CDM 44 | CrsrDev *firstMouse; 45 | 46 | firstMouse = nil; // start at head of cursor dev list 47 | CrsrDevNextDevice(&firstMouse); // get the next cursor device 48 | // Call CDM to move the mouse 49 | CrsrDevMoveTo(firstMouse, (long)pt->h, (long)pt->v); 50 | } else { 51 | #endif 52 | static short phase = 1; 53 | // No CDM so we use the low memory globals 54 | 55 | *(Boolean *)CrsrCouple = FALSE; 56 | ((Point *)RawMouse)->h = pt->h + phase; 57 | ((Point *)RawMouse)->v = pt->v + phase; 58 | *(Point *)MTemp = *(Point *)RawMouse; 59 | phase = -phase; 60 | *(Ptr)CrsrNew = 0xFF; 61 | *(Ptr)CrsrCouple = 0xFF; 62 | CallCrsr(); // must call jCrsrTask to update system 63 | #if 0 64 | } 65 | #endif 66 | } 67 | 68 | void MoveToCenter(Rect *b) 69 | { 70 | Point p; 71 | 72 | p.h = (b->right - b->left)>>1; 73 | p.v = (b->bottom - b->top)>>1; 74 | MoveMouseTo(&p); 75 | } 76 | 77 | 78 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/mouse.c: -------------------------------------------------------------------------------- 1 | // mouse.c -- mouse moving code 2 | 3 | void MoveMouseTo(Point *pt); 4 | void MoveToCenter(Rect *b); 5 | 6 | enum // old low memory globals for old systems 7 | { 8 | CrsrNew = 0x8CE, 9 | CrsrCouple = 0x8CF, 10 | MTemp = 0x828, 11 | RawMouse = 0x82C, 12 | jCrsrTask = 0x8EE, 13 | _CrsrDevDispatch = 0xAADB 14 | }; 15 | 16 | #ifdef powerc 17 | UniversalProcPtr jCrsrTaskUPP = 0; 18 | #define crsrProcInfo kPascalStackBased 19 | 20 | static pascal void CallCrsr() 21 | { 22 | if (jCrsrTaskUPP == NULL) 23 | jCrsrTaskUPP = NewRoutineDescriptor(*(ProcPtr *)jCrsrTask, crsrProcInfo, kM68kISA); 24 | CallUniversalProc(jCrsrTaskUPP, crsrProcInfo); 25 | } 26 | #else 27 | 28 | static pascal void asm CallCrsr() // = {0x2078, 0x08EE, 0x4E90}; 29 | { 30 | MOVE.L D3,-(A7) 31 | MOVE.L jCrsrTask,A0 32 | JSR (A0) 33 | MOVE.L (A7)+,D3 34 | RTS 35 | } 36 | 37 | #endif 38 | 39 | void MoveMouseTo(Point *pt) 40 | { 41 | #if 0 42 | if (TrapAvailable((short)_CrsrDevDispatch)) { 43 | // If we get here we have the CDM 44 | CrsrDev *firstMouse; 45 | 46 | firstMouse = nil; // start at head of cursor dev list 47 | CrsrDevNextDevice(&firstMouse); // get the next cursor device 48 | // Call CDM to move the mouse 49 | CrsrDevMoveTo(firstMouse, (long)pt->h, (long)pt->v); 50 | } else { 51 | #endif 52 | static short phase = 1; 53 | // No CDM so we use the low memory globals 54 | 55 | *(Boolean *)CrsrCouple = FALSE; 56 | ((Point *)RawMouse)->h = pt->h + phase; 57 | ((Point *)RawMouse)->v = pt->v + phase; 58 | *(Point *)MTemp = *(Point *)RawMouse; 59 | phase = -phase; 60 | *(Ptr)CrsrNew = 0xFF; 61 | *(Ptr)CrsrCouple = 0xFF; 62 | CallCrsr(); // must call jCrsrTask to update system 63 | #if 0 64 | } 65 | #endif 66 | } 67 | 68 | void MoveToCenter(Rect *b) 69 | { 70 | Point p; 71 | 72 | p.h = (b->right - b->left)>>1; 73 | p.v = (b->bottom - b->top)>>1; 74 | MoveMouseTo(&p); 75 | } 76 | 77 | 78 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_wind.h: -------------------------------------------------------------------------------- 1 | /*************************/ 2 | /* Copyright 1988 IRCAM. */ 3 | /*************************/ 4 | #ifndef _EXT_WIND_H_ 5 | #define _EXT_WIND_H_ 6 | 7 | #ifdef __cplusplus 8 | extern "C" { 9 | #endif 10 | 11 | 12 | /** Returned values from wind_advise() 13 | @ingroup misc 14 | */ 15 | typedef enum { 16 | aaYes = 1, ///< Yes button was choosen 17 | aaNo, ///< No button was choosen 18 | aaCancel ///< Cancel button was choosen 19 | } e_max_wind_advise_result; 20 | 21 | 22 | /** Throw a dialog which may have text and up to three buttons. 23 | For example, this can be used to ask "Save changes before..." 24 | @ingroup misc 25 | @param w The window with which this dialog is associated. 26 | @param s A string with any sprintf()-like formatting to be displayed. 27 | @param ... Any variables that should be substituted in the string defined by s. 28 | @return One of the values defined in #e_max_wind_advise_result, depending on what the user selected. 29 | */ 30 | short wind_advise(t_object *w, char *s, ...); 31 | 32 | 33 | /** Change the cursor. 34 | @ingroup misc 35 | 36 | @param which One of the following predefined cursors: 37 | @code 38 | #define C_ARROW 1 39 | #define C_WATCH 2 40 | #define C_IBEAM 3 41 | #define C_HAND 4 42 | #define C_CROSS 5 43 | #define C_PENCIL 6 44 | #define C_GROW 8 45 | @endcode 46 | 47 | @remark wind_setcursor() keeps track of what the cursor was previously set 48 | to, so if something else has changed the cursor, you may not see a new 49 | cursor if you set it to the previous argument to wind_setcursor(). 50 | 51 | The solution is to call wind_setcursor(0) before calling it with the 52 | desired cursor constant. Use wind_setcursor(-1) to tell Max you’ll set 53 | the cursor to your own cursor directly. 54 | */ 55 | void wind_setcursor(short which); 56 | 57 | 58 | #ifdef __cplusplus 59 | } 60 | #endif 61 | 62 | #endif // _EXT_WIND_H_ 63 | -------------------------------------------------------------------------------- /Software/Max/physical-modeling-lecture-FireFader/Readme.txt: -------------------------------------------------------------------------------- 1 | VERY IMPORTANT 2 | -------------- 3 | A FireFader haptic device should already be attached to this computer for you to use. 4 | 5 | For some examples, Max will need to use up almost all of the CPU power, so quit all other applications where possible. 6 | 7 | 8 | 9 | Safety features 10 | --------------- 11 | • The force is disabled if you push a fader all the way to one end. 12 | • If you let go of the fader, the force to it is disabled. 13 | 14 | 15 | 16 | To get it to work on your own Mac 17 | --------------------------------- 18 | 1. You will need to plug a FireFader in via USB. 19 | 2. Add the "palette" folder to the paths for Max, and then try out the Max patches in this folder. 20 | 2. Set the "Signal Vector Size" to 1 in the DSP Settings. 21 | 3. Set the "Event Interval (ms)" to 1 and the "Scheduler Interval (ms)" to 1 in the Preferences. 22 | 23 | 24 | 25 | Note on Haptics Processing 26 | -------------------------- 27 | When patches have graphical elements (particularly with anything animated), they can interfere with the haptics processing, which can make the haptics feel worse. 28 | WORKAROUND 1: Minimize the patch. Then the graphics functions aren't being called 29 | anymore, so they can't interfere with the haptics processing. 30 | WORKAROUND 2: See 200-Separate-Haptics-Computations.maxpat for a trick using poly~ 31 | that seems to fix this issue. 32 | 33 | 34 | 35 | Other Notes 36 | ----------- 37 | • Be careful not to have multiple patches open at the same time that are trying to access the same haptic device. Weird things will happen. 38 | 39 | 40 | 41 | 42 | When you want to finish a project 43 | --------------------------------- 44 | See 200-Separate-Haptics-Computations.maxpat for a technique using poly~ for making the haptics processing robust despite any graphics running in the Max patches. This also allows objects besides the haptics objects to run with a standard and more efficient signal vector size. -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_wind.h: -------------------------------------------------------------------------------- 1 | /*************************/ 2 | /* Copyright 1988 IRCAM. */ 3 | /*************************/ 4 | #ifndef _EXT_WIND_H_ 5 | #define _EXT_WIND_H_ 6 | 7 | #ifdef __cplusplus 8 | extern "C" { 9 | #endif 10 | 11 | 12 | /** Returned values from wind_advise() 13 | @ingroup misc 14 | */ 15 | typedef enum { 16 | aaYes = 1, ///< Yes button was choosen 17 | aaNo, ///< No button was choosen 18 | aaCancel ///< Cancel button was choosen 19 | } e_max_wind_advise_result; 20 | 21 | 22 | /** Throw a dialog which may have text and up to three buttons. 23 | For example, this can be used to ask "Save changes before..." 24 | @ingroup misc 25 | @param w The window with which this dialog is associated. 26 | @param s A string with any sprintf()-like formatting to be displayed. 27 | @param ... Any variables that should be substituted in the string defined by s. 28 | @return One of the values defined in #e_max_wind_advise_result, depending on what the user selected. 29 | */ 30 | short wind_advise(t_object *w, char *s, ...); 31 | 32 | 33 | /** Change the cursor. 34 | @ingroup misc 35 | 36 | @param which One of the following predefined cursors: 37 | @code 38 | #define C_ARROW 1 39 | #define C_WATCH 2 40 | #define C_IBEAM 3 41 | #define C_HAND 4 42 | #define C_CROSS 5 43 | #define C_PENCIL 6 44 | #define C_GROW 8 45 | @endcode 46 | 47 | @remark wind_setcursor() keeps track of what the cursor was previously set 48 | to, so if something else has changed the cursor, you may not see a new 49 | cursor if you set it to the previous argument to wind_setcursor(). 50 | 51 | The solution is to call wind_setcursor(0) before calling it with the 52 | desired cursor constant. Use wind_setcursor(-1) to tell Max you’ll set 53 | the cursor to your own cursor directly. 54 | */ 55 | void wind_setcursor(short which); 56 | 57 | 58 | #ifdef __cplusplus 59 | } 60 | #endif 61 | 62 | #endif // _EXT_WIND_H_ 63 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_symobject.h: -------------------------------------------------------------------------------- 1 | #ifndef __SYMOBJECT_H__ 2 | #define __SYMOBJECT_H__ 3 | 4 | #if C74_PRAGMA_STRUCT_PACKPUSH 5 | #pragma pack(push, 2) 6 | #elif C74_PRAGMA_STRUCT_PACK 7 | #pragma pack(2) 8 | #endif 9 | 10 | 11 | /** The symobject data structure. 12 | @ingroup symobject 13 | */ 14 | typedef struct _symobject{ 15 | t_object obj; ///< Max object header. 16 | t_symbol *sym; ///< The symbol contained by the object. 17 | long flags; ///< Any user-flags you wish to set or get. 18 | void *thing; ///< A generic pointer for attaching additional data to the symobject. 19 | } t_symobject; 20 | 21 | 22 | #if C74_PRAGMA_STRUCT_PACKPUSH 23 | #pragma pack(pop) 24 | #elif C74_PRAGMA_STRUCT_PACK 25 | #pragma pack() 26 | #endif 27 | 28 | 29 | #ifdef __cplusplus 30 | extern "C" { 31 | #endif // __cplusplus 32 | 33 | 34 | // private 35 | void symobject_initclass(void); 36 | 37 | 38 | /** The symobject data structure. 39 | 40 | @ingroup symobject 41 | @param sym A symbol with which to initialize the new symobject. 42 | @return Pointer to the new symobject instance. 43 | */ 44 | void *symobject_new(t_symbol *sym); 45 | 46 | 47 | /** Utility for searching a linklist containing symobjects. 48 | 49 | @ingroup symobject 50 | @param a (opaque) 51 | @param b (opaque) 52 | @return Returns true if a match is found, otherwise returns false. 53 | 54 | @remark The following example shows one common use of the this method. 55 | @code 56 | t_symobject *item = NULL; 57 | long index; 58 | t_symbol *textsym; 59 | 60 | textsym = gensym("something to look for"); 61 | 62 | // search for a symobject with the symbol 'something to look for' 63 | index = linklist_findfirst(s_ll_history, (void **)&item, symobject_linklist_match, textsym); 64 | if(index == -1){ 65 | // symobject not found. 66 | } 67 | else{ 68 | do something with the symobject, or with the index of the symbobject in the linklist 69 | } 70 | @endcode 71 | 72 | */ 73 | long symobject_linklist_match(void *a, void *b); 74 | 75 | 76 | #ifdef __cplusplus 77 | } 78 | #endif // __cplusplus 79 | 80 | #endif // __SYMOBJECT_H__ 81 | -------------------------------------------------------------------------------- /Hardware/FireFaderDerivatives/RotaryDevice/Readme.md: -------------------------------------------------------------------------------- 1 | This design is the same as the FireFader except that in place of fader A, a rotary motor with rotary encoder is connected. For that motor, we have the same power connections as with the motorized fader. 2 | 3 | However, the sensing works differently. Instead of connecting an analog voltage to pin A2, we instead use two digital inputs that are 90° out of phase with each other. “Phase A” of the rotary encoder is connected by a white wire to pin D2, which supports hardware interrupts. “Phase B” of the rotary encoder is connected by a green wire to pin D3, which also supports hardware interrupts. By typing a hardware interrupt to each of the encoder phases, we can get the maximum resolution of the measurement. Power (i.e. 5V) and ground (blue wire) are also connected to the encoder to power its circuitry. 4 | 5 | In summary, for the rotary motor we have the following: 6 | 7 | blue-ground 8 | 9 | white-channel A 10 | 11 | red-5V 12 | 13 | green-channel B 14 | 15 | 16 | I recommend using rotary motors that have at least 400 counts per revolution to get the most accurate sensing. In the current project, I’m using motors that have about 1000 counts per revolution. See the datasheets stored inside the directory Encoder-Datasheets for information on some common rotary encoders such as HEDL 5540 and HEDS 5540. 17 | 18 | 19 | 20 | To hook up a second rotary motor: 21 | 22 | * We could use one hardware interrupt per motor. In this case, we will have to rewrite the interrupt handlers CountA() and CountB() to do the logic for each motor separately. In that case, whenever an interrupt is triggered, we need to manually check the value of the other phase (connected to some other digital input pin that doesn’t support hardware interrupts) and then figure out how to do the right state machine logic. 23 | 24 | * Or we could try to connect the second motor’s encoder phases instead to digital inputs 0 and 1, which also support hardware interrupts. This will give us higher resolution measurements overall; however, I believe that it will interfere with the USB communication, so try it at your own risk! You may not be able to connect it to the Max models at all! 25 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_symobject.h: -------------------------------------------------------------------------------- 1 | #ifndef __SYMOBJECT_H__ 2 | #define __SYMOBJECT_H__ 3 | 4 | #if C74_PRAGMA_STRUCT_PACKPUSH 5 | #pragma pack(push, 2) 6 | #elif C74_PRAGMA_STRUCT_PACK 7 | #pragma pack(2) 8 | #endif 9 | 10 | 11 | /** The symobject data structure. 12 | @ingroup symobject 13 | */ 14 | typedef struct _symobject{ 15 | t_object obj; ///< Max object header. 16 | t_symbol *sym; ///< The symbol contained by the object. 17 | long flags; ///< Any user-flags you wish to set or get. 18 | void *thing; ///< A generic pointer for attaching additional data to the symobject. 19 | } t_symobject; 20 | 21 | 22 | #if C74_PRAGMA_STRUCT_PACKPUSH 23 | #pragma pack(pop) 24 | #elif C74_PRAGMA_STRUCT_PACK 25 | #pragma pack() 26 | #endif 27 | 28 | 29 | #ifdef __cplusplus 30 | extern "C" { 31 | #endif // __cplusplus 32 | 33 | 34 | // private 35 | void symobject_initclass(void); 36 | 37 | 38 | /** The symobject data structure. 39 | 40 | @ingroup symobject 41 | @param sym A symbol with which to initialize the new symobject. 42 | @return Pointer to the new symobject instance. 43 | */ 44 | void *symobject_new(t_symbol *sym); 45 | 46 | 47 | /** Utility for searching a linklist containing symobjects. 48 | 49 | @ingroup symobject 50 | @param a (opaque) 51 | @param b (opaque) 52 | @return Returns true if a match is found, otherwise returns false. 53 | 54 | @remark The following example shows one common use of the this method. 55 | @code 56 | t_symobject *item = NULL; 57 | long index; 58 | t_symbol *textsym; 59 | 60 | textsym = gensym("something to look for"); 61 | 62 | // search for a symobject with the symbol 'something to look for' 63 | index = linklist_findfirst(s_ll_history, (void **)&item, symobject_linklist_match, textsym); 64 | if(index == -1){ 65 | // symobject not found. 66 | } 67 | else{ 68 | do something with the symobject, or with the index of the symbobject in the linklist 69 | } 70 | @endcode 71 | 72 | */ 73 | long symobject_linklist_match(void *a, void *b); 74 | 75 | 76 | #ifdef __cplusplus 77 | } 78 | #endif // __cplusplus 79 | 80 | #endif // __SYMOBJECT_H__ 81 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_symobject.h: -------------------------------------------------------------------------------- 1 | #ifndef __SYMOBJECT_H__ 2 | #define __SYMOBJECT_H__ 3 | 4 | #if C74_PRAGMA_STRUCT_PACKPUSH 5 | #pragma pack(push, 2) 6 | #elif C74_PRAGMA_STRUCT_PACK 7 | #pragma pack(2) 8 | #endif 9 | 10 | 11 | /** The symobject data structure. 12 | @ingroup symobject 13 | */ 14 | typedef struct _symobject{ 15 | t_object obj; ///< Max object header. 16 | t_symbol *sym; ///< The symbol contained by the object. 17 | long flags; ///< Any user-flags you wish to set or get. 18 | void *thing; ///< A generic pointer for attaching additional data to the symobject. 19 | } t_symobject; 20 | 21 | 22 | #if C74_PRAGMA_STRUCT_PACKPUSH 23 | #pragma pack(pop) 24 | #elif C74_PRAGMA_STRUCT_PACK 25 | #pragma pack() 26 | #endif 27 | 28 | 29 | #ifdef __cplusplus 30 | extern "C" { 31 | #endif // __cplusplus 32 | 33 | 34 | // private 35 | void symobject_initclass(void); 36 | 37 | 38 | /** The symobject data structure. 39 | 40 | @ingroup symobject 41 | @param sym A symbol with which to initialize the new symobject. 42 | @return Pointer to the new symobject instance. 43 | */ 44 | void *symobject_new(t_symbol *sym); 45 | 46 | 47 | /** Utility for searching a linklist containing symobjects. 48 | 49 | @ingroup symobject 50 | @param a (opaque) 51 | @param b (opaque) 52 | @return Returns true if a match is found, otherwise returns false. 53 | 54 | @remark The following example shows one common use of the this method. 55 | @code 56 | t_symobject *item = NULL; 57 | long index; 58 | t_symbol *textsym; 59 | 60 | textsym = gensym("something to look for"); 61 | 62 | // search for a symobject with the symbol 'something to look for' 63 | index = linklist_findfirst(s_ll_history, (void **)&item, symobject_linklist_match, textsym); 64 | if(index == -1){ 65 | // symobject not found. 66 | } 67 | else{ 68 | do something with the symobject, or with the index of the symbobject in the linklist 69 | } 70 | @endcode 71 | 72 | */ 73 | long symobject_linklist_match(void *a, void *b); 74 | 75 | 76 | #ifdef __cplusplus 77 | } 78 | #endif // __cplusplus 79 | 80 | #endif // __SYMOBJECT_H__ 81 | -------------------------------------------------------------------------------- /Hardware/FireFader/PCB/FireFaderRev1/FireFaderRev1.TXT: -------------------------------------------------------------------------------- 1 | % 2 | M48 3 | M72 4 | T01C0.0236 5 | T02C0.0315 6 | T03C0.0320 7 | T04C0.0354 8 | T05C0.0440 9 | T06C0.0472 10 | T07C0.0700 11 | T08C0.0709 12 | T09C0.0728 13 | T10C0.0787 14 | T11C0.1102 15 | T12C0.1260 16 | T13C0.1300 17 | % 18 | T01 19 | X9000Y13600 20 | T02 21 | X11500Y23100 22 | X12500Y23100 23 | X13500Y23100 24 | X14500Y23100 25 | X15500Y23100 26 | X16500Y23100 27 | X17500Y23100 28 | X18500Y23100 29 | X19500Y23100 30 | X20500Y23100 31 | X21500Y23100 32 | X22500Y23100 33 | X23500Y23100 34 | X24500Y23100 35 | X25500Y23100 36 | X25500Y29100 37 | X24500Y29100 38 | X23500Y29100 39 | X22500Y29100 40 | X21500Y29100 41 | X20500Y29100 42 | X19500Y29100 43 | X18500Y29100 44 | X17500Y29100 45 | X16500Y29100 46 | X15500Y29100 47 | X14500Y29100 48 | X13500Y29100 49 | X12500Y29100 50 | X11500Y29100 51 | T03 52 | X13500Y20100 53 | X13500Y19100 54 | X39500Y18600 55 | X39500Y19600 56 | X40000Y2100 57 | X40000Y1100 58 | X10500Y1100 59 | X10500Y2100 60 | T04 61 | X3000Y6100 62 | X3000Y10100 63 | X3250Y14100 64 | X3250Y18100 65 | T05 66 | X7500Y20100 67 | X7500Y22100 68 | X46500Y23100 69 | X46500Y25100 70 | X46500Y27100 71 | X46500Y29100 72 | T06 73 | X36500Y19100 74 | X30500Y19100 75 | X21500Y19100 76 | X15500Y19100 77 | X13500Y2100 78 | X19500Y2100 79 | X31500Y2100 80 | X37500Y2100 81 | T07 82 | X26500Y23100 83 | X26500Y29100 84 | X10500Y29100 85 | X10500Y23100 86 | T08 87 | X4576Y4427 88 | X4573Y5903 89 | X4572Y7381 90 | X4574Y8862 91 | X4576Y12427 92 | X4573Y13903 93 | X4572Y15381 94 | X4574Y16862 95 | X41265Y16219 96 | X41270Y13065 97 | X41265Y8219 98 | X41270Y5065 99 | T09 100 | X41268Y5068 101 | X41267Y8219 102 | X41268Y13068 103 | X41267Y16219 104 | X7331Y16857 105 | X4575Y16859 106 | X4576Y15381 107 | X4576Y13904 108 | X4576Y12429 109 | X7330Y12429 110 | X7331Y8857 111 | X4575Y8859 112 | X4576Y7381 113 | X4576Y5904 114 | X4576Y4429 115 | X7330Y4429 116 | T10 117 | X7332Y4424 118 | X7327Y8858 119 | X7332Y12424 120 | X7327Y16858 121 | T11 122 | X4732Y19210 123 | X3394Y21100 124 | T12 125 | X5854Y21100 126 | T13 127 | X5500Y26100 128 | X13500Y6600 129 | X53500Y4100 130 | X53500Y26100 131 | M30 132 | -------------------------------------------------------------------------------- /Hardware/ThePlank/haptics_firmware_plank/Notes.txt: -------------------------------------------------------------------------------- 1 | To use The Plank with the Open-Source-Haptics-For-Artists repository, it's necessary to have a way 2 | to disable the force feedback if the user isn't touching the device. This could be accomplished 3 | by using the FSR as a sensor to check if the user is touching the handle; however, then further 4 | modifications would need to be made to this firmware and the circuit. Instead, I recommend 5 | adding a capacitive sensor to the device handle. This way, the device can be played with a light touch. 6 | 7 | This can be achieved by: 8 | • taking a piece of copper tape and soldering a stranded wire to it (use some solder flux to 9 | make this easier) 10 | • strip the other end of the wire and tin it if using a breadboard 11 | • use a piece of (electrically nonconducting) double-stick tape to attach the piece of copper tape 12 | to the device handle 13 | • build the circuit as shown in Figure 5 of the Computer Music Journal article 14 | "The FireFader: Simple, Open-Source, and Reconfigurable Haptic Force Feedback for Musicians" 15 | replacing "Motor A." Instead of connecting the 2nd pin of the potentiometer to Arduino pin A2, 16 | connect the voltage output of the Hall-effect sensor to Arduino pin A2. 17 | • Repeat the same procedure analogously for a second Plank motor as "Motor B." 18 | 19 | 20 | 21 | USE THE ARDUINO MICRO FOR BUILDING THIS WITH THE MOTOR DRIVER http://www.gravitech.us/2mwfecoadfor.html, ALSO AVAILABLE THROUGH MOUSER. 22 | 23 | 24 | 25 | // Anyone trying to use The Plank with Open-Source-Haptics-For-Artists should first try the 26 | // Synth-A-Modeler models, which are compatible with this firmware. To do this, run 27 | // 'make jackqt' inside the SaM subdirectory of the part of the repo 28 | // https://github.com/eberdahl/Open-Source-Haptics-For-Artists/tree/master/Software/Synth-A-Modeler 29 | // and visit https://ccrma.stanford.edu/wiki/SynthAModelerFireFaderLab for additional instructions 30 | // to set that up. 31 | // 32 | // After getting those working, then try the models in Max using the FireFader~ object to interface 33 | // with the firmware--see 34 | // https://github.com/eberdahl/Open-Source-Haptics-For-Artists/blob/master/Software/Max/Readme.txt -------------------------------------------------------------------------------- /Hardware/FireFader/PCB/FireFaderRev1/Gerbers/testschematic.TXT: -------------------------------------------------------------------------------- 1 | % 2 | M48 3 | M72 4 | T01C0.0236 5 | T02C0.0315 6 | T03C0.0320 7 | T04C0.0354 8 | T05C0.0440 9 | T06C0.0472 10 | T07C0.0700 11 | T08C0.0709 12 | T09C0.0728 13 | T10C0.0787 14 | T11C0.1102 15 | T12C0.1260 16 | T13C0.1300 17 | % 18 | T01 19 | X9000Y13600 20 | T02 21 | X11500Y23100 22 | X12500Y23100 23 | X13500Y23100 24 | X14500Y23100 25 | X15500Y23100 26 | X16500Y23100 27 | X17500Y23100 28 | X18500Y23100 29 | X19500Y23100 30 | X20500Y23100 31 | X21500Y23100 32 | X22500Y23100 33 | X23500Y23100 34 | X24500Y23100 35 | X25500Y23100 36 | X25500Y29100 37 | X24500Y29100 38 | X23500Y29100 39 | X22500Y29100 40 | X21500Y29100 41 | X20500Y29100 42 | X19500Y29100 43 | X18500Y29100 44 | X17500Y29100 45 | X16500Y29100 46 | X15500Y29100 47 | X14500Y29100 48 | X13500Y29100 49 | X12500Y29100 50 | X11500Y29100 51 | T03 52 | X13500Y20100 53 | X13500Y19100 54 | X39500Y18600 55 | X39500Y19600 56 | X40000Y2100 57 | X40000Y1100 58 | X10500Y1100 59 | X10500Y2100 60 | T04 61 | X3000Y6100 62 | X3000Y10100 63 | X3250Y14100 64 | X3250Y18100 65 | T05 66 | X7500Y20100 67 | X7500Y22100 68 | X46500Y23100 69 | X46500Y25100 70 | X46500Y27100 71 | X46500Y29100 72 | T06 73 | X36500Y19100 74 | X30500Y19100 75 | X21500Y19100 76 | X15500Y19100 77 | X13500Y2100 78 | X19500Y2100 79 | X31500Y2100 80 | X37500Y2100 81 | T07 82 | X26500Y23100 83 | X26500Y29100 84 | X10500Y29100 85 | X10500Y23100 86 | T08 87 | X4576Y4427 88 | X4573Y5903 89 | X4572Y7381 90 | X4574Y8862 91 | X4576Y12427 92 | X4573Y13903 93 | X4572Y15381 94 | X4574Y16862 95 | X41265Y16219 96 | X41270Y13065 97 | X41265Y8219 98 | X41270Y5065 99 | T09 100 | X41268Y5068 101 | X41267Y8219 102 | X41268Y13068 103 | X41267Y16219 104 | X7331Y16857 105 | X4575Y16859 106 | X4576Y15381 107 | X4576Y13904 108 | X4576Y12429 109 | X7330Y12429 110 | X7331Y8857 111 | X4575Y8859 112 | X4576Y7381 113 | X4576Y5904 114 | X4576Y4429 115 | X7330Y4429 116 | T10 117 | X7332Y4424 118 | X7327Y8858 119 | X7332Y12424 120 | X7327Y16858 121 | T11 122 | X4732Y19210 123 | X3394Y21100 124 | T12 125 | X5854Y21100 126 | T13 127 | X5500Y26100 128 | X13500Y6600 129 | X53500Y4100 130 | X53500Y26100 131 | M30 132 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/jpatcher_utils.h: -------------------------------------------------------------------------------- 1 | #ifndef _JPATCHER_UTILS_H_ 2 | #define _JPATCHER_UTILS_H_ 3 | 4 | BEGIN_USING_C_LINKAGE 5 | 6 | /** Copy an array of atoms. 7 | @ingroup atom 8 | @param argc1 The count of atoms in argv1. 9 | @param argv1 The address to the first of an array of atoms that is the source for the copy. 10 | @param argv2 The address to the first of an array of atoms that is the destination for the copy. 11 | Note that this array must already by allocated using sysmem_newptr() or atom_alloc(). */ 12 | void atom_copy(short argc1, t_atom *argv1, t_atom *argv2); 13 | 14 | /** Print the contents of an array of atoms to the Max window. 15 | @ingroup atom 16 | @param argc The count of atoms in argv. 17 | @param argv The address to the first of an array of atoms. */ 18 | void postargs(short argc, t_atom *argv); 19 | 20 | /** Print the contents of a dictionary to the Max window. 21 | @ingroup dictionary 22 | @param d A pointer to a dictionary object. */ 23 | void postdictionary(t_object *d); 24 | 25 | 26 | /** Return a pointer to an object contained in an atom if it is of the specified class. 27 | @ingroup atom 28 | @param x The address of a pointer to the object contained in av if it is of the specified class upon return. 29 | Otherwise NULL upon return. 30 | @param idx The index of the atom in the array from which to get the object pointer. 31 | @param argc The count of atoms in argv. 32 | @param argv The address to the first of an array of atoms. 33 | @param cls A symbol containing the class name of which the object should be an instance. 34 | @return A Max error code. */ 35 | t_max_err atom_arg_getobjclass(t_object **x, long idx, long argc, t_atom *argv, t_symbol *cls); 36 | 37 | /** Return a pointer to an object contained in an atom if it is of the specified class. 38 | @ingroup atom 39 | @param av A pointer to the atom from which to get the #t_object. 40 | @param cls A symbol containing the class name of which the object should be an instance. 41 | @return A pointer to the object contained in av if it is of the specified class, otherwise NULL. */ 42 | void *atom_getobjclass(t_atom *av, t_symbol *cls); 43 | 44 | 45 | method my_object_getmethod(void *obj, t_symbol *s); 46 | 47 | 48 | END_USING_C_LINKAGE 49 | 50 | #endif // #ifndef _JPATCHER_UTILS_H_ 51 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/jpatcher_utils.h: -------------------------------------------------------------------------------- 1 | #ifndef _JPATCHER_UTILS_H_ 2 | #define _JPATCHER_UTILS_H_ 3 | 4 | BEGIN_USING_C_LINKAGE 5 | 6 | /** Copy an array of atoms. 7 | @ingroup atom 8 | @param argc1 The count of atoms in argv1. 9 | @param argv1 The address to the first of an array of atoms that is the source for the copy. 10 | @param argv2 The address to the first of an array of atoms that is the destination for the copy. 11 | Note that this array must already by allocated using sysmem_newptr() or atom_alloc(). */ 12 | void atom_copy(short argc1, t_atom *argv1, t_atom *argv2); 13 | 14 | /** Print the contents of an array of atoms to the Max window. 15 | @ingroup atom 16 | @param argc The count of atoms in argv. 17 | @param argv The address to the first of an array of atoms. */ 18 | void postargs(short argc, t_atom *argv); 19 | 20 | /** Print the contents of a dictionary to the Max window. 21 | @ingroup dictionary 22 | @param d A pointer to a dictionary object. */ 23 | void postdictionary(t_object *d); 24 | 25 | 26 | /** Return a pointer to an object contained in an atom if it is of the specified class. 27 | @ingroup atom 28 | @param x The address of a pointer to the object contained in av if it is of the specified class upon return. 29 | Otherwise NULL upon return. 30 | @param idx The index of the atom in the array from which to get the object pointer. 31 | @param argc The count of atoms in argv. 32 | @param argv The address to the first of an array of atoms. 33 | @param cls A symbol containing the class name of which the object should be an instance. 34 | @return A Max error code. */ 35 | t_max_err atom_arg_getobjclass(t_object **x, long idx, long argc, t_atom *argv, t_symbol *cls); 36 | 37 | /** Return a pointer to an object contained in an atom if it is of the specified class. 38 | @ingroup atom 39 | @param av A pointer to the atom from which to get the #t_object. 40 | @param cls A symbol containing the class name of which the object should be an instance. 41 | @return A pointer to the object contained in av if it is of the specified class, otherwise NULL. */ 42 | void *atom_getobjclass(t_atom *av, t_symbol *cls); 43 | 44 | 45 | method my_object_getmethod(void *obj, t_symbol *s); 46 | 47 | 48 | END_USING_C_LINKAGE 49 | 50 | #endif // #ifndef _JPATCHER_UTILS_H_ 51 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/jpatcher_utils.h: -------------------------------------------------------------------------------- 1 | #ifndef _JPATCHER_UTILS_H_ 2 | #define _JPATCHER_UTILS_H_ 3 | 4 | BEGIN_USING_C_LINKAGE 5 | 6 | /** Copy an array of atoms. 7 | @ingroup atom 8 | @param argc1 The count of atoms in argv1. 9 | @param argv1 The address to the first of an array of atoms that is the source for the copy. 10 | @param argv2 The address to the first of an array of atoms that is the destination for the copy. 11 | Note that this array must already by allocated using sysmem_newptr() or atom_alloc(). */ 12 | void atom_copy(short argc1, t_atom *argv1, t_atom *argv2); 13 | 14 | /** Print the contents of an array of atoms to the Max window. 15 | @ingroup atom 16 | @param argc The count of atoms in argv. 17 | @param argv The address to the first of an array of atoms. */ 18 | void postargs(short argc, t_atom *argv); 19 | 20 | /** Print the contents of a dictionary to the Max window. 21 | @ingroup dictionary 22 | @param d A pointer to a dictionary object. */ 23 | void postdictionary(t_object *d); 24 | 25 | 26 | /** Return a pointer to an object contained in an atom if it is of the specified class. 27 | @ingroup atom 28 | @param x The address of a pointer to the object contained in av if it is of the specified class upon return. 29 | Otherwise NULL upon return. 30 | @param idx The index of the atom in the array from which to get the object pointer. 31 | @param argc The count of atoms in argv. 32 | @param argv The address to the first of an array of atoms. 33 | @param cls A symbol containing the class name of which the object should be an instance. 34 | @return A Max error code. */ 35 | t_max_err atom_arg_getobjclass(t_object **x, long idx, long argc, t_atom *argv, t_symbol *cls); 36 | 37 | /** Return a pointer to an object contained in an atom if it is of the specified class. 38 | @ingroup atom 39 | @param av A pointer to the atom from which to get the #t_object. 40 | @param cls A symbol containing the class name of which the object should be an instance. 41 | @return A pointer to the object contained in av if it is of the specified class, otherwise NULL. */ 42 | void *atom_getobjclass(t_atom *av, t_symbol *cls); 43 | 44 | 45 | method my_object_getmethod(void *obj, t_symbol *s); 46 | 47 | 48 | END_USING_C_LINKAGE 49 | 50 | #endif // #ifndef _JPATCHER_UTILS_H_ 51 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_strings.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_STRINGS_H_ 2 | #define _EXT_STRINGS_H_ 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | 9 | /** Copy the contents of one string to another, in a manner safer than the standard strcpy() or strncpy(). 10 | This is the prefered function to use for this operation in Max. 11 | @ingroup misc 12 | @param dst The destination string (already allocated) for the copy. 13 | @param src The source string that will be copied. 14 | @param size The number of chars allocated to the dst string. 15 | */ 16 | char *strncpy_zero(char *dst, const char* src, long size); 17 | 18 | 19 | /** Concatenate the contents of one string onto the end of another, 20 | in a manner safer than the standard strcat() or strncat(). 21 | This is the prefered function to use for this operation in Max. 22 | @ingroup misc 23 | @param dst The destination string onto whose end the src string will be appended. 24 | @param src The source string that will be copied. 25 | @param size The number of chars allocated to the dst string. 26 | */ 27 | char *strncat_zero(char *dst, const char* src, long size); 28 | 29 | 30 | /** Copy the contents of a string together with value substitutions, 31 | in a manner safer than the standard sprintf() or snprintf(). 32 | This is the prefered function to use for this operation in Max. 33 | @ingroup misc 34 | @param buffer The destination string (already allocated) for the copy. 35 | @param count The number of chars allocated to the buffer string. 36 | @param format The source string that will be copied, which may include sprintf() formatting codes for substitutions. 37 | @param ... An array of arguments to be substituted into the format string. 38 | */ 39 | int snprintf_zero(char *buffer, size_t count, const char *format, ...); 40 | 41 | 42 | #if TARGET_API_MAC_CARBON 43 | #define CtoPstr(x) CopyCStringToPascal((const char *)(x),(unsigned char *)(x)) 44 | #define PtoCstr(x) CopyPascalStringToC((ConstStr255Param)(x),(char *)(x)) 45 | #endif // TARGET_API_MAC_CARBON 46 | 47 | 48 | // Legacy 49 | 50 | void ctopcpy(unsigned char *p1, char *p2); 51 | void ptoccpy(char *p1, unsigned char *p2); 52 | void setmem(void *s, long n, short b); 53 | void pstrcpy(unsigned char *p2, unsigned char *p1); 54 | 55 | 56 | #ifdef __cplusplus 57 | } 58 | #endif 59 | 60 | #endif // _EXT_STRINGS_H_ 61 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_strings.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_STRINGS_H_ 2 | #define _EXT_STRINGS_H_ 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | 9 | /** Copy the contents of one string to another, in a manner safer than the standard strcpy() or strncpy(). 10 | This is the prefered function to use for this operation in Max. 11 | @ingroup misc 12 | @param dst The destination string (already allocated) for the copy. 13 | @param src The source string that will be copied. 14 | @param size The number of chars allocated to the dst string. 15 | */ 16 | char *strncpy_zero(char *dst, const char* src, long size); 17 | 18 | 19 | /** Concatenate the contents of one string onto the end of another, 20 | in a manner safer than the standard strcat() or strncat(). 21 | This is the prefered function to use for this operation in Max. 22 | @ingroup misc 23 | @param dst The destination string onto whose end the src string will be appended. 24 | @param src The source string that will be copied. 25 | @param size The number of chars allocated to the dst string. 26 | */ 27 | char *strncat_zero(char *dst, const char* src, long size); 28 | 29 | 30 | /** Copy the contents of a string together with value substitutions, 31 | in a manner safer than the standard sprintf() or snprintf(). 32 | This is the prefered function to use for this operation in Max. 33 | @ingroup misc 34 | @param buffer The destination string (already allocated) for the copy. 35 | @param count The number of chars allocated to the buffer string. 36 | @param format The source string that will be copied, which may include sprintf() formatting codes for substitutions. 37 | @param ... An array of arguments to be substituted into the format string. 38 | */ 39 | int snprintf_zero(char *buffer, size_t count, const char *format, ...); 40 | 41 | 42 | #if TARGET_API_MAC_CARBON 43 | #define CtoPstr(x) CopyCStringToPascal((const char *)(x),(unsigned char *)(x)) 44 | #define PtoCstr(x) CopyPascalStringToC((ConstStr255Param)(x),(char *)(x)) 45 | #endif // TARGET_API_MAC_CARBON 46 | 47 | 48 | // Legacy 49 | 50 | void ctopcpy(unsigned char *p1, char *p2); 51 | void ptoccpy(char *p1, unsigned char *p2); 52 | void setmem(void *s, long n, short b); 53 | void pstrcpy(unsigned char *p2, unsigned char *p1); 54 | 55 | 56 | #ifdef __cplusplus 57 | } 58 | #endif 59 | 60 | #endif // _EXT_STRINGS_H_ 61 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_strings.h: -------------------------------------------------------------------------------- 1 | #ifndef _EXT_STRINGS_H_ 2 | #define _EXT_STRINGS_H_ 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | 9 | /** Copy the contents of one string to another, in a manner safer than the standard strcpy() or strncpy(). 10 | This is the prefered function to use for this operation in Max. 11 | @ingroup misc 12 | @param dst The destination string (already allocated) for the copy. 13 | @param src The source string that will be copied. 14 | @param size The number of chars allocated to the dst string. 15 | */ 16 | char *strncpy_zero(char *dst, const char* src, long size); 17 | 18 | 19 | /** Concatenate the contents of one string onto the end of another, 20 | in a manner safer than the standard strcat() or strncat(). 21 | This is the prefered function to use for this operation in Max. 22 | @ingroup misc 23 | @param dst The destination string onto whose end the src string will be appended. 24 | @param src The source string that will be copied. 25 | @param size The number of chars allocated to the dst string. 26 | */ 27 | char *strncat_zero(char *dst, const char* src, long size); 28 | 29 | 30 | /** Copy the contents of a string together with value substitutions, 31 | in a manner safer than the standard sprintf() or snprintf(). 32 | This is the prefered function to use for this operation in Max. 33 | @ingroup misc 34 | @param buffer The destination string (already allocated) for the copy. 35 | @param count The number of chars allocated to the buffer string. 36 | @param format The source string that will be copied, which may include sprintf() formatting codes for substitutions. 37 | @param ... An array of arguments to be substituted into the format string. 38 | */ 39 | int snprintf_zero(char *buffer, size_t count, const char *format, ...); 40 | 41 | 42 | #if TARGET_API_MAC_CARBON 43 | #define CtoPstr(x) CopyCStringToPascal((const char *)(x),(unsigned char *)(x)) 44 | #define PtoCstr(x) CopyPascalStringToC((ConstStr255Param)(x),(char *)(x)) 45 | #endif // TARGET_API_MAC_CARBON 46 | 47 | 48 | // Legacy 49 | 50 | void ctopcpy(unsigned char *p1, char *p2); 51 | void ptoccpy(char *p1, unsigned char *p2); 52 | void setmem(void *s, long n, short b); 53 | void pstrcpy(unsigned char *p2, unsigned char *p1); 54 | 55 | 56 | #ifdef __cplusplus 57 | } 58 | #endif 59 | 60 | #endif // _EXT_STRINGS_H_ 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Open-Source-Haptics-For-Artists 2 | ------------------------------- 3 | This website provides a venue for users to share open-source software and hardware haptic technology with one another. While the focus is primarily on artistic applications, we believe that mutual collaboration can help the field of haptics progress most rapidly in art, science, and technology. 4 | 5 | This git repository has been created via a collaboration between the Technical University of Berlin, the Cardiff School of Art & Design, and Stanford University. If you develop some nice contributions, please let us know, and we would be happy to incorporate them. 6 | 7 | Current maintainers: 8 | Edgar Berdahl (eberdahl@ccrma.stanford.edu) 9 | and 10 | Alexandros Kontogeorgakopoulos (akontogeorgakopoulos@cardiffmet.ac.uk) 11 | 12 | 13 | 14 | Main website: 15 | http://www.openhaptics.org/ 16 | 17 | 18 | To use OSHA, install git and then run the following command: 19 | 20 | git clone --recursive https://github.com/eberdahl/Open-Source-Haptics-For-Artists.git 21 | 22 | cd Open-Source-Haptics-For-Artists 23 | 24 | To update this repository, run the following from the root directory: 25 | 26 | git pull 27 | 28 | git submodule update 29 | 30 | In general, please use the Google group for asking questions: 31 | https://groups.google.com/group/open-source-haptics-for-artists 32 | 33 | I have decided to officially support the Max/MSP objects and the Synth-A-Modeler objects, once I deliver them. I STRONGLY RECOMMEND USING MAX/MSP OR SYNTH-A-MODELER. However, I understand that people might be interested in using the older pd or Chai3D code, so I am including the source for them as starter code. 34 | 35 | 36 | Notes on software 37 | ----------------- 38 | - Currently the Max/MSP support is the most fleshed out, including testing the concept of using capacitive sensing to enable or disable the force feedback. To use the Max/MSP patches, you will to put the palette folder in the path. 39 | !!!** Remember to set the "Signal Vector Size" to 1 **!!! 40 | 41 | 42 | Notes on hardware 43 | ----------------- 44 | By default the motor controller sets up 45 | - D4: Direction control of Motor A 46 | - D5: PWM speed control of Motor A 47 | - D6: PWM speed control of Motor B 48 | - D7: Direction control of Motor B 49 | - A0: Current sense of Motor A 50 | - A1: Current sense of Motor B 51 | 52 | So pin D5 and D6 on Arduino are ATMega328 pins correspond to 53 | D5 --> PD5(T1) 54 | D6 --> PD6(AIN0) 55 | 56 | 57 | 58 | Best, 59 | Edgar Berdahl 60 | March, 2012 and updated July, 2012 and October, 2012 61 | -------------------------------------------------------------------------------- /Software/Pd/two_examples-FireFader/Haptic-Scrubber.pd: -------------------------------------------------------------------------------- 1 | #N canvas 510 219 576 210 16; 2 | #X obj 48 49 hip~ 5; 3 | #X text 114 50 high pass filter to cut DC; 4 | #X obj 10 119 dac~ 1 2; 5 | #N canvas 221 147 1174 439 subpatch-with-signal-vector-size-1 0; 6 | #X obj -25 223 block~ 1; 7 | #X obj -25 4 delwrite~ #0d1 1; 8 | #X obj -24 31 delread~ #0d1 0; 9 | #N canvas 148 53 243 182 sample-for-GUI 0; 10 | #X obj 135 38 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 11 | 1; 12 | #X obj 135 9 loadbang; 13 | #X obj 10 145 outlet; 14 | #X obj 10 114 snapshot~; 15 | #X obj 9 37 inlet~; 16 | #X obj 135 59 metro 100; 17 | #X connect 0 0 5 0; 18 | #X connect 1 0 0 0; 19 | #X connect 3 0 2 0; 20 | #X connect 4 0 3 0; 21 | #X connect 5 0 3 0; 22 | #X restore -23 143 pd sample-for-GUI; 23 | #X obj -20 172 hsl 128 15 -0.04 0.04 0 0 empty empty empty -2 -8 0 24 | 10 -262144 -1 -1 0 1; 25 | #X floatatom -23 194 7 0 0 0 - - -; 26 | #X obj -24 59 FireFader~; 27 | #X text 172 226 Edgar Berdahl; 28 | #X text 171 246 updated October 2011; 29 | #N canvas 0 22 450 300 (subpatch) 0; 30 | #X array sample-table 44104 float 0; 31 | #X coords 0 1.02 44103 -1.02 200 130 1; 32 | #X restore 730 -41 graph; 33 | #X obj 550 174 loadbang; 34 | #X text 736 112 (one second plus three extra; 35 | #X text 738 131 for 4-point interpolation); 36 | #X text 729 90 --- 44103 samples ---; 37 | #X obj 550 223 soundfiler; 38 | #X obj 467 26 tabread4~ sample-table; 39 | #X obj 620 67 outlet~; 40 | #X obj 467 55 abs~; 41 | #X obj 244 72 *~; 42 | #X msg 550 198 read super220.wav sample-table; 43 | #X obj 467 -3 lop~ 10; 44 | #X text 478 246 message to read a soundfile into the table (automatically 45 | sent when you load this patch by the "loadbang" object.); 46 | #X text -16 -121 The strength of the damper link~ l is modulated by 47 | the values stored in a lookup sample-table.; 48 | #X obj 466 90 sqrt~; 49 | #X obj 465 -62 +~ 0.055; 50 | #X obj 467 124 lop~ 40; 51 | #X obj 243 42 link~ l 0 20 0; 52 | #X obj 466 -32 *~ 440000; 53 | #X connect 2 0 6 0; 54 | #X connect 3 0 4 0; 55 | #X connect 4 0 5 0; 56 | #X connect 6 0 3 0; 57 | #X connect 6 0 24 0; 58 | #X connect 6 0 26 0; 59 | #X connect 10 0 19 0; 60 | #X connect 15 0 16 0; 61 | #X connect 15 0 17 0; 62 | #X connect 17 0 23 0; 63 | #X connect 18 0 1 0; 64 | #X connect 19 0 14 0; 65 | #X connect 20 0 15 0; 66 | #X connect 23 0 25 0; 67 | #X connect 24 0 27 0; 68 | #X connect 25 0 18 1; 69 | #X connect 26 0 18 0; 70 | #X connect 27 0 20 0; 71 | #X restore 48 13 pd subpatch-with-signal-vector-size-1; 72 | #X text 138 102 Feel the texture of a WAV file.; 73 | #X text 138 146 Changes the damping/friction coefficient; 74 | #X text 138 173 according to the envelope of the WAV file.; 75 | #X connect 0 0 2 0; 76 | #X connect 0 0 2 1; 77 | #X connect 3 0 0 0; 78 | -------------------------------------------------------------------------------- /Software/Max/Readme.txt: -------------------------------------------------------------------------------- 1 | Max/MSP support is implemented via the HSP ("Haptic Signal Processing") package 2 | 3 | Contributors: Edgar Berdahl and Alexandros Kontogeorgakopoulos 4 | 5 | For Max/MSP 5, 6 and 7. 6 | 7 | It has been tested on Mac OS X with Intel processors. The FireFader works in Windows (but to use the NovInt Falcon device in Windows, someone would need to recompile the external object "np_nifalcon.mxo"). 8 | 9 | 10 | 11 | 12 | VERY IMPORTANT 13 | -------------- 14 | 1. Add the "palette" folder to the paths for Max/MSP 5, and then try out the examples in the models folder. 15 | 2. Set the "Signal Vector Size" to 1 in the DSP Settings. 16 | 3. Set the "Event Interval (ms)" to 1 and the "Scheduler Interval (ms)" to 1 in the Preferences. 17 | 18 | 19 | MAKE SURE THAT YOU’RE OPENING THE CORRECT HAPTIC DEVICE 20 | ------------------------------------------------------- 21 | 1. First make sure that the FireFader (or whatever haptic device you want to use) is unplugged. 22 | 2. Open the FireFader~.maxpat file in Max. 23 | 3. Click on the ‘print’ message and look in the Max window to see what letter Max is associating with each serial device that Max is finding. The haptic device that you want will not be here. 24 | 4. Close FireFader~.maxpat. 25 | 5. Wait five seconds, plug in the haptic device and then open FireFader~.maxpat again, and then wait fifteen seconds. 26 | 6. Click on the ‘print’ message to list what letter Max is associating with each serial device that Max is finding. The new serial port entry corresponds to your device. 27 | 7. Make sure that the second argument to the ‘serial’ object in FireFader~.maxpat matches the letter of the device. 28 | 8. By this point, you should also see some meaningful output inside the number boxes below representing the ‘position’ of the device. 29 | 30 | You will need to follow some similar procedure in concept to this to open the Falcon. 31 | 32 | Note: If the FireFader is plugged in to a Mac before the Mac is booted up, it will likely show up with a different letter (e.g. ‘a’) once the computer boots up. This can be fixed by unplugging it, waiting 5 seconds, plugging it in again, and waiting 15 seconds. 33 | 34 | 35 | 36 | TROUBLESHOOTING 37 | --------------- 38 | If it isn’t working the way you expect, make sure that you precisely followed each of the above steps. Then, if there are still difficulties (such as models not feeling the way that you think they should feel), close all other applications, reboot the computer, and run only Max. Finally, it can also help (particularly if there are some animated GUI objects in the Max patch) to minimize the Max patch so that Max isn't running any drawing routines. The reason for this is that the graphics events are running at the same priority level as the serial object. -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_sysparallel.h: -------------------------------------------------------------------------------- 1 | #ifndef __SYSPARALLEL_H__ 2 | #define __SYSPARALLEL_H__ 3 | 4 | #if C74_PRAGMA_STRUCT_PACKPUSH 5 | #pragma pack(push, 2) 6 | #elif C74_PRAGMA_STRUCT_PACK 7 | #pragma pack(2) 8 | #endif 9 | 10 | #ifdef __cplusplus 11 | extern "C" { 12 | #endif // __cplusplus 13 | 14 | 15 | #define SYSPARALLEL_PRIORITY_DEFAULT 0x00 16 | #define SYSPARALLEL_PRIORITY_LOW 0x00 17 | #define SYSPARALLEL_PRIORITY_MEDIUM 0x04 18 | #define SYSPARALLEL_PRIORITY_HIGH 0x08 19 | 20 | #define SYSPARALLEL_MAX_WORKERS 64 21 | 22 | #define SYSPARALLEL_STATE_IDLE 0 23 | #define SYSPARALLEL_STATE_RUN 1 24 | #define SYSPARALLEL_STATE_DONE 2 25 | 26 | typedef struct _sysparallel_task 27 | { 28 | t_object ob; 29 | void *obex; 30 | void *data; // global task data 31 | method workerproc; // worker callback function 32 | long workercount; // number of workers to use 33 | struct _sysparallel_worker **workers; // worker array 34 | char priority; // thread priority 35 | char benchmark; // benchmark 36 | long iteration; // for benchmarking 37 | double begintime; // for benchmarking 38 | double endtime; // for benchmarking 39 | long cancel; // for cancel request 40 | 41 | } t_sysparallel_task; 42 | 43 | 44 | typedef struct _sysparallel_worker 45 | { 46 | t_object ob; 47 | void *obex; 48 | void *data; // worker specific data 49 | method workerproc; // worker callback function, worker object passed in 50 | t_sysparallel_task *task; // pointer to task parent (can be used to access global task data) 51 | long id; // worker id 52 | double begintime; // for benchmarking (uses task info) 53 | double endtime; // for benchmarking (uses task info) 54 | 55 | } t_sysparallel_worker; 56 | 57 | 58 | void sysparallel_init(void); 59 | long sysparallel_processorcount(void); 60 | t_sysparallel_task *sysparallel_task_new(void *data, method workerproc, long workercount); 61 | t_max_err sysparallel_task_execute(t_sysparallel_task *x); 62 | t_max_err sysparallel_task_cancel(t_sysparallel_task *x); 63 | void sysparallel_task_free(t_sysparallel_task *x); 64 | void sysparallel_task_benchprint(t_sysparallel_task *x); 65 | void sysparallel_task_data(t_sysparallel_task *x, void * data); 66 | void sysparallel_task_workerproc(t_sysparallel_task *x, method workerproc); 67 | 68 | t_sysparallel_worker *sysparallel_worker_new(void *data, method workerproc, t_sysparallel_task *task); 69 | t_max_err sysparallel_worker_execute(t_sysparallel_worker *x); 70 | void sysparallel_worker_free(t_sysparallel_worker *x); 71 | 72 | #ifdef __cplusplus 73 | } 74 | #endif // __cplusplus 75 | 76 | #if C74_PRAGMA_STRUCT_PACKPUSH 77 | #pragma pack(pop) 78 | #elif C74_PRAGMA_STRUCT_PACK 79 | #pragma pack() 80 | #endif 81 | 82 | #endif // __SYSPARALLEL_H__ 83 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_sysparallel.h: -------------------------------------------------------------------------------- 1 | #ifndef __SYSPARALLEL_H__ 2 | #define __SYSPARALLEL_H__ 3 | 4 | #if C74_PRAGMA_STRUCT_PACKPUSH 5 | #pragma pack(push, 2) 6 | #elif C74_PRAGMA_STRUCT_PACK 7 | #pragma pack(2) 8 | #endif 9 | 10 | #ifdef __cplusplus 11 | extern "C" { 12 | #endif // __cplusplus 13 | 14 | 15 | #define SYSPARALLEL_PRIORITY_DEFAULT 0x00 16 | #define SYSPARALLEL_PRIORITY_LOW 0x00 17 | #define SYSPARALLEL_PRIORITY_MEDIUM 0x04 18 | #define SYSPARALLEL_PRIORITY_HIGH 0x08 19 | 20 | #define SYSPARALLEL_MAX_WORKERS 64 21 | 22 | #define SYSPARALLEL_STATE_IDLE 0 23 | #define SYSPARALLEL_STATE_RUN 1 24 | #define SYSPARALLEL_STATE_DONE 2 25 | 26 | typedef struct _sysparallel_task 27 | { 28 | t_object ob; 29 | void *obex; 30 | void *data; // global task data 31 | method workerproc; // worker callback function 32 | long workercount; // number of workers to use 33 | struct _sysparallel_worker **workers; // worker array 34 | char priority; // thread priority 35 | char benchmark; // benchmark 36 | long iteration; // for benchmarking 37 | double begintime; // for benchmarking 38 | double endtime; // for benchmarking 39 | long cancel; // for cancel request 40 | 41 | } t_sysparallel_task; 42 | 43 | 44 | typedef struct _sysparallel_worker 45 | { 46 | t_object ob; 47 | void *obex; 48 | void *data; // worker specific data 49 | method workerproc; // worker callback function, worker object passed in 50 | t_sysparallel_task *task; // pointer to task parent (can be used to access global task data) 51 | long id; // worker id 52 | double begintime; // for benchmarking (uses task info) 53 | double endtime; // for benchmarking (uses task info) 54 | 55 | } t_sysparallel_worker; 56 | 57 | 58 | void sysparallel_init(void); 59 | long sysparallel_processorcount(void); 60 | t_sysparallel_task *sysparallel_task_new(void *data, method workerproc, long workercount); 61 | t_max_err sysparallel_task_execute(t_sysparallel_task *x); 62 | t_max_err sysparallel_task_cancel(t_sysparallel_task *x); 63 | void sysparallel_task_free(t_sysparallel_task *x); 64 | void sysparallel_task_benchprint(t_sysparallel_task *x); 65 | void sysparallel_task_data(t_sysparallel_task *x, void * data); 66 | void sysparallel_task_workerproc(t_sysparallel_task *x, method workerproc); 67 | 68 | t_sysparallel_worker *sysparallel_worker_new(void *data, method workerproc, t_sysparallel_task *task); 69 | t_max_err sysparallel_worker_execute(t_sysparallel_worker *x); 70 | void sysparallel_worker_free(t_sysparallel_worker *x); 71 | 72 | #ifdef __cplusplus 73 | } 74 | #endif // __cplusplus 75 | 76 | #if C74_PRAGMA_STRUCT_PACKPUSH 77 | #pragma pack(pop) 78 | #elif C74_PRAGMA_STRUCT_PACK 79 | #pragma pack() 80 | #endif 81 | 82 | #endif // __SYSPARALLEL_H__ 83 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_sysparallel.h: -------------------------------------------------------------------------------- 1 | #ifndef __SYSPARALLEL_H__ 2 | #define __SYSPARALLEL_H__ 3 | 4 | #if C74_PRAGMA_STRUCT_PACKPUSH 5 | #pragma pack(push, 2) 6 | #elif C74_PRAGMA_STRUCT_PACK 7 | #pragma pack(2) 8 | #endif 9 | 10 | #ifdef __cplusplus 11 | extern "C" { 12 | #endif // __cplusplus 13 | 14 | 15 | #define SYSPARALLEL_PRIORITY_DEFAULT 0x00 16 | #define SYSPARALLEL_PRIORITY_LOW 0x00 17 | #define SYSPARALLEL_PRIORITY_MEDIUM 0x04 18 | #define SYSPARALLEL_PRIORITY_HIGH 0x08 19 | 20 | #define SYSPARALLEL_MAX_WORKERS 64 21 | 22 | #define SYSPARALLEL_STATE_IDLE 0 23 | #define SYSPARALLEL_STATE_RUN 1 24 | #define SYSPARALLEL_STATE_DONE 2 25 | 26 | typedef struct _sysparallel_task 27 | { 28 | t_object ob; 29 | void *obex; 30 | void *data; // global task data 31 | method workerproc; // worker callback function 32 | long workercount; // number of workers to use 33 | struct _sysparallel_worker **workers; // worker array 34 | char priority; // thread priority 35 | char benchmark; // benchmark 36 | long iteration; // for benchmarking 37 | double begintime; // for benchmarking 38 | double endtime; // for benchmarking 39 | long cancel; // for cancel request 40 | 41 | } t_sysparallel_task; 42 | 43 | 44 | typedef struct _sysparallel_worker 45 | { 46 | t_object ob; 47 | void *obex; 48 | void *data; // worker specific data 49 | method workerproc; // worker callback function, worker object passed in 50 | t_sysparallel_task *task; // pointer to task parent (can be used to access global task data) 51 | long id; // worker id 52 | double begintime; // for benchmarking (uses task info) 53 | double endtime; // for benchmarking (uses task info) 54 | 55 | } t_sysparallel_worker; 56 | 57 | 58 | void sysparallel_init(void); 59 | long sysparallel_processorcount(void); 60 | t_sysparallel_task *sysparallel_task_new(void *data, method workerproc, long workercount); 61 | t_max_err sysparallel_task_execute(t_sysparallel_task *x); 62 | t_max_err sysparallel_task_cancel(t_sysparallel_task *x); 63 | void sysparallel_task_free(t_sysparallel_task *x); 64 | void sysparallel_task_benchprint(t_sysparallel_task *x); 65 | void sysparallel_task_data(t_sysparallel_task *x, void * data); 66 | void sysparallel_task_workerproc(t_sysparallel_task *x, method workerproc); 67 | 68 | t_sysparallel_worker *sysparallel_worker_new(void *data, method workerproc, t_sysparallel_task *task); 69 | t_max_err sysparallel_worker_execute(t_sysparallel_worker *x); 70 | void sysparallel_worker_free(t_sysparallel_worker *x); 71 | 72 | #ifdef __cplusplus 73 | } 74 | #endif // __cplusplus 75 | 76 | #if C74_PRAGMA_STRUCT_PACKPUSH 77 | #pragma pack(pop) 78 | #elif C74_PRAGMA_STRUCT_PACK 79 | #pragma pack() 80 | #endif 81 | 82 | #endif // __SYSPARALLEL_H__ 83 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/ext_globalsymbol.h: -------------------------------------------------------------------------------- 1 | #ifndef __GLOBALSYMBOL_H__ 2 | #define __GLOBALSYMBOL_H__ 3 | 4 | BEGIN_USING_C_LINKAGE 5 | 6 | 7 | // private 8 | void globalsymbol_initclass(); 9 | 10 | 11 | /** Get a reference to an object that is bound to a #t_symbol. 12 | @ingroup misc 13 | @param x The object that is getting the reference to the symbol. 14 | @param name The name of the symbol to reference. 15 | @param classname The name of the class of which the object we are referencing should be an instance. 16 | @return The s_thing of the #t_symbol. 17 | 18 | @remark An example of real-world use is to get the buffer~ object associated with a symbol. 19 | @code 20 | // the struct of our object 21 | typedef struct _myobject { 22 | t_object obj; 23 | t_symbol *buffer_name; 24 | t_buffer *buffer_object; 25 | } t_myobject; 26 | 27 | void myobject_setbuffer(t_myobject *x, t_symbol *s, long argc, t_atom *argv) 28 | { 29 | if(s != x->buffer_name){ 30 | // Reference the buffer associated with the incoming name 31 | x->buffer_object = (t_buffer *)globalsymbol_reference((t_object *)x, s->s_name, "buffer~"); 32 | 33 | // If we were previously referenceing another buffer, we should not longer reference it. 34 | globalsymbol_dereference((t_object *)x, x->buffer_name->s_name, "buffer~"); 35 | 36 | x->buffer_name = s; 37 | } 38 | } 39 | @endcode 40 | */ 41 | void *globalsymbol_reference(t_object *x, char *name, char *classname); 42 | 43 | 44 | /** Stop referencing an object that is bound to a #t_symbol, previously referenced using globalsymbol_reference(). 45 | @ingroup misc 46 | @param x The object that is getting the reference to the symbol. 47 | @param name The name of the symbol to reference. 48 | @param classname The name of the class of which the object we are referencing should be an instance. 49 | @see globalsymbol_reference() 50 | */ 51 | void globalsymbol_dereference(t_object *x, char *name, char *classname); 52 | 53 | 54 | /** Bind an object to a #t_symbol. 55 | @ingroup misc 56 | @param x The object to bind to the #t_symbol. 57 | @param name The name of the #t_symbol to which the object will be bound. 58 | @param flags Pass 0. 59 | @return A Max error code. 60 | */ 61 | t_max_err globalsymbol_bind(t_object *x, char *name, long flags); 62 | 63 | 64 | /** Remove an object from being bound to a #t_symbol. 65 | @ingroup misc 66 | @param x The object from which to unbind the #t_symbol. 67 | @param name The name of the #t_symbol from which the object will be unbound. 68 | @param flags Pass 0. 69 | */ 70 | void globalsymbol_unbind(t_object *x, char *name, long flags); 71 | 72 | 73 | // private 74 | void globalsymbol_notify(t_object *x, char *name, t_symbol *msg, void *data); 75 | 76 | 77 | END_USING_C_LINKAGE 78 | 79 | #endif // __GLOBALSYMBOL_H__ 80 | 81 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/ext_globalsymbol.h: -------------------------------------------------------------------------------- 1 | #ifndef __GLOBALSYMBOL_H__ 2 | #define __GLOBALSYMBOL_H__ 3 | 4 | BEGIN_USING_C_LINKAGE 5 | 6 | 7 | // private 8 | void globalsymbol_initclass(); 9 | 10 | 11 | /** Get a reference to an object that is bound to a #t_symbol. 12 | @ingroup misc 13 | @param x The object that is getting the reference to the symbol. 14 | @param name The name of the symbol to reference. 15 | @param classname The name of the class of which the object we are referencing should be an instance. 16 | @return The s_thing of the #t_symbol. 17 | 18 | @remark An example of real-world use is to get the buffer~ object associated with a symbol. 19 | @code 20 | // the struct of our object 21 | typedef struct _myobject { 22 | t_object obj; 23 | t_symbol *buffer_name; 24 | t_buffer *buffer_object; 25 | } t_myobject; 26 | 27 | void myobject_setbuffer(t_myobject *x, t_symbol *s, long argc, t_atom *argv) 28 | { 29 | if(s != x->buffer_name){ 30 | // Reference the buffer associated with the incoming name 31 | x->buffer_object = (t_buffer *)globalsymbol_reference((t_object *)x, s->s_name, "buffer~"); 32 | 33 | // If we were previously referenceing another buffer, we should not longer reference it. 34 | globalsymbol_dereference((t_object *)x, x->buffer_name->s_name, "buffer~"); 35 | 36 | x->buffer_name = s; 37 | } 38 | } 39 | @endcode 40 | */ 41 | void *globalsymbol_reference(t_object *x, char *name, char *classname); 42 | 43 | 44 | /** Stop referencing an object that is bound to a #t_symbol, previously referenced using globalsymbol_reference(). 45 | @ingroup misc 46 | @param x The object that is getting the reference to the symbol. 47 | @param name The name of the symbol to reference. 48 | @param classname The name of the class of which the object we are referencing should be an instance. 49 | @see globalsymbol_reference() 50 | */ 51 | void globalsymbol_dereference(t_object *x, char *name, char *classname); 52 | 53 | 54 | /** Bind an object to a #t_symbol. 55 | @ingroup misc 56 | @param x The object to bind to the #t_symbol. 57 | @param name The name of the #t_symbol to which the object will be bound. 58 | @param flags Pass 0. 59 | @return A Max error code. 60 | */ 61 | t_max_err globalsymbol_bind(t_object *x, char *name, long flags); 62 | 63 | 64 | /** Remove an object from being bound to a #t_symbol. 65 | @ingroup misc 66 | @param x The object from which to unbind the #t_symbol. 67 | @param name The name of the #t_symbol from which the object will be unbound. 68 | @param flags Pass 0. 69 | */ 70 | void globalsymbol_unbind(t_object *x, char *name, long flags); 71 | 72 | 73 | // private 74 | void globalsymbol_notify(t_object *x, char *name, t_symbol *msg, void *data); 75 | 76 | 77 | END_USING_C_LINKAGE 78 | 79 | #endif // __GLOBALSYMBOL_H__ 80 | 81 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/ext_globalsymbol.h: -------------------------------------------------------------------------------- 1 | #ifndef __GLOBALSYMBOL_H__ 2 | #define __GLOBALSYMBOL_H__ 3 | 4 | BEGIN_USING_C_LINKAGE 5 | 6 | 7 | // private 8 | void globalsymbol_initclass(); 9 | 10 | 11 | /** Get a reference to an object that is bound to a #t_symbol. 12 | @ingroup misc 13 | @param x The object that is getting the reference to the symbol. 14 | @param name The name of the symbol to reference. 15 | @param classname The name of the class of which the object we are referencing should be an instance. 16 | @return The s_thing of the #t_symbol. 17 | 18 | @remark An example of real-world use is to get the buffer~ object associated with a symbol. 19 | @code 20 | // the struct of our object 21 | typedef struct _myobject { 22 | t_object obj; 23 | t_symbol *buffer_name; 24 | t_buffer *buffer_object; 25 | } t_myobject; 26 | 27 | void myobject_setbuffer(t_myobject *x, t_symbol *s, long argc, t_atom *argv) 28 | { 29 | if(s != x->buffer_name){ 30 | // Reference the buffer associated with the incoming name 31 | x->buffer_object = (t_buffer *)globalsymbol_reference((t_object *)x, s->s_name, "buffer~"); 32 | 33 | // If we were previously referenceing another buffer, we should not longer reference it. 34 | globalsymbol_dereference((t_object *)x, x->buffer_name->s_name, "buffer~"); 35 | 36 | x->buffer_name = s; 37 | } 38 | } 39 | @endcode 40 | */ 41 | void *globalsymbol_reference(t_object *x, char *name, char *classname); 42 | 43 | 44 | /** Stop referencing an object that is bound to a #t_symbol, previously referenced using globalsymbol_reference(). 45 | @ingroup misc 46 | @param x The object that is getting the reference to the symbol. 47 | @param name The name of the symbol to reference. 48 | @param classname The name of the class of which the object we are referencing should be an instance. 49 | @see globalsymbol_reference() 50 | */ 51 | void globalsymbol_dereference(t_object *x, char *name, char *classname); 52 | 53 | 54 | /** Bind an object to a #t_symbol. 55 | @ingroup misc 56 | @param x The object to bind to the #t_symbol. 57 | @param name The name of the #t_symbol to which the object will be bound. 58 | @param flags Pass 0. 59 | @return A Max error code. 60 | */ 61 | t_max_err globalsymbol_bind(t_object *x, char *name, long flags); 62 | 63 | 64 | /** Remove an object from being bound to a #t_symbol. 65 | @ingroup misc 66 | @param x The object from which to unbind the #t_symbol. 67 | @param name The name of the #t_symbol from which the object will be unbound. 68 | @param flags Pass 0. 69 | */ 70 | void globalsymbol_unbind(t_object *x, char *name, long flags); 71 | 72 | 73 | // private 74 | void globalsymbol_notify(t_object *x, char *name, t_symbol *msg, void *data); 75 | 76 | 77 | END_USING_C_LINKAGE 78 | 79 | #endif // __GLOBALSYMBOL_H__ 80 | 81 | -------------------------------------------------------------------------------- /Software/Synth-A-Modeler/extras/emacs-sam-mode/sam-mode.el: -------------------------------------------------------------------------------- 1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2 | ;; Synth-A-Modeler mode (basic syntax highlighting) 3 | ;; author: ptrv 4 | ;; based on the FAUST mode by rukano: 5 | ;; https://github.com/rukano/emacs-faust-mode 6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 7 | ;; 8 | ;; Installation: 9 | ;; 10 | ;; Put sam-mode.el somewhere in your load-path. 11 | ;; To find out the value of load-path in your version of emacs, just 12 | ;; run the command in emacs: 'C-h v load-path RET' 13 | ;; 14 | ;; Or add the path of 'sam-mode.el' to your load-path by adding the 15 | ;; following line to your .emacs: 16 | ;; 17 | ;; (add-to-list 'load-path "/path/to/sam-mode.el") 18 | ;; 19 | ;; Add this to your .emacs: 20 | ;; 21 | ;; (setq auto-mode-alist (cons '("\\.mdl$" . sam-mode) auto-mode-alist)) 22 | ;; (autoload 'sam-mode "sam-mode" "Synth-A-Modeler editing mode." t) 23 | ;; 24 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 25 | 26 | 27 | (defvar sam-keywords 28 | '("mass" "ground" "port" "resonator" "link" "touch" "pluck" 29 | "waveguide" "termination" "junction" "audioout")) 30 | 31 | (defvar sam-functions 32 | '("simpleString" "simpleStringTerm")) 33 | 34 | (defvar sam-ui-keywords 35 | '("faustcode")) 36 | 37 | ;; optimize regex for words 38 | (defvar sam-variables-regexp "[A-Za-z][A-Za-z]*") 39 | (defvar sam-arguments-regexp "[0-9]") 40 | (defvar sam-operator-regexp "\\([~!_@,<>:;]\\)") 41 | (defvar sam-math-op-regexp "[=\+\{\}()/*-]") 42 | (defvar sam-keywords-regexp (regexp-opt sam-keywords 'words)) 43 | (defvar sam-function-regexp (regexp-opt sam-functions 'words)) 44 | (defvar sam-ui-keywords-regexp (regexp-opt sam-ui-keywords 'words)) 45 | 46 | ;; create the list for font-lock. 47 | (setq sam-font-lock-keywords 48 | `( 49 | (,sam-function-regexp . font-lock-type-face) 50 | (,sam-ui-keywords-regexp . font-lock-builtin-face) 51 | (,sam-math-op-regexp . font-lock-function-name-face) 52 | (,sam-operator-regexp . font-lock-constant-face) 53 | (,sam-keywords-regexp . font-lock-keyword-face) 54 | )) 55 | 56 | ;; define the mode 57 | (define-derived-mode sam-mode fundamental-mode 58 | "SAM" 59 | "Major mode for editing Synth-A-Modeler files" 60 | 61 | ;; code for syntax highlighting 62 | (setq font-lock-defaults '((sam-font-lock-keywords))) 63 | 64 | ;; modify the keymap 65 | (define-key sam-mode-map [remap comment-dwim] 'sam-comment-dwim)) 66 | 67 | ;; comment dwin support 68 | (defun sam-comment-dwim (arg) 69 | "Comment or uncomment current line or region in a smart way. 70 | For detail, see `comment-dwim'." 71 | (interactive "*P") 72 | (require 'newcomment) 73 | (let ((deactivate-mark nil) (comment-start "#") (comment-end "")) 74 | (comment-dwim arg))) 75 | 76 | (modify-syntax-entry ?# "< b" sam-mode-syntax-table) 77 | (modify-syntax-entry ?\n "> b" sam-mode-syntax-table) 78 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Headers/basic_c_strings.c: -------------------------------------------------------------------------------- 1 | #include "ext.h" 2 | #include "ext_strings.h" 3 | 4 | #ifdef WIN_VERSION 5 | 6 | #ifndef _CRT_SECURE_NO_WARNINGS 7 | #define _CRT_SECURE_NO_WARNINGS 8 | #endif 9 | 10 | #include 11 | 12 | #endif // #ifdef WIN_VERSION 13 | 14 | #ifndef WIN_VERSION 15 | #ifndef NDEBUG 16 | 17 | char *strcpy(char *s1, const char *s2) 18 | { 19 | char *ret = s1; 20 | 21 | while ((*s1++ = *s2++) != 0) 22 | ; 23 | 24 | return ret; 25 | } 26 | 27 | char *strcat(char *s1, const char *s2) 28 | { 29 | char *ret = s1; 30 | 31 | while (*s1++) 32 | ; 33 | --s1; 34 | while ((*s1++ = *s2++) != 0) 35 | ; 36 | return ret; 37 | } 38 | 39 | int strcmp(const char *s1, const char *s2) 40 | { 41 | char c1, c2, dif; 42 | 43 | for (;;) { 44 | if (!(c1 = *s1++)) 45 | return *s2 ? -1 : 0; 46 | if (!(c2 = *s2++)) 47 | return 1; 48 | if (!(dif = (c1 - c2))) 49 | continue; 50 | if (dif < 0) 51 | return -1; 52 | else 53 | return 1; 54 | } 55 | 56 | return 0; 57 | } 58 | 59 | unsigned long strlen(const char *s) 60 | { 61 | long len = 0; 62 | 63 | while (*s++) 64 | ++len; 65 | 66 | return len; 67 | } 68 | 69 | char *strncpy(char *s1, const char *s2, unsigned long n) 70 | { 71 | char *res = s1; 72 | 73 | while (n--) { 74 | if ((*s1++ = *s2)!=0) 75 | ++s2; 76 | } 77 | return res; 78 | } 79 | 80 | char *strncat(char *s1, const char *s2, unsigned long n) 81 | { 82 | char *res = s1; 83 | 84 | if (n) { 85 | while (*s1++) 86 | ; 87 | --s1; 88 | while (n--) 89 | if (!(*s1++ = *s2++)) 90 | return res; 91 | *s1 = '\0'; 92 | } 93 | return res; 94 | } 95 | 96 | int strncmp(const char *s1, const char *s2, unsigned long n) 97 | { 98 | char c1, c2, dif; 99 | 100 | while (n--) { 101 | if (!(c1 = *s1++)) 102 | return *s2 ? -1 : 0; 103 | if (!(c2 = *s2++)) 104 | return 1; 105 | if (!(dif = (c1 - c2))) 106 | continue; 107 | if (dif < 0) 108 | return -1; 109 | else 110 | return 1; 111 | } 112 | return 0; 113 | } 114 | 115 | #endif // NDEBUG 116 | #endif // #ifndef WIN_VERSION 117 | 118 | void ctopcpy(unsigned char *p1, char *p2) 119 | { 120 | long len= (long) strlen(p2); 121 | //changed this to not rely on CtoPstr 122 | strcpy((char *)p1+1, p2); 123 | p1[0]=(len>255)?255:(unsigned char)len; 124 | } 125 | 126 | void ptoccpy(char *p1, unsigned char *p2) 127 | { 128 | register int len = (*p2++) & 0xff; 129 | while (len--) *p1++ = *p2++; 130 | *p1 = '\0'; 131 | } 132 | 133 | void setmem(void *ss, long n, short b) 134 | { 135 | register int i; 136 | unsigned char *s = (unsigned char *)ss; 137 | 138 | for (i=0; i < n; i++,s++) 139 | *s = (unsigned char)b; 140 | } 141 | 142 | void pstrcpy(unsigned char *p2, unsigned char *p1) 143 | { 144 | register int len; 145 | 146 | len = *p2++ = *p1++; 147 | while (--len>=0) *p2++=*p1++; 148 | } 149 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/A/Headers/basic_c_strings.c: -------------------------------------------------------------------------------- 1 | #include "ext.h" 2 | #include "ext_strings.h" 3 | 4 | #ifdef WIN_VERSION 5 | 6 | #ifndef _CRT_SECURE_NO_WARNINGS 7 | #define _CRT_SECURE_NO_WARNINGS 8 | #endif 9 | 10 | #include 11 | 12 | #endif // #ifdef WIN_VERSION 13 | 14 | #ifndef WIN_VERSION 15 | #ifndef NDEBUG 16 | 17 | char *strcpy(char *s1, const char *s2) 18 | { 19 | char *ret = s1; 20 | 21 | while ((*s1++ = *s2++) != 0) 22 | ; 23 | 24 | return ret; 25 | } 26 | 27 | char *strcat(char *s1, const char *s2) 28 | { 29 | char *ret = s1; 30 | 31 | while (*s1++) 32 | ; 33 | --s1; 34 | while ((*s1++ = *s2++) != 0) 35 | ; 36 | return ret; 37 | } 38 | 39 | int strcmp(const char *s1, const char *s2) 40 | { 41 | char c1, c2, dif; 42 | 43 | for (;;) { 44 | if (!(c1 = *s1++)) 45 | return *s2 ? -1 : 0; 46 | if (!(c2 = *s2++)) 47 | return 1; 48 | if (!(dif = (c1 - c2))) 49 | continue; 50 | if (dif < 0) 51 | return -1; 52 | else 53 | return 1; 54 | } 55 | 56 | return 0; 57 | } 58 | 59 | unsigned long strlen(const char *s) 60 | { 61 | long len = 0; 62 | 63 | while (*s++) 64 | ++len; 65 | 66 | return len; 67 | } 68 | 69 | char *strncpy(char *s1, const char *s2, unsigned long n) 70 | { 71 | char *res = s1; 72 | 73 | while (n--) { 74 | if ((*s1++ = *s2)!=0) 75 | ++s2; 76 | } 77 | return res; 78 | } 79 | 80 | char *strncat(char *s1, const char *s2, unsigned long n) 81 | { 82 | char *res = s1; 83 | 84 | if (n) { 85 | while (*s1++) 86 | ; 87 | --s1; 88 | while (n--) 89 | if (!(*s1++ = *s2++)) 90 | return res; 91 | *s1 = '\0'; 92 | } 93 | return res; 94 | } 95 | 96 | int strncmp(const char *s1, const char *s2, unsigned long n) 97 | { 98 | char c1, c2, dif; 99 | 100 | while (n--) { 101 | if (!(c1 = *s1++)) 102 | return *s2 ? -1 : 0; 103 | if (!(c2 = *s2++)) 104 | return 1; 105 | if (!(dif = (c1 - c2))) 106 | continue; 107 | if (dif < 0) 108 | return -1; 109 | else 110 | return 1; 111 | } 112 | return 0; 113 | } 114 | 115 | #endif // NDEBUG 116 | #endif // #ifndef WIN_VERSION 117 | 118 | void ctopcpy(unsigned char *p1, char *p2) 119 | { 120 | long len= (long) strlen(p2); 121 | //changed this to not rely on CtoPstr 122 | strcpy((char *)p1+1, p2); 123 | p1[0]=(len>255)?255:(unsigned char)len; 124 | } 125 | 126 | void ptoccpy(char *p1, unsigned char *p2) 127 | { 128 | register int len = (*p2++) & 0xff; 129 | while (len--) *p1++ = *p2++; 130 | *p1 = '\0'; 131 | } 132 | 133 | void setmem(void *ss, long n, short b) 134 | { 135 | register int i; 136 | unsigned char *s = (unsigned char *)ss; 137 | 138 | for (i=0; i < n; i++,s++) 139 | *s = (unsigned char)b; 140 | } 141 | 142 | void pstrcpy(unsigned char *p2, unsigned char *p1) 143 | { 144 | register int len; 145 | 146 | len = *p2++ = *p1++; 147 | while (--len>=0) *p2++=*p1++; 148 | } 149 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAPI.framework/Versions/Current/Headers/basic_c_strings.c: -------------------------------------------------------------------------------- 1 | #include "ext.h" 2 | #include "ext_strings.h" 3 | 4 | #ifdef WIN_VERSION 5 | 6 | #ifndef _CRT_SECURE_NO_WARNINGS 7 | #define _CRT_SECURE_NO_WARNINGS 8 | #endif 9 | 10 | #include 11 | 12 | #endif // #ifdef WIN_VERSION 13 | 14 | #ifndef WIN_VERSION 15 | #ifndef NDEBUG 16 | 17 | char *strcpy(char *s1, const char *s2) 18 | { 19 | char *ret = s1; 20 | 21 | while ((*s1++ = *s2++) != 0) 22 | ; 23 | 24 | return ret; 25 | } 26 | 27 | char *strcat(char *s1, const char *s2) 28 | { 29 | char *ret = s1; 30 | 31 | while (*s1++) 32 | ; 33 | --s1; 34 | while ((*s1++ = *s2++) != 0) 35 | ; 36 | return ret; 37 | } 38 | 39 | int strcmp(const char *s1, const char *s2) 40 | { 41 | char c1, c2, dif; 42 | 43 | for (;;) { 44 | if (!(c1 = *s1++)) 45 | return *s2 ? -1 : 0; 46 | if (!(c2 = *s2++)) 47 | return 1; 48 | if (!(dif = (c1 - c2))) 49 | continue; 50 | if (dif < 0) 51 | return -1; 52 | else 53 | return 1; 54 | } 55 | 56 | return 0; 57 | } 58 | 59 | unsigned long strlen(const char *s) 60 | { 61 | long len = 0; 62 | 63 | while (*s++) 64 | ++len; 65 | 66 | return len; 67 | } 68 | 69 | char *strncpy(char *s1, const char *s2, unsigned long n) 70 | { 71 | char *res = s1; 72 | 73 | while (n--) { 74 | if ((*s1++ = *s2)!=0) 75 | ++s2; 76 | } 77 | return res; 78 | } 79 | 80 | char *strncat(char *s1, const char *s2, unsigned long n) 81 | { 82 | char *res = s1; 83 | 84 | if (n) { 85 | while (*s1++) 86 | ; 87 | --s1; 88 | while (n--) 89 | if (!(*s1++ = *s2++)) 90 | return res; 91 | *s1 = '\0'; 92 | } 93 | return res; 94 | } 95 | 96 | int strncmp(const char *s1, const char *s2, unsigned long n) 97 | { 98 | char c1, c2, dif; 99 | 100 | while (n--) { 101 | if (!(c1 = *s1++)) 102 | return *s2 ? -1 : 0; 103 | if (!(c2 = *s2++)) 104 | return 1; 105 | if (!(dif = (c1 - c2))) 106 | continue; 107 | if (dif < 0) 108 | return -1; 109 | else 110 | return 1; 111 | } 112 | return 0; 113 | } 114 | 115 | #endif // NDEBUG 116 | #endif // #ifndef WIN_VERSION 117 | 118 | void ctopcpy(unsigned char *p1, char *p2) 119 | { 120 | long len= (long) strlen(p2); 121 | //changed this to not rely on CtoPstr 122 | strcpy((char *)p1+1, p2); 123 | p1[0]=(len>255)?255:(unsigned char)len; 124 | } 125 | 126 | void ptoccpy(char *p1, unsigned char *p2) 127 | { 128 | register int len = (*p2++) & 0xff; 129 | while (len--) *p1++ = *p2++; 130 | *p1 = '\0'; 131 | } 132 | 133 | void setmem(void *ss, long n, short b) 134 | { 135 | register int i; 136 | unsigned char *s = (unsigned char *)ss; 137 | 138 | for (i=0; i < n; i++,s++) 139 | *s = (unsigned char)b; 140 | } 141 | 142 | void pstrcpy(unsigned char *p2, unsigned char *p1) 143 | { 144 | register int len; 145 | 146 | len = *p2++ = *p1++; 147 | while (--len>=0) *p2++=*p1++; 148 | } 149 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Headers/buffer.h: -------------------------------------------------------------------------------- 1 | #include "ext_critical.h" 2 | #include "ext_atomic.h" 3 | 4 | #if C74_PRAGMA_STRUCT_PACKPUSH 5 | #pragma pack(push, 2) 6 | #elif C74_PRAGMA_STRUCT_PACK 7 | #pragma pack(2) 8 | #endif 9 | 10 | enum { 11 | MAXCHAN = 4 12 | }; 13 | 14 | enum { 15 | bi_basefreq = 0, 16 | bi_detune, 17 | bi_lowfreq, 18 | bi_hifreq, 19 | bi_lowvel, 20 | bi_hivel, 21 | bi_gain, 22 | bi_numparams 23 | }; 24 | 25 | 26 | /** Data structure for the buffer~ object. 27 | @ingroup buffers 28 | */ 29 | typedef struct _buffer 30 | { 31 | t_object b_obj; ///< doesn't have any signals so it doesn't need to be pxobject 32 | long b_valid; ///< flag is off during read replacement or editing operation 33 | float *b_samples; ///< stored with interleaved channels if multi-channel 34 | long b_frames; ///< number of sample frames (each one is sizeof(float) * b_nchans bytes) 35 | long b_nchans; ///< number of channels 36 | long b_size; ///< size of buffer in floats 37 | float b_sr; ///< sampling rate of the buffer 38 | float b_1oversr; ///< 1 / sr 39 | float b_msr; ///< sr * .001 40 | // Mac-specific stuff 41 | float *b_memory; ///< pointer to where memory starts (initial padding for interp) 42 | t_symbol *b_name; ///< name of the buffer 43 | short b_vol; 44 | short b_space; 45 | // looping info (from AIFF file) 46 | long b_susloopstart; ///< looping info (from AIFF file) in samples 47 | long b_susloopend; ///< looping info (from AIFF file) in samples 48 | long b_relloopstart; ///< looping info (from AIFF file) in samples 49 | long b_relloopend; ///< looping info (from AIFF file) in samples 50 | // instrument info (from AIFF file) 51 | short b_inst[bi_numparams]; 52 | // window stuff 53 | void *b_wind; 54 | double b_pixperfr; 55 | double b_frperpix; 56 | long b_imagesize; 57 | Point b_scroll; 58 | long b_scrollscale; 59 | long b_selbegin[MAXCHAN]; 60 | long b_selend[MAXCHAN]; 61 | long b_zoom; 62 | long b_zim[11]; 63 | void *b_mouseout; 64 | long b_format; ///< 'AIFF' or 'Sd2f' 65 | t_symbol *b_filename; ///< last file read (not written) for readagain message 66 | long b_oldnchans; ///< used for resizing window in case of # of channels change 67 | void *b_doneout; 68 | long b_outputbytes; ///< number of bytes used for output sample (1-4) 69 | long b_modtime; ///< last modified time ("dirty" method) 70 | struct _buffer *b_peer; ///< objects that share this symbol (used as a link in the peers) 71 | Boolean b_owner; ///< b_memory/b_samples "owned" by this object 72 | long b_outputfmt; ///< sample type (A_LONG, A_FLOAT, etc.) 73 | t_int32_atomic b_inuse; ///< objects that use buffer should ATOMIC_INCREMENT / ATOMIC_DECREMENT this in their perform 74 | void *b_dspchain; ///< dspchain used for this instance 75 | } t_buffer; 76 | 77 | #define BUFWIND(x) ((t_wind *)(x->b_wind)) 78 | 79 | #if C74_PRAGMA_STRUCT_PACKPUSH 80 | #pragma pack(pop) 81 | #elif C74_PRAGMA_STRUCT_PACK 82 | #pragma pack() 83 | #endif 84 | -------------------------------------------------------------------------------- /Software/Max/palette/np_nifalcon.mxo/Contents/Frameworks/MaxAudioAPI.framework/Versions/A/Headers/buffer.h: -------------------------------------------------------------------------------- 1 | #include "ext_critical.h" 2 | #include "ext_atomic.h" 3 | 4 | #if C74_PRAGMA_STRUCT_PACKPUSH 5 | #pragma pack(push, 2) 6 | #elif C74_PRAGMA_STRUCT_PACK 7 | #pragma pack(2) 8 | #endif 9 | 10 | enum { 11 | MAXCHAN = 4 12 | }; 13 | 14 | enum { 15 | bi_basefreq = 0, 16 | bi_detune, 17 | bi_lowfreq, 18 | bi_hifreq, 19 | bi_lowvel, 20 | bi_hivel, 21 | bi_gain, 22 | bi_numparams 23 | }; 24 | 25 | 26 | /** Data structure for the buffer~ object. 27 | @ingroup buffers 28 | */ 29 | typedef struct _buffer 30 | { 31 | t_object b_obj; ///< doesn't have any signals so it doesn't need to be pxobject 32 | long b_valid; ///< flag is off during read replacement or editing operation 33 | float *b_samples; ///< stored with interleaved channels if multi-channel 34 | long b_frames; ///< number of sample frames (each one is sizeof(float) * b_nchans bytes) 35 | long b_nchans; ///< number of channels 36 | long b_size; ///< size of buffer in floats 37 | float b_sr; ///< sampling rate of the buffer 38 | float b_1oversr; ///< 1 / sr 39 | float b_msr; ///< sr * .001 40 | // Mac-specific stuff 41 | float *b_memory; ///< pointer to where memory starts (initial padding for interp) 42 | t_symbol *b_name; ///< name of the buffer 43 | short b_vol; 44 | short b_space; 45 | // looping info (from AIFF file) 46 | long b_susloopstart; ///< looping info (from AIFF file) in samples 47 | long b_susloopend; ///< looping info (from AIFF file) in samples 48 | long b_relloopstart; ///< looping info (from AIFF file) in samples 49 | long b_relloopend; ///< looping info (from AIFF file) in samples 50 | // instrument info (from AIFF file) 51 | short b_inst[bi_numparams]; 52 | // window stuff 53 | void *b_wind; 54 | double b_pixperfr; 55 | double b_frperpix; 56 | long b_imagesize; 57 | Point b_scroll; 58 | long b_scrollscale; 59 | long b_selbegin[MAXCHAN]; 60 | long b_selend[MAXCHAN]; 61 | long b_zoom; 62 | long b_zim[11]; 63 | void *b_mouseout; 64 | long b_format; ///< 'AIFF' or 'Sd2f' 65 | t_symbol *b_filename; ///< last file read (not written) for readagain message 66 | long b_oldnchans; ///< used for resizing window in case of # of channels change 67 | void *b_doneout; 68 | long b_outputbytes; ///< number of bytes used for output sample (1-4) 69 | long b_modtime; ///< last modified time ("dirty" method) 70 | struct _buffer *b_peer; ///< objects that share this symbol (used as a link in the peers) 71 | Boolean b_owner; ///< b_memory/b_samples "owned" by this object 72 | long b_outputfmt; ///< sample type (A_LONG, A_FLOAT, etc.) 73 | t_int32_atomic b_inuse; ///< objects that use buffer should ATOMIC_INCREMENT / ATOMIC_DECREMENT this in their perform 74 | void *b_dspchain; ///< dspchain used for this instance 75 | } t_buffer; 76 | 77 | #define BUFWIND(x) ((t_wind *)(x->b_wind)) 78 | 79 | #if C74_PRAGMA_STRUCT_PACKPUSH 80 | #pragma pack(pop) 81 | #elif C74_PRAGMA_STRUCT_PACK 82 | #pragma pack() 83 | #endif 84 | --------------------------------------------------------------------------------