annotate MelodyResults.java @ 52:76e99859bdb4 tip

Add class files for previous changes.
author Marcus Pearce <marcus.pearce@eecs.qmul.ac.uk>
date Wed, 25 Feb 2015 10:11:04 +0000
parents d3977e825d91
children
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@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 }