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;
|
m@0
|
19 private int subjectID;
|
m@0
|
20
|
m@0
|
21 /* accessors */
|
m@0
|
22 public int getSubjectID() { return subjectID; }
|
m@0
|
23 public void setSubjectID(int 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;
|
m@0
|
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
|
m@0
|
66 /* add question */
|
m@0
|
67 public void addQuestion(String question) {
|
m@0
|
68 questions.add(question);
|
m@0
|
69 }
|
m@0
|
70
|
m@0
|
71 /* add response to question */
|
m@0
|
72 public void addAnswer(String answer) {
|
m@0
|
73 answers.add(answer);
|
m@0
|
74 }
|
m@0
|
75
|
m@2
|
76 public void writeResults(File outputFile, boolean header, boolean append) {
|
m@0
|
77 Writer writer = null;
|
m@0
|
78 try {
|
m@2
|
79 writer = new FileWriter (outputFile, append);
|
m@0
|
80 } catch (IOException e) {
|
m@0
|
81 System.out.println("Could not write file: " + outputFile.getPath());
|
m@0
|
82 return;
|
m@0
|
83 }
|
m@0
|
84
|
m@0
|
85 try {
|
m@0
|
86 writeResults(writer, header);
|
m@0
|
87 writer.close();
|
m@0
|
88 } catch (IOException e) {
|
m@0
|
89 System.out.println (e.getMessage());
|
m@0
|
90 return;
|
m@0
|
91 }
|
m@0
|
92 }
|
m@0
|
93
|
m@0
|
94 private void writeResults(Writer w, boolean header) throws IOException {
|
m@0
|
95 Iterator oi = onsets.iterator();
|
m@0
|
96 Iterator di = durations.iterator();
|
m@0
|
97 Iterator ioii = iois.iterator();
|
m@0
|
98 Iterator piti = pitches.iterator();
|
m@0
|
99
|
m@0
|
100 Iterator pi = probes.iterator();
|
m@0
|
101 Iterator ri = responses.iterator();
|
m@0
|
102 Iterator rti = responseTimes.iterator();
|
m@0
|
103 int eventIndex = 1;
|
m@0
|
104
|
m@0
|
105 if (header)
|
m@0
|
106 writeHeader(w);
|
m@0
|
107
|
m@0
|
108 String answerString = new String("");
|
m@0
|
109 Iterator ai = answers.iterator();
|
m@0
|
110 while(ai.hasNext())
|
m@0
|
111 answerString = answerString + (String)ai.next() + " ";
|
m@0
|
112
|
m@0
|
113 while(oi.hasNext()) {
|
m@0
|
114 long onset = ((Long)oi.next()).longValue();
|
m@0
|
115 long duration = ((Long)di.next()).longValue();
|
m@0
|
116 long ioi = ((Long)ioii.next()).longValue();
|
m@0
|
117 int pitch = ((Integer)piti.next()).intValue();
|
m@0
|
118
|
m@0
|
119 ProbeID p = (ProbeID)pi.next();
|
m@0
|
120
|
m@0
|
121 int probe = 0;
|
m@0
|
122 int response = 0;
|
m@0
|
123 long responseTime = 0;
|
m@0
|
124
|
m@0
|
125 switch(p) {
|
m@0
|
126 case NOT_PROBE:
|
m@0
|
127 case START_CLOCK:
|
m@0
|
128 case BEFORE_PROBE:
|
m@0
|
129 case AFTER_PROBE:
|
m@0
|
130 break;
|
m@0
|
131 case PROBE:
|
m@0
|
132 case PROBE_EX:
|
m@0
|
133 case PROBE_UNEX:
|
m@0
|
134 if (p == ProbeID.PROBE_UNEX)
|
m@0
|
135 probe = 1;
|
m@0
|
136 else if (p == ProbeID.PROBE_EX)
|
m@0
|
137 probe = 2;
|
m@0
|
138 else if (p == ProbeID.PROBE)
|
m@0
|
139 probe = 1;
|
m@0
|
140
|
m@0
|
141 if (ri.hasNext())
|
m@0
|
142 response = ((Integer)ri.next()).intValue();
|
m@0
|
143 if (rti.hasNext()) {
|
m@0
|
144 responseTime = ((Long)rti.next()).longValue();
|
m@0
|
145 }
|
m@0
|
146 break;
|
m@0
|
147 default:
|
m@0
|
148 System.out.println("Unexpected probe id: " + p);
|
m@0
|
149 break;
|
m@0
|
150 }
|
m@0
|
151 w.write(subjectID + " " + composition + " " +
|
m@0
|
152 eventIndex + " " +
|
m@0
|
153 onset + " " + duration + " " + ioi + " " +
|
m@0
|
154 pitch + " " +
|
m@0
|
155 probe + " " + response + " " + responseTime + " " +
|
m@0
|
156 answerString + "\n");
|
m@0
|
157 eventIndex++;
|
m@0
|
158 }
|
m@0
|
159 }
|
m@0
|
160
|
m@0
|
161 private void writeHeader(Writer w) throws IOException {
|
m@0
|
162 w.write("subject melody note " +
|
m@0
|
163 "onset duration ioi pitch " +
|
m@0
|
164 "probe response time");
|
m@0
|
165 Iterator qi = questions.iterator();
|
m@0
|
166 while(qi.hasNext())
|
m@0
|
167 w.write(" " + (String)qi.next());
|
m@0
|
168 w.write("\n");
|
m@0
|
169 }
|
m@0
|
170 }
|