m@0: /*============================================================================= m@0: * File: MelodyResults.java m@0: * Author: Marcus Pearce m@0: * Created: <2007-02-14 11:28:27 marcusp> m@10: * Time-stamp: <2011-11-04 17:35:30 marcusp> m@0: *============================================================================= m@0: */ m@0: m@0: import java.util.ArrayList; m@0: import java.util.Iterator; m@0: import java.io.*; m@0: m@0: public class MelodyResults { m@0: m@0: /* Probe positions, subject responses and times, note onsets and IOIs */ m@0: private ArrayList probes, responses, responseTimes, questions, answers, m@0: onsets, iois, durations, pitches; m@0: private String composition; jeremy@37: private String subjectID; m@0: m@0: /* accessors */ jeremy@37: public String getSubjectID() { return subjectID; } jeremy@37: public void setSubjectID(String id) { subjectID = id; } m@0: m@0: /* constructor */ m@0: public MelodyResults (String midifile, ArrayList pr, ArrayList o, m@0: ArrayList i, ArrayList d, ArrayList pi) { m@0: questions = new ArrayList(); m@0: answers = new ArrayList(); m@0: responses = new ArrayList(); m@0: responseTimes = new ArrayList(); m@0: composition = compositionName(midifile); m@0: probes = pr; m@0: onsets = o; m@0: iois = i; m@0: durations = d; c@42: pitches = pi; m@0: m@0: // Iterator oi = onsets.iterator(); m@0: // Iterator di = durations.iterator(); m@0: // Iterator ioii = iois.iterator(); m@0: // Iterator piti = pitches.iterator(); m@0: // while(oi.hasNext()) { m@0: // long onset = ((Long)oi.next()).longValue(); m@0: // long duration = ((Long)di.next()).longValue(); m@0: // long ioi = ((Long)ioii.next()).longValue(); m@0: // int pitch = ((Integer)piti.next()).intValue(); m@0: // System.out.println(onset + " " + duration + " " + ioi + " " + m@0: // pitch + " "); m@0: // } m@0: } m@0: m@0: private String compositionName(String midifile) { m@0: // assuming extension is '.mid' m@0: return midifile.substring(0, midifile.length() - 4); m@0: } m@0: m@0: /* add a reponse i and time t (nanoseconds) */ m@0: public void addResponse(int i, long t) { m@10: //if (exp.getDebug()) m@10: // System.out.println("addResponse(" + i + ", " + t + ")"); m@0: responses.add(i); m@0: responseTimes.add(t); m@0: } m@0: jeremy@30: public int countResponses() { jeremy@30: return responses.size(); jeremy@30: } jeremy@30: jeremy@30: m@0: /* add question */ m@0: public void addQuestion(String question) { m@0: questions.add(question); m@0: } m@0: m@0: /* add response to question */ m@0: public void addAnswer(String answer) { m@0: answers.add(answer); m@0: } m@0: m@2: public void writeResults(File outputFile, boolean header, boolean append) { m@0: Writer writer = null; m@0: try { m@2: writer = new FileWriter (outputFile, append); m@0: } catch (IOException e) { m@0: System.out.println("Could not write file: " + outputFile.getPath()); m@0: return; m@0: } m@0: m@0: try { c@42: writeResults(writer, header); m@0: writer.close(); m@0: } catch (IOException e) { m@0: System.out.println (e.getMessage()); m@0: return; m@0: } m@0: } m@0: m@0: private void writeResults(Writer w, boolean header) throws IOException { m@0: Iterator oi = onsets.iterator(); m@0: Iterator di = durations.iterator(); m@0: Iterator ioii = iois.iterator(); m@0: Iterator piti = pitches.iterator(); m@0: m@0: Iterator pi = probes.iterator(); m@0: Iterator ri = responses.iterator(); m@0: Iterator rti = responseTimes.iterator(); m@0: int eventIndex = 1; m@0: m@0: if (header) m@0: writeHeader(w); m@0: m@0: String answerString = new String(""); m@0: Iterator ai = answers.iterator(); m@0: while(ai.hasNext()) m@0: answerString = answerString + (String)ai.next() + " "; m@0: m@0: while(oi.hasNext()) { m@0: long onset = ((Long)oi.next()).longValue(); m@0: long duration = ((Long)di.next()).longValue(); m@0: long ioi = ((Long)ioii.next()).longValue(); m@0: int pitch = ((Integer)piti.next()).intValue(); m@0: m@0: ProbeID p = (ProbeID)pi.next(); m@0: m@0: int probe = 0; m@0: int response = 0; m@0: long responseTime = 0; m@0: m@0: switch(p) { m@0: case NOT_PROBE: m@0: case START_CLOCK: m@0: case BEFORE_PROBE: m@0: case AFTER_PROBE: m@0: break; m@0: case PROBE: m@0: case PROBE_EX: m@0: case PROBE_UNEX: m@0: if (p == ProbeID.PROBE_UNEX) m@0: probe = 1; m@0: else if (p == ProbeID.PROBE_EX) m@0: probe = 2; m@0: else if (p == ProbeID.PROBE) m@0: probe = 1; m@0: m@0: if (ri.hasNext()) m@0: response = ((Integer)ri.next()).intValue(); m@0: if (rti.hasNext()) { m@0: responseTime = ((Long)rti.next()).longValue(); m@0: } m@0: break; m@0: default: m@0: System.out.println("Unexpected probe id: " + p); m@0: break; m@0: } m@0: w.write(subjectID + " " + composition + " " + m@0: eventIndex + " " + m@0: onset + " " + duration + " " + ioi + " " + m@0: pitch + " " + m@0: probe + " " + response + " " + responseTime + " " + m@0: answerString + "\n"); m@0: eventIndex++; m@0: } m@0: } m@0: m@0: private void writeHeader(Writer w) throws IOException { m@0: w.write("subject melody note " + m@0: "onset duration ioi pitch " + m@0: "probe response time"); m@0: Iterator qi = questions.iterator(); m@0: while(qi.hasNext()) m@0: w.write(" " + (String)qi.next()); m@0: w.write("\n"); m@0: } m@0: }