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