2016-10-03 3 views
0

Моя цель - играть в дублеты (пары) фразы «Это тест», который является аудио-файлом WAV. До сих пор мне удалось создать случайную последовательность фразы, например «Тест - это а», но мне нужно сделать так, чтобы она говорила только парами, поэтому «Это» ... «Является« .. ». с паузой в 100 мсек между каждым словом и паузой в 400 мсек между каждой парой. Это то, что я до сих пор ...Воспроизведение случайных пар слов в звуковых массивах

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, сколько пар играет программа, но я не знаю, где я хотел бы реализовать в коде выше. Весь этот код до сих пор просто распечатывает все 4 слова, но не попарно.

ответ

0

Вы должны явно представить паузу в своем списке звуков, которые вы хотите воспроизвести. Используйте интерфейс, чтобы в целом обрабатывать как обычные звуки, так и паузы.

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

Удивительное решение, но во время этого назначения мне не разрешено создавать интерфейсы, я должен использовать классы/методы, которые они мне предоставили. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать, – TheDkmariolink

Смежные вопросы