Expand description

Sample cache mechanism.

Overview

The sample cache provides a simple way of overcoming high network latencies and reducing bandwidth. Instead of streaming a sound precisely when it should be played, it is stored on the server and only the command to start playing it needs to be sent.

Creation

To create a sample, the normal stream API is used (see stream). The function Stream::connect_upload() will make sure the stream is stored as a sample on the server.

To complete the upload, Stream::finish_upload() is called and the sample will receive the same name as the stream. If the upload should be aborted, simply call Stream::disconnect().

Playing samples

To play back a sample, simply call Context::play_sample():

extern crate libpulse_binding as pulse;

use pulse::volume;

//...

let o = my_context.play_sample(
    "sample2",            // Name of my sample
    None,                 // Use default sink
    volume::VOLUME_NORM,  // Full volume
    None                  // Don’t need a callback
);

Removing samples

When a sample is no longer needed, it should be removed on the server to save resources. The sample is deleted using Context::remove_sample().