Skip to content

Commit

Permalink
1.2 (25 March 2015 rev 2)
Browse files Browse the repository at this point in the history
- Smoother waveforms through cubic interpolation!
- Fixed unaccounted pixels for antialiasing trick
- Real fix for repeated histogram tail values by ignoring last measure
value and double padding ends of spectrum
  • Loading branch information
alatsombath committed Apr 1, 2015
1 parent ca7a35f commit 20a09e1
Show file tree
Hide file tree
Showing 11 changed files with 417 additions and 33 deletions.
Binary file modified RMSKIN.bmp
Binary file not shown.
2 changes: 1 addition & 1 deletion RMSKIN.ini
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[rmskin]
Name=Ocean
Author=alatsombath
Version=25 March 2015 rev
Version=25 March 2015 rev 2
LoadType=Skin
Load=Ocean\Ocean\Ocean.ini
MinimumRainmeter=3.2.1
Expand Down
36 changes: 26 additions & 10 deletions Skins/Ocean/Ocean Bars/@Resources/OceanBars.lua
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-- OceanBars v1.1
-- OceanBars v1.2
-- LICENSE: Creative Commons Attribution-Non-Commercial-Share Alike 3.0

local Measure,MeasureBuffer,cos,PI={},{},math.cos,math.pi
Expand All @@ -12,29 +12,45 @@ function Initialize()
for i=Index,Limit do Measure[i]=SKIN:GetMeasure((gsub(MeasureName,Sub,i))) end end

-- http://paulbourke.net/miscellaneous/interpolation/
local function CosineInterpolate(y1,y2,mu)
local mu2=(1-cos(mu*PI))/2 return (y1*(1-mu2)+y2*mu2) end
local function CubicInterpolate(y0,y1,y2,y3,mu)
local mu2,a0=mu*mu,y3-y2-y0+y1
local a1=y0-y1-a0
return (a0*mu*mu2+a1*mu2+(y2-y0)*mu+y1) end

function Update()
for i=Index,Limit do MeasureBuffer[i]=Measure[i]:GetValue() end

for i=Index,Limit-1 do
local y0,y1,y2,y3,LocalMu=MeasureBuffer[1],MeasureBuffer[1],MeasureBuffer[2],MeasureBuffer[4],0
for j=1,HalfWidth*2 do
LocalMu=LocalMu+Mu*0.5
SKIN:Bang("!SetOption","MeasureIter","Formula",CubicInterpolate(y0,y1,y2,y3,LocalMu))
SKIN:Bang("[!UpdateMeasure MeasureIter][!UpdateMeter MeterHistogram][!UpdateMeter MeterLine]")
end

for i=2,Limit-3 do
SKIN:Bang("!SetOption","MeasureIter","Formula",MeasureBuffer[i])
SKIN:Bang("[!UpdateMeasure MeasureIter][!UpdateMeter MeterHistogram][!UpdateMeter MeterLine]")

local y1,y2,LocalMu=MeasureBuffer[i],MeasureBuffer[i+1],0
for j=0,HalfWidth do
local y0,y1,y2,y3,LocalMu=MeasureBuffer[i-1],MeasureBuffer[i],MeasureBuffer[i+1],MeasureBuffer[i+2],0
for j=1,HalfWidth do
LocalMu=LocalMu+Mu
SKIN:Bang("!SetOption","MeasureIter","Formula",CosineInterpolate(y1,y2,LocalMu))
SKIN:Bang("!SetOption","MeasureIter","Formula",CubicInterpolate(y0,y1,y2,y3,LocalMu))
SKIN:Bang("[!UpdateMeasure MeasureIter][!UpdateMeter MeterHistogram][!UpdateMeter MeterLine]")
end
for j=0,BarGap do
for j=1,BarGap do
SKIN:Bang("[!SetOption MeasureIter Formula 0][!UpdateMeasure MeasureIter][!UpdateMeter MeterHistogram][!UpdateMeter MeterLine]")
end
for j=0,HalfWidth do
for j=1,HalfWidth do
LocalMu=LocalMu+Mu
SKIN:Bang("!SetOption","MeasureIter","Formula",CosineInterpolate(y1,y2,LocalMu))
SKIN:Bang("!SetOption","MeasureIter","Formula",CubicInterpolate(y0,y1,y2,y3,LocalMu))
SKIN:Bang("[!UpdateMeasure MeasureIter][!UpdateMeter MeterHistogram][!UpdateMeter MeterLine]")
end
end

y0,y1,y2,y3,LocalMu=MeasureBuffer[Limit-4],MeasureBuffer[Limit-2],MeasureBuffer[Limit-1],MeasureBuffer[Limit-1],0
for j=1,HalfWidth*2 do
LocalMu=LocalMu+Mu*0.5
SKIN:Bang("!SetOption","MeasureIter","Formula",CubicInterpolate(y0,y1,y2,y3,LocalMu))
SKIN:Bang("[!UpdateMeasure MeasureIter][!UpdateMeter MeterHistogram][!UpdateMeter MeterLine]")
end
end
2 changes: 1 addition & 1 deletion Skins/Ocean/Ocean Bars/@Resources/Variables.inc
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ MeasureName=MeasureAudioRepeat
Bands=96
Sensitivity=42

BarWidth=10
BarWidth=8
BarGap=6

X=0
Expand Down
2 changes: 1 addition & 1 deletion Skins/Ocean/Ocean Bars/Ocean Bars.ini
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[Metadata]
Name=Ocean Bars
Author=alatsombath
Version=25 March 2015 rev
Version=25 March 2015 rev 2
License=Creative Commons Attribution-Non-Commercial-Share Alike 3.0
Information=A music visualizer for Rainmeter

Expand Down
30 changes: 23 additions & 7 deletions Skins/Ocean/Ocean/@Resources/Ocean.lua
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-- Ocean v1.1
-- Ocean v1.2
-- LICENSE: Creative Commons Attribution-Non-Commercial-Share Alike 3.0

local Measure,MeasureBuffer,cos,PI={},{},math.cos,math.pi
Expand All @@ -12,21 +12,37 @@ function Initialize()
for i=Index,Limit do Measure[i]=SKIN:GetMeasure((gsub(MeasureName,Sub,i))) end end

-- http://paulbourke.net/miscellaneous/interpolation/
local function CosineInterpolate(y1,y2,mu)
local mu2=(1-cos(mu*PI))/2 return (y1*(1-mu2)+y2*mu2) end
local function CubicInterpolate(y0,y1,y2,y3,mu)
local mu2,a0=mu*mu,y3-y2-y0+y1
local a1=y0-y1-a0
return (a0*mu*mu2+a1*mu2+(y2-y0)*mu+y1) end

function Update()
for i=Index,Limit do MeasureBuffer[i]=Measure[i]:GetValue() end

for i=Index,Limit-1 do
local y0,y1,y2,y3,LocalMu=MeasureBuffer[1],MeasureBuffer[1],MeasureBuffer[2],MeasureBuffer[4],0
for j=1,InterWidth*2 do
LocalMu=LocalMu+Mu*0.5
SKIN:Bang("!SetOption","MeasureIter","Formula",CubicInterpolate(y0,y1,y2,y3,LocalMu))
SKIN:Bang("[!UpdateMeasure MeasureIter][!UpdateMeter MeterHistogram][!UpdateMeter MeterLine]")
end

for i=2,Limit-3 do
SKIN:Bang("!SetOption","MeasureIter","Formula",MeasureBuffer[i])
SKIN:Bang("[!UpdateMeasure MeasureIter][!UpdateMeter MeterHistogram][!UpdateMeter MeterLine]")

local y1,y2,LocalMu=MeasureBuffer[i],MeasureBuffer[i+1],0
for j=0,InterWidth do
local y0,y1,y2,y3,LocalMu=MeasureBuffer[i-1],MeasureBuffer[i],MeasureBuffer[i+1],MeasureBuffer[i+2],0
for j=1,InterWidth do
LocalMu=LocalMu+Mu
SKIN:Bang("!SetOption","MeasureIter","Formula",CosineInterpolate(y1,y2,LocalMu))
SKIN:Bang("!SetOption","MeasureIter","Formula",CubicInterpolate(y0,y1,y2,y3,LocalMu))
SKIN:Bang("[!UpdateMeasure MeasureIter][!UpdateMeter MeterHistogram][!UpdateMeter MeterLine]")
end
end

y0,y1,y2,y3,LocalMu=MeasureBuffer[Limit-4],MeasureBuffer[Limit-2],MeasureBuffer[Limit-1],MeasureBuffer[Limit-1],0
for j=1,InterWidth*2 do
LocalMu=LocalMu+Mu*0.5
SKIN:Bang("!SetOption","MeasureIter","Formula",CubicInterpolate(y0,y1,y2,y3,LocalMu))
SKIN:Bang("[!UpdateMeasure MeasureIter][!UpdateMeter MeterHistogram][!UpdateMeter MeterLine]")
end
end
2 changes: 1 addition & 1 deletion Skins/Ocean/Ocean/Ocean.ini
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[Metadata]
Name=Ocean
Author=alatsombath
Version=25 March 2015 rev
Version=25 March 2015 rev 2
License=Creative Commons Attribution-Non-Commercial-Share Alike 3.0
Information=A music visualizer for Rainmeter

Expand Down
4 changes: 2 additions & 2 deletions Skins/Ocean/Wave/@Resources/Variables.inc
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
[Variables]
FFTAttack=350
FFTDecay=350
FFTSize=4096
FFTSize=2048
FreqMin=40
FreqMax=16000
; Audio settings
; http://docs.rainmeter.net/manual-beta/plugins/audiolevel#FFTOptions

MeasureName=MeasureAudioRepeat

Bands=48
Bands=96
Sensitivity=42

X=0
Expand Down
32 changes: 24 additions & 8 deletions Skins/Ocean/Wave/@Resources/Wave.lua
Original file line number Diff line number Diff line change
@@ -1,32 +1,48 @@
-- Wave v1.1
-- Wave v1.2
-- LICENSE: Creative Commons Attribution-Non-Commercial-Share Alike 3.0

local Measure,MeasureBuffer,cos,PI={},{},math.cos,math.pi
function Initialize()
local Width=SKIN:ParseFormula(SKIN:ReplaceVariables("#Width#"))
InterWidth=math.ceil(Width/SKIN:ReplaceVariables("#Bands#"))
InterWidth=Width/SKIN:ReplaceVariables("#Bands#")
Mu=1/InterWidth

Sub,Index,Limit=SELF:GetOption("Sub"),SKIN:ParseFormula(SELF:GetOption("Index")),SKIN:ParseFormula(SELF:GetOption("Limit"))
local MeasureName,gsub=SKIN:ReplaceVariables("#MeasureName#"),string.gsub
for i=Index,Limit do Measure[i]=SKIN:GetMeasure((gsub(MeasureName,Sub,i))) end end

-- http://paulbourke.net/miscellaneous/interpolation/
local function CosineInterpolate(y1,y2,mu)
local mu2=(1-cos(mu*PI))/2 return (y1*(1-mu2)+y2*mu2) end
local function CubicInterpolate(y0,y1,y2,y3,mu)
local mu2,a0=mu*mu,y3-y2-y0+y1
local a1=y0-y1-a0
return (a0*mu*mu2+a1*mu2+(y2-y0)*mu+y1) end

function Update()
for i=Index,Limit do MeasureBuffer[i]=Measure[i]:GetValue() end

for i=Index,Limit-2 do
local y0,y1,y2,y3,LocalMu=MeasureBuffer[1],MeasureBuffer[1],MeasureBuffer[2],MeasureBuffer[4],0
for j=1,InterWidth*2 do
LocalMu=LocalMu+Mu*0.5
SKIN:Bang("!SetOption","MeasureIter","Formula",CubicInterpolate(y0,y1,y2,y3,LocalMu))
SKIN:Bang("[!UpdateMeasure MeasureIter][!UpdateMeter MeterLine]")
end

for i=2,Limit-3 do
SKIN:Bang("!SetOption","MeasureIter","Formula",MeasureBuffer[i])
SKIN:Bang("[!UpdateMeasure MeasureIter][!UpdateMeter MeterLine]")

local y1,y2,LocalMu=MeasureBuffer[i],MeasureBuffer[i+1],0
for j=0,InterWidth do
local y0,y1,y2,y3,LocalMu=MeasureBuffer[i-1],MeasureBuffer[i],MeasureBuffer[i+1],MeasureBuffer[i+2],0
for j=1,InterWidth do
LocalMu=LocalMu+Mu
SKIN:Bang("!SetOption","MeasureIter","Formula",CosineInterpolate(y1,y2,LocalMu))
SKIN:Bang("!SetOption","MeasureIter","Formula",CubicInterpolate(y0,y1,y2,y3,LocalMu))
SKIN:Bang("[!UpdateMeasure MeasureIter][!UpdateMeter MeterLine]")
end
end

y0,y1,y2,y3,LocalMu=MeasureBuffer[Limit-4],MeasureBuffer[Limit-2],MeasureBuffer[Limit-1],MeasureBuffer[Limit-1],0
for j=1,InterWidth*2 do
LocalMu=LocalMu+Mu*0.5
SKIN:Bang("!SetOption","MeasureIter","Formula",CubicInterpolate(y0,y1,y2,y3,LocalMu))
SKIN:Bang("[!UpdateMeasure MeasureIter][!UpdateMeter MeterLine]")
end
end
Loading

0 comments on commit 20a09e1

Please # to comment.