librespot/connect
Felix Prillwitz 837b3e6d1a
Emit shuffle and repeat events again ()
* emit shuffle and repeat events again

* connect: split context/track repeat handling
2025-03-22 20:17:46 +01:00
..
src Emit shuffle and repeat events again () 2025-03-22 20:17:46 +01:00
Cargo.toml Shuffle tracks in place () 2025-02-02 22:58:30 +01:00
README.md Add rustdoc to connect crate () 2025-02-22 23:39:16 +01:00

Connect

The connect module of librespot. Provides the option to create your own connect device and stream to it like any other official spotify client.

The [Spirc] is the entrypoint to creating your own connect device. It can be configured with the given [ConnectConfig] options and requires some additional data to start up the device.

When creating a new [Spirc] it returns two items. The [Spirc] itself, which is can be used as to control the local connect device. And a Future, lets name it SpircTask, that starts and executes the event loop of the connect device when awaited.

A basic example in which the Spirc and SpircTask is used can be found here: examples/play_connect.rs.

Example

use std::{future::Future, thread};

use librespot_connect::{ConnectConfig, Spirc};
use librespot_core::{authentication::Credentials, Error, Session, SessionConfig};
use librespot_playback::{
    audio_backend, mixer,
    config::{AudioFormat, PlayerConfig},
    mixer::{MixerConfig, NoOpVolume},
    player::Player
};

async fn create_basic_spirc() -> Result<(), Error> {
    let credentials = Credentials::with_access_token("access-token-here");
    let session = Session::new(SessionConfig::default(), None);

    let backend = audio_backend::find(None).expect("will default to rodio");

    let player = Player::new(
        PlayerConfig::default(),
        session.clone(),
        Box::new(NoOpVolume),
        move || {
            let format = AudioFormat::default();
            let device = None;
            backend(device, format)
        },
    );

    let mixer = mixer::find(None).expect("will default to SoftMixer");

    let (spirc, spirc_task): (Spirc, _) = Spirc::new(
        ConnectConfig::default(),
        session,
        credentials,
        player,
        mixer(MixerConfig::default())
    ).await?;

    Ok(())
}