2016-10-03 151 views
0

我的目标是播放短语“This is a test”的双重音(双),它是一个WAV音频文件。到目前为止,我成功地生成了一个随机的短语序列,例如“Test is this a”,但我需要使它只能成对发言,所以“This is”...“是...”每个单词之间暂停100米,每对之间暂停400毫秒。这是我迄今为止...在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是程序有多少双剧本,但我不知道我会在代码中实现它上面。所有这些代码到目前为止只是打印出所有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