m@0
|
1 /*=============================================================================
|
m@0
|
2 * File: MelodyResults.java
|
m@0
|
3 * Author: Marcus Pearce <m.pearce@gold.ac.uk>
|
m@0
|
4 * Created: <2007-02-14 11:28:27 marcusp>
|
m@10
|
5 * Time-stamp: <2011-11-04 17:35:30 marcusp>
|
m@0
|
6 *=============================================================================
|
m@0
|
7 */
|
m@0
|
8
|
m@0
|
9 import java.util.ArrayList;
|
m@0
|
10 import java.util.Iterator;
|
m@0
|
11 import java.io.*;
|
m@0
|
12
|
m@0
|
13 public class MelodyResults {
|
m@0
|
14
|
m@0
|
15 /* Probe positions, subject responses and times, note onsets and IOIs */
|
m@0
|
16 private ArrayList probes, responses, responseTimes, questions, answers,
|
m@0
|
17 onsets, iois, durations, pitches;
|
m@0
|
18 private String composition;
|
jeremy@37
|
19 private String subjectID;
|
m@0
|
20
|
m@0
|
21 /* accessors */
|
jeremy@37
|
22 public String getSubjectID() { return subjectID; }
|
jeremy@37
|
23 public void setSubjectID(String id) { subjectID = id; }
|
m@0
|
24
|
m@0
|
25 /* constructor */
|
m@0
|
26 public MelodyResults (String midifile, ArrayList pr, ArrayList o,
|
m@0
|
27 ArrayList i, ArrayList d, ArrayList pi) {
|
m@0
|
28 questions = new ArrayList();
|
m@0
|
29 answers = new ArrayList();
|
m@0
|
30 responses = new ArrayList();
|
m@0
|
31 responseTimes = new ArrayList();
|
m@0
|
32 composition = compositionName(midifile);
|
m@0
|
33 probes = pr;
|
m@0
|
34 onsets = o;
|
m@0
|
35 iois = i;
|
m@0
|
36 durations = d;
|
c@42
|
37 pitches = pi;
|
m@0
|
38
|
m@0
|
39 // Iterator oi = onsets.iterator();
|
m@0
|
40 // Iterator di = durations.iterator();
|
m@0
|
41 // Iterator ioii = iois.iterator();
|
m@0
|
42 // Iterator piti = pitches.iterator();
|
m@0
|
43 // while(oi.hasNext()) {
|
m@0
|
44 // long onset = ((Long)oi.next()).longValue();
|
m@0
|
45 // long duration = ((Long)di.next()).longValue();
|
m@0
|
46 // long ioi = ((Long)ioii.next()).longValue();
|
m@0
|
47 // int pitch = ((Integer)piti.next()).intValue();
|
m@0
|
48 // System.out.println(onset + " " + duration + " " + ioi + " " +
|
m@0
|
49 // pitch + " ");
|
m@0
|
50 // }
|
m@0
|
51 }
|
m@0
|
52
|
m@0
|
53 private String compositionName(String midifile) {
|
m@0
|
54 // assuming extension is '.mid'
|
m@0
|
55 return midifile.substring(0, midifile.length() - 4);
|
m@0
|
56 }
|
m@0
|
57
|
m@0
|
58 /* add a reponse i and time t (nanoseconds) */
|
m@0
|
59 public void addResponse(int i, long t) {
|
m@10
|
60 //if (exp.getDebug())
|
m@10
|
61 // System.out.println("addResponse(" + i + ", " + t + ")");
|
m@0
|
62 responses.add(i);
|
m@0
|
63 responseTimes.add(t);
|
m@0
|
64 }
|
m@0
|
65
|
jeremy@30
|
66 public int countResponses() {
|
jeremy@30
|
67 return responses.size();
|
jeremy@30
|
68 }
|
jeremy@30
|
69
|
jeremy@30
|
70
|
m@0
|
71 /* add question */
|
m@0
|
72 public void addQuestion(String question) {
|
m@0
|
73 questions.add(question);
|
m@0
|
74 }
|
m@0
|
75
|
m@0
|
76 /* add response to question */
|
m@0
|
77 public void addAnswer(String answer) {
|
m@0
|
78 answers.add(answer);
|
m@0
|
79 }
|
m@0
|
80
|
m@2
|
81 public void writeResults(File outputFile, boolean header, boolean append) {
|
m@0
|
82 Writer writer = null;
|
m@0
|
83 try {
|
m@2
|
84 writer = new FileWriter (outputFile, append);
|
m@0
|
85 } catch (IOException e) {
|
m@0
|
86 System.out.println("Could not write file: " + outputFile.getPath());
|
m@0
|
87 return;
|
m@0
|
88 }
|
m@0
|
89
|
m@0
|
90 try {
|
c@42
|
91 writeResults(writer, header);
|
m@0
|
92 writer.close();
|
m@0
|
93 } catch (IOException e) {
|
m@0
|
94 System.out.println (e.getMessage());
|
m@0
|
95 return;
|
m@0
|
96 }
|
m@0
|
97 }
|
m@0
|
98
|
m@0
|
99 private void writeResults(Writer w, boolean header) throws IOException {
|
m@0
|
100 Iterator oi = onsets.iterator();
|
m@0
|
101 Iterator di = durations.iterator();
|
m@0
|
102 Iterator ioii = iois.iterator();
|
m@0
|
103 Iterator piti = pitches.iterator();
|
m@0
|
104
|
m@0
|
105 Iterator pi = probes.iterator();
|
m@0
|
106 Iterator ri = responses.iterator();
|
m@0
|
107 Iterator rti = responseTimes.iterator();
|
m@0
|
108 int eventIndex = 1;
|
m@0
|
109
|
m@0
|
110 if (header)
|
m@0
|
111 writeHeader(w);
|
m@0
|
112
|
m@0
|
113 String answerString = new String("");
|
m@0
|
114 Iterator ai = answers.iterator();
|
m@0
|
115 while(ai.hasNext())
|
m@0
|
116 answerString = answerString + (String)ai.next() + " ";
|
m@0
|
117
|
m@0
|
118 while(oi.hasNext()) {
|
m@0
|
119 long onset = ((Long)oi.next()).longValue();
|
m@0
|
120 long duration = ((Long)di.next()).longValue();
|
m@0
|
121 long ioi = ((Long)ioii.next()).longValue();
|
m@0
|
122 int pitch = ((Integer)piti.next()).intValue();
|
m@0
|
123
|
m@0
|
124 ProbeID p = (ProbeID)pi.next();
|
m@0
|
125
|
m@0
|
126 int probe = 0;
|
m@0
|
127 int response = 0;
|
m@0
|
128 long responseTime = 0;
|
m@0
|
129
|
m@0
|
130 switch(p) {
|
m@0
|
131 case NOT_PROBE:
|
m@0
|
132 case START_CLOCK:
|
m@0
|
133 case BEFORE_PROBE:
|
m@0
|
134 case AFTER_PROBE:
|
m@0
|
135 break;
|
m@0
|
136 case PROBE:
|
m@0
|
137 case PROBE_EX:
|
m@0
|
138 case PROBE_UNEX:
|
m@0
|
139 if (p == ProbeID.PROBE_UNEX)
|
m@0
|
140 probe = 1;
|
m@0
|
141 else if (p == ProbeID.PROBE_EX)
|
m@0
|
142 probe = 2;
|
m@0
|
143 else if (p == ProbeID.PROBE)
|
m@0
|
144 probe = 1;
|
m@0
|
145
|
m@0
|
146 if (ri.hasNext())
|
m@0
|
147 response = ((Integer)ri.next()).intValue();
|
m@0
|
148 if (rti.hasNext()) {
|
m@0
|
149 responseTime = ((Long)rti.next()).longValue();
|
m@0
|
150 }
|
m@0
|
151 break;
|
m@0
|
152 default:
|
m@0
|
153 System.out.println("Unexpected probe id: " + p);
|
m@0
|
154 break;
|
m@0
|
155 }
|
m@0
|
156 w.write(subjectID + " " + composition + " " +
|
m@0
|
157 eventIndex + " " +
|
m@0
|
158 onset + " " + duration + " " + ioi + " " +
|
m@0
|
159 pitch + " " +
|
m@0
|
160 probe + " " + response + " " + responseTime + " " +
|
m@0
|
161 answerString + "\n");
|
m@0
|
162 eventIndex++;
|
m@0
|
163 }
|
m@0
|
164 }
|
m@0
|
165
|
m@0
|
166 private void writeHeader(Writer w) throws IOException {
|
m@0
|
167 w.write("subject melody note " +
|
m@0
|
168 "onset duration ioi pitch " +
|
m@0
|
169 "probe response time");
|
m@0
|
170 Iterator qi = questions.iterator();
|
m@0
|
171 while(qi.hasNext())
|
m@0
|
172 w.write(" " + (String)qi.next());
|
m@0
|
173 w.write("\n");
|
m@0
|
174 }
|
m@0
|
175 }
|