Wikipedia Review Music Research project using the Gametrak
- Cross-platform library based on HIDAPI to get raw events from the Gametrak (first you need to install a fresh version of HIDAPI from here)
- Inspired by Libpointing
- Get the position of each string end in Cartesian coordinates using metric units (mm)
- Use callback functions instead of pooling
- 1€ filter embedded
- Hotplugging
- Supports calibration procedure
- Easy and powerful configuration through URI
- Easily connect several Gametraks to the same machine
- Supports Pictrak mod by Jan Ciger
#include <libgametrak/GameTrak.h>
#include <iomanip>
#include <stdexcept>
using namespace gametrak ;
GameTrak *gt = 0 ;
TimeStamp::inttime last_time = 0 ;
bool button_pressed = false ;
void GameTrakCallback(void *context,
TimeStamp::inttime timestamp,
double leftx, double lefty, double leftz,
double rightx, double righty, double rightz,
bool button) {
if (!gt) return;
double freq = 1/((timestamp - last_time) * 1.0E-9);
std::cout << timestamp << " ns, "
<< std::setw(7) << freq << " Hz, "
<< "Left: (" << std::setw(3) << leftx << ", " << std::setw(3) << lefty
<< ", " << std::setw(3) << leftz << ") mm"
<< ", Right: (" << std::setw(3) << rightx << ", " << std::setw(3) << rightx
<< ", " << std::setw(3) << rightz << ") mm, "
<< "button: " << button << std::endl ;
last_time = timestamp;
button_pressed = button ;
}
int main(int argc, char** argv) {
try {
gt = GameTrak::create(argc>1?argv[1]:"") ;
gt->setGameTrakCallback(GameTrakCallback) ;
while (!button_pressed)
GameTrak::idle(100) ; // milliseconds
delete gt ;
} catch (std::runtime_error e) {
std::cerr << "Runtime error: " << e.what() << std::endl ;
} catch (std::exception e) {
std::cerr << "Exception: " << e.what() << std::endl ;
}
return 0 ;
}
uri are in the form "scheme:?arg1=value1&arg2=value2..."
Parameters can be set in arbitrary order. Parameters not set use default values.
The uri "" sets all parameters to default
- debugLevel (int) sets the debug level. Default is 0.
- 1 and above: lists connected Gametraks and their related information (e.g. path, serial number)
- 2 and above: display metric values for each degree of freedom
- 3 and above: display raw sensor information
- devicePath (string) sets the device by its path. Default value: "". Use debugLevel 1 to know the path
- serial_number (string) sets the device using its serial number. Default value: "". Only works with Pictrak.
- filter (bool) sets filtering on or off. Default value: true
- mincutoff (double) sets € filter min cutoff frequency. Default value: 1.0
- beta (double) sets 1€ filter beta value. Default value: 0.001
- dcutoff (double) sets 1€ filter dcutoff. Default value: 1.0 (should not be changed)
- useCalibration (bool) defines if calibration is used. Default value: false
- milt, milp, mill, mirt, mirp, mirl, malt, malp, mall, mart, marp, marl (double). Min (mi) and max (ma) values for left (l) and right (r) theta (t), phi (p) and L (l).
- usePullMode (bool) defines if the datas are available using getters (true) or using a callback function (false). Default value: false
- nbOfTryMax (int) defines a maximum number of try for connecting a Gametrak. Default value: -1 (infinite)
Works on Windows, OS X, Linux
There is no driver to install, simply install the last version of HIDAPI
The picture below illustrates the origin and the axis used to locate each Gametrak pointer.