2016-10-03 1 views
0

Mein Ziel ist es, Dubletten (Paare) der Phrase "Dies ist ein Test" zu spielen, die eine WAV-Audiodatei ist. Bis jetzt ist es mir gelungen, eine zufällige Sequenz des Satzes zu erzeugen, wie "Test is this a", aber ich muss es so machen, dass es nur paarweise spricht, also "Das ist" ... "Ist ein" .. mit einer Pause von 100 Millisekunden zwischen jedem Wort und einer Pause von 400 Millisekunden zwischen jedem Paar. Das ist, was ich habe so weit ...Abspielen von zufälligen Wortpaaren in Sound Arrays

public void playDoublets(int numDoublets) throws InterruptedException { 
    ArrayList<Sound> list = new ArrayList(); 
    for (int i =0; i < numWords; i++){ 
     list.add(new Sound(myWordArray[i])); 
    } 
    Collections.shuffle(list); 
    for (int i = 0; i < numWords; i++){ 
     list.get(i).blockingPlay(); 
     Thread.sleep(400); 
    } 
} 

numDoublets ist, wie viele Paare das Programm spielt, aber ich weiß nicht, wo ich es in dem obigen Code implementieren würde. All dieser Code macht bisher nur alle 4 Wörter aus, aber nicht paarweise.

Antwort

0

Sie sollten eine Pause in Ihrer Liste von Sounds explizit darstellen, die Sie wiedergeben möchten. Verwenden Sie eine Schnittstelle, um sowohl normale Sounds als auch Pausen generisch zu behandeln.

import java.util.*; 

public class DoubletPlayer { 
    private static final int PAUSE_BETWEEN_WORDS = 100; 
    private static final int PAUSE_BETWEEN_DOUBLETS = 400; 

    public static void main(String... args) { 
     DoubletPlayer player = new DoubletPlayer(); 
     player.playDoublets(2); 
    } 

    interface Playable { 
     void play(); 
    } 

    class Sound implements Playable { 
     private String word; 

     public Sound(String word) { 
      this.word = word; 
     } 

     @Override 
     public void play() { 
      System.out.println("sound played: " + word); 
     } 
    } 

    class Pause implements Playable { 
     private int millis; 

     public Pause(int millis) { 
      this.millis = millis; 
     } 

     @Override 
     public void play() { 
      System.out.println("pause of " + millis + "ms"); 
     } 
    } 

    private List<Sound> sounds = new ArrayList<>(); 
    private int currentSound = 0; 

    public DoubletPlayer() { 
     sounds.add(new Sound("This")); 
     sounds.add(new Sound("is")); 
     sounds.add(new Sound("a")); 
     sounds.add(new Sound("test")); 

     Collections.shuffle(sounds); 
    } 

    public void playDoublets(int numDoublets) { 
     List<Playable> doublets = generateDoublets(numDoublets); 
     playAll(doublets); 
     reset(); 
    } 

    private List<Playable> generateDoublets(int numDoublets) { 
     List<Playable> result = new ArrayList<>(); 
     for (int i = 0; i < numDoublets; i++) { 
      addDoubletTo(result); 
     } 
     return result; 
    } 

    private void addDoubletTo(List<Playable> result) { 
     result.add(getNextSound()); 
     result.add(new Pause(PAUSE_BETWEEN_WORDS)); 
     result.add(getNextSound()); 
     result.add(new Pause(PAUSE_BETWEEN_DOUBLETS)); 
    } 

    private Playable getNextSound() { 
     return sounds.get(currentSound++); 
    } 

    private void playAll(List<Playable> result) { 
     for (Playable playable : result) { 
      playable.play(); 
     } 
    } 

    private void reset() { 
     currentSound = 0; 
    } 
} 
+0

Tolle Lösung, aber während dieser Aufgabe, ich bin nicht erlaubt, Schnittstellen zu erstellen, muss ich die Klassen/Methoden verwenden, die sie mir zur Verfügung gestellt. Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen, – TheDkmariolink