Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@SeriouslyMoe
Last active March 18, 2019 12:20
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SeriouslyMoe/e0bf8e85a559bdb9ad32a6b09e56539c to your computer and use it in GitHub Desktop.
Save SeriouslyMoe/e0bf8e85a559bdb9ad32a6b09e56539c to your computer and use it in GitHub Desktop.
foobar2000 Scripts

Foobar2000 scripts

Personal scripts deviating from the defaults provided by foobar2000 out of the box. Curated for my own directory setup and tags, but feel free to use.

Window Title

Playing: ▶ Catch Us by Odyssey (feat. Mortimer)

Paused: Various Artists | foobar2000

Code:

$if(%ispaused%,%album artist% | foobar2000,$char(9654) %title% by %artist%)

Properties Dialog

Name Tag Example
Track Title %title% 虹とひまわり
Title Sort %titlesortorder% niji to himawari
Romaji Title %titleromaji% Niji to Himawari
English Title %titleenglish% Rainbow and Sunflower
Artist Name %artist% 鷹 (feat. 綾倉盟)
Artist Sort %artistsortorder% taka (featuring mei ayakura)
Romaji Artist %artistromaji% Taka (feat. Ayakura Mei)
English Artist %artistenglish% Taka (feat. Mei Ayakura)
Composer %composer% ZUN
Album Title %album% アコースティック・エピソード
Album Sort %albumsortorder% acoustic episode
Romaji Album %albumromaji% Acoustic Episode
English Album %albumenglish% Acoustic Episode
Album Artist %album artist% CROW'SCLAW
Album Artist Sort %albumartistsortorder% crow'sclaw
Romaji Album Artist %albumartistromaji% CROW'SCLAW
English Album Artist %albumartistenglish% Crow's Claw
Publisher %publisher% CROW'SCLAW
Catalog %catalog% PAEP-0003
Country %country% Japan
Media Type %mediatype% CD
Format %format% Doujin/Indie
Release Date %releasedate% 2012.08.11
Date %date% 2012
Event %event% C82
Genre %genre% Arrangement
Style %style% Soft Rock
Product %origin% Touhou Project
Product Type %origintype% Game
Track Number %tracknumber% 04
Total Tracks %totaltracks% 4
Disc Number %discnumber% 1
Total Discs %totaldiscs% 1
Comment %comment% Features vocal arrangements of themes from Touhou Project games.

Code:

Track Title=TITLE;Title Sort=TITLESORTORDER;Romaji Title=TITLEROMAJI;English Title=TITLEENGLISH;Artist Name=ARTIST;Artist Sort=ARTISTSORTORDER;Romaji Artist=ARTISTROMAJI;English Artist=ARTISTENGLISH;Composer=COMPOSER;Album Title=ALBUM;Album Sort=ALBUMSORTORDER;Romaji Album=ALBUMROMAJI;English Album=ALBUMENGLISH;Album Artist=ALBUM ARTIST;Album Artist Sort=ALBUMARTISTSORTORDER;Romaji Album Artist=ALBUMARTISTROMAJI;English Album Artist=ALBUMARTISTENGLISH;Publisher=PUBLISHER;Catalog=CATALOG;Country=COUNTRY;Media Type=MEDIATYPE;Format=FORMAT;Release Date=RELEASEDATE;Date=DATE;Event=EVENT;Genre=GENRE;Style=STYLE;Product=ORIGIN;Product Type=ORIGINTYPE;Track Number=TRACKNUMBER;Total Tracks=TOTALTRACKS;Disc Number=DISCNUMBER;Total Discs=TOTALDISCS;Comment=COMMENT;

WSH Panels

Seekbar:

function StringFormat() {
	var h_align = 0, v_align = 0, trimming = 0, flags = 0;
	switch (arguments.length)
	{
	// fall-thru
	case 4:
		flags = arguments[3];
	case 3:
		trimming = arguments[2];
	case 2:
		v_align = arguments[1];
	case 1:
		h_align = arguments[0];
		break;
	default:
		return 0;
	}
	return ((h_align << 28) | (v_align << 24) | (trimming << 20) | flags);
}

function RGBA(r, g, b, a) {
	return ((a << 24) | (r << 16) | (g << 8) | (b));
}

function TimeFmt(t){
	var zpad = function(n){
		var str = n.toString();
		return (str.length<2) ? "0"+str : str;
	}
	var h = Math.floor(t/3600); t-=h*3600;
	var m = Math.floor(t/60); t-=m*60;
	var s = Math.floor(t);
	if(h>0) return h.toString()+":"+zpad(m)+":"+zpad(s);
	return m.toString()+":"+zpad(s);
}
//----------------------------------------------------------------------------

var g_font = gdi.Font("segoe UI",11, 0);
var g_bgcolor = window.GetColorCUI(3);
var g_drag = 0;
var g_drag_seek = 0;
var padding_left = 0;
var padding_right = 35;
var ww;
var wh;

function on_size() {
    ww = window.Width;
    wh = window.Height;
}

function on_paint(gr){

	padding_left = (fb.PlaybackTime<3600)?35:50;

	var paddings = padding_left + padding_right;
	var bw = ww - paddings;
	var pos = 0;
	var g_txt = "0:00";

	if(fb.PlaybackLength > 0){
		if(g_drag){
			pos = parseInt(bw * g_drag_seek);
			g_txt =  TimeFmt(g_drag_seek * fb.PlaybackLength);
		}
		else{
			pos = parseInt(bw * (fb.PlaybackTime/fb.PlaybackLength));
			g_txt = TimeFmt(fb.PlaybackTime);
		}
	}
    
    gr.FillSolidRect(0, 0, ww, wh, RGBA(18,18,18,255));
	gr.FillSolidRect(0,4,ww,2,RGBA(85,85,85,255));
	gr.FillSolidRect(0,4,pos,2,RGBA(163,138,75,255));

	//gr.DrawString(TimeFmt(fb.PlaybackLength),g_font,RGBA(255,255,255,255),ww-padding_right,0,padding_right,wh,StringFormat(2,1,0));
	//gr.DrawString(g_txt,g_font,RGBA(255,255,255,255),0,0,padding_left,wh,StringFormat(0,1,0));

}


function on_mouse_lbtn_down(x,y){
	g_drag = (x > padding_left)&&(x < ww - padding_right);
}

function on_mouse_lbtn_up(x,y){
	if(g_drag){
		var bw = ww - padding_left - padding_right;
		g_drag_seek = (x - padding_left)/bw;
		g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ? g_drag_seek : 1;
		fb.PlaybackTime = fb.PlaybackLength * g_drag_seek;
        g_drag = 0;
    }
}

function on_mouse_move(x,y){
	if(g_drag){
		var bw = ww - padding_left - padding_right;
		g_drag_seek =  (x - padding_left)/bw;
		g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ? g_drag_seek : 1;
		window.Repaint();
	}
}

function on_mouse_wheel(step){
	if(step>0)
		fb.RunMainMenuCommand("Playback/Seek/Ahead by 5 seconds");
	else
		fb.RunMainMenuCommand("Playback/Seek/Back by 5 seconds");
}

function on_playback_new_track(info){
	padding_right = (fb.PlaybackLength < 3600)?35:50;
	window.Repaint();
}

function on_playback_stop(){
	window.Repaint();
}

function on_playback_seek(time){
	window.Repaint();
}

function on_playback_time(time){
	window.Repaint();
}

function on_colors_changed() {
    window.Repaint();   
}

Volume Bar:

function RGBA(r, g, b, a) {
	return ((a << 24) | (r << 16) | (g << 8) | (b));
}

// Based on human hearing curve
// 0 <= p <= 1
// return a value value: -100 <= vol <= 0
function pos2vol(p) {
     return (50 * Math.log(0.99 * p + 0.01) / Math.log(10));
}

function vol2pos(v){
	var p=((Math.pow(10,v/50)-0.01)/0.99);
	return(p);
}
//-----------------------------------
var g_drag = 0;
var g_bgcolor = window.GetColorCUI(3);
var ww;
var wh;

function on_size() {
    ww = window.Width;
    wh = window.Height;
}

function on_paint(gr){
	var pos = parseInt(vol2pos(fb.Volume) * ww);
    gr.FillSolidRect(0, 0, ww, wh, RGBA(18,18,18,255));
	gr.FillSolidRect(0, 4,ww,2,RGBA(85,85,85,255));
	gr.FillSolidRect(0, 4,pos,2,RGBA(163,138,75,255));
}

function on_mouse_lbtn_down(x,y){
    g_drag = 1;
}

function on_mouse_lbtn_up(x,y){
    on_mouse_move(x,y);
    g_drag = 0;
}

function on_mouse_move(x,y){
    if(g_drag){
        var p = (x<0)?0:(x / ww);
        var v = pos2vol(p);
        if(fb.Volume != v)fb.Volume = v;
    }
}

function on_mouse_wheel(step){
    if(step>0)
        fb.VolumeUp();
    else
        fb.VolumeDown();
}

function on_volume_change(val){
    window.Repaint();
}

function on_colors_changed() {
    window.Repaint();   
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment