dźwiękiem w javie nie działa

Odpowiedz Nowy wątek
2015-08-18 16:16
0

Mam następujący problem

Uczę się dopiero obsługi dźwięku w javie i jak na razie stworzyłem taki kod:


    private Position curPosition;

    private final int EXTERNAL_BUFFER_SIZE = 524288; //128Kb

    enum Position{
        LEFT, RIGHT, NORMAL
    };

    public void odtworz(char l)
    {
        String sciezkadop = "C:/aio/czytacz/"+l+".wav";
        File plikdzwiekuliter = new File(sciezkadop);
        if (!plikdzwiekuliter.isFile())
        {
            System.err.println("Nie ma pliku " + l);
        }

        if (!plikdzwiekuliter.exists())
        {
            System.err.println("Plik jest otwarty przez inna aplikacje (wav) :" + l);
            return;
        }

        AudioInputStream ais = null;

        try {
            ais = AudioSystem.getAudioInputStream(plikdzwiekuliter);
        } catch (UnsupportedAudioFileException e1) {
            e1.printStackTrace();
            System.err.println("Nie dziala wava :" + l);
            return;
        } catch (IOException e1) {
            e1.printStackTrace();
            System.err.println("Nie dziala wava :" + l);
            return;
        }

        AudioFormat format = ais.getFormat();
        SourceDataLine auline = null;
        DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);

        try {
            auline = (SourceDataLine) AudioSystem.getLine(info);
        } catch (LineUnavailableException e1) {
            e1.printStackTrace();
            System.err.println("Nie dziala wava :" + l);
            return;
        } catch (Exception e1) {
            e1.printStackTrace();
            System.err.println("Nie dziala wava :" + l);
            return;
        }

        if (auline.isControlSupported(FloatControl.Type.PAN)) {
            FloatControl pan = (FloatControl) auline
                    .getControl(FloatControl.Type.PAN);
            if (curPosition == Position.RIGHT)
                pan.setValue(1.0f);
            else if (curPosition == Position.LEFT)
                pan.setValue(-1.0f);
        }

        auline.start();
        int nByteRead = 0;
        byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];

        try {
            while (nByteRead!= -1) {
                nByteRead = ais.read(abData, 0, abData.length);
                if (nByteRead >= 0)
                    auline.write(abData, 0, nByteRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return;
        } finally {
            auline.drain();
            auline.close();
        }

    }

kod jest wzorowany na http://www.anyexample.com/pro[...]/java_play_wav_sound_file.xml
(tak wiem praktycznie przepisany)

program działa, wykonuje się ale nie ma dźwięku. Czemu?

używam eclipse i nie doinstalowywałem żadnych dodatków (wersja jest najnowsza)

(zaimportowałem
import javax.sound.sampled.;
import java.io.
;)

Kompilator wyrzuca jakiś błąd ? - mariano901229 2015-08-18 16:21

Pozostało 580 znaków

2015-08-18 16:34
1

Spróbuj skopiować sobie cały tutorial i odpal wątek. Jeżeli odpali to znaczy, że źle przepisałeś kod (gdzieś jest babol). Jeżeli nie to może błąd z wczytaniem pliku/ścieżką etc.

 new AePlayWave("test.wav").start();

Pozostało 580 znaków

2015-08-18 16:54
0

dobra działa dzięki

a jak zrobić by program czekal zanim odtworzy następny wav?
bo jak podaje mu dwa które ma odtworzyć po kolei to odtwarza ba naraz

Pozostało 580 znaków

2015-08-18 18:48
0

Metoda

 getState()

o ile dobrze pamiętam sprawdza stan wątku. Czy jest uruchomiony czy zakończony etc.

Pozostało 580 znaków

2015-08-18 18:50
0

ok a jak zrobić by dopiero po tym jak status jest zakończony dodał nowa sciezke (wava)

Pozostało 580 znaków

2015-08-18 20:47
0

proszę o odpowiedz

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0