Code below, thanks to raiguard for getting me started.

Code: Select all

```
[Rainmeter]
Update=1000
OnRefreshAction=[!CommandMeasure MeasureActionTimer "Stop 1"][!CommandMeasure MeasureActionTimer "Stop 2"][!SetVariable titleMarquee1 0][!SetVariable artistMarquee1 0][!UpdateMeasure MeasureTitleMarqueeOffset][!UpdateMeasure MeasureArtistMarqueeOffset]
AccurateText=1
; Setup ------------------------------------------------------------------------------
[Variables]
width=150
playername=Spotify
spacing=75
; Marquee settings
animationSpeed=32
marqueeWait=1500
; Dynamic variables - do not change
titleMarquee1=0
titleMarquee2=[MeasureTitleMarqueeOffset:]
artistMarquee1=0
artistMarquee2=[MeasureArtistMarqueeOffset:]
[StyleText]
FontFace=Calibri
FontColor=230,230,230
FontSize=15
FontWeight=600
X=0
Y=1R
Antialias=1
DynamicVariables=1
; Measures ---------------------------------------------------------------------------
[MeasureTitle]
Measure=NowPlaying
PlayerName=#playername#
PlayerType=Title
[MeasureArtist]
Measure=NowPlaying
PlayerName=#playername#
PlayerType=Artist
[MeasureTitleMarqueeOffset]
Measure=Calc
Formula=([MeterTitle1:W]+#spacing#)
DynamicVariables=1
IfConditionMode=1
IfCondition=([MeterTitle1:W]<#width#)
IfTrueAction=[!SetOption #CURRENTSECTION# Formula 0][!SetOption MeterTitle2 Text " "][!CommandMeasure MeasureActionTimer "Stop 1"][!SetVariable titleMarquee1 0]
IfFalseAction=[!SetOption #CURRENTSECTION# Formula ([MeterTitle1:W]+50)][!SetOption MeterTitle2 Text "%1"][!CommandMeasure MeasureActionTimer "Execute 1"]
[MeasureArtistMarqueeOffset]
Measure=Calc
Formula=([MeterArtist1:W]+#spacing#)
DynamicVariables=1
IfConditionMode=1
IfCondition=([MeterArtist1:W]<#width#)
IfTrueAction=[!SetOption #CURRENTSECTION# Formula 0][!SetOption MeterArtist2 Text " "][!CommandMeasure MeasureActionTimer "Stop 2"]
IfFalseAction=[!SetOption #CURRENTSECTION# Formula ([MeterArtist1:W]+50)][!SetOption MeterArtist2 Text "%1"][!CommandMeasure MeasureActionTimer "Execute 2"]
; Formatting Functions ---------------------------------------------------------------
[MeasureActionTimer]
Measure=Plugin
Plugin=ActionTimer
; Marquee 1
ActionList1=Repeat Move1,#animationSpeed#,[MeasureTitleMarqueeOffset:] | Wait #marqueeWait# | Reset1 | DoOver1
Reset1=[!SetVariable titleMarquee1 0][!SetVariable titleMarquee2 [MeasureTitleMarqueeOffset:]][!UpdateMeasure MeasureActionTimer][!UpdateMeter MeterTitle1][!UpdateMeter MeterTitle2][!Redraw]
Move1=[!SetVariable titleMarquee1 "(#titleMarquee1# - 1)"][!SetVariable titleMarquee2 "(#titleMarquee2# - 1)"][!UpdateMeasure MeasureActionTimer][!UpdateMeter MeterTitle1][!UpdateMeter MeterTitle2][!Redraw]
DoOver1=[!CommandMeasure MeasureActionTimer "Execute 1"]
; Marquee 2
ActionList2=Repeat Move2,#animationSpeed#,[MeasureArtistMarqueeOffset:] | Reset2 | DoOver2
Reset2=[!SetVariable artistMarquee1 0][!SetVariable artistMarquee2 [MeasureArtistMarqueeOffset:]][!UpdateMeasure MeasureActionTimer][!UpdateMeter MeterArtist1][!UpdateMeter MeterArtist2][!Redraw]
Move2=[!SetVariable artistMarquee1 "(#artistMarquee1# - 1)"][!SetVariable artistMarquee2 "(#artistMarquee2#-1)"][!UpdateMeasure MeasureActionTimer][!UpdateMeter MeterArtist1][!UpdateMeter MeterArtist2][!Redraw]
DoOver2=[!CommandMeasure MeasureActionTimer "Execute 2"]
DynamicVariables=1
[TitleContainer]
Meter=Image
SolidColor=255,255,255,255
X=0
Y=0
W=#width#
H=25
[ArtistContainer]
Meter=Image
SolidColor=255,255,255,255
X=#width#
Y=0
W=#width#
H=25
; Meters ---------------------------------------------------------------------------
[MeterTitle1]
Meter=String
MeasureName=MeasureTitle
Container=TitleContainer
MeterStyle=StyleText
X=#titleMarquee1#
Y=0
text=%1
OnChangeAction=!Refresh
[MeterTitle2]
Meter=String
MeasureName=MeasureTitle
Container=TitleContainer
MeterStyle=StyleText
X=#titleMarquee2#
Y=0
text=%1
[MeterArtist1]
Meter=String
MeasureName=MeasureArtist
Container=ArtistContainer
MeterStyle=StyleText
X=#artistMarquee1#
Y=0
text=%1
[MeterArtist2]
Meter=String
MeasureName=MeasureArtist
Container=ArtistContainer
MeterStyle=StyleText
X=#artistMarquee2#
Y=0
text=%1
```