<?xml version="1.0"?>
<!-- This file was automatically generated from C sources - DO NOT EDIT!
To affect the contents of this file, edit the original C definitions,
and/or use gtk-doc annotations.  -->
<repository version="1.2"
            xmlns="http://www.gtk.org/introspection/core/1.0"
            xmlns:c="http://www.gtk.org/introspection/c/1.0"
            xmlns:doc="http://www.gtk.org/introspection/doc/1.0"
            xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
  <include name="GObject" version="2.0"/>
  <include name="Gtk" version="3.0"/>
  <doc:format name="unknown"/>
  <namespace name="Parlatype"
             version="1.0"
             shared-library="libparlatype.so.0.0"
             c:identifier-prefixes="Pt"
             c:symbol-prefixes="pt">
    <function-macro name="IS_PLAYER"
                    c:identifier="PT_IS_PLAYER"
                    introspectable="0">
      <source-position filename="pt-player.h" line="26"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_PROGRESS_DIALOG"
                    c:identifier="PT_IS_PROGRESS_DIALOG"
                    introspectable="0">
      <source-position filename="pt-progress-dialog.h" line="25"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_WAVELOADER"
                    c:identifier="PT_IS_WAVELOADER"
                    introspectable="0">
      <source-position filename="pt-waveloader.h" line="26"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_WAVEVIEWER"
                    c:identifier="PT_IS_WAVEVIEWER"
                    introspectable="0">
      <source-position filename="pt-waveviewer.h" line="28"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_WAVEVIEWER_CLASS"
                    c:identifier="PT_IS_WAVEVIEWER_CLASS"
                    introspectable="0">
      <source-position filename="pt-waveviewer.h" line="30"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PLAYER" c:identifier="PT_PLAYER" introspectable="0">
      <source-position filename="pt-player.h" line="25"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROGRESS_DIALOG"
                    c:identifier="PT_PROGRESS_DIALOG"
                    introspectable="0">
      <source-position filename="pt-progress-dialog.h" line="24"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <class name="Player"
           c:symbol-prefix="player"
           c:type="PtPlayer"
           parent="GObject.Object"
           glib:type-name="PtPlayer"
           glib:get-type="pt_player_get_type"
           glib:type-struct="PlayerClass">
      <doc xml:space="preserve"
           filename="pt-player.h"
           line="32">The #PtPlayer contains only private fields and should not be directly accessed.</doc>
      <source-position filename="pt-player.h" line="48"/>
      <implements name="Gio.Initable"/>
      <constructor name="new" c:identifier="pt_player_new" throws="1">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1701">This is a failable constructor. It fails, if GStreamer doesn't init or a
plugin is missing. In this case NULL is returned, error is set.

After use g_object_unref() it.</doc>
        <source-position filename="pt-player.h" line="123"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="1710">a new pt_player</doc>
          <type name="Player" c:type="PtPlayer*"/>
        </return-value>
      </constructor>
      <function name="get_time_string"
                c:identifier="pt_player_get_time_string">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1091">Returns the given time as a string for display to the user. Format type is
determined by @duration, e.g. if duration is long format, it returns a string
in long format, too.</doc>
        <source-position filename="pt-player.h" line="110"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="1101">the time string</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <parameter name="time" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1093">time in milliseconds to converse</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="duration" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1094">duration of stream in milliseconds (max time)</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="precision" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1095">a #PtPrecisionType</doc>
            <type name="PrecisionType" c:type="PtPrecisionType"/>
          </parameter>
        </parameters>
      </function>
      <method name="cancel" c:identifier="pt_player_cancel">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="551">Cancels the file opening operation, which triggers an error message.</doc>
        <source-position filename="pt-player.h" line="88"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="553">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="clear_selection" c:identifier="pt_player_clear_selection">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="629">Clear and reset any selection.</doc>
        <source-position filename="pt-player.h" line="77"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="631">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="fast_forward" c:identifier="pt_player_fast_forward">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="704">Play fast forward at the given speed.
&lt;note&gt;&lt;para&gt;This is only available with GStreamer &gt;= 1.6.3 (because rewind
is working properly with that version).&lt;/para&gt;
&lt;para&gt;If you call this with an older version of GStreamer, it will only
print a warning to standard output.&lt;/para&gt;&lt;/note&gt;</doc>
        <source-position filename="pt-player.h" line="104"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="706">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="speed" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="707">the speed</doc>
            <type name="gdouble" c:type="gdouble"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_current_time_string"
              c:identifier="pt_player_get_current_time_string">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1213">Returns the current position of the stream as a string for display to the user.

If the current position can not be determined, NULL is returned.</doc>
        <source-position filename="pt-player.h" line="113"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="1222">the time string</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1215">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="precision" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1216">a #PtPrecisionType</doc>
            <type name="PrecisionType" c:type="PtPrecisionType"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_data" c:identifier="pt_player_get_data">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="986">Returns wave data needed for visual representation as raw data. The
requested resolution is given as pixel per seconds, e.g. 100 means one second
is represented by 100 samples, is 100 pixels wide. The returned resolution
doesn't have to be necessarily exactly the requested resolution, it might be
a bit differnt, depending on the bit rate.</doc>
        <source-position filename="pt-player.h" line="70"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="997">the #PtWavedata</doc>
          <type name="Wavedata" c:type="PtWavedata*"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="988">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="pps" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="989">the requested pixel per second ratio</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_duration" c:identifier="pt_player_get_duration">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="967">Returns the duration of stream.</doc>
        <source-position filename="pt-player.h" line="107"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="973">duration in milliseconds</doc>
          <type name="gint64" c:type="gint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="969">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_duration_time_string"
              c:identifier="pt_player_get_duration_time_string">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1242">Returns the duration of the stream as a string for display to the user.

If the duration can not be determined, NULL is returned.</doc>
        <source-position filename="pt-player.h" line="115"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="1251">the time string</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1244">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="precision" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1245">a #PtPrecisionType</doc>
            <type name="PrecisionType" c:type="PtPrecisionType"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_filename" c:identifier="pt_player_get_filename">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1034">Returns the display name of the currently open file or NULL if it can't be determined.</doc>
        <source-position filename="pt-player.h" line="109"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="1040">the file name</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1036">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_permille" c:identifier="pt_player_get_permille">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="848">This is used for scale widgets. If the scale has to synchronize with the
current position in stream, this gives the position on a scale between 0 and
1000.

Failure in querying the position returns -1.</doc>
        <source-position filename="pt-player.h" line="95"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="858">a scale position between 0 and 1000 or -1 on failure</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="850">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_position" c:identifier="pt_player_get_position">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="946">Returns the current position in stream.</doc>
        <source-position filename="pt-player.h" line="106"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="952">position in milliseconds or -1 on failure</doc>
          <type name="gint64" c:type="gint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="948">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_timestamp" c:identifier="pt_player_get_timestamp">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1266">Returns the current timestamp as a string. The format of timestamps can not be changed.

If the current position can not be determined, NULL is returned.</doc>
        <source-position filename="pt-player.h" line="117"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="1274">the timestamp</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1268">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_uri" c:identifier="pt_player_get_uri">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1009">Returns the URI of the currently open file or NULL if it can't be determined.</doc>
        <source-position filename="pt-player.h" line="108"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="1015">the uri</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1011">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="goto_timestamp" c:identifier="pt_player_goto_timestamp">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1382">Goes to the position of the timestamp. Returns false, if it's not a
valid timestamp.</doc>
        <source-position filename="pt-player.h" line="120"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="1390">TRUE on success, FALSE if the timestamp is not valid</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1384">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="timestamp" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1385">the timestamp to go to</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="jump_relative" c:identifier="pt_player_jump_relative">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="752">Skips @milliseconds in stream. A positive value means jumping ahead. If the
resulting position would be beyond the end of stream (or selection), it goes
to the end of stream (or selection). A negative value means jumping back.
If the resulting position would be negative (or before the selection), it
jumps to position 0:00 (or to the start of the selection).</doc>
        <source-position filename="pt-player.h" line="89"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="754">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="milliseconds" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="755">time in milliseconds to jump</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="jump_to_permille"
              c:identifier="pt_player_jump_to_permille">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="822">This is used for scale widgets. Start of stream is at 0, end of stream is
at 1000. This will jump to the given position. If your widget uses a different
scale, it's up to you to convert it to 1/1000. Values beyond 1000 are not
allowed, values outside the selection are ignored.</doc>
        <source-position filename="pt-player.h" line="93"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="824">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="permille" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="825">scale position between 0 and 1000</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="jump_to_position"
              c:identifier="pt_player_jump_to_position">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="791">Jumps to a given position in stream. The position is given in @milliseconds
starting from position 0:00. A position beyond the duration of stream (or
outside the selection) is ignored.</doc>
        <source-position filename="pt-player.h" line="91"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="793">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="milliseconds" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="794">position in milliseconds</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="mute_volume" c:identifier="pt_player_mute_volume">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="929">Mute the player (with TRUE) or set it back to normal volume (with FALSE).
This remembers the volume level, so you don't have to keep track of the old value.</doc>
        <source-position filename="pt-player.h" line="100"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="931">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="mute" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="932">a gboolean</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="open_uri"
              c:identifier="pt_player_open_uri"
              throws="1"
              glib:async-func="open_uri_async">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="495">Opens a local audio file for playback. It doesn't work with videos or streams.
Only one file can be open at a time, playlists are not supported by the
backend. Opening a new file will close the previous one.

When closing a file or on object destruction PtPlayer tries to write the
last position into the file's metadata. On opening a file it reads the
metadata and jumps to the last known position if found.

The player is set to the paused state and ready for playback. To start
playback use @pt_player_play().

This operation blocks until it is finished. It returns TRUE on success or
FALSE and an error. For the asynchronous version see
pt_player_open_uri_async().

While loading the file there is a #PtPlayer::load-progress signal emitted.
However, it doesn't emit 100%, the operation is finished when TRUE is returned.</doc>
        <source-position filename="pt-player.h" line="85"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="519">TRUE if successful, or FALSE with error set</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="497">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="498">the URI of the file</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="open_uri_async"
              c:identifier="pt_player_open_uri_async"
              glib:finish-func="open_uri_finish"
              glib:sync-func="open_uri">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="385">Opens a local audio file for playback. It doesn't work with videos or streams.
Only one file can be open at a time, playlists are not supported by the
backend. Opening a new file will close the previous one.

When closing a file or on object destruction PtPlayer tries to write the
last position into the file's metadata. On opening a file it reads the
metadata and jumps to the last known position if found.

The player is set to the paused state and ready for playback. To start
playback use @pt_player_play().

This is an asynchronous operation, to get the result call
pt_player_open_uri_finish() in your callback. For the blocking version see
pt_player_open_uri().

While loading the file there is a #PtPlayer::load-progress signal emitted which stops before
reaching 100%. Don't use it to determine whether the operation is finished.</doc>
        <source-position filename="pt-player.h" line="81"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="387">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="388">the URI of the file</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="2">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="389">a #GAsyncReadyCallback to call when the operation is complete</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="390">user_data for callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="open_uri_finish"
              c:identifier="pt_player_open_uri_finish"
              throws="1">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="364">Gives the result of the async opening operation. A cancelled operation results
in an error, too.</doc>
        <source-position filename="pt-player.h" line="78"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="373">TRUE if successful, or FALSE with error set</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="366">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="367">the #GAsyncResult passed to your #GAsyncReadyCallback</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <method name="pause" c:identifier="pt_player_pause">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="566">Sets the player to the paused state, meaning it stops playback and doesn't
change position. To resume playback use @pt_player_play().</doc>
        <source-position filename="pt-player.h" line="72"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="568">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="play" c:identifier="pt_player_play">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="581">Starts playback at the defined speed until it reaches the end of stream (or
the end of the selection)..</doc>
        <source-position filename="pt-player.h" line="73"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="583">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="rewind" c:identifier="pt_player_rewind">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="651">Rewinds at the given speed. @speed accepts positive as well as negative
values and normalizes them to play backwards.

&lt;note&gt;&lt;para&gt;This is only available with GStreamer &gt;= 1.6.3 (because of
https://bugzilla.gnome.org/show_bug.cgi?id=757033).&lt;/para&gt;
&lt;para&gt;If you call this with an older version of GStreamer, it will only
print a warning to standard output.&lt;/para&gt;
&lt;para&gt;Note that depending on the file/stream format this works more or less
good.&lt;/para&gt;&lt;/note&gt;</doc>
        <source-position filename="pt-player.h" line="102"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="653">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="speed" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="654">the speed</doc>
            <type name="gdouble" c:type="gdouble"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_selection" c:identifier="pt_player_set_selection">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="596">Set a selection. If the current position is outside the selection, it will
be set to the selection's start position, otherwise the current position is
not changed. Playing will end at the stop position and it's not possible to
jump out of the selection until it is cleared with #pt_player_clear_selection.</doc>
        <source-position filename="pt-player.h" line="74"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="598">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="start" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="599">selection start time in milliseconds</doc>
            <type name="gint64" c:type="gint64"/>
          </parameter>
          <parameter name="end" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="600">selection end time in milliseconds</doc>
            <type name="gint64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_speed"
              c:identifier="pt_player_set_speed"
              glib:set-property="speed">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="873">Sets the speed of playback in the paused state as well as during playback.
Normal speed is 1.0, everything above that is faster, everything below slower.
A speed of 0 is not allowed, use pt_player_pause() instead.
Recommended speed is starting from 0.5 as quality is rather poor below that.
Parlatype doesn't change the pitch during slower or faster playback.

Note: If you want to change the speed during playback, you have to use this
method. Changing the "speed" property of PtPlayer, will take effect only
later.</doc>
        <source-position filename="pt-player.h" line="96"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="875">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="speed" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="876">speed</doc>
            <type name="gdouble" c:type="gdouble"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_volume"
              c:identifier="pt_player_set_volume"
              glib:set-property="volume">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="906">Sets the volume on a scale between 0 and 1. Instead of using this method
you could set the "volume" property.</doc>
        <source-position filename="pt-player.h" line="98"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="908">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="volume" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="909">volume</doc>
            <type name="gdouble" c:type="gdouble"/>
          </parameter>
        </parameters>
      </method>
      <method name="string_is_timestamp"
              c:identifier="pt_player_string_is_timestamp">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1360">Returns whether the given string is a valid timestamp.

See also pt_player_goto_timestamp() if you want to go to the timestamp's
position immediately after.</doc>
        <source-position filename="pt-player.h" line="118"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="pt-player.c"
               line="1370">TRUE if the timestamp is valid, FALSE if not</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="player" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1362">a #PtPlayer</doc>
            <type name="Player" c:type="PtPlayer*"/>
          </instance-parameter>
          <parameter name="timestamp" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1363">the string to be checked</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <property name="speed"
                writable="1"
                construct="1"
                transfer-ownership="none"
                setter="set_speed"
                default-value="1.000000">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1659">The speed for playback.</doc>
        <type name="gdouble" c:type="gdouble"/>
      </property>
      <property name="volume"
                writable="1"
                construct="1"
                transfer-ownership="none"
                setter="set_volume"
                default-value="1.000000">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1674">The volume for playback.</doc>
        <type name="gdouble" c:type="gdouble"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="PlayerPrivate" c:type="PtPlayerPrivate*"/>
      </field>
      <glib:signal name="end-of-stream" when="first">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1624">The #PtPlayer::end-of-stream signal is emitted when the stream is at its end
or when the end of selection is reached.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="error" when="first">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1641">The #PtPlayer::error signal is emitted on errors opening the file or during
playback. It's a severe error and the player is always reset.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1644">a GError</doc>
            <type name="GLib.Error"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="load-progress" when="first">
        <doc xml:space="preserve"
             filename="pt-player.c"
             line="1605">Indicates progress on a scale from 0.0 to 1.0, however it does not
emit the value 0.0 nor 1.0. Wait for a TRUE player-state-changed
signal or an error signal to dismiss a gui element showing progress.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="progress" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-player.c"
                 line="1608">the new progress state, ranging from 0.0 to 1.0</doc>
            <type name="gdouble" c:type="gdouble"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="PlayerClass"
            c:type="PtPlayerClass"
            glib:is-gtype-struct-for="Player">
      <source-position filename="pt-player.h" line="48"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <record name="PlayerPrivate"
            c:type="PtPlayerPrivate"
            disguised="1"
            opaque="1">
      <source-position filename="pt-player.h" line="30"/>
    </record>
    <enumeration name="PrecisionType" c:type="PtPrecisionType">
      <doc xml:space="preserve"
           filename="pt-player.h"
           line="51">Enum values indicating desired precision of time strings.</doc>
      <source-position filename="pt-player.h" line="65"/>
      <member name="second" value="0" c:identifier="PT_PRECISION_SECOND">
        <doc xml:space="preserve"
             filename="pt-player.h"
             line="53">Rounds to full seconds, e.g. 1:23 (1 minute, 23 seconds)</doc>
      </member>
      <member name="second_10th"
              value="1"
              c:identifier="PT_PRECISION_SECOND_10TH">
        <doc xml:space="preserve"
             filename="pt-player.h"
             line="54">Round to 1/10 seconds, e.g. 1:23.4</doc>
      </member>
      <member name="second_100th"
              value="2"
              c:identifier="PT_PRECISION_SECOND_100TH">
        <doc xml:space="preserve"
             filename="pt-player.h"
             line="55">Round to 1/100 seconds, e.g. 1:23.45</doc>
      </member>
    </enumeration>
    <class name="ProgressDialog"
           c:symbol-prefix="progress_dialog"
           c:type="PtProgressDialog"
           parent="Gtk.MessageDialog"
           glib:type-name="PtProgressDialog"
           glib:get-type="pt_progress_dialog_get_type"
           glib:type-struct="ProgressDialogClass">
      <doc xml:space="preserve"
           filename="pt-progress-dialog.h"
           line="31">The #PtProgressDialog contains only private fields and should not be directly accessed.</doc>
      <source-position filename="pt-progress-dialog.h" line="47"/>
      <implements name="Atk.ImplementorIface"/>
      <implements name="Gtk.Buildable"/>
      <constructor name="new" c:identifier="pt_progress_dialog_new">
        <doc xml:space="preserve"
             filename="pt-progress-dialog.c"
             line="220">A #GtkMessageDialog with a label "Loading file...", a progress bar and a
cancel button.

After use gtk_widget_destroy() it.</doc>
        <source-position filename="pt-progress-dialog.h" line="55"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="pt-progress-dialog.c"
               line="229">a new #PtProgressDialog</doc>
          <type name="ProgressDialog" c:type="PtProgressDialog*"/>
        </return-value>
        <parameters>
          <parameter name="win"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="pt-progress-dialog.c"
                 line="222">parent window, NULL is allowed, but discouraged</doc>
            <type name="Gtk.Window" c:type="GtkWindow*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="set_progress"
              c:identifier="pt_progress_dialog_set_progress">
        <doc xml:space="preserve"
             filename="pt-progress-dialog.c"
             line="122">Sets the progress bar to the new value.</doc>
        <source-position filename="pt-progress-dialog.h" line="52"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="dlg" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-progress-dialog.c"
                 line="124">the dialog</doc>
            <type name="ProgressDialog" c:type="PtProgressDialog*"/>
          </instance-parameter>
          <parameter name="progress" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-progress-dialog.c"
                 line="125">the new value for the progress bar, ranging from 0.0 to 1.0</doc>
            <type name="gdouble" c:type="gdouble"/>
          </parameter>
        </parameters>
      </method>
      <field name="dialog">
        <type name="Gtk.MessageDialog" c:type="GtkMessageDialog"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="ProgressDialogPrivate" c:type="PtProgressDialogPrivate*"/>
      </field>
    </class>
    <record name="ProgressDialogClass"
            c:type="PtProgressDialogClass"
            glib:is-gtype-struct-for="ProgressDialog">
      <source-position filename="pt-progress-dialog.h" line="47"/>
      <field name="parent_class">
        <type name="Gtk.MessageDialogClass" c:type="GtkMessageDialogClass"/>
      </field>
    </record>
    <record name="ProgressDialogPrivate"
            c:type="PtProgressDialogPrivate"
            disguised="1"
            opaque="1">
      <source-position filename="pt-progress-dialog.h" line="29"/>
    </record>
    <function-macro name="WAVELOADER"
                    c:identifier="PT_WAVELOADER"
                    introspectable="0">
      <source-position filename="pt-waveloader.h" line="25"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="WAVEVIEWER"
                    c:identifier="PT_WAVEVIEWER"
                    introspectable="0">
      <source-position filename="pt-waveviewer.h" line="27"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="WAVEVIEWER_CLASS"
                    c:identifier="PT_WAVEVIEWER_CLASS"
                    introspectable="0">
      <source-position filename="pt-waveviewer.h" line="29"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <record name="Wavedata"
            c:type="PtWavedata"
            glib:type-name="PtWavedata"
            glib:get-type="pt_wavedata_get_type"
            c:symbol-prefix="wavedata">
      <doc xml:space="preserve"
           filename="pt-wavedata.h"
           line="28">Contains all information about the wave. Usually you don't have to access
the struct's members.</doc>
      <source-position filename="pt-wavedata.h" line="49"/>
      <field name="array" writable="1">
        <doc xml:space="preserve"
             filename="pt-wavedata.h"
             line="30">array of min/max values. One single sample is
represented by a min value ranging from -1.0 to 0.0 and a max value ranging
from 0.0 to 1.0. This is a simplified approach, as a sample is not a single
point in time, but a min and a max value in a certain amount of time, e.g.
10 ms.</doc>
        <array length="1" zero-terminated="0" c:type="gfloat*">
          <type name="gfloat" c:type="gfloat"/>
        </array>
      </field>
      <field name="length" writable="1">
        <doc xml:space="preserve"
             filename="pt-wavedata.h"
             line="35">number of elements in array</doc>
        <type name="gint64" c:type="gint64"/>
      </field>
      <field name="channels" writable="1">
        <doc xml:space="preserve"
             filename="pt-wavedata.h"
             line="36">number of channels for future use, currently it's always 1.</doc>
        <type name="guint" c:type="guint"/>
      </field>
      <field name="px_per_sec" writable="1">
        <doc xml:space="preserve"
             filename="pt-wavedata.h"
             line="37">pixels/samples per second. For example 100 means one second in time
is 100 pixels wide.</doc>
        <type name="guint" c:type="guint"/>
      </field>
      <constructor name="new" c:identifier="pt_wavedata_new">
        <doc xml:space="preserve"
             filename="pt-wavedata.c"
             line="91">Constructs a new #PtWavedata.</doc>
        <source-position filename="pt-wavedata.h" line="54"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="pt-wavedata.c"
               line="100">new data, free after use with pt_wavedata_free()</doc>
          <type name="Wavedata" c:type="PtWavedata*"/>
        </return-value>
        <parameters>
          <parameter name="array" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-wavedata.c"
                 line="93">an array of floats</doc>
            <array length="1" zero-terminated="0" c:type="gfloat*">
              <type name="gfloat" c:type="gfloat"/>
            </array>
          </parameter>
          <parameter name="length" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-wavedata.c"
                 line="94">number of elements in array</doc>
            <type name="gint64" c:type="gint64"/>
          </parameter>
          <parameter name="channels" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-wavedata.c"
                 line="95">number of channels</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="px_per_sec" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-wavedata.c"
                 line="96">rate</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy" c:identifier="pt_wavedata_copy" introspectable="0">
        <doc xml:space="preserve"
             filename="pt-wavedata.c"
             line="47">Creates a copy of @data.</doc>
        <source-position filename="pt-wavedata.h" line="52"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="pt-wavedata.c"
               line="53">a new #PtWavedata, free after use with pt_wavedata_free()</doc>
          <type name="Wavedata" c:type="PtWavedata*"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-wavedata.c"
                 line="49">the object to copy</doc>
            <type name="Wavedata" c:type="PtWavedata*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="free" c:identifier="pt_wavedata_free" introspectable="0">
        <doc xml:space="preserve"
             filename="pt-wavedata.c"
             line="74">Free's @data.</doc>
        <source-position filename="pt-wavedata.h" line="53"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-wavedata.c"
                 line="76">the object to be freed</doc>
            <type name="Wavedata" c:type="PtWavedata*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <class name="Waveloader"
           c:symbol-prefix="waveloader"
           c:type="PtWaveloader"
           parent="GObject.Object"
           glib:type-name="PtWaveloader"
           glib:get-type="pt_waveloader_get_type"
           glib:type-struct="WaveloaderClass">
      <doc xml:space="preserve"
           filename="pt-waveloader.h"
           line="33">The #PtWaveloader contains only private fields and should not be directly accessed.</doc>
      <source-position filename="pt-waveloader.h" line="49"/>
      <constructor name="new" c:identifier="pt_waveloader_new">
        <doc xml:space="preserve"
             filename="pt-waveloader.c"
             line="632">Returns a new #PtWaveloader. The @uri is not checked on construction, but
calling pt_waveloader_load_async() will fail with an error message.

After use g_object_unref() it.</doc>
        <source-position filename="pt-waveloader.h" line="67"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="pt-waveloader.c"
               line="641">a new #PtWaveloader</doc>
          <type name="Waveloader" c:type="PtWaveloader*"/>
        </return-value>
        <parameters>
          <parameter name="uri"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="pt-waveloader.c"
                 line="634">URI of the audio file to load</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_data" c:identifier="pt_waveloader_get_data">
        <doc xml:space="preserve"
             filename="pt-waveloader.c"
             line="393">Returns wave data needed for visual representation as raw data. The
requested resolution is given as pixel per seconds, e.g. 100 means one second
is represented by 100 samples, is 100 pixels wide. The returned resolution
doesn't have to be necessarily exactly the requested resolution, it might be
a bit differnt, depending on the bit rate.</doc>
        <source-position filename="pt-waveloader.h" line="64"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="pt-waveloader.c"
               line="404">the #PtWavedata, after use free with pt_wavedata_free()</doc>
          <type name="Wavedata" c:type="PtWavedata*"/>
        </return-value>
        <parameters>
          <instance-parameter name="wl" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-waveloader.c"
                 line="395">a #PtWaveloader</doc>
            <type name="Waveloader" c:type="PtWaveloader*"/>
          </instance-parameter>
          <parameter name="pps" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-waveloader.c"
                 line="396">the requested pixel per second ratio</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_duration" c:identifier="pt_waveloader_get_duration">
        <doc xml:space="preserve"
             filename="pt-waveloader.c"
             line="378">Returns the duration of stream. As the whole stream is scanned, this is
supposed to be an exact duration, not an estimate.</doc>
        <source-position filename="pt-waveloader.h" line="62"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="pt-waveloader.c"
               line="385">duration in nanoseconds as used by GStreamer</doc>
          <type name="gint64" c:type="gint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="wl" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-waveloader.c"
                 line="380">a #PtWaveloader</doc>
            <type name="Waveloader" c:type="PtWaveloader*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="load_async"
              c:identifier="pt_waveloader_load_async"
              glib:finish-func="load_finish">
        <doc xml:space="preserve"
             filename="pt-waveloader.c"
             line="303">Writes the raw sample data to a temporary file and also gets the number of
channels, the bit rate and the exact duration. Load only once and on success
the data can be retrieved as a #PtWavedata. It's a programmer's error trying
to retrieve the data without prior loading.

Emits a progress signal while saving the temporary file.

In your callback call #pt_waveloader_load_finish to get the result of the
operation.</doc>
        <source-position filename="pt-waveloader.h" line="57"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="wl" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-waveloader.c"
                 line="305">a #PtWaveloader</doc>
            <type name="Waveloader" c:type="PtWaveloader*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="pt-waveloader.c"
                 line="306">a #GCancellable or NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="2">
            <doc xml:space="preserve"
                 filename="pt-waveloader.c"
                 line="307">a #GAsyncReadyCallback to call when the operation is complete</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="pt-waveloader.c"
                 line="308">user_data for callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="load_finish"
              c:identifier="pt_waveloader_load_finish"
              throws="1">
        <doc xml:space="preserve"
             filename="pt-waveloader.c"
             line="282">Gives the result of the async load operation. A cancelled operation results
in an error, too.</doc>
        <source-position filename="pt-waveloader.h" line="53"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="pt-waveloader.c"
               line="291">TRUE if successful, or FALSE with error set</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="wl" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-waveloader.c"
                 line="284">a #PtWaveloader</doc>
            <type name="Waveloader" c:type="PtWaveloader*"/>
          </instance-parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-waveloader.c"
                 line="285">the #GAsyncResult passed to your #GAsyncReadyCallback</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <property name="uri"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve"
             filename="pt-waveloader.c"
             line="613">URI of the audio file.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="WaveloaderPrivate" c:type="PtWaveloaderPrivate*"/>
      </field>
      <glib:signal name="progress" when="first">
        <doc xml:space="preserve"
             filename="pt-waveloader.c"
             line="594">Indicates progress on a scale from 0.0 to 1.0, however it does not
emit the value 0.0 nor 1.0. Wait for a successful operation until
any gui element showing progress is dismissed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="progress" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-waveloader.c"
                 line="597">the new progress state, ranging from 0.0 to 1.0</doc>
            <type name="gdouble" c:type="gdouble"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="WaveloaderClass"
            c:type="PtWaveloaderClass"
            glib:is-gtype-struct-for="Waveloader">
      <source-position filename="pt-waveloader.h" line="49"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <record name="WaveloaderPrivate"
            c:type="PtWaveloaderPrivate"
            disguised="1"
            opaque="1">
      <source-position filename="pt-waveloader.h" line="30"/>
    </record>
    <class name="Waveviewer"
           c:symbol-prefix="waveviewer"
           c:type="PtWaveviewer"
           parent="Gtk.ScrolledWindow"
           glib:type-name="PtWaveviewer"
           glib:get-type="pt_waveviewer_get_type"
           glib:type-struct="WaveviewerClass">
      <doc xml:space="preserve"
           filename="pt-waveviewer.h"
           line="36">The #PtWaveviewer contains only private fields and should not be directly accessed.</doc>
      <source-position filename="pt-waveviewer.h" line="50"/>
      <implements name="Atk.ImplementorIface"/>
      <implements name="Gtk.Buildable"/>
      <constructor name="new" c:identifier="pt_waveviewer_new">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1420">Create a new, initially blank waveform viewer widget. Use
pt_waveviewer_set_wave() to pass wave data.

After use gtk_widget_destroy() it.</doc>
        <source-position filename="pt-waveviewer.h" line="62"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="pt-waveviewer.c"
               line="1428">the widget</doc>
          <type name="Gtk.Widget" c:type="GtkWidget*"/>
        </return-value>
      </constructor>
      <method name="get_follow_cursor"
              c:identifier="pt_waveviewer_get_follow_cursor"
              glib:get-property="follow-cursor">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="775">Get follow-cursor option.</doc>
        <source-position filename="pt-waveviewer.h" line="54"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="pt-waveviewer.c"
               line="781">TRUE if cursor is followed, else FALSE</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-waveviewer.c"
                 line="777">the widget</doc>
            <type name="Waveviewer" c:type="PtWaveviewer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_follow_cursor"
              c:identifier="pt_waveviewer_set_follow_cursor"
              glib:set-property="follow-cursor">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="791">Set follow-cursor option to TRUE or FALSE. See also #PtWaveviewer:follow-cursor.</doc>
        <source-position filename="pt-waveviewer.h" line="56"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-waveviewer.c"
                 line="793">the widget</doc>
            <type name="Waveviewer" c:type="PtWaveviewer*"/>
          </instance-parameter>
          <parameter name="follow" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-waveviewer.c"
                 line="794">new value</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_wave" c:identifier="pt_waveviewer_set_wave">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="953">Set wave data to show in the widget. The data is copied internally and may
be freed immediately after calling this function. If @data is NULL, a blank
widget is drawn.</doc>
        <source-position filename="pt-waveviewer.h" line="59"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-waveviewer.c"
                 line="955">the widget</doc>
            <type name="Waveviewer" c:type="PtWaveviewer*"/>
          </instance-parameter>
          <parameter name="data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="pt-waveviewer.c"
                 line="956">a #PtWavedata</doc>
            <type name="Wavedata" c:type="PtWavedata*"/>
          </parameter>
        </parameters>
      </method>
      <property name="fixed-cursor"
                writable="1"
                construct="1"
                transfer-ownership="none"
                default-value="TRUE">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1316">If TRUE, in follow-cursor mode the cursor is at a fixed position and the
waveform is scrolling. If FALSE the cursor is moving.

If #PtWaveviewer:follow-cursor is FALSE, this has no effect.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="follow-cursor"
                writable="1"
                construct="1"
                transfer-ownership="none"
                setter="set_follow_cursor"
                getter="get_follow_cursor"
                default-value="TRUE">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1300">If the widget follows the cursor, it scrolls automatically to the
cursor's position. Note that the widget will change this property to
FALSE if the user scrolls the widget manually.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="has-selection"
                transfer-ownership="none"
                default-value="FALSE">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1348">Whether something is selected (TRUE) or not (FALSE).</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="playback-cursor"
                readable="0"
                writable="1"
                transfer-ownership="none"
                default-value="0">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1284">Current playback position in milliseconds.</doc>
        <type name="gint64" c:type="gint64"/>
      </property>
      <property name="selection-end"
                transfer-ownership="none"
                default-value="0">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1379">End time of selection in milliseconds. If it's equal to the start
time, there is no selection. See also #PtWaveviewer:has-selection.</doc>
        <type name="gint64" c:type="gint64"/>
      </property>
      <property name="selection-start"
                transfer-ownership="none"
                default-value="0">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1362">Start time of selection in milliseconds. If it's equal to the end
time, there is no selection. See also #PtWaveviewer:has-selection.</doc>
        <type name="gint64" c:type="gint64"/>
      </property>
      <property name="show-ruler"
                writable="1"
                construct="1"
                transfer-ownership="none"
                default-value="TRUE">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1334">Whether the ruler is shown (TRUE) or not (FALSE).</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="zoom"
                readable="0"
                writable="1"
                construct="1"
                transfer-ownership="none"
                default-value="FALSE">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1396">Set this to TRUE to indicate that the next wave data will be the same
waveform but at a different zoom level. PtWaveviewer needs this to
decide which part of the waveform should be shown.
– Note: This will be probably removed with the next API break in
version 1.6 and integrated into pt_waveviewer_set_wave().</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <field name="parent">
        <type name="Gtk.ScrolledWindow" c:type="GtkScrolledWindow"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="WaveviewerPrivate" c:type="PtWaveviewerPrivate*"/>
      </field>
      <glib:signal name="cursor-changed" when="first">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1196">Signals that the cursor's position was changed by the user.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="position" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="pt-waveviewer.c"
                 line="1199">the new position in stream in milliseconds</doc>
            <type name="gint64" c:type="gint64"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="play-toggled" when="first">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1233">Signals that the user requested to toggle play/pause.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="selection-changed" when="first">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1214">Signals that the selection was changed (or unselected) by the user.
To query the new selection see #PtWaveviewer:has-selection,
#PtWaveviewer:selection-start and #PtWaveviewer:selection-end.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="zoom-in" when="first">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1250">Signals that the user requested to zoom into the waveform.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="zoom-out" when="first">
        <doc xml:space="preserve"
             filename="pt-waveviewer.c"
             line="1267">Signals that the user requested to zoom out of the waveform.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="WaveviewerClass"
            c:type="PtWaveviewerClass"
            glib:is-gtype-struct-for="Waveviewer">
      <source-position filename="pt-waveviewer.h" line="50"/>
      <field name="klass">
        <type name="Gtk.ScrolledWindowClass" c:type="GtkScrolledWindowClass"/>
      </field>
    </record>
    <record name="WaveviewerPrivate"
            c:type="PtWaveviewerPrivate"
            disguised="1"
            opaque="1">
      <source-position filename="pt-waveviewer.h" line="34"/>
    </record>
    <docsection name="pt-player">
      <doc xml:space="preserve"
           filename="pt-player.c"
           line="69">PtPlayer is the GStreamer backend for Parlatype. Construct it with #pt_player_new().
Then you have to open a file, either with pt_player_open_uri_async() or
pt_player_open_uri(), the blocking version.

The internal time unit in PtPlayer are milliseconds and for scale widgets there
is a scale from 0 to 1000. Use it to jump to a position or to update your widget.

While playing PtPlayer emits these signals:
- end-of-stream: End of file reached, in the GUI you might want to jump
   		       to the beginning, reset play button etc.
- error: A fatal error occured, the player is reset. There's an error message.

PtPlayer has two properties:
- speed: is a double from 0.5 to 1.5. 1.0 is normal playback, &lt; 1.0 is slower,
    &gt; 1.0 is faster. Changing the "speed" property doesn't change playback though.
    Use the method instead.
- Volume is a double from 0 to 1. It can be set via the method or setting
      the "volume" property.</doc>
    </docsection>
    <docsection name="pt-progress-dialog">
      <doc xml:space="preserve"
           filename="pt-progress-dialog.c"
           line="34">PtProgressDialog is a ready to use dialog, intended to show progress while
loading wave data. Note, that it is supposed to be shown via
gtk_widget_show_all() and loading wave data should be done asynchronously.
Using the synchronous version the dialog will not show up.

Assuming you have set up a PtPlayer *player, typical usage would be:
|[&lt;!-- language="C" --&gt;
static void
progress_response_cb (GtkWidget *dialog,
                      gint       response,
                      gpointer  *user_data)
{
    PtPlayer *player = (PtPlayer *) user_data;

    if (response == GTK_RESPONSE_CANCEL)
        pt_player_cancel (player);
}

...

static void
open_cb (PtPlayer     *player,
         GAsyncResult *res,
         gpointer     *user_data)
{
    PtProgressDialog *dlg = (PtProgressDialog *) user_data;
    gtk_widget_destroy (GTK_WIDGET (dlg));
    ...
}

...

progress_dlg = GTK_WIDGET (pt_progress_dialog_new (GTK_WINDOW (parent)));

g_signal_connect (progress_dlg,
                  "response",
                  G_CALLBACK (progress_response_cb),
                  player);

g_signal_connect_swapped (player,
                          "load-progress",
                          G_CALLBACK (pt_progress_dialog_set_progress),
                          PT_PROGRESS_DIALOG (progress_dlg));

gtk_widget_show_all (win-&gt;priv-&gt;progress_dlg);
pt_player_open_uri_async (player,
                          uri,
                          (GAsyncReadyCallback) open_cb,
                          progress_dlg);

]|</doc>
    </docsection>
    <docsection name="pt-wavedata">
      <doc xml:space="preserve"
           filename="pt-wavedata.c"
           line="22">Contains all information needed to show a wave form. It's produced by
#PtPlayer or #PtWaveloader. Pass it to #PtWaveviewer to visualize the wave.
#PtWaveviewer copies the data, you can free it immediately with pt_wavedata_free().

There is no need to access the struct members.

Assuming you have set up a PtPlayer *player, typical usage would be:
|[&lt;!-- language="C" --&gt;
...
PtWavedata *data;
data = pt_player_get_data (player, 100);
pt_waveviewer_set_wave (PT_WAVEVIEWER (waveviewer), data);
pt_wavedata_free (data);
...
]|</doc>
    </docsection>
    <docsection name="pt-waveloader">
      <doc xml:space="preserve"
           filename="pt-waveloader.c"
           line="67">An object to load waveform data from an audio file. The raw data can be
used by a widget to visually represent a waveform.</doc>
    </docsection>
    <docsection name="pt-waveviewer">
      <doc xml:space="preserve"
           filename="pt-waveviewer.c"
           line="111">Displays a waveform provided by #PtPlayer or #PtWaveloader.</doc>
    </docsection>
  </namespace>
</repository>
