Shop Forum More Submit  Join Login
Osaka Underground 1.1.1 for foobar2000 by Scrummble Osaka Underground 1.1.1 for foobar2000 by Scrummble
# foobar2000 Osaka Underground
1.1.1: Fixed the bug of wikipedia button
New in 1.1:
  • Playlist and information panel added to the right bar 
  • JS Smooth Browser added to the main panel 
  • Changed the cover panel in the lower-left corner 
  • Improved banner and scroll bar 
  • Bugs fixed 
Please check the readme file for the setup guide.
Alternative download link: drive.google.com/file/d/0B8nAo…

Required Fonts: Source Han Sans; InputMono; FontAwesome.
Fonts Lazy Pack: drive.google.com/open?id=0B8nA… Note that it's not full sets; only containing need files.
MacType needed for font aa.

Other Credits:
  • "CoverFlow View", "JS Smooth Browser" and "WSH Tabbed Playlist Manager" are created by [Br3tt aka Falstaff](br3tt.deviantart.com); modifications by me. 
  • Cover Panel is from [marc_2003](www.hydrogenaud.io/forums/inde…). 
  • Some codes of ELPlaylist were from dreamix 3.3 by dreamawake. 
  • Components belong to each own authors.
If you would please, leave comments / questions / advises / bug reports, thank you.
I do not login on deviantart frequently, so you could email me at frankzhao0912@qq.com.
Please attach full credit when taking out, shaing or modifying.
Add a Comment:
 
:iconahimenes:
Ahimenes Featured By Owner Edited Nov 29, 2018
Hi. Pretty cool skin...on screens. On my foobar2k:
Screenshot 2018-11-30 001 by Ahimenes  
No buttons. No control panel. No mercy.
Reply
:iconifelix:
ifelix Featured By Owner Sep 12, 2018
three years gone =(
Reply
:iconreikawa:
Reikawa Featured By Owner Nov 22, 2017
two years gone, still waiting the new version :)
Reply
:iconifelix:
ifelix Featured By Owner Jul 28, 2017
Hello Scrummble,

do you have any plans for the next Version? e.g. with some visualization or something :)

Thanks and Greetings !
Reply
:iconscrummble:
Scrummble Featured By Owner Oct 17, 2017
Hopefully some new version will be released soon......
Reply
:iconjdotpeacock:
Jdotpeacock Featured By Owner Mar 20, 2017
Hello,

Could you help me modify this skin to work better on a smaller tablet.

I'd like to cut the 'Now Playing' right hand column and also increase the size slightly of the left hand library tree.

Also I would like to increase font size slightly.

Thanks in advanced.

Here is an example of what I'm looking to achieve.
i.gyazo.com/cbabee484f89a56553…
Reply
:iconscrummble:
Scrummble Featured By Owner Oct 18, 2017
The feature of hiding columns will be released with the next version.

It's pretty hard for me to add a function modifying font size... With brightest intention it will be in the 3rd update from now, with DPI modifications.
Reply
:iconmshidare:
MShidare Featured By Owner Jan 3, 2017
great but buttom left albumart option

what is cd jewel case use of? when i switch to this, it shows some error like that

File: C:\Users\User\Desktop\foobar2000\skins\OsakaUnderground\wsh_marc2003\js\albumart.js
Line: 9, Col: 6
<source text only available at compile time>

Thank you
Reply
:iconscrummble:
Scrummble Featured By Owner Jan 31, 2017
Please just ignore that option. The panel was a plug-in and will be replaced in the next version.
Reply
:iconenshtein:
enSHtEIN Featured By Owner Nov 9, 2016
Hello, can you give any tips of how to add rating to the main playlist (instead of codec or bitrate info for example)? Didn't knew i will miss the rating so much :/
Reply
:iconscrummble:
Scrummble Featured By Owner Nov 18, 2016
$puts(w,$sub($get(w),10)) $drawtextex($if2(%rating%,-),$get(xOffset),1,$get(w),$get(texth),$if(%rating%,$get(trackc),$get(darkc)),vcenter right) $font(FontAwesome,8,) $puts(w,$sub($get(w),10)) $drawtextex($if(%loved%,$char(61444),$char(61445)),$get(xOffset),2,$get(w),$get(texth),$if(%loved%,$get(trackc),$get(darkc)),vcenter right) $puts(w,$sub($get(w),12)) $font(%NUM_FONT%,%size8%,italic)

Right click > Settings, and try putting this before //Count.
Reply
:iconenshtein:
enSHtEIN Featured By Owner Nov 22, 2016
Looks a bit weird, but works i guess.
Reply
:iconifelix:
ifelix Featured By Owner May 3, 2017
How did you added the Visualisation? =)
Reply
:iconenshtein:
enSHtEIN Featured By Owner Mar 2, 2019
It's the Waveform seekbar panel. Here are the settings for it (i think):

texture tex : WAVEFORMDATA;

sampler sTex = sampler_state
{
Texture = (tex);
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
AddressU = Clamp;
};

struct VS_IN
{
float2 pos : POSITION;
float2 tc : TEXCOORD0;
};

struct PS_IN
{
float4 pos : SV_POSITION;
float2 tc : TEXCOORD0;
};

float4 panelBackgroundColor : BACKGROUNDCOLOR; // 'Background color' - whole panel background
float4 waveHighlightColor   : HIGHLIGHTCOLOR;  // 'Highlight color' - for played part
float4 selectionColor       : SELECTIONCOLOR;  // Not used
float4 waveUnplayedColor    : TEXTCOLOR;       // 'Foreground color' - for unplayed part
float cursorPos             : CURSORPOSITION;
bool cursorVisible          : CURSORVISIBLE;
float seekPos               : SEEKPOSITION;
bool seeking                : SEEKING;
float4 replayGain           : REPLAYGAIN;
float2 viewportSize         : VIEWPORTSIZE;
bool horizontal             : ORIENTATION;
bool flipped                : FLIPPED;
bool shadePlayed            : SHADEPLAYED;

float4 colorDodge(float4 baseColor, float4 blendColor)
{
return saturate(baseColor / (1 - blendColor));
}

float4 linearDodge(float4 baseColor, float4 blendColor)
{
return saturate(baseColor + blendColor);
}

float4 multiply(float4 baseColor, float4 blendColor)
{
return saturate(baseColor * blendColor);
}

float4 getSeekAheadColor()
{
float4 color = colorDodge(waveHighlightColor, 0.4);
color.a = 0.5;

return color;
}

float4 getSeekBackColor()
{
return float4(1.0, 1.0, 1.0, 0.5);
}

float4 getWaveTopColor()
{
return colorDodge(waveHighlightColor, 0.57);
}

float4 getReflectionHightlightColor()
{
float4 color = waveHighlightColor;
color = multiply(color, 0.75);
color = linearDodge(color, 0.6);

return color;
}

float2 getPixelSize()
{
float2 pixelSize = horizontal
? 1 / viewportSize.xy
: 1 / viewportSize.yx;

return pixelSize;
}

/*
  Split waveform into bars.

  Waveform texture contains upper half-waves (positive peaks) in Green channel
  and negative ones in Red. Negative values are ignored to make reflection later.
*/
float4 rmsSampling(float2 tc, float2 pixelSize, inout bool isGap)
{
float rmsData;
float mainAxisLength = (horizontal ? viewportSize.x : viewportSize.y);

if (ceil(mainAxisLength * tc.x) % 3 < 0.1)
{
rmsData = tex1D(sTex, tc.x).g;
}
else if (ceil(mainAxisLength * tc.x) % 3 < 1.1)
{
rmsData = tex1D(sTex, tc.x - pixelSize.x).g;
}
else
{
isGap = true;

// Height of a gap equals to height of the smallest neighbour bar
float leftPeak = tex1D(sTex, tc.x - (2 * pixelSize.x)).g;
float rightPeak = tex1D(sTex, tc.x + pixelSize.x).g;
rmsData = min(leftPeak, rightPeak);
}

return rmsData;
}

float4 getWaveColor(float2 tc, float2 pixelSize, int pixelBar, int cursorBar, float barCoverage, float4 bgColor, bool isGap)
{
bool isBeyondSeek = tc.x > seekPos;
float4 seekAheadColor = getSeekAheadColor();
float4 seekBackColor = getSeekBackColor();
float4 seekColor = isBeyondSeek ? seekBackColor : seekAheadColor;

float4 waveTop = getWaveTopColor();
float4 waveBottom = waveHighlightColor;

float4 color = (cursorBar < pixelBar ? waveUnplayedColor : lerp(waveBottom, waveTop, tc.y));

if (pixelBar == cursorBar)
{
if (seeking)
{
if (isBeyondSeek)
{
color = lerp(color, seekColor, seekColor.a);
color = lerp(color, waveUnplayedColor, barCoverage);
}
else
{
color = lerp(color, lerp(waveUnplayedColor, seekColor, seekColor.a), barCoverage);
}
}
else
{
color = lerp(color, waveUnplayedColor, barCoverage);
}
}
else if (seeking)
{
bool afterCursor = tc.x + pixelSize.x > cursorPos;
float4 seekColor = isBeyondSeek ? seekBackColor : seekAheadColor;

if ((afterCursor + isBeyondSeek) == 1)
{
color = lerp(color, seekColor, seekColor.a);
}
}

if (isGap)
{
color = lerp(color, bgColor, tc.y * 0.35 + 0.5);
}

return color;
}

float4 getReflectionColor(float2 tc, float2 pixelSize, int pixelBar, int cursorBar, float barCoverage, float4 bgColor, bool isGap)
{
float4 color;

float4 reflectionUnplayedColor = multiply(waveUnplayedColor, 0.8980);
float4 reflectionHighlightColor = getReflectionHightlightColor();

if (isGap)
{
color = bgColor;
}
else if (pixelBar == cursorBar)
{
color = lerp(reflectionHighlightColor, reflectionUnplayedColor, barCoverage);
}
else
{
color = cursorPos < tc.x + pixelSize.x ? reflectionUnplayedColor : reflectionHighlightColor;
}

return color;
}

float4 evaluate(float2 tc)
{
float mainAxisLength = (horizontal ? viewportSize.x : viewportSize.y);
float2 pixelSize = getPixelSize();

bool isGap = false;
float rmsData = rmsSampling(tc, pixelSize, isGap);

tc.y += 0.5;

// Reflection
if (tc.y < 0)
{
// Invert upper half-waves to imitate reflection
rmsData = 1 - rmsData;

// Squeeze reflection
tc.y *= 3.5;
}

rmsData -= 0.5;
rmsData *= 2.5;

bool above = abs(tc.y) > abs(rmsData);
float4 bgColor = panelBackgroundColor * ((0.93 - (tc.x * 0.08)) + ((tc.y * 0.1) - 0.07));

if (above || abs(tc.y) < 1.33 * pixelSize.y)
{
return bgColor;
}

int pixelBar = ceil(mainAxisLength * (tc.x + pixelSize.x) / 3.0);
int cursorBar = ceil(mainAxisLength * cursorPos / 3.0);
float barCoverage = (cursorBar * 3.0 - (mainAxisLength * cursorPos)) / 3.0;

float4 color = tc.y > 0
? getWaveColor(tc, pixelSize, pixelBar, cursorBar, barCoverage, bgColor, isGap)
: getReflectionColor(tc, pixelSize, pixelBar, cursorBar, barCoverage, bgColor, isGap);

return color;
}

PS_IN VS(VS_IN input)
{
    float pixelWidth = horizontal
        ? 1 / viewportSize.x
        : 1 / viewportSize.y;

    PS_IN output = (PS_IN)0;
    
    // Move left to fill 1st empty pixel
    output.pos = float4(input.pos - float2(pixelWidth, 0), 0, 1);

    if (horizontal)
    {
    float firstBarAlignment = (flipped ? 2*pixelWidth : -2*pixelWidth);
        output.tc = float4((input.tc.xy + float2(1.0 + firstBarAlignment, 0)) * float2(0.5, 1.0), 0, 1);
    }
    else
    {
    float firstBarAlignment = (flipped ? 3*pixelWidth : -1*pixelWidth);
        output.tc = float4((-input.pos.yx + float2(1.0 + firstBarAlignment, 0)) * float2(0.5, 1.0), 0, 1);
    }

    if (flipped)
    {
        output.tc.x = 1.0 - output.tc.x;
    }

return output;
}

float4 PS(PS_IN input) : SV_Target
{
float4 color = evaluate(input.tc);

return color;
}

technique Render9
{
pass
{
VertexShader = compile vs_2_0 VS();
PixelShader = compile ps_3_0 PS();
}
}

technique10 Render10
{
pass P0
{
SetGeometryShader(0);
SetVertexShader(CompileShader(vs_4_0, VS()));
SetPixelShader(CompileShader(ps_4_0, PS()));
}
}
Reply
:iconscrummble:
Scrummble Featured By Owner Nov 23, 2016
Ooh I forgot some variables are not defined in the published old version...
Try to change this: "$if(%loved%,$get(trackc),$get(darkc))" (excluding "") to: "$get(trackc)(excluding "" too).
Hope that works.
Reply
:iconenshtein:
enSHtEIN Featured By Owner Nov 23, 2016
I figured out what's it all about ;) (Wink)  I leveled the text a little...and with my customdb settings it looks like this. Better than i wanted at first time.

$puts(w,$sub($get(w),5))
$drawtextex($if2(%rating%,-),$get(xOffset),0,$get(w),$get(texth),$get(trackc),vcenter right)
$font(FontAwesome,8,)
$puts(w,$sub($get(w),17))
$drawtextex($if(%LASTFM_LOVED_DB%,$char(61444),$char(61445)),$get(xOffset),0,$get(w),$get(texth),$get(trackc),vcenter right)
$puts(w,$sub($get(w),10))
$font(%NUM_FONT%,%size8%,italic)

p.s. You're a magician.
Reply
:iconscrummble:
Scrummble Featured By Owner Nov 29, 2016
Glad to see you enjoying it!
Reply
:iconenshtein:
enSHtEIN Featured By Owner Edited Mar 2, 2019
Great skin! Still using it! But a lot modified. Untitled by enSHtEIN  
Reply
:iconlaboccia:
laboccia Featured By Owner Nov 6, 2016
Ciao, le copertine si aggiornano solista DOPO Aver cliccato su Una seconda canzone e non immediatamente. Anche se si cambia La Scelta tra "preferiscono ora playng" e "seguire traccia selezionata"
Reply
:iconscrummble:
Scrummble Featured By Owner Nov 18, 2016
Sorry I cannot read Italian, and google translate did not give me information specific enough. Would you mind using some language that I know...? Thank you...
Reply
:iconlaboccia:
laboccia Featured By Owner Nov 7, 2016
Hello, the covers are upgraded solo after getting clicked A second song and not immediately. Even if you change the choice between "now prefer playng" and "follow the selected track"
Reply
:iconscrummble:
Scrummble Featured By Owner Nov 21, 2016
Have you tried right-clicking on the cover itself? If yes, it may be a bug of the panel... The next version will remove the problematic add-ons. Sorry for the inconvenience. 
Reply
:iconlaboccia:
laboccia Featured By Owner Edited Nov 22, 2016
Where do I find the panel script?
I tried to do a fresh install. The bottom panel sinstra is updated immediately, however the right information panel no. Basically it works the other way around
Reply
:iconscrummble:
Scrummble Featured By Owner Nov 23, 2016
Scripts can be found in Preference dialog.

The right panel cover has a different behavior, which only reads external jpg's and png's. This may be fixed... soon...
Reply
:iconlaboccia:
laboccia Featured By Owner Edited Nov 25, 2016

I joined Dialog preference but can not find the script at the bottom of the window on the left but do not understand "The right panel cover"


Reply
:iconscrummble:
Scrummble Featured By Owner Nov 29, 2016
And... There is actually no such thing as "right cover panel". I said something wrong. Sorry for confusing.
Reply
:iconscrummble:
Scrummble Featured By Owner Nov 29, 2016
Preference - Display - Column UI - Layout - (You must find the cover panel in the numerous "JScript Panel"s) - Properties
I must say it's really hard for inexperienced modders, so I would suggest ignoring it.....
Reply
:iconlaboccia:
laboccia Featured By Owner Dec 1, 2016
I asked where not like. Anyway thanks
Reply
(1 Reply)
:iconshinigamid:
shinigamid Featured By Owner Oct 13, 2016
Scrummble Hi, first I would like to thank you for this great theme which made fall in love with Foobar once again.

I have a small question: when I remove any entries from the contextual menu list in Foobar Preferences, the said entries still appear when I do a right click (like "Collect" or "Services"). Do you know any workaround for this "small" issue.
Reply
:iconscrummble:
Scrummble Featured By Owner Nov 18, 2016
Sorry for the late reply, and I finally reminded myself what have I done long long ago causing this.
Preferences > Display > Main Window > Upper-right corner, "Invert menu <shift> behavior". Untick this, and your problem is solved. Bravo!
Reply
:iconshinigamid:
shinigamid Featured By Owner Nov 25, 2016
Thank you :D
Reply
:iconlaboccia:
laboccia Featured By Owner Oct 2, 2016
Hello, does not work the main menu button on the top left
Reply
:iconscrummble:
Scrummble Featured By Owner Oct 3, 2016
Check the language of your foobar2000 main program. This skin only works on English version.
Reply
:iconlaboccia:
laboccia Featured By Owner Oct 4, 2016
I did not understand what I have to do. if I make another installation works but I should redo all the changes I made. where can I find the script that manages the upper left buttons?
Reply
:iconscrummble:
Scrummble Featured By Owner Oct 19, 2016
Right click, "splitter settings". You can manually change all the "$textbutton"s' commands to available ones in your language.
Reply
:iconlaboccia:
laboccia Featured By Owner Oct 5, 2016
solved
Reply
:iconrio236:
rio236 Featured By Owner Jul 12, 2016
I got new larger monitors and your work is much more appreciated. Thank you.

Here are my suggestions/requests:
1. Add shortcuts buttons/icons:
-stop after current
-show now playing in playlist

2. Left-Column > Playlists
Store playlists in Categories > Sub-Categories
Radios, Podcasts, External Files, +...should help reduce the clutter

3. Center-Column
only that I don't make much use of accessing playlist here - top horizontal navigation
Reply
:iconscrummble:
Scrummble Featured By Owner Sep 8, 2016
Thank you! Your advices are really useful.

And I think the "show now playing in playlist" feature was already available. Try click on the track title on the lower left corner, next to the cover.
Reply
:iconoriginalsaku:
OriginalSaku Featured By Owner Jul 5, 2016
How do I fix the album art from doing this in the middle panel? i.imgur.com/WmYBjFV.png
Reply
:iconscrummble:
Scrummble Featured By Owner Jul 9, 2016
I think this is a bug from one of the UI components. Solution: Do not double click an audio file to open it in File Explorer unless foobar2000 is already opened.
Reply
:iconoriginalsaku:
OriginalSaku Featured By Owner Jul 9, 2016
This happens when playing songs directly through the library sidebar in foobar, I never open music directly through folders.
Reply
:iconscrummble:
Scrummble Featured By Owner Jul 11, 2016
Sorry, this problem is beyond my knowledge...
Reply
:iconreikawa:
Reikawa Featured By Owner Apr 16, 2016
waiting for new one :D
Reply
:iconifelix:
ifelix Featured By Owner Mar 18, 2016
Just wanna say Thank You for this AMAZING skin !! I love it ! I also would love a visualizer; maybe as an option to turn on and off =)
Reply
:iconscrummble:
Scrummble Featured By Owner Mar 18, 2016
Thanks you for your feedback! The next version will have it.
Reply
:iconzeb59:
Zeb59 Featured By Owner Mar 10, 2016
Is-it a solution to add support for rating (one to five stars) and show the rating of a file ???
Reply
:iconscrummble:
Scrummble Featured By Owner Mar 18, 2016
Thanks for the feedback! I'd like to answer the 4 questions altogether:

1. I personally do not use ratings as often as others do, but I can see that many are fond of that... I'll consider adding it in the next version.

2. The width and height of panels are fixed. In fact I do not think it's technically possible (with my current knowledge). Sorry.

3&4. I personally do not use last.fm as well... I even don't know how it works. But a biography panel is on the way, and will appear in the next version.
Reply
Add a Comment:
 
×




Details

Submitted on
August 15, 2015
File Size
2.1 MB
Submitted with
Sta.sh
Link
Thumb

Stats

Views
14,816 (12 today)
Favourites
40 (who?)
Comments
113
Downloads
1,912