Venetian@7
|
1 /*
|
Venetian@7
|
2 * PreciseOnsetDetector.cpp
|
Venetian@7
|
3 * ofxPreciseOnsetDetectionOffline
|
Venetian@7
|
4 *
|
Venetian@7
|
5 * Created by Andrew N Robertson on 11/04/2014.
|
Venetian@7
|
6 * Copyright 2014 QMUL. All rights reserved.
|
Venetian@7
|
7 *
|
Venetian@7
|
8 */
|
Venetian@7
|
9
|
Venetian@7
|
10 #include "PreciseOnsetDetector.h"
|
Venetian@7
|
11
|
Venetian@7
|
12
|
Venetian@7
|
13
|
Venetian@7
|
14 PreciseOnsetDetector::PreciseOnsetDetector(){
|
Venetian@7
|
15 pov.window.setToRelativeSize(0.1, 0.1, 0.8, 0.3);
|
Venetian@7
|
16 pov.pod = &pod;//set up pointer if we want to visualise the onsets in a window
|
Venetian@7
|
17
|
Venetian@7
|
18 // std::string fileName;
|
Venetian@7
|
19 // fileName = "/Users/andrewrobertson/Music/audiowavs/Islamey/BachBWV846-2.wav";
|
Venetian@7
|
20 // loadNewFile(fileName);
|
Venetian@7
|
21 }
|
Venetian@7
|
22
|
Venetian@7
|
23 PreciseOnsetDetector::~PreciseOnsetDetector(){
|
Venetian@7
|
24
|
Venetian@7
|
25 }
|
Venetian@7
|
26
|
Venetian@7
|
27 void PreciseOnsetDetector::loadNewFile(std::string filename){
|
Venetian@7
|
28
|
Venetian@7
|
29 pod.initialise();
|
Venetian@7
|
30 pod.load(filename);
|
Venetian@7
|
31 pod.printOnsetLocations();
|
Venetian@7
|
32
|
Venetian@7
|
33 pov.newFile();//resets info in visualiser - could use pointer??
|
Venetian@7
|
34 }
|
Venetian@7
|
35
|
Venetian@7
|
36 void PreciseOnsetDetector::update(){
|
Venetian@7
|
37 pod.update();
|
Venetian@7
|
38 pov.update();
|
Venetian@7
|
39 }
|
Venetian@7
|
40
|
Venetian@7
|
41 void PreciseOnsetDetector::draw(){
|
Venetian@7
|
42 pov.draw();
|
Venetian@7
|
43 }
|
Venetian@7
|
44
|
Venetian@7
|
45 bool PreciseOnsetDetector::getFilenameFromDialogBox(std::string* fileNameToSave){
|
Venetian@7
|
46 //this uses a pointer structure within the loader and returns true if the dialogue box was used successfully
|
Venetian@7
|
47 // first, create a string that will hold the URL
|
Venetian@7
|
48 string URL;
|
Venetian@7
|
49
|
Venetian@7
|
50 ofFileDialogResult fileResult = ofSystemLoadDialog("Choose audio file to load");
|
Venetian@7
|
51
|
Venetian@7
|
52 if(fileResult.bSuccess){
|
Venetian@7
|
53 // now you can use the URL
|
Venetian@7
|
54 *fileNameToSave = fileResult.filePath;
|
Venetian@7
|
55 //printf("\n filename is %s \n", soundFileName.c_str());
|
Venetian@7
|
56 return true;
|
Venetian@7
|
57 }
|
Venetian@7
|
58 else {
|
Venetian@7
|
59 // soundFileName = "OPEN canceled. ";
|
Venetian@7
|
60 printf("\n open file cancelled \n");
|
Venetian@7
|
61 return false;
|
Venetian@7
|
62 }
|
Venetian@7
|
63 }
|
Venetian@7
|
64
|
Venetian@7
|
65 void PreciseOnsetDetector::keyPressed(int key){
|
Venetian@7
|
66 std::string loadName;
|
Venetian@7
|
67 switch (key) {
|
Venetian@7
|
68 case 'r':
|
Venetian@7
|
69 pov.resetWindow();
|
Venetian@7
|
70 break;
|
Venetian@7
|
71 case 's':
|
Venetian@7
|
72 pov.cropStart();
|
Venetian@7
|
73 pod.cropStartTo(pov.windowStart);
|
Venetian@7
|
74 break;
|
Venetian@7
|
75 case 'e':
|
Venetian@7
|
76 pov.cropEnd();
|
Venetian@7
|
77 break;
|
Venetian@7
|
78 case 'w':
|
Venetian@7
|
79 printf("Exporting between %f and %f\n", pov.windowStart, pov.windowEnd);
|
Venetian@7
|
80 pod.exportOnsetTimes(pov.windowStart, pov.windowEnd);
|
Venetian@7
|
81 break;
|
Venetian@7
|
82 case 'x':
|
Venetian@7
|
83 printf("Exporting between %f and %f\n", 0., pov.lengthSeconds());
|
Venetian@7
|
84 pod.exportOnsetTimes(0, pov.lengthSeconds());
|
Venetian@7
|
85 break;
|
Venetian@7
|
86
|
Venetian@7
|
87 case 'o':
|
Venetian@7
|
88 if (getFilenameFromDialogBox(&loadName)){
|
Venetian@7
|
89 printf("loading %s\n", (loadName).c_str());
|
Venetian@7
|
90 loadNewFile(loadName);
|
Venetian@7
|
91 };
|
Venetian@7
|
92
|
Venetian@7
|
93 //delete testName;
|
Venetian@7
|
94 break;
|
Venetian@7
|
95 case ' ':
|
Venetian@7
|
96 pov.togglePlay();
|
Venetian@7
|
97 break;
|
Venetian@7
|
98 case OF_KEY_RETURN:
|
Venetian@7
|
99 pov.stop();
|
Venetian@7
|
100
|
Venetian@7
|
101 break;
|
Venetian@7
|
102
|
Venetian@7
|
103 case OF_KEY_UP: case 'u':
|
Venetian@7
|
104 pov.zoomIn();
|
Venetian@7
|
105 break;
|
Venetian@7
|
106 case OF_KEY_DOWN:
|
Venetian@7
|
107 pov.zoomOut();
|
Venetian@7
|
108 break;
|
Venetian@7
|
109 case OF_KEY_RIGHT:
|
Venetian@7
|
110 pov.scrollRight();
|
Venetian@7
|
111 break;
|
Venetian@7
|
112 case OF_KEY_LEFT:
|
Venetian@7
|
113 pov.scrollLeft();
|
Venetian@7
|
114 break;
|
Venetian@7
|
115
|
Venetian@7
|
116 default:
|
Venetian@7
|
117 break;
|
Venetian@7
|
118 }
|
Venetian@7
|
119 }
|
Venetian@7
|
120
|
Venetian@7
|
121 void PreciseOnsetDetector::mousePressed(int x, int y, int button){
|
Venetian@7
|
122
|
Venetian@7
|
123 pov.mousePressed(x, y);
|
Venetian@7
|
124
|
Venetian@7
|
125 } |