Merge pull request #2446 from awiouy/lsorg-8.2

librespot: update to bc7ceb3
This commit is contained in:
Christian Hewitt 2018-02-01 08:26:45 +04:00 committed by GitHub
commit 34aa4b9b41
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 180 additions and 132 deletions

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="rust"
PKG_VERSION="1.20.0"
PKG_VERSION="1.23.0"
PKG_ARCH="any"
PKG_LICENSE="MIT"
PKG_SITE="https://www.rust-lang.org"

View File

@ -1,3 +1,9 @@
109
- Refer librespot-org repository
- Update to bc7ceb3
- Set stream type to audio in Kodi mode
- Initial volume as a setting
108
- Correct bug which prevented disabling the service from Kodi
- Place named pipe in /var/run/librespot

View File

@ -18,12 +18,12 @@
################################################################################
PKG_NAME="librespot"
PKG_VERSION="ddfc28f"
PKG_REV="108"
PKG_VERSION="bc7ceb3"
PKG_REV="109"
PKG_ARCH="any"
PKG_LICENSE="MIT"
PKG_SITE="https://github.com/plietar/$PKG_NAME/"
PKG_URL="https://github.com/plietar/$PKG_NAME/archive/$PKG_VERSION.zip"
PKG_SITE="https://github.com/librespot-org/$PKG_NAME/"
PKG_URL="https://github.com/librespot-org/$PKG_NAME/archive/$PKG_VERSION.zip"
PKG_DEPENDS_TARGET="toolchain avahi libvorbis pulseaudio pyalsaaudio rust"
PKG_SECTION="service"
PKG_SHORTDESC="Librespot: play Spotify through LibreELEC using a Spotify app as a remote"

View File

@ -1,63 +1,78 @@
From b0d70bed1d5f3614f0e966c53c3a4898c7b33918 Mon Sep 17 00:00:00 2001
From 1bfecca0614ab3426df349fed41652692b8a7863 Mon Sep 17 00:00:00 2001
From: awiouy <awiouy@gmail.com>
Date: Mon, 4 Sep 2017 23:01:38 +0200
Date: Fri, 26 Jan 2018 19:35:21 +0100
Subject: [PATCH] use dns-sd instead of mdns for discovery
---
Cargo.lock | 19 +++++--------------
Cargo.lock | 29 ++++++++++-------------------
Cargo.toml | 2 +-
src/discovery.rs | 19 ++++++++++---------
src/lib.rs | 2 +-
4 files changed, 17 insertions(+), 25 deletions(-)
4 files changed, 22 insertions(+), 30 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index d8128db..5f54617 100644
index 1bee811..7f6c2bc 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -277,7 +277,7 @@ dependencies = [
"librespot-metadata 0.1.0",
"librespot-protocol 0.1.0",
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "mdns 0.2.0 (git+https://github.com/plietar/rust-mdns)",
+ "dns-sd 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"num-bigint 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
"portaudio-rs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"protobuf 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -386,20 +386,12 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -106,6 +106,15 @@ dependencies = [
"quick-error 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "mdns"
-version = "0.2.0"
-source = "git+https://github.com/plietar/rust-mdns#c0fc73502d7d752a4ffeb5268a017561405e218c"
+[[package]]
+name = "dns-sd"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "dns-parser 0.3.2 (git+https://github.com/plietar/dns-parser)",
- "futures 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "multimap 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "net2 0.2.30 (registry+https://github.com/rust-lang/crates.io-index)",
- "nix 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-core 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+dependencies = [
+ "libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
]
+]
+
[[package]]
@@ -1099,7 +1091,6 @@ dependencies = [
"checksum magenta 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4bf0336886480e671965f794bc9b6fce88503563013d1bfb7a502c81fe3ac527"
"checksum magenta-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "40d014c7011ac470ae28e2f76a02bfea4a8480f73e701353b49ad7a8d75f4699"
name = "dtoa"
version = "0.4.2"
@@ -283,7 +292,7 @@ dependencies = [
"librespot-metadata 0.1.0",
"librespot-protocol 0.1.0",
"log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "mdns 0.2.0 (git+https://github.com/plietar/rust-mdns)",
+ "dns-sd 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"num-bigint 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
"portaudio-rs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"protobuf 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -395,23 +404,6 @@ name = "matches"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-[[package]]
-name = "mdns"
-version = "0.2.0"
-source = "git+https://github.com/plietar/rust-mdns#c0fc73502d7d752a4ffeb5268a017561405e218c"
-dependencies = [
- "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "dns-parser 0.3.2 (git+https://github.com/plietar/dns-parser)",
- "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "multimap 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)",
- "nix 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.3.20 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-core 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "memchr"
version = "2.0.1"
@@ -1134,7 +1126,6 @@ dependencies = [
"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
"checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2"
"checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376"
-"checksum mdns 0.2.0 (git+https://github.com/plietar/rust-mdns)" = "<none>"
"checksum memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1dbccc0e46f1ea47b9f17e6d67c5a96bd27030519c519c9c91327e31275a47b4"
"checksum mime 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c5ca99d8a021c1687882fd68dca26e601ceff5c26571c7cb41cf4ed60d57cb2d"
"checksum mio 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "dbd91d3bfbceb13897065e97b2ef177a09a438cb33612b2d371bf568819a9313"
"checksum memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d"
"checksum mime 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e2e00e17be181010a91dbfefb01660b17311059dc8c7f48b9017677721e732bd"
"checksum mio 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "75f72a93f046f1517e3cfddc0a096eb756a2ba727d36edc8227dee769a50a9b0"
diff --git a/Cargo.toml b/Cargo.toml
index f4e6349..131e4f3 100644
index 277e149..96dd02d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -36,7 +36,7 @@ futures = "0.1.8"
@ -70,39 +85,39 @@ index f4e6349..131e4f3 100644
protobuf = "1.1"
rand = "0.3.13"
diff --git a/src/discovery.rs b/src/discovery.rs
index 3eaa5f0..6f9a4ae 100644
index fc168d5..55472f3 100644
--- a/src/discovery.rs
+++ b/src/discovery.rs
@@ -6,7 +6,7 @@ use futures::sync::mpsc;
use futures::{Future, Stream, BoxFuture, Poll, Async};
use hyper::server::{Service, NewService, Request, Response, Http};
use futures::{Future, Stream, Poll};
use hyper::server::{Service, Request, Response, Http};
use hyper::{self, Get, Post, StatusCode};
-use mdns;
+use dns_sd::DNSService;
use num_bigint::BigUint;
use rand;
use std::collections::BTreeMap;
@@ -203,7 +203,7 @@ impl NewService for Discovery {
@@ -191,7 +191,7 @@ impl Service for Discovery {
pub struct DiscoveryStream {
credentials: mpsc::UnboundedReceiver<Credentials>,
- _svc: mdns::Service,
+ _svc: DNSService,
task: Box<Future<Item=(), Error=io::Error>>,
}
@@ -213,7 +213,7 @@ pub fn discovery(handle: &Handle, config: ConnectConfig, device_id: String)
let (discovery, creds_rx) = Discovery::new(config.clone(), device_id);
let listener = TcpListener::bind(&"0.0.0.0:0".parse().unwrap(), handle)?;
- let addr = listener.local_addr()?;
+ let port = listener.local_addr().unwrap().port();
let http = Http::new();
let handle_ = handle.clone();
@@ -222,12 +222,13 @@ pub fn discovery(handle: &Handle, config: ConnectConfig, device_id: String)
Ok(())
}));
pub fn discovery(handle: &Handle, config: ConnectConfig, device_id: String)
@@ -203,7 +203,7 @@ pub fn discovery(handle: &Handle, config: ConnectConfig, device_id: String)
let http = Http::new();
http.serve_addr_handle(&"0.0.0.0:0".parse().unwrap(), &handle, move || Ok(discovery.clone())).unwrap()
};
- let addr = serve.incoming_ref().local_addr();
+ let port = serve.incoming_ref().local_addr().port();
let server_future = {
let handle = handle.clone();
serve.for_each(move |connection| {
@@ -214,12 +214,13 @@ pub fn discovery(handle: &Handle, config: ConnectConfig, device_id: String)
};
handle.spawn(server_future);
- let responder = mdns::Responder::spawn(&handle)?;
- let svc = responder.register(
@ -121,10 +136,10 @@ index 3eaa5f0..6f9a4ae 100644
Ok(DiscoveryStream {
credentials: creds_rx,
diff --git a/src/lib.rs b/src/lib.rs
index b9c920e..dfaf5a2 100644
index 53257a8..0f8910a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -13,7 +13,7 @@ extern crate base64;
@@ -10,7 +10,7 @@ extern crate base64;
extern crate crypto;
extern crate futures;
extern crate hyper;

View File

@ -1,6 +1,6 @@
From a20f55c268bf44d6923be4cad6c6fdfecfc5dd8a Mon Sep 17 00:00:00 2001
From 2f4e4d6efa8b80a5bcfda697b5353d4edaf99e20 Mon Sep 17 00:00:00 2001
From: awiouy <awiouy@gmail.com>
Date: Tue, 12 Sep 2017 09:37:53 +0200
Date: Fri, 26 Jan 2018 21:02:29 +0100
Subject: [PATCH] kodi hooks
---
@ -8,7 +8,7 @@ Subject: [PATCH] kodi hooks
1 file changed, 17 insertions(+), 8 deletions(-)
diff --git a/src/player.rs b/src/player.rs
index 29380e3..44b9a24 100644
index 94df2e1..6595220 100644
--- a/src/player.rs
+++ b/src/player.rs
@@ -1,6 +1,7 @@
@ -17,9 +17,9 @@ index 29380e3..44b9a24 100644
use std::borrow::Cow;
+use std::env;
use std::mem;
use std::sync::mpsc::{RecvError, TryRecvError};
use std::sync::mpsc::{RecvError, TryRecvError, RecvTimeoutError};
use std::thread;
@@ -13,7 +14,7 @@ use core::util::{self, SpotifyId, Subfile};
@@ -14,7 +15,7 @@ use core::util::{self, SpotifyId, Subfile};
use audio_backend::Sink;
use audio::{AudioFile, AudioDecrypt};
use audio::{VorbisDecoder, VorbisPacket};
@ -27,17 +27,17 @@ index 29380e3..44b9a24 100644
+use metadata::{Artist, FileFormat, Track, Metadata};
use mixer::AudioFilter;
#[derive(Clone)]
@@ -215,7 +216,7 @@ impl PlayerInternal {
pub struct Player {
@@ -272,7 +273,7 @@ impl PlayerInternal {
None => {
self.sink.stop().unwrap();
self.stop_sink();
- self.run_onstop();
+ info!("onstop 1");
let old_state = mem::replace(&mut self.state, PlayerState::Stopped);
old_state.signal_end_of_track();
@@ -227,6 +228,12 @@ impl PlayerInternal {
@@ -284,6 +285,12 @@ impl PlayerInternal {
debug!("command={:?}", cmd);
match cmd {
PlayerCommand::Load(track_id, play, position, end_of_track) => {
@ -48,18 +48,18 @@ index 29380e3..44b9a24 100644
+ self.run_onstart();
+
if self.state.is_playing() {
self.sink.stop().unwrap();
self.stop_sink_if_running();
}
@@ -235,7 +242,7 @@ impl PlayerInternal {
@@ -292,7 +299,7 @@ impl PlayerInternal {
Some(decoder) => {
if play {
if !self.state.is_playing() {
- self.run_onstart();
+ info!("onstart 1");
}
self.sink.start().unwrap();
self.start_sink();
@@ -245,7 +252,7 @@ impl PlayerInternal {
@@ -302,7 +309,7 @@ impl PlayerInternal {
};
} else {
if self.state.is_playing() {
@ -68,7 +68,7 @@ index 29380e3..44b9a24 100644
}
self.state = PlayerState::Paused {
@@ -258,7 +265,7 @@ impl PlayerInternal {
@@ -315,7 +322,7 @@ impl PlayerInternal {
None => {
end_of_track.complete(());
if self.state.is_playing() {
@ -77,19 +77,19 @@ index 29380e3..44b9a24 100644
}
}
}
@@ -279,7 +286,7 @@ impl PlayerInternal {
@@ -336,7 +343,7 @@ impl PlayerInternal {
if let PlayerState::Paused { .. } = self.state {
self.state.paused_to_playing();
- self.run_onstart();
+ info!("onstart 2");
self.sink.start().unwrap();
self.start_sink();
} else {
warn!("Player::play called from invalid state");
@@ -291,17 +298,19 @@ impl PlayerInternal {
@@ -348,17 +355,19 @@ impl PlayerInternal {
self.state.playing_to_paused();
self.sink.stop().unwrap();
self.stop_sink_if_running();
- self.run_onstop();
+ info!("onstop 4");
} else {
@ -102,7 +102,7 @@ index 29380e3..44b9a24 100644
+
match self.state {
PlayerState::Playing { .. } => {
self.sink.stop().unwrap();
self.stop_sink_if_running();
- self.run_onstop();
+ info!("onstop 5");
self.state = PlayerState::Stopped;

View File

@ -1,6 +1,6 @@
From e9bb269936ea26b1c0c698b8d05aaf68e2e79bcc Mon Sep 17 00:00:00 2001
From 3e51e00e717f80f7c23ed112e6ab42d1a61cb7a9 Mon Sep 17 00:00:00 2001
From: awiouy <awiouy@gmail.com>
Date: Tue, 12 Sep 2017 09:41:14 +0200
Date: Fri, 26 Jan 2018 21:07:48 +0100
Subject: [PATCH] use librespot_sink pulseadio sink
---
@ -8,21 +8,22 @@ Subject: [PATCH] use librespot_sink pulseadio sink
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/audio_backend/pulseaudio.rs b/src/audio_backend/pulseaudio.rs
index 3b9a09b..ce78062 100644
index e9f0039..d5c2bbb 100644
--- a/src/audio_backend/pulseaudio.rs
+++ b/src/audio_backend/pulseaudio.rs
@@ -23,12 +23,13 @@ impl Open for PulseAudioSink {
let name = CString::new("librespot").unwrap();
let description = CString::new("A spoty client library").unwrap();
+ let sink = CString::new("librespot_sink").unwrap();
@@ -75,13 +75,14 @@ impl Open for PulseAudioSink {
let s = unsafe {
pa_simple_new(null(), // Use the default server.
name.as_ptr(), // Our application's name.
PA_STREAM_PLAYBACK,
- null(), // Use the default device.
+ sink.as_ptr(), // Our sink.
description.as_ptr(), // Description of our stream.
&ss, // Our sample format.
null(), // Use default channel map
impl Sink for PulseAudioSink {
fn start(&mut self) -> io::Result<()> {
+ let sink = CString::new("librespot_sink").unwrap();
if self.s == null_mut() {
self.s = call_pulseaudio(
|err| unsafe {
pa_simple_new(null(), // Use the default server.
self.name.as_ptr(), // Our application's name.
PA_STREAM_PLAYBACK,
- null(), // Use the default device.
+ sink.as_ptr(), // Our sink.
self.desc.as_ptr(), // desc of our stream.
&self.ss, // Our sample format.
null(), // Use default channel map

View File

@ -28,7 +28,7 @@ while True:
if len(pcms) == 0:
dialog.ok(xbmcaddon.Addon().getAddonInfo('name'), strings(30210))
break
pcmx = dialog.select(strings(30112), pcms)
pcmx = dialog.select(strings(30115), pcms)
if pcmx == -1:
break
pcm = pcms[pcmx]

View File

@ -86,6 +86,7 @@ oe_setup_addon service.librespot
LIBRESPOT="librespot --cache \"$ADDON_HOME/cache\" \
--disable-audio-cache \
--initial-volume "$ls_v" \
--name \"Librespot@$HOSTNAME\" \
--onstart librespot.onstart \
--onstop librespot.onstop"

View File

@ -103,6 +103,7 @@ class Player(xbmc.Player):
if not self.isPlaying() and xbmcaddon.Addon().getSetting('ls_O') == 'Kodi':
suspendSink('0')
listitem = xbmcgui.ListItem(xbmcaddon.Addon().getAddonInfo('name'))
listitem.addStreamInfo('audio',{'codec': 'mp3'})
listitem.setArt({'thumb': xbmcaddon.Addon().getAddonInfo('icon')})
super(Player, self).play(self.ITEM, listitem)
del listitem

View File

@ -8,66 +8,78 @@ msgid "Librespot"
msgstr ""
msgctxt "#30101"
msgid "Bit rate"
msgid "Initial volume"
msgstr ""
msgctxt "#30102"
msgid "-"
msgid "Bit rate"
msgstr ""
msgctxt "#30103"
msgid "96"
msgid "-"
msgstr ""
msgctxt "#30104"
msgid "160"
msgid "96"
msgstr ""
msgctxt "#30105"
msgid "320"
msgid "160"
msgstr ""
msgctxt "#30106"
msgid "Output"
msgid "320"
msgstr ""
msgctxt "#30107"
msgid "Username"
msgid "Output"
msgstr ""
msgctxt "#30108"
msgid "Password"
msgstr ""
msgctxt "#30109"
msgid "Discovery mode (set username and password to disable)"
msgstr ""
msgctxt "#30110"
msgid "ALSA"
msgstr ""
msgctxt "#30109"
msgid "Kodi"
msgstr ""
msgctxt "#30110"
msgid "Username"
msgstr ""
msgctxt "#30111"
msgid "Configuration wizard"
msgid "Password"
msgstr ""
msgctxt "#30112"
msgid "Playback device"
msgid "Discovery mode (set username and password to disable)"
msgstr ""
msgctxt "#30113"
msgid "Playback route"
msgid "ALSA"
msgstr ""
msgctxt "#30114"
msgid "auto detect"
msgid "Configuration wizard"
msgstr ""
msgctxt "#30115"
msgid "headphone jack"
msgid "Playback device"
msgstr ""
msgctxt "#30116"
msgid "Playback route"
msgstr ""
msgctxt "#30117"
msgid "auto detect"
msgstr ""
msgctxt "#30118"
msgid "headphone jack"
msgstr ""
msgctxt "#30119"
msgid "HDMI"
msgstr ""

View File

@ -1,17 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<settings>
<category label="30100" >
<setting label="30101" type="labelenum" id="ls_b" lvalues="30102|30103|30104|30105" />
<setting label="30106" type="labelenum" id="ls_O" lvalues="ALSA|Kodi" />
<setting label="30107" type="text" id="ls_u" />
<setting label="30108" type="text" id="ls_p" option="hidden" visible="!eq(-1,)" />
<setting label="30109" type="bool" id="ls_d" default="true" enable="false" visible="eq(-1,)|eq(-2,)" />
<setting label="30109" type="bool" id="ls_D" default="false" enable="false" visible="!eq(-2,)+!eq(-3,)" />
<setting label="30101" type="slider" id="ls_v" default="50" range="0,1,100" option="int" />
<setting label="30102" type="labelenum" id="ls_b" lvalues="30103|30104|30105|30106" />
<setting label="30107" type="labelenum" id="ls_O" lvalues="30108|30109" />
<setting label="30110" type="text" id="ls_u" />
<setting label="30111" type="text" id="ls_p" option="hidden" visible="!eq(-1,)" />
<setting label="30112" type="bool" id="ls_d" default="true" enable="false" visible="eq(-1,)|eq(-2,)" />
<setting label="30112" type="bool" id="ls_D" default="false" enable="false" visible="!eq(-2,)+!eq(-3,)" />
</category>
<category label="30110" >
<setting label="30106" type="labelenum" id="ls_O" lvalues="ALSA|Kodi" visible="false" />
<setting label="30111" type="action" action="RunAddon(service.librespot)" enable="eq(-1,0)" />
<setting label="30112" type="text" id="ls_o" default="" enable="eq(-2,0)" />
<setting label="30113" type="enum" id="pcm_3" lvalues="30114|30115|30116" enable="eq(-3,0)" visible="eq(-1,default:CARD=ALSA)|eq(-1,sysdefault:CARD=ALSA)" />
<category label="30113" >
<setting label="30107" type="labelenum" id="ls_O" lvalues="30108|30109" visible="false" />
<setting label="30114" type="action" action="RunAddon(service.librespot)" enable="eq(-1,0)" />
<setting label="30115" type="text" id="ls_o" default="" enable="eq(-2,0)" />
<setting label="30116" type="enum" id="pcm_3" lvalues="30117|30118|30119" enable="eq(-3,0)" visible="eq(-1,default:CARD=ALSA)|eq(-1,sysdefault:CARD=ALSA)" />
</category>
</settings>

View File

@ -0,0 +1,11 @@
<settings>
<setting id="ls_D" value="false" />
<setting id="ls_O" value="ALSA" />
<setting id="ls_b" value="320" />
<setting id="ls_d" value="true" />
<setting id="ls_o" value="" />
<setting id="ls_p" value="" />
<setting id="ls_u" value="" />
<setting id="ls_v" value="50" />
<setting id="pcm_3" value="0" />
</settings>