// Этот класс AudioTest должен использовать клип для воспроизведения музыки c
import java.io.IOException;
import javax.sound.sampled.*;
class AudioTest {
public void AudioPlay() {
ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
try{
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream =
AudioSystem.getAudioInputStream(
classLoader.getResourceAsStream("audio1.wav"));
clip.open(inputStream);
clip.start();
while (!clip.isRunning())
Thread.sleep(10);
while (clip.isRunning())
Thread.sleep(10);
clip.close();
} catch (Exception e)
{
System.out.println("Something failed");
}
//to see if the sound is finished playing
System.out.println("done");
}
}
public class Test11 {
public static void main(String[] args)
throws IOException
{
AudioTest au1 = new AudioTest();
au1.AudioPlay();
}
}
// Приведенный выше класс Test11 отлично работает при воспроизведении файла .wav musi c. Но в классе Test15 я поместил этот файл вместе с другим потоком и выполнил его, он обнаружил сообщение «Something filed» для воспроизведения файла audio1.wav musi c.
// Многопоточное кодирование, Test15 , перечислены ниже:
import java.io.IOException;
import javax.sound.sampled.*;
// Следующий класс AudioTest точно такой же, как и в предыдущем кодировании
class AudioTest {
public void AudioPlay() {
ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
try{
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream =
AudioSystem.getAudioInputStream(
classLoader.getResourceAsStream(
"audio1.wav"));
clip.open(inputStream);
clip.start();
while (!clip.isRunning())
Thread.sleep(0);
while (clip.isRunning())
Thread.sleep(0);
clip.close();
} catch (Exception e)
{
System.out.println("something failed");
}
System.out.println("done");
}
}
class ThreadDemo extends Thread {
private Thread t;
private String threadName;
ThreadDemo( String name) {
threadName = name;
System.out.println("Creating " + threadName );
}
public void run() {
//System.out.println("Running " + threadName );
try {
if (threadName == "Thread-1") {
System.out.println("Thread-1 is been started.");
// Start to play .wav file here
AudioTest au1 = new AudioTest();
au1.AudioPlay();
}
else if (threadName == "Thread-2") {
for (int i = 0; i < 100; i ++) {
System.out.println(i + ": " + threadName + " is been executed.");
}
}
}catch (Exception e) {
System.out.println("Thread " + threadName + " failed.");
}
}
public void start () {
System.out.println("Starting " + threadName );
if (t == null) {
t = new Thread (this, threadName);
t.start ();
}
}
}
public class Test15 {
public static void main(String args[]) throws IOException
{
ThreadDemo T1 = new ThreadDemo("Thread-1");
T1.start();
ThreadDemo T2 = new ThreadDemo("Thread-2");
T2.start();
}
}
// Вышеприведенный класс Test15 может быть запущен, но Thread -1 можно было запустить только без воспроизведения музыки c и «что-то не получилось». показал. Похоже, что Thread-2 работает нормально.
// Моя конечная цель - показать движущуюся партитуру, сопровождаемую соответствующими музыками c, audio.wav. Если Thread-1 в Test15 работает, тогда я добавлю код подвижной оценки как Thread-2 в мой код. Если вам интересно, я могу выслать вам эту кодировку движущихся очков в Stackoverflow или по электронной почте: dienfoonwu@gmail.com