Note de ce sujet :
  • Moyenne : 5 (2 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
DirettaRendererUPnP
@ Dominique,

Merci, et avec plaisir pour ton aide. 

Quel est le tarif de la version payante ?

https://minimworld.com/purchase-license.html

35 euros ?

Sinon, une remarque, un avantage de LMS :

Lorsque l'on sélectione un album, on accède au label et ça pour moi, c'est trés interessant. 

Ca n'existe pas avec Roon ou JPLAY, me semble-t-il, car par dela les artistes, les albums, certaines signatures de labels en terme de qualité d'enregistrement ou de catalogue sont très interessantes et  permettent une entrée et des découvertes  significatives.

J'explore JPLAY (Ipad) en comparaison immédiate avec LMS (ordinateur), c'est l'avantage, oui JPLAY avec slim2UPnP minimal, c'est fort !

Merci Dominique pour tout ce que tu fais, continue à m'envoyer tes nouvelles versions, sous Fedora 43 minimal (ça évite les problèmes des autres intégrations),  je teste immédiatement et t'en fais le retour. 

Bien à toi
Le Dom Slim2UPnP Roon/LMS/JPLAY
Target GentooPlayer C19B horloge FranckLeRouge UpTone Audio JS-4
Audiomat Maestro 3 référence
Ampli Lampes Alexandre Okhotnikoff - ECC88 Miniwatt Dario - 5751 RCA - 6N7 RCA - Svetlana 6550 B2
Enceintes Klipschorn 60th Anniversary




Tu as plein de choses à découvrir avec JPLAY iOS, tu peux avoir accès aux labels sans souci. Je pense que tu as vu comment avoir l’écran du morceau en train d’être lu, avec la pochette affichée en grand, tu fais glisser cet écran vers le haut et tu as les credits dont le label, tu tapes sur label et les albums dispos dans le label apparaîtront.
Pareil pour compositeur, artiste etc….

D’autre part dans les réglages du renderer dans JPLAY iOS pense à cocher gapless et à temps de mise à jour, tu mets 12000 au lieu de 1 ou 10, ça bavardera encore moins entre JPLAY iOS et DirettaRendererUPnP.
DirettaRendererUPnP
Soutenez ce projet
Si vous trouvez ce moteur de rendu utile, vous pouvez soutenir le développement :
Buy Me a Coffee at ko-fi.com
Votre soutien m’aidera à continuer ce projet, qui représente pour moi un certain coût en temps et en argent. Merci pour votre compréhension.
Merci Dominique,

je m'interrogeais sur ce paramètre temps de mise à jour... j'ai suivi ta recommandation = 12000
gapless, oui, c'etait fait.

(04-05-2026, 09:43 PM)Le dom a écrit : Tu as plein de choses à découvrir avec JPLAY iOS, tu peux avoir accès aux labels sans souci. Je pense que tu as vu comment avoir l’écran du morceau en train d’être lu, avec la pochette affichée en grand, tu fais glisser cet écran vers le haut et tu as les credits dont le label, tu tapes sur label et les albums dispos dans le label apparaîtront.
Pareil pour compositeur, artiste etc….

En version minimale gratuite ça ne fonctionne pas, encore une bonne raison de passer à la version payante.

Album qui n'existe pas dans Qobuz et qui est un album test pour moi, Roy Poulssen bruno Chevillon - Une certaine forme de politesse,  par ailleurs j'adore le contre bassite Bruno Chevillon

J'ai un problème à résoudre, pour cet album, lecture de l'album en AIFF, time line JPLay défile mais pas de son

c'est également vrai sous LMS, j'ai deux versions de l'album 44/16 AIFF et 44/16 FLAC le second joue dans LMS le premier ne joue pas, une modification à faire dans un nano DirettaRenderer ou slim2Upnp ?

 Le FLAC n'apparait pas dans JPLAY, c'est un autre problème
Le Dom Slim2UPnP Roon/LMS/JPLAY
Target GentooPlayer C19B horloge FranckLeRouge UpTone Audio JS-4
Audiomat Maestro 3 référence
Ampli Lampes Alexandre Okhotnikoff - ECC88 Miniwatt Dario - 5751 RCA - 6N7 RCA - Svetlana 6550 B2
Enceintes Klipschorn 60th Anniversary




DirettaRendererUPnP v2.1.10 est disponible:

Alignement de la configuration pour les intégrations aval.

Les noms des variables de configuration sont désormais alignés avec la ligne de commande — RENDERER_NAME → NAME, NETWORK_INTERFACE → INTERFACE, MTU_OVERRIDE → MTU. Cela permet un mapping automatique simple CLÉ → --clé pour GentooPlayer et les autres distributions. Les anciens noms restent supportés par rétrocompatibilité.

@Bluevelevet:

Sans log en mode verbose je ne peux rien faire.
Peux-tu m'envoyer le log en mode verbose correspondant à ton problème, s'il te plait?
DirettaRendererUPnP
Soutenez ce projet
Si vous trouvez ce moteur de rendu utile, vous pouvez soutenir le développement :
Buy Me a Coffee at ko-fi.com
Votre soutien m’aidera à continuer ce projet, qui représente pour moi un certain coût en temps et en argent. Merci pour votre compréhension.
@Dominique,

Rapport du problème avec les fichiers AIFF :

Pendant cette séquence, je lis d’abord un FLAC qui fonctionne puis un AIFF qui pose problème via LMS/slim2upnp vers DirettaRenderer. Le journal montre que la lecture FLAC est décodée et jouée normalement (ouverture du flux 
audio.flac
, détection FLAC 44.1/16/2, resampler OK, DirettaSync OPEN COMPLETE). Pour l’AIFF, Diretta reçoit bien l’URL 
http://192.168.1.32:34977/audio.aiff
 (SetAVTransportURI et Play, ouverture de la piste par AudioEngine/AudioDecoder), mais FFmpeg renvoie à plusieurs reprises : 
Failed to open input: http://192.168.1.32:34977/audio.aiff
 suivi de 
FFmpeg error (-1094995529): Invalid data found when processing input
. L’AudioEngine échoue donc systématiquement à ouvrir la piste (
Failed to open track

AudioEngine::play() failed
), tandis que côté LMS la timeline avance un peu, recule, puis répète ce comportement en boucle sans jamais produire de son, ce qui pointe vers un problème de décodage FFmpeg du flux AIFF servi par LMS/slim2upnp plutôt qu’un souci de transport Diretta.

Code :
sudo journalctl -u diretta-renderer.service -n 200

avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:05:50.460] [AudioEngine] Track opened: 44100Hz/16bit/2ch
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:05:50.460] [DirettaRenderer] Track 1: flac 44100Hz/16bit/2ch
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:05:50.462] [Audio Thread] Format: 44100Hz PCM, samples/call=2048
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:05:50.462] [AudioDecoder] canBypass: NO (compressed format requires decoding)
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:05:50.462] [AudioDecoder] Resampler: 44100Hz -> 44100Hz, 16bit (FIFO: 7526 samples)
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:05:50.462] [AudioDecoder] Pre-allocated resampler buffer: 262144 bytes
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:05:50.462] [AudioDecoder] FIFO buffering 2048 excess samples for next read
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:05:50.462] [DirettaSync] ========== OPEN ==========
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:05:50.462] [DirettaSync] Format: 44100Hz/16bit/2ch PCM
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:05:50.462] [DirettaSync]  Previous: 44100Hz/16bit/2ch PCM
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:05:50.462] [DirettaSync]  Current:  44100Hz/16bit/2ch PCM
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:05:50.462] [DirettaSync] Same format - quick resume (no setSink)
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:05:50.462] [DirettaSync] ========== OPEN COMPLETE (quick) ==========
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:08:21.673] [UPnPDevice] Action: Pause (service: urn:upnp-org:serviceId:AVTransport)
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:08:21.673] [UPnPDevice] Pause
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:08:21.673] [DirettaRenderer] Pause
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:08:21.673] [AudioEngine] Pause requested
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:08:21.673] [AudioEngine] State changed to PAUSED
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:08:21.673] [AudioEngine] Pause
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.432] [UPnPDevice] Action: Stop (service: urn:upnp-org:serviceId:AVTransport)
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.432] [UPnPDevice] Stop action received
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.432] [UPnPDevice] Changing state: PAUSED_PLAYBACK → STOPPED
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.432] [UPnPDevice] ✓ Calling onStop callback...
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.432] [DirettaRenderer] Stop
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.432] ════════════════════════════════════════
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.432] [AudioEngine] stop() called, current state = 2
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.432] [AudioEngine] State changed to STOPPED
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.432] [AudioEngine] Cleaning up decoders and state...
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.433] [AudioEngine] Full cleanup completed
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.433] [AudioEngine] Forced reopen - closing decoders to load new track
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.433] [AudioEngine] Gapless queue cleared
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.433] [AudioEngine] Current URI set
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.583] [UPnPDevice] ✓ onStop callback completed
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.583] [UPnPDevice] Creating response...
avril 06 15:10:01 DirettaRenderer diretta-renderer[848029]: [15:10:01.583] [UPnPDevice] ✓ Stop action completed

[…]

avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.623] [UPnPDevice] Action: SetAVTransportURI (service: urn:upnp-org:serviceId:AVTransport)
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.623] [UPnPDevice] SetAVTransportURI: http://192.168.1.32:34977/audio.aiff
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.623] [DirettaRenderer] SetURI: http://192.168.1.32:34977/audio.aiff
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.623] [AudioEngine] URI changed - closing decoders to load new track
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.623] [AudioEngine] Gapless queue cleared
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.623] [AudioEngine] Current URI set
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.624] [UPnPDevice] Action: Play (service: urn:upnp-org:serviceId:AVTransport)
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.624] [UPnPDevice] Play
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.624] [DirettaRenderer] Play
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.724] [AudioEngine] Play
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.724] [AudioEngine] Opening track (new or after EOF)
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.724] [AudioEngine] Opening track: http://192.168.1.32:34977/audio.aiff...
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.724] [AudioDecoder] Opening: http://192.168.1.32:34977/audio.aiff...
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.724] [AudioDecoder] Local server detected - using simple HTTP options
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.786] [AudioDecoder] Failed to open input: http://192.168.1.32:34977/audio.aiff
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.786] [AudioDecoder] FFmpeg error (-1094995529): Invalid data found when processing input
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.786] [AudioEngine] Failed to open track
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.786] [AudioEngine] Failed to open track
avril 06 15:13:03 DirettaRenderer diretta-renderer[848029]: [15:13:03.786] [DirettaRenderer] AudioEngine::play() failed
avril 06 15:13:11 DirettaRenderer diretta-renderer[848029]: [15:13:11.824] [AudioDecoder] Failed to open input: http://192.168.1.32:34977/audio.aiff
avril 06 15:13:11 DirettaRenderer diretta-renderer[848029]: [15:13:11.824] [AudioDecoder] FFmpeg error (-1094995529): Invalid data found when processing input
avril 06 15:13:11 DirettaRenderer diretta-renderer[848029]: [15:13:11.824] [AudioEngine] Failed to open track
avril 06 15:13:11 DirettaRenderer diretta-renderer[848029]: [15:13:11.824] [AudioEngine] Failed to open track
avril 06 15:13:11 DirettaRenderer diretta-renderer[848029]: [15:13:11.824] [DirettaRenderer] AudioEngine::play() failed
Le Dom Slim2UPnP Roon/LMS/JPLAY
Target GentooPlayer C19B horloge FranckLeRouge UpTone Audio JS-4
Audiomat Maestro 3 référence
Ampli Lampes Alexandre Okhotnikoff - ECC88 Miniwatt Dario - 5751 RCA - 6N7 RCA - Svetlana 6550 B2
Enceintes Klipschorn 60th Anniversary




Merci pour ce retour et le log.

Peux-tu, s'il te plait, essayer la version 2.1.11 dans la branche dev-2.1.11?
DirettaRendererUPnP
Soutenez ce projet
Si vous trouvez ce moteur de rendu utile, vous pouvez soutenir le développement :
Buy Me a Coffee at ko-fi.com
Votre soutien m’aidera à continuer ce projet, qui représente pour moi un certain coût en temps et en argent. Merci pour votre compréhension.
@Dominique,

J’ai mis à jour en 2.1.11 et refait le test avec le même AIFF via LMS/slim2upnp. 

Le problème est identique : à chaque tentative Diretta ouvre bien l’URL 
http://192.168.1.32:34977/audio.aiff 

mais AudioDecoder renvoie  Failed to open input

suivi de FFmpeg error (-1094995529): Invalid data found when processing input 

puis  AudioEngine::play() failed.

Je joins le journalctl -u diretta-renderer.service -n 200 pris pendant ces essais.

Code :
/opt/diretta-renderer-upnp/DirettaRendererUPnP --version
[19:07:13.841] ═══════════════════════════════════════════════════════
[19:07:13.841]  Diretta UPnP Renderer v2.1.11
[19:07:13.841] ═══════════════════════════════════════════════════════
[19:07:13.841] Build: x86_64 AVX2 (Apr  6 2026)
[19:07:13.841]  Diretta UPnP Renderer - Version 2.1.11
[19:07:13.841] Build: Apr  6 2026 19:03:27
[19:07:13.841] Architecture: Simplified (DirettaSync unified)

sudo journalctl -u diretta-renderer.service -n 200
[19:05:07.443] [DirettaSync] Enabled, MTU=1500
[19:05:07.950] [UPnPDevice] Created: Diretta Renderer
[19:05:07.950] [UPnPDevice] ProtocolInfo: 3281 chars, 76 formats
[19:05:08.003] ✓ UPnP initialized on 192.168.1.32:4005
[19:05:08.119] [UPnPDevice] ✓ Device is now discoverable!
[19:05:08.119] [DirettaRenderer] UPnP: http://192.168.1.32:4005
[19:05:08.119] [DirettaRenderer] Started
[19:07:47.762] [UPnPDevice] SetAVTransportURI: http://192.168.1.32:34977/audio.aiff
[19:07:47.762] [DirettaRenderer] SetURI: http://192.168.1.32:34977/audio.aiff
[19:07:47.863] [AudioEngine] Play
[19:07:47.864] [AudioEngine] Opening track: http://192.168.1.32:34977/audio.aiff...
[19:07:47.864] [AudioDecoder] Opening: http://192.168.1.32:34977/audio.aiff...
[19:07:47.864] [AudioDecoder] Local server detected - using simple HTTP options
[19:07:47.905] [AudioDecoder] Failed to open input: http://192.168.1.32:34977/audio.aiff
[19:07:47.905] [AudioDecoder] FFmpeg error (-1094995529): Invalid data found when processing input
[19:07:47.905] [AudioEngine] Failed to open track
[19:07:47.905] [DirettaRenderer] AudioEngine::play() failed

[19:08:11.595] [UPnPDevice] SetAVTransportURI: http://192.168.1.32:34977/audio.aiff
[19:08:11.697] [AudioEngine] Opening track: http://192.168.1.32:34977/audio.aiff...
[19:08:11.697] [AudioDecoder] Opening: http://192.168.1.32:34977/audio.aiff...
[19:08:11.697] [AudioDecoder] Local server detected - using simple HTTP options
[19:08:11.742] [AudioDecoder] Failed to open input: http://192.168.1.32:34977/audio.aiff
[19:08:11.742] [AudioDecoder] FFmpeg error (-1094995529): Invalid data found when processing input
[19:08:11.742] [AudioEngine] Failed to open track
[19:08:11.742] [DirettaRenderer] AudioEngine::play() failed

[19:08:18.807] [UPnPDevice] SetAVTransportURI: http://192.168.1.32:34977/audio.aiff
[19:08:18.807] [AudioEngine] Opening track: http://192.168.1.32:34977/audio.aiff...
[19:08:18.807] [AudioDecoder] Opening: http://192.168.1.32:34977/audio.aiff...
[19:08:18.833] [AudioDecoder] Failed to open input: http://192.168.1.32:34977/audio.aiff
[19:08:18.833] [AudioDecoder] FFmpeg error (-1094995529): Invalid data found when processing input
[19:08:18.833] [AudioEngine] Failed to open track
[19:08:18.833] [DirettaRenderer] AudioEngine::play() failed

[19:08:38.127] [UPnPDevice] SetAVTransportURI: http://192.168.1.32:34977/audio.aiff
[19:08:38.127] [AudioEngine] Opening track: http://192.168.1.32:34977/audio.aiff...
[19:08:38.127] [AudioDecoder] Opening: http://192.168.1.32:34977/audio.aiff...
[19:08:38.155] [AudioDecoder] Failed to open input: http://192.168.1.32:34977/audio.aiff
[19:08:38.155] [AudioDecoder] FFmpeg error (-1094995529): Invalid data found when processing input
[19:08:38.155] [AudioEngine] Failed to open track
[19:08:38.156] [DirettaRenderer] AudioEngine::play() failed

[19:08:50.794] [UPnPDevice] SetAVTransportURI: http://192.168.1.32:34977/audio.aiff
[19:08:50.895] [AudioEngine] Opening track: http://192.168.1.32:34977/audio.aiff...
[19:08:50.895] [AudioDecoder] Opening: http://192.168.1.32:34977/audio.aiff...
[19:08:50.895] [AudioDecoder] Local server detected - using simple HTTP options
[19:08:50.956] [AudioDecoder] Failed to open input: http://192.168.1.32:34977/audio.aiff
[19:08:50.956] [AudioDecoder] FFmpeg error (-1094995529): Invalid data found when processing input
[19:08:50.956] [AudioEngine] Failed to open track
[19:08:50.956] [DirettaRenderer] AudioEngine::play() failed

[19:09:51.989] [AudioDecoder] Failed to open input: http://192.168.1.32:34977/audio.aiff
[19:09:51.989] [AudioDecoder] FFmpeg error (-1094995529): Invalid data found when processing input
[19:09:51.990] [AudioEngine] Failed to open track
[19:09:51.990] [DirettaRenderer] AudioEngine::play() failed
Le Dom Slim2UPnP Roon/LMS/JPLAY
Target GentooPlayer C19B horloge FranckLeRouge UpTone Audio JS-4
Audiomat Maestro 3 référence
Ampli Lampes Alexandre Okhotnikoff - ECC88 Miniwatt Dario - 5751 RCA - 6N7 RCA - Svetlana 6550 B2
Enceintes Klipschorn 60th Anniversary




Bonsoir Dominique et @bluevelvet, je lis avec bonheur vos échanges à propos de slim2upnp,que je viens de tester. Fonctionne-t-il avec jplay car je ne le vois pas comme platine disponible, lms oui. Merci.
LMS sur PC serveur.
DirettaRenderer+Slim2diretta sur Pc host.
Gentooplayer+Diretta Target sur Rpi5+alim Shanti.
Allo Digione Signature vers dac Fostex Ah8pe
Ampli Marantz model 30.
Cabasse Murano Alto.
Bonsoir Alaindeloin,
Non il ne fonctionne pas avec JPLAY iOS qui n’a ps besoin d’un bridge slimproto UPnP. Slim2UPnp est une alternative à squeeze2UPnP (LMS-UPnP bridge) de Philippe 44 qui prend en charge le DSD. Il est fait pour fonctionner avec LMS ou Roon en mode squeezebox.
DirettaRendererUPnP
Soutenez ce projet
Si vous trouvez ce moteur de rendu utile, vous pouvez soutenir le développement :
Buy Me a Coffee at ko-fi.com
Votre soutien m’aidera à continuer ce projet, qui représente pour moi un certain coût en temps et en argent. Merci pour votre compréhension.
@Alaindeloin,

(Il y a 3 heures)Alaindeloin a écrit : Bonsoir Dominique et @bluevelvet, je lis avec bonheur vos échanges à propos de slim2upnp,que je viens de tester. Fonctionne-t-il avec jplay car je ne le vois pas comme platine disponible, lms oui. Merci.

Tu as une configuration DirettaRenderer + slim2UPnP, bien venu au club !

JPLAY verra sur un Ipad/Iphone ton DirettaRenderer

[Image: a1bc0ad7-9e67-401d-91b1-161d3b61f692.jpg]
alpha clavier
Le Dom Slim2UPnP Roon/LMS/JPLAY
Target GentooPlayer C19B horloge FranckLeRouge UpTone Audio JS-4
Audiomat Maestro 3 référence
Ampli Lampes Alexandre Okhotnikoff - ECC88 Miniwatt Dario - 5751 RCA - 6N7 RCA - Svetlana 6550 B2
Enceintes Klipschorn 60th Anniversary






Atteindre :


Utilisateur(s) parcourant ce sujet : Lacejambe, 4 visiteur(s)