ItsJustRyan wrote: ↑March 8th, 2023, 4:55 pm
Just made an insane discovery: Hardware acceleration. Offload the spinning stuff and other graphics to the GPU, and bam never surpass 3% CPU and rarely 4% GPU.

Good point!

ItsJustRyan wrote: ↑March 8th, 2023, 4:55 pm
Still some of my previous questions still stand

Which questions stand? If the one related to the UpdateDividers, here is a workaround: I rewrote a few things in the last posted code, see below the result. Note that:

- I added a DefaultUpdateDivider=50 option beside Update=20 in the [Rainmeter] section. With this, you get all measures and meters updated once per second, unless there is something else explicitly written on the measure or meter.
- I added an UpdateDivider=1 option to all measures and meter which need this ([GetMusicPlayerStatus], [MeasureProgress], [MeasurePosition], [MeasureRotate], [MeasureSinAngle], [MeasureNegSinAngle], [MeasureCosAngle], [MeasureTXCover], [MeasureTYCover], [MeterSongLength], [CoverRotate], [VinylRotate] and [MeterRoundProgBar]). This option ensures a proper update of those sections, while all ones not having this option, are updated once per second (due to the Update x DefaultUpdateDivider value).
- There were more NowPlaying measures, which had not proper structure: some have been written into the proper parent - child strucure, while many others were parent measures (more of them). Now there is one single parent measure ([GetMusicPlayerStatus], which has the PlayerName=AIMP option) and all others are child measures (these have a PlayerName=[GetMusicPlayerStatus], related to the parent measure).
- Even if a while ago, NowPlaying has been a plugin, in meantime it has been converted to an internal measure. The below code follows this: all NowPlaying plugin measures have been rewritten as NowPlaying measures (by replacing the Measure=Plugin and Plugin=NowPlaying or Plugin=NowPlaying.dll option pairs by Measure=NowPlaying).
- I made a few other minor updates of the code. For instance I removed some parenthesis from options which didn't really need it, or rewrote the RotationAngle=(6.28*1) option of the [MeterRoundProgBar] and [AIMPVol] meters as RotationAngle=(2*PI). And so on...

So, try please the bellow code and let me know if it helped at least a little bit:

Code: Select all

```
[Rainmeter]
Update=20
DefaultUpdateDivider=50
;40
[Variables]
RotX=405
;450
RotY=375
;420
RotW=290
;200
RotH=290
;200
[GetMusicPlayerStatus]
Measure=NowPlaying
PlayerName=AIMP
PlayerType=STATUS
UpdateDivider=1
[GetMusicPlayerState]
Measure=NowPlaying
PlayerName=[GetMusicPlayerStatus]
PlayerType=STATE
[GetSongCover]
Measure=NowPlaying
PlayerName=[GetMusicPlayerStatus]
PlayerType=Cover
[MeasureSongName]
Measure=NowPlaying
PlayerName=[GetMusicPlayerStatus]
PlayerType=Title
[MeasureSongArtist]
Measure=NowPlaying
PlayerName=[GetMusicPlayerStatus]
PlayerType=Artist
[MeasureProgress]
Measure=NowPlaying
PlayerName=[GetMusicPlayerStatus]
PlayerType=PROGRESS
UpdateDivider=1
[MeasurePosition]
Measure=NowPlaying
PlayerName=[GetMusicPlayerStatus]
PlayerType=POSITION
UpdateDivider=1
[MeasureDuration]
Measure=NowPlaying
PlayerName=[GetMusicPlayerStatus]
PlayerType=DURATION
[mVolume]
Measure=NowPlaying
PlayerName=[GetMusicPlayerStatus]
PlayerType=Volume
[MeasureRotate]
Measure=Calc
Formula=(( GetMusicPlayerState = 1 ) ? (( MeasureRotate % 360 ) + 0.2 ) : MeasureRotate )
MaxValue=360
UpdateDivider=1
[MeasureSinAngle]
Measure=Calc
Formula=SIN(MeasureRotate/360*2*PI)
UpdateDivider=1
[MeasureNegSinAngle]
Measure=Calc
Formula=-(MeasureSinAngle)
UpdateDivider=1
[MeasureCosAngle]
Measure=Calc
Formula=COS(MeasureRotate/360*2*PI)
UpdateDivider=1
[MeasureTXCover]
Measure=Calc
Formula=(#RotY#+(0.5*#RotH#))-MeasureCosAngle*(#RotY#+(0.5*#RotH#))-MeasureSinAngle*(#RotX#+(0.5*#RotW#))
UpdateDivider=1
[MeasureTYCover]
Measure=Calc
Formula=(#RotX#+(0.5*#RotW#))-MeasureNegSinAngle*(#RotY#+(0.5*#RotH#))-MeasureCosAngle*(#RotX#+(0.5*#RotW#))
UpdateDivider=1
[MeasureMinutesTotal]
Measure=Calc
Formula=Trunc(MeasureDuration/60)
RegExpSubstitute=1
Substitute="^(.)$":"0\1"
[MeasureSecondsTotal]
Measure=Calc
Formula=(MeasureDuration % 60)
RegExpSubstitute=1
Substitute="^(.)$":"0\1"
[ProgressSec]
Measure=Calc
Formula=( 550 / ( MeasureSecondsTotal + MeasureMinutesTotal * 60 ))
[Background]
Meter=Image
ImageName=#@#Wood.png
W=1920
[MeterTrack]
Meter=String
MeasureName=MeasureSongName
X=1920
Y=(1080-35)
W=1670
FontFace=Montserrat SemiBold
FontSize=54.72
AntiAlias=1
StringAlign=RightCenter
Text=%1
FontColor=255,255,255
[MeterArtist]
Meter=String
MeasureName=MeasureSongArtist
X=1920
Y=(1080-85)
FontFace=Montserrat Light
FontSize=30
AntiAlias=1
StringAlign=RightCenter
Text=%1
FontColor=255,255,255
[MeterSongLength]
Meter=String
MeasureName=MeasurePosition
MeasureName2=MeasureDuration
X=(#WorkAreaWidth#-251)
Y=(1080-160-4+23)
FontFace=Montserrat Light
FontSize=(22.8)
AntiAlias=1
StringAlign=Left
Text=%1/%2
FontColor=255,255,255
UpdateDivider=1
SolidColor=255,0,0
[CoverRotate]
Meter=Image
MeasureName=GetSongCover
X=#RotX#
Y=#RotY#
W=#RotW#
H=#RotH#
TransformationMatrix=[MeasureCosAngle];[MeasureSinAngle];[MeasureNegSinAngle];[MeasureCosAngle];[MeasureTYCover];[MeasureTXCover]
UpdateDivider=1
AntiAlias=1
DynamicVariables=1
[VinylRotate]
Meter=Rotator
MeasureName=MeasureRotate
ImageName=Vinyl_Yellowedit1000.png
x=50
y=20
OffsetX=500
OffsetY=500
W=1000
H=1000
AntiAlias=1
LeftMouseUpAction=[!CommandMeasure GetMusicPlayerState "PlayPause"]
RightMouseUpAction=["C:\Program Files (x86)\AIMP\AIMP.exe"]
MouseScrollUpAction=[!CommandMeasure "MeasureProgress" "SetPosition +[ProgressSec]"]
MouseScrollDownAction=[!CommandMeasure "MeasureProgress" "SetPosition -[ProgressSec]"]
UpdateDivider=1
[MeterRoundProgBar]
Meter=Roundline
MeasureName=MeasureProgress
DynamicVariables=1
Solid=1
AntiAlias=1
StartAngle=-1.5708
RotationAngle=(2*PI)
X=(#RotX#+(#RotW#/2))
Y=(#RotY#+(#RotH#/2))
LineLength=430
LineStart=426
LineColor=255,255,255
MouseScrollUpAction=[!CommandMeasure "MeasureProgress" "SetPosition +[ProgressSec]"]
MouseScrollDownAction=[!CommandMeasure "MeasureProgress" "SetPosition -[ProgressSec]"]
UpdateDivider=1
[AIMPVol]
Meter=Roundline
MeasureName=mVolume
Solid=1
AntiAlias=1
StartAngle=0
RotationAngle=(2*PI)
X=5
Y=6
W=(2*40)
H=(2*40)
LineLength=(40*0.91)
LineStart=(40*0.55*1.14)
LineColor=255,255,255
RightMouseUpAction=[!CommandMeasure GetMusicPlayerState "TogglePlayer"]
MiddleMouseUpAction=[!CommandMeasure GetMusicPlayerState "TogglePlayer"]
MouseScrollUpAction=[!CommandMeasure GetMusicPlayerState "SetVolume +5"]
MouseScrollDownAction=[!CommandMeasure GetMusicPlayerState "SetVolume -5"]
[CirclesAIMPVol]
Meter=Shape
Shape=Ellipse 45,46,36 | Fill Color 255,255,255,0 | Stroke Color 255,255,255 | StrokeWidth 2
Shape2=Ellipse 45,46,25 | Fill Color 255,255,255,0 | Stroke Color 255,255,255 | StrokeWidth 2
[subTextAIMP]
Meter=STRING
MeasureName=mVolume
Text=%1
AntiAlias=1
StringAlign=CenterCenter
FontFace=Montserrat SemiBold
FontSize=20
FontWeight=700
FontColor=255,255,255
X=45
Y=48
[Arm]
Meter=Image
ImageName=arm.png
PreserveAspectRatio=1
w=276
x=700
y=100
```

And one more recommendation: in last time, all resources used by a skin (images, fonts, sound files and so on) are required to be placed into the @Resources folder. For example, the arm.png image, used by the [Arm] meter should be rely on this @Resources folder, not in the same folder as the skins .ini file. If you move them there, replace their reference by adding the

#@# variable. You did this for some of the used resources (namely the

Wood.png image, used into the [Background] meter), but others are still not there (for instance the above arm.png image). Not that you couldn't use the skin with those resources not in the @Resources folder, but that's a better place for them.