public void run() {
            boolean allBytesRead = false;
            while (!done) {
                int nBytesRead = 0;
                byte[] abData = new byte[2048];
                while (nBytesRead != -1 && !done) {
                    try {
                        nBytesRead = ais.read(abData, 0, abData.length);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    if (nBytesRead >= 0) {
                        sdl.write(abData, 0, nBytesRead);
                    } else {
                        done = true;
                        allBytesRead = true;
                    }
                }
            }
            sdl.drain();
            sdl.stop();
            sdl.close();
            if (!kill && bso != null) {
                bso.soundDone(this, allBytesRead);
            }
        }