public static void main(String[] args) {
    if (args.length != 1) {
      Logger.println("Usage:  java Speaker <input file>");
      System.exit(1);
    }

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    Speaker speaker = null;

    while (true) {
      try {
        speaker =
            new SpeakerJavasoundImpl(
                8000, 1, RtpPacket.getDataSize(RtpPacket.PCM_ENCODING, 8000, 1));
      } catch (Exception e) {
        Logger.println(e.getMessage());
        System.exit(1);
      }

      Logger.logLevel = 5;

      try {
        TreatmentManager t =
            new TreatmentManager(args[0], 0, speaker.getSampleRate(), speaker.getChannels());

        while (true) {
          byte[] audioData = t.getLinearDataBytes(RtpPacket.PACKET_PERIOD);

          if (audioData == null) {
            break; // end of file
          }

          speaker.write(audioData, 0, audioData.length);
        }
      } catch (IOException e) {
        Logger.println(e.getMessage());
      }

      if (speaker != null) {
        speaker.done();
      }

      Logger.println("Press return to play the file again...");

      try {
        String line = br.readLine();
        if (line.equalsIgnoreCase("quit")) {
          break;
        }
      } catch (IOException ioe) {
        break;
      }
    }
  }
  public SpeakerJavasoundImpl(int sampleRate, int channels, int bufferSize) throws IOException {

    this.sampleRate = sampleRate;
    this.channels = channels;
    this.bufferSize = bufferSize;

    chunkSize = RtpPacket.getDataSize(RtpPacket.PCM_ENCODING, sampleRate, channels);

    try {
      setupSpeaker();
    } catch (LineUnavailableException e) {
      throw new IOException(e.getMessage());
    }

    if (Logger.logLevel >= Logger.LOG_INFO) {
      Logger.println("New speaker " + sampleRate + "/" + channels + " bufferSize " + bufferSize);
    }

    double volumeLevel = Utils.getDoublePreference(VOLUME_LEVEL);

    if (volumeLevel != -1D) {
      this.volumeLevel = volumeLevel;
    }
  }