Exemplo n.º 1
0
  /**
   * Sets (activates or deactivates) the speakers as defined in the given list.
   *
   * @param speakers all speakers to read the active flag from
   */
  public void setSpeakers(List<Speaker> speakers) {

    try {
      Log.d(TAG, "setSpeakers() requesting...");

      String idsString = "";
      boolean first = true;
      // The list of speakers to activate is a comma-separated string with
      // the hex versions of the speakers' IDs
      for (Speaker speaker : speakers) {
        if (speaker.isActive()) {
          if (!first) {
            idsString += ",";
          } else {
            first = false;
          }
          idsString += speaker.getIdAsHex();
        }
      }

      String url =
          String.format(
              "%s/ctrl-int/1/setspeakers?speaker-id=%s&session-id=%s",
              session.getRequestBase(), idsString, session.sessionId);

      RequestHelper.request(url, false);

    } catch (Exception e) {
      Log.e(TAG, "Could not set speakers: ", e);
    }
  }
Exemplo n.º 2
0
 /**
  * Helper to control a speaker's relative volume. This relative volume is a value between 0 and
  * 100 describing the relative volume of a speaker in comparison to the master volume. For this
  * the URL parameters <code>%s/ctrl-int/1/setproperty?speaker-id=%s&dmcp.volume=%d</code> are
  * used.
  *
  * @param speakerId ID of the speaker to control
  * @param relativeVolume the relative volume to set
  * @throws Exception
  */
 private void setRelativeVolume(long speakerId, int relativeVolume) throws Exception {
   String url;
   url =
       String.format(
           "%s/ctrl-int/1/setproperty?speaker-id=%s&dmcp.volume=%d" + "&session-id=%s",
           session.getRequestBase(), speakerId, relativeVolume, session.sessionId);
   RequestHelper.request(url, false);
 }
Exemplo n.º 3
0
 /**
  * Helper to control a speakers's absolute volume. This uses the URL parameters <code>
  * setproperty?dmcp.volume=%d&include-speaker-id=%s</code> which results in iTunes controlling the
  * master volume and the selected speaker synchronously.
  *
  * @param speakerId ID of the speaker to control
  * @param absoluteVolume the volume to set absolutely
  * @throws Exception
  */
 private void setAbsoluteVolume(long speakerId, int absoluteVolume) throws Exception {
   String url;
   url =
       String.format(
           "%s/ctrl-int/1/setproperty?dmcp.volume=%d&include-speaker-id=%s" + "&session-id=%s",
           session.getRequestBase(), absoluteVolume, speakerId, session.sessionId);
   RequestHelper.request(url, false);
 }
Exemplo n.º 4
0
  /**
   * Reads the list of available speakers
   *
   * @return list of available speakers
   */
  public List<Speaker> getSpeakers(final List<Speaker> speakers) {
    try {
      Log.d(TAG, "getSpeakers() requesting...");

      String temp =
          String.format(
              "%s/ctrl-int/1/getspeakers?session-id=%s",
              session.getRequestBase(), session.sessionId);

      byte[] raw = RequestHelper.request(temp, false);

      Response response = ResponseParser.performParse(raw);

      Response casp = response.getNested("casp");
      if (casp != null) {
        speakers.clear();
      }

      List<Response> mdclArray = casp.findArray("mdcl");

      // Master volume is required to compute the speakers' absolute volume
      long masterVolume = getVolume();

      for (Response mdcl : mdclArray) {
        Speaker speaker = new Speaker();
        speaker.setName(mdcl.getString("minm"));
        long id = mdcl.getNumberLong("msma");
        speaker.setId(id);
        Log.d(TAG, "Speaker = " + speaker.getName());
        int relativeVolume = (int) mdcl.getNumberLong("cmvo");
        boolean isActive = mdcl.containsKey("caia");
        speaker.setActive(isActive);
        // mastervolume/100 * relativeVolume/100 * 100
        int absoluteVolume = isActive ? (int) masterVolume * relativeVolume / 100 : 0;
        speaker.setAbsoluteVolume(absoluteVolume);
        speakers.add(speaker);
      }

    } catch (Exception e) {
      Log.e(TAG, "Could not get speakers: ", e);
      speakers.clear();
      Speaker speaker = new Speaker();
      speaker.setName("Computer");
      speaker.setId(1);
      speaker.setActive(true);
      speaker.setAbsoluteVolume(50);
      speakers.add(speaker);
    }

    return speakers;
  }