1
0
Fork 0
mirror of https://github.com/librespot-org/librespot.git synced 2025-10-03 01:39:28 +02:00
librespot/connect
Felix Prillwitz c715885747
Fix: Delete the connect state only on spirc shutdown (#1555)
* fix: only delete the state on shutdown

* chore: update changelog
2025-08-27 11:18:02 +02:00
..
src Fix: Delete the connect state only on spirc shutdown (#1555) 2025-08-27 11:18:02 +02:00
Cargo.toml chore: bump version to 0.7.0 and update internal dependencies 2025-08-24 16:49:07 +02:00
README.md Expose possible mixer opening errors (#1488) 2025-07-14 17:39:33 +02: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(())
}