aboutsummaryrefslogtreecommitdiff
path: root/spotify.go
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2022-07-21 00:44:31 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2022-07-21 00:44:31 +0200
commit318fd2fda65e6a0a329a5fad5be3f81d54ccacff (patch)
tree936fdce042372b3a97a3256e560af79b773868a5 /spotify.go
downloadWRMS-318fd2fda65e6a0a329a5fad5be3f81d54ccacff.tar.gz
WRMS-318fd2fda65e6a0a329a5fad5be3f81d54ccacff.zip
initial WIP commit
Diffstat (limited to 'spotify.go')
-rw-r--r--spotify.go77
1 files changed, 77 insertions, 0 deletions
diff --git a/spotify.go b/spotify.go
new file mode 100644
index 0000000..a813254
--- /dev/null
+++ b/spotify.go
@@ -0,0 +1,77 @@
+package main
+
+// The spotify backend is based on the librespot-golang code released under MIT
+// license.
+// Authors of the librespot-golang code are:
+// Copyright (c) 2015 Paul Lietar
+// Copyright (c) 2015 badfortrains
+// Copyright (c) 2018 Guillaume "xplodwild" Lesniak
+
+import (
+ "errors"
+ "os"
+
+ // "github.com/librespot-org/librespot-golang/Spotify"
+ "github.com/librespot-org/librespot-golang/librespot"
+ "github.com/librespot-org/librespot-golang/librespot/core"
+ // "github.com/librespot-org/librespot-golang/librespot/utils"
+ "github.com/xlab/portaudio-go/portaudio"
+ // "github.com/xlab/vorbis-go/decoder"
+)
+
+const (
+ deviceName = "wrms"
+ // The number of samples per channel in the decoded audio
+ samplesPerChannel = 2048
+ // The samples bit depth
+ bitDepth = 16
+ // The samples format
+ sampleFormat = portaudio.PaFloat32
+)
+
+type SpotifyBackend struct {
+ session *core.Session
+}
+
+func NewSpotify() (*SpotifyBackend, error) {
+ spotify := SpotifyBackend{}
+
+ if err := portaudio.Initialize(); paError(err) {
+ return nil, errors.New(paErrorText(err))
+ }
+
+ var err error
+
+ username := os.Getenv("WRMS_SPOTIFY_USER")
+ password := os.Getenv("WRMS_SPOTIFY_PASSWORD")
+ if username == "" || password == "" {
+ return nil, errors.New("User and password for spotify must be provided")
+ }
+
+ spotify.session, err = librespot.Login(username, password, deviceName)
+
+ if err != nil {
+ return nil, err
+ }
+
+ return &spotify, nil
+}
+
+func (spotify *SpotifyBackend) Play(song Song) {
+}
+
+func (spotify *SpotifyBackend) Pause() {
+}
+
+func (spotify *SpotifyBackend) Search(keyword string) []Song {
+ return []Song{}
+}
+
+// PortAudio helpers
+func paError(err portaudio.Error) bool {
+ return portaudio.ErrorCode(err) != portaudio.PaNoError
+}
+
+func paErrorText(err portaudio.Error) string {
+ return "PortAudio error: " + portaudio.GetErrorText(err)
+}