@Override
        public void run() {
            running = true;
            do {
                SourceDataLine line;
                AudioInputStream stream;

                AudioFormat format = audio.getFormat();
                DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);

                try {
                    line = (SourceDataLine) AudioSystem.getLine(info);
                    
                    if (!line.isOpen()) {
                        line.open(format);
                    }

                    stream = new AudioInputStream(
                         new ByteArrayInputStream(audio.getBytes()),
                         format, AudioSystem.NOT_SPECIFIED);

                    line.start();

                    int read = 0;
                    byte[] buffer = new byte[AUDIO_BUFFER_SIZE];

                    while (read != -1 && running) {
                        read = stream.read(buffer, 0, buffer.length);
                        if (read >= 0) {
                           line.write(buffer, 0, read);
                        }
                    }

                    line.drain();
                    line.stop();
                    line.close();
                    line = null;

                    stream.close();
                    stream = null;
                } catch (LineUnavailableException e) {
                } catch (IOException e) {
                }
            } while (loop);
        }