před 2 hodin(y)
Přepnutí výstupu zvuku od remote control (dálkového ovládání)
Na Kodi Omega /LibreElec /Raspberry Pi 3B vyvstala potřeba přepínat výstup zvuku buď do HDMI (TV), nebo do USB zvukové karty (na stereo analog): Jediným tlačítkem na dálkovém ovládání k TV (přes HDMI-CEC). Nikoli vstupem do konfiguračního menu.
RPi 3B má samo 3,5mm Jack, zvuk z něj je ale méně kvalitní. Tento právě slouží na audio-doplňky.
Přepínání už řešilo téma @JiRo: Vychytávky https://www.xbmc-kodi.cz/prispevek-vychy...2#pid25832
Potřeboval jsem k přepnutí používat jediné tlačitko a také udělat jen jednoduché manipulace ze Spravce souborů Kodi přidáním souborů do uživatelského "Adresář profilu". (Nebo kopírovat z počítače s povolenou Sambou.)
Postupně jsem s ChatGPT stvořil soubor PY, a do adresáře "keymaps" soubor XML.
Je potřeba znát přesný a úplný název, který si Kodi po volbě v menu zapisuje do guisettings.xml
(i ten je v "Adresář profilu" ), za tagem obsahujícím id="audiooutput.audiodevice"
Potom vyřešit, že vyjmutá USB zvuková karta nezpůsobí zmatek v logice přepnutí.
Budou se objevovat notifikace: "Výstup: HDMI /USB audio jack 3,5 mm /USB audio nedostupné",
případně při jiné chybě: "Nelze zjistit aktuální výstup /Přepnutí zvuku se nezdařilo"
::
V současnosti verze Kodi/LE jsou 21.3/12.2.1. Doplněk keymaps v.1.4.0 má povoleno v konfiguraci long press a multiple keymap files.
Soubory PY a XML mají formát textu.
Soubor v keymaps jsem podle zvoleného tlačítka "8" pojmenoval: keynum8.xml
Soubor v "Adresář profilu" (úplná cesta je /storage/.kodi/userdata/) se bude jmenovat: switch_audio.py
Obsah keynum8.xml pro přijatý kód 199 je:
<keymap><global><keyboard><key id="199">runscript(/storage/.kodi/userdata/switch_audio.py)</key></keyboard></global></keymap>
Obsah switch_audio.py je:
Podrobný rozbor položek ve switch_audio.py v PDF:
switch_audio_rozbor.pdf (Velikost: 86,1 KB / Stažení: 1)
Na Kodi Omega /LibreElec /Raspberry Pi 3B vyvstala potřeba přepínat výstup zvuku buď do HDMI (TV), nebo do USB zvukové karty (na stereo analog): Jediným tlačítkem na dálkovém ovládání k TV (přes HDMI-CEC). Nikoli vstupem do konfiguračního menu.
RPi 3B má samo 3,5mm Jack, zvuk z něj je ale méně kvalitní. Tento právě slouží na audio-doplňky.
Přepínání už řešilo téma @JiRo: Vychytávky https://www.xbmc-kodi.cz/prispevek-vychy...2#pid25832
Potřeboval jsem k přepnutí používat jediné tlačitko a také udělat jen jednoduché manipulace ze Spravce souborů Kodi přidáním souborů do uživatelského "Adresář profilu". (Nebo kopírovat z počítače s povolenou Sambou.)
Postupně jsem s ChatGPT stvořil soubor PY, a do adresáře "keymaps" soubor XML.
Je potřeba znát přesný a úplný název, který si Kodi po volbě v menu zapisuje do guisettings.xml
(i ten je v "Adresář profilu" ), za tagem obsahujícím id="audiooutput.audiodevice"
Potom vyřešit, že vyjmutá USB zvuková karta nezpůsobí zmatek v logice přepnutí.
Budou se objevovat notifikace: "Výstup: HDMI /USB audio jack 3,5 mm /USB audio nedostupné",
případně při jiné chybě: "Nelze zjistit aktuální výstup /Přepnutí zvuku se nezdařilo"
::
V současnosti verze Kodi/LE jsou 21.3/12.2.1. Doplněk keymaps v.1.4.0 má povoleno v konfiguraci long press a multiple keymap files.
Soubory PY a XML mají formát textu.
Soubor v keymaps jsem podle zvoleného tlačítka "8" pojmenoval: keynum8.xml
Soubor v "Adresář profilu" (úplná cesta je /storage/.kodi/userdata/) se bude jmenovat: switch_audio.py
Obsah keynum8.xml pro přijatý kód 199 je:
<keymap><global><keyboard><key id="199">runscript(/storage/.kodi/userdata/switch_audio.py)</key></keyboard></global></keymap>
Obsah switch_audio.py je:
Kód:
# -*- coding: utf-8 -*-
# LibreELEC / Kodi Omega: přepínání USB zvukové karty <-> HDMI
# Spouští se přes keymaps xml, tlačítkem ovladače mapovaným na tento skript
# 1
import json
import xbmc
import xbmcgui
SETTING = "audiooutput.audiodevice"
USB_DEVICE = "ALSA:@:CARD=Device,DEV=0|USB Advanced Audio Device"
HDMI_DEVICE = "ALSA:hdmi:CARD=vc4hdmi,DEV=0|vc4-hdmi (vc4hdmi)"
USB_CARD_NAME = "USB Advanced Audio Device"
# 2
def rpc(method, params=None):
request = {"jsonrpc": "2.0", "method": method, "id": 1}
if params is not None:
request["params"] = params
raw = xbmc.executeJSONRPC(json.dumps(request))
try:
return json.loads(raw)
except Exception:
return {"error": {"message": "Neplatná odpověď JSON-RPC"}}
# 3
def notify(message):
xbmcgui.Dialog().notification(
"Zvukový výstup",
message,
xbmcgui.NOTIFICATION_INFO,
2500
)
# 4
def usb_card_available():
try:
with open("/proc/asound/cards", "r") as cards_file:
return USB_CARD_NAME.lower() in cards_file.read().lower()
except (IOError, OSError):
return False
# 5
current_response = rpc(
"Settings.GetSettingValue",
{"setting": SETTING}
)
if "error" in current_response or "result" not in current_response:
notify("Nelze zjistit aktuální výstup")
else:
current = str(current_response["result"].get("value", ""))
usb_available = usb_card_available()
# 6
if not usb_available:
target = HDMI_DEVICE
fallback_message = True
elif current.startswith("ALSA:hdmi:CARD=vc4hdmi,DEV=0"):
target = USB_DEVICE
fallback_message = False
else:
target = HDMI_DEVICE
fallback_message = False
# 7
set_response = rpc(
"Settings.SetSettingValue",
{
"setting": SETTING,
"value": target
}
)
# 8
if "error" in set_response or set_response.get("result") is not True:
notify("Přepnutí zvuku se nezdařilo")
elif fallback_message:
notify("USB audio nedostupné")
elif target == USB_DEVICE:
notify("Výstup: USB audio jack 3,5 mm")
else:
notify("Výstup: HDMI")Podrobný rozbor položek ve switch_audio.py v PDF:
switch_audio_rozbor.pdf (Velikost: 86,1 KB / Stažení: 1)
