view FileList.java @ 39:796b3e3e053f

Changed MidiPlayer.java to allow the use of external sequencer programs (e.g. Garageband). Changed Experiment.java to allow user to specify in commandline whether to use default MidiDevice (true), specified MidiDevice (0<variable<MidiDevs.length), or list the available devices on start up. Changed ExperimentGui.java and SubjectDataPanel.java to add familiarity question if familiarity question isn't included at the presentation of each stimuli.
author CBussey
date Fri, 31 May 2013 17:40:59 +0100
parents f0cd8f32e8c8
children
line wrap: on
line source
/*=============================================================================
 * File:       FileList.java
 * Author:     Marcus Pearce <m.pearce@gold.ac.uk>
 * Created:    <2007-11-30 10:30:38 marcusp>
 * Time-stamp: <2012-03-01 09:35:00 marcusp>
 *=============================================================================
 */

import java.util.ArrayList; 
import java.util.Iterator;

import java.io.*;

import java.util.Random;

public class FileList { 

    private ArrayList files; 
    private ArrayList probes; 
    private int numFiles; 
    private int currentFileIndex;

    public int numFiles() { return numFiles; }
    public void setFileIndex(int i) { currentFileIndex = i; }

    public String currentFile() { 
        if (currentFileIndex < numFiles)
            return (String)files.get(currentFileIndex); 
        else 
            return null; 
    }

    public ArrayList currentProbes() { 
        if (currentFileIndex < numFiles)
            return (ArrayList)probes.get(currentFileIndex); 
        else 
            return null; 
    }
     
    public void incrementFileIndex() { 
        currentFileIndex = currentFileIndex + 1; 
    }

    private void randomise() { 
        Random rgen = new Random();  
        for (int i = 0; i < numFiles; i++) {
            int randomPosition = rgen.nextInt(numFiles);
            // System.out.println("i = " + i + "; rpos = " + randomPosition + 
            //                    "; files = " + files.size() + 
            //                    "; probes = " + probes.size());
            
            String tempFile = (String)files.get(i);
            files.set(i, files.get(randomPosition)); 
            files.set(randomPosition, tempFile); 
            
            ArrayList tempProbe = (ArrayList)probes.get(i); 
            probes.set(i, probes.get(randomPosition));
            probes.set(randomPosition, tempProbe); 
        }
    }
    
    private void importFileList(String filename) {
        try { 
            LineNumberReader lnr = 
                new LineNumberReader(new FileReader(new File(filename)));
            lnr.setLineNumber(1);
            StreamTokenizer stok = new StreamTokenizer(lnr);
            stok.parseNumbers();
            stok.wordChars('_','_'); 
            stok.wordChars('0','9');
            //stok.wordChars('/','/');             
            stok.eolIsSignificant(true);
            stok.nextToken();
            while (stok.ttype != StreamTokenizer.TT_EOF) {
                int lineno = lnr.getLineNumber();
                int i = 0;
                ArrayList iprobes = new ArrayList(); 
                while (stok.ttype != StreamTokenizer.TT_EOL) {
                    int j = 0; 
                    if (stok.ttype == StreamTokenizer.TT_NUMBER) { 
                        iprobes.add((int)stok.nval - 1); // zero indexing
                    } else if (stok.ttype == StreamTokenizer.TT_WORD) { 
                        files.add(stok.sval);
                    }
                    stok.nextToken();     
                }
                i++; 
                numFiles++; 
                probes.add(iprobes); 
                stok.nextToken();
            }
        } catch(Exception e) {
            System.out.println("Exception: " + e);
        }
    }

    public void print() { 
        Iterator fi = files.iterator(); 
        Iterator pi = probes.iterator(); 
        while (fi.hasNext()) {
            System.out.print((String)fi.next() + ": "); 
            ArrayList ip = (ArrayList)pi.next();

            for (int i = 0; i < ip.size(); i++) { 
                int ppos = ((Integer)ip.get(i)).intValue() + 1;
                System.out.print(ppos + " ");
            }
            System.out.print("\n");
        }
    }

    public FileList(String filename) { 
        files = new ArrayList(); 
        probes = new ArrayList(); 
        currentFileIndex = 0; 
        this.importFileList(filename);
        this.randomise(); 
        this.print(); 
    }
}