annotate MelodyResults.java @ 0:4031cbb02f08

Initial import. Ignore-this: 87317e384f22bde48db996355191fa5f
author Marcus Pearce <m.pearce@gold.ac.uk>
date Tue, 18 May 2010 11:37:10 +0100
parents
children 1fe7ac28a3ca
rev   line source
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@0 5 * Time-stamp: <2010-05-10 11:38:52 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@0 75 public void writeResults(File outputFile, boolean header) {
m@0 76 Writer writer = null;
m@0 77 try {
m@0 78 writer = new FileWriter (outputFile, true);
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 }