Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: foo_chronflow – Coverflow (Read 73470 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Re: foo_chronflow

Reply #75
It's a great component and I'm really thrilled to see that it is still supported.
Thx :)

Quote
I have developed a set of custom buttons based on the JScript Panel. After installing the foo_chronflow they stop resizing correctly, as if the callback chain for the OnResize event was broken.

Happy to assist with additional info (preferably offline) if there is a chance to have this investigated.

I'll gladly look into that. Just send me your JScript Panel config via DM and I'll have a look. When you mean "after installing foo_chronflow" do you mean directly after installation, or after you actually placed the panel in your layout?

Re: foo_chronflow

Reply #76
Straight after installation everything works fine. The resizing is affected only when the foo_chronflow is placed in the layout. Not all the panels are affected - in my case it is only the bottom part of the screen.

I have attached a couple of screen shots to illustrate what's going on. They have been done in the layout editing mode to better show how panel sizing is affected.

The first one has been captured after switching to full screen and back. Panel sizes are fine, but you can see that the waveform minibar just above the row of buttons is not scaled properly.
The second one is the full screen view. The first row has resized correctly, but the row containing buttons has not.
The third screen shot shows what the full screen looks like after foo_chronflow is removed - and that's what was intended.

I'll send the script in a PM.


Re: foo_chronflow

Reply #77
I just released a new version (v0.5.0).

Hi Chronial, thanks for still supporting ChronFlow. Unfortunately on my Vista installation of 1.4.4, chronflow 1.5.0 crashes on startup.

Code: [Select]
Illegal operation:
Code: C0000005h, flags: 00000000h, address: 6C731398h
Access violation, operation: read, address: 6150E29Bh

Call path:
entry=>app_mainloop=>main_thread_callback::callback_run=>foo_chronflow mainthread callback

Code bytes (6C731398h):
6C731358h:  FC 34 7B 6C 83 C4 04 85 C0 75 EE A1 F8 34 7B 6C
6C731368h:  85 C0 74 16 0F 1F 40 00 50 E8 5A 1E 00 00 A1 F8
6C731378h:  34 7B 6C 83 C4 04 85 C0 75 EE 8B 15 04 35 7B 6C
6C731388h:  56 33 F6 85 D2 7E 27 90 A1 00 35 7B 6C 8B 0C B0
6C731398h:  83 79 3C 00 74 13 8D 41 30 50 51 E8 28 2D 00 00
6C7313A8h:  8B 15 04 35 7B 6C 83 C4 08 46 3B F2 7C DA E8 85
6C7313B8h:  36 00 00 FF 35 04 35 7B 6C FF 35 00 35 7B 6C E8
6C7313C8h:  44 32 00 00 C7 05 00 35 7B 6C 00 00 00 00 C7 05

Stack (001FF454h):
001FF434h:  00000000 00000000 00000000 00000000
001FF444h:  00000000 00000000 00000000 00000000
001FF454h:  05427BE0 6C70B830 D73C899A 0A3AB5B9
001FF464h:  001FF4B8 6C777250 00000000 001FF4C4
001FF474h:  6C726C4E 05427BE0 D73C892E 03BBBC30
001FF484h:  03BBBAF0 7776E5D0 0A5B6200 00000021
001FF494h:  00000039 71947CF3 000000A7 000000AF
001FF4A4h:  6C78E22C 0A3AB5B8 000000A8 00000100
001FF4B4h:  000000A7 001FF4D8 6C77ABB0 00000001
001FF4C4h:  001FF4E4 6C728A1F D73C890E 03655080
001FF4D4h:  00000037 001FF508 6C77AEE9 00000000
001FF4E4h:  001FF514 00C71D98 00000000 00C71EEA
001FF4F4h:  00000000 00000013 03BBBC30 00000006
001FF504h:  00C71D0E 001FF530 00D40471 00000001
001FF514h:  001FF540 00C71F4D 00000000 00C71EEA
001FF524h:  00000000 001FF51C 001FF044 001FF5D4
001FF534h:  00D38B45 00D7AE70 00000000 001FF56C
001FF544h:  75A58807 001104C0 000004B1 E976E5FE
001FF554h:  3704AEC1 00C71EEA DCBAABCD 00000000
001FF564h:  00000000 00C71EEA 001FF5E4 75A58962

Registers:
EAX: 054997F0, EBX: 0A74EF9D, ECX: 6150E25F, EDX: 00000002
ESI: 00000000, EDI: 03EA7550, EBP: 001FF470, ESP: 001FF454

Crash location:
Module: foo_chronflow
Offset: 51398h
Symbol: "foobar2000_get_interface" (+5D68h)

Loaded modules:
foobar2000                       loaded at 00BE0000h - 00DDD000h

Machine specifications:
OS: Windows 6.0.6002 Service Pack 2 x64
CPU: Intel(R) Core(TM) i7 CPU         965  @ 3.20GHz, features: MMX SSE SSE2 SSE3 SSE4.1 SSE4.2

I'll send the full dump as a PM if required. Should Vista still be supported? Yeah, I know...

Re: foo_chronflow

Reply #78
Thanks a lot for reporting that crash. Vista should still be supported, you crazy person :D.

This also doesn't look like an OS issue. Full dump would be very helpful, thx in advance.

*edit: Forgot to ask: When you say "crashes on startup", do you mean:
a) foobar crashes when you start it after adding the component
b) foobar crashes as soon as you add the panel
c) foobar crashes when you add the panel and then restart foobar

Re: foo_chronflow

Reply #79
Thanks a lot for reporting that crash. Vista should still be supported, you crazy person :D.

LOL, yeah, right?. I'd upgrade to 7, but I can't make myself install 10 and have Microsoft choose which files to delete and what bugs to "deploy", and when and all. But I digress...

fb2k crashes as soon as it tries to start, I get the UI for a brief moment, but then it shows the crash report dialog. With Chronflow 0.4.5 installed, still on fb2k 1.4.4, everything works again. So it's definately a regression with 0.5.0. The full dump was too large to post here, so I opened an issue at your GitHub (#2), with the dumps attached, stuck the pointer at the eye, and clicked. Kinda hurts every time... ;)

Quote
This also doesn't look like an OS issue.

Yeah, looks more like you stick a pointer where you shouldn't... ;)

Cheers,
Flexx

Re: foo_chronflow – Coverflow

Reply #80
New Release (v0.5.1):

  • Report current album as selection to foobar while the component has focus. This also enables support for the library viewer selection playlist.
  • Fixed bug in settings, preventing users from disabling cover follows playback.

https://github.com/Chronial/foo_chronflow/releases/download/v0.5.1/foo_chronflow.fb2k-component

You can use the library viewer selection playlist to see the contents of the currently selected album. Go to Settings -> Media Library and make sure that the library viewer selection playlist is enabled. This will give you a new playlist that will always contain the tracks of the album currently selected in foo_chronflow.

Re: foo_chronflow – Coverflow

Reply #81
Hello Chronial,

I think your component is fantastic.

I would like to make my covers flow verticaly, is that possible?

Also, it shows content of just my playlist. Is it possible to make it show covers from my whole librabry?

Thank you very much

Boris

Re: foo_chronflow – Coverflow

Reply #82
Are you sure you are using this component? This component can not show the content of your playlist – only the content of your whole library.

You can adjust the way the covers move in the "Cover Display" tab of the settings.

Re: foo_chronflow – Coverflow

Reply #83
Hi Chronial,

I am using version 0.5.1, and yes, if I send my whole music collection on playlist, it shows all album covers. But if I play only on album, and only that one is on playlist, Coverflow shows only that album cover. Or as many albums I have on my playlist.

In "Cover Display" tab all various modes of moving are using horizontal movement, except for spiral which runs slowly with very small thumbnails.

I have Coverflow in a panel, which is placed verticaly. I would like thumbnails to move up and down instead of left or right, because now I have a lot of empty space above or below it.

I use foobar Dark One v3.1

Thanks

Re: foo_chronflow – Coverflow

Reply #84
I made you vertical setup:
Code: [Select]
/*********************************************************/
/********************** COVER SETUP **********************/
/*********************************************************/

// Set the range of covers to draw.
//
// Returns: (leftmostCover, rightmostCover)
function drawCovers(){
return new Array(-15, 15);
}

// Set the position of a point on each cover.
//
// See also coverAlign() below
function coverPosition(coverId){
var x, y, z;
x = coverId*1;
y = 0;
z = -Math.abs(coverId)*0.8;
z = (straightCos(coverId)-1)*0.9;
return new Array(y, -x, z);
}


function straightCos(x){
if (Math.abs(x) < Math.PI/2)
return Math.cos(x);
else
return Math.PI/2 - Math.abs(x);
}



// Set which point of the cover coverPosition() defines.
//
// (-1,-1) means bottom left, (0,0) means center,
// (1,1) means top right, (0, -1) means bottom center etc.
//
// Returns: (x, y)
function coverAlign(coverId){
return new Array(0, 0);
}

// Set the rotation of each cover.
//
// Returns: (angle, x, y, z) - this rotates the cover
// `angle` degrees around the axis along (x,y,z). Per
// default, the covers are parallel to the x-y-plane.
function coverRotation(coverId){
return new Array(0, 0, 1, 0);
}

// Set the the size boundaries for the cover.
//
// Preserving its aspect ratio, the cover is scaled to fit
// inside the given rectangle.
//
// Returns: (width, height)
function coverSizeLimits(coverId){
return new Array(1.1, 1);
}

/*********************************************************/
/********************* CAMERA SETUP **********************/
/*********************************************************/

// Defines how the viewport behaves when the aspect ratio
// of the window changes.
//
// Returns: Expand into (width, height)
// If this returns (0,1), the height is fixed.
// If this returns (1,0), the width is fixed.
// Can also return mixed values, i.e. (1,2) for mixed
// scaling.
function aspectBehaviour(){
return new Array(1, 0);
}


// Set the position of the camera.
function eyePos(){
return new Array(0, 0, 1.4);
}

// Set the point that the camera is looking at.
function lookAt(){
return new Array(0, 0, 0);
}

// Set where up is.
//
// This can be used to rotate the view. The returned vector
// will point upwards in the viewport.
function upVector(){
return new Array(0, 1, 0);
}

/*********************************************************/
/********************* MIRROR SETUP **********************/
/*********************************************************/

// Decide whether the mirror should be rendered.
function showMirrorPlane(){
return false;
}

// Set an arbitrary point on the mirror plane.
function mirrorPoint(){
return new Array(-0.5, 0, 0);
}

// Set the normal vector of the mirror plane.
function mirrorNormal(){
return new Array(1, 0, 0);
}

Re: foo_chronflow – Coverflow

Reply #85
Thank you very much.

I works like a charm  :-) .

Boris

Coverflow - where are those nice & cool looking screenshots?

Reply #86
Hello,

I remember Coverflow from Apples iTunes and I've searched the last 5 pages for screenshots how this component would look like in other foobar2000 installations, but only found one single screenshot to delight myself.

I personally use a very plain and technical f2k design, no fancy gfx stuff, just a lot of info-text and buttons, so I guess, this component will not fit to my needs,
but I'd love to see how others integrate this component in their f2k installations.

Can someone post screenshots?

Re: foo_chronflow – Coverflow

Reply #87
Hello Chronial,

Thanks a lot for developing and maintaining this wonderful component.
I have a request.

Is it possible to increase the reaction time in the "Find As You type" feature.
I just cannot type fast enough the longer names.

Thanks

Re: foo_chronflow – Coverflow

Reply #88
Is it possible to increase the reaction time in the "Find As You type" feature.
I just cannot type fast enough the longer names.

Sorry, this is not adjustable at the moment. You have one second between each keypress.

I might add a setting for this in the future, but I'm a bit reluctant because I don't want to add to many settings and I assume the current state is fine for 99% of the users.

Re: foo_chronflow – Coverflow

Reply #89
Sorry, this is not adjustable at the moment. You have one second between each keypress.

I might add a setting for this in the future, but I'm a bit reluctant because I don't want to add to many settings and I assume the current state is fine for 99% of the users.
Ok, Thanks for answering. Maybe I get lucky in the future...

Re: foo_chronflow – Coverflow

Reply #90
I just thought of at least a quick workaround that might help a bit: You can just press any key to extend the delay, e.g. spacebar. Ideally it's a key that doesn't match an album, because then it's also ignored. Otherwise you'd have to delete it again.

Re: foo_chronflow – Coverflow

Reply #91
Thanks, I'm gonna try that.
Should be possible because I am a "type with two fingers" guy (you probably already guessed that  ;)), so I always have a finger free!

Re: foo_chronflow – Coverflow

Reply #92
I have circle setup, I would like to share O:). Play with constants, atleast what I call it :)). Enjoy!!!

Code: [Select]
/*********************** CONSTANTS ***********************/

//play with these constants below

var coverStackOffset=1.25; //offset from the origin to the circle
var coverXPos=0; //current cover x position
var radius=3; //circle radius
var numberOfCovers=72; //cover accomedation

/*********************************************************/
/************************* SETUP *************************/
/*********************************************************/
var coverIdAbs=0.0;
var animating=false;
var theta=0.0;

/*********************** FUNCTIONS ***********************/
function isAnimating(coverId){
animating=false; //sets the global variable animating
coverIdAbs=Math.abs(coverId); //sets the global variable coverIdAbs
var diff=coverIdAbs-Math.floor(coverIdAbs);
if(diff>0 && diff<1)
animating=true; //sets the global variable animating
}

function setTheta(coverId){
theta=(180+coverId*(360/numberOfCovers)); //sets the global variable theta
}

function degToRad(deg){
return Math.PI*deg/180.0;
}

/*********************************************************/
/********************** COVER SETUP **********************/
/*********************************************************/

function drawCovers(){
var covers=Math.floor(numberOfCovers/2);
return new Array(-covers, covers);
}

function coverPosition(coverId){
isAnimating(coverId);
setTheta(coverId);
var x, y, z;
//circle equation (x-a)2+(y-b)2+(z-c2)=r2
//y axis is ignored
x = radius*Math.cos(degToRad(theta))+(radius+coverStackOffset); //(x-a)=r*cos(theta)
y = 0;
z = -radius*Math.sin(degToRad(theta)); //(z-c)=r*sin(theta)
if(coverId==0){
x=coverXPos;
}
if(coverIdAbs<1){
x=coverXPos+((coverStackOffset-coverXPos)*coverIdAbs);
}
return new Array(x, y, z);
}

function coverAlign(coverId){
isAnimating(coverId);
setTheta(coverId)
return new Array(0, -1);
}

function coverRotation(coverId){
isAnimating(coverId);
setTheta(coverId);
var angle=theta-180;
return new Array(angle, 0, 1, 0);
}

function coverSizeLimits(coverId){
isAnimating(coverId);
setTheta(coverId)
return new Array(1, 1);
}

function aspectBehaviour(){
return new Array(0,1);
}


function eyePos(){
return new Array(0, 1.25, 1.75);
}

function lookAt(){
return new Array(0, 0.5, 0);
}

function upVector(){
return new Array(0, 1, 0);
}

/*********************************************************/
/********************* MIRROR SETUP **********************/
/*********************************************************/

function showMirrorPlane(){
return true;
}

function mirrorPoint(){
return new Array(0, 0, 0);
}

function mirrorNormal(){
return new Array(0, 1, 0);
}

Re: foo_chronflow – Coverflow

Reply #93
Circle with large cover


Code: [Select]
/*********************** CONSTANTS ***********************/

//play with these constants below

var coverStackOffset=3; //offset from the origin to the circle
var coverXPos=0; //current cover x position
var radius=4; //circle radius
var numberOfCovers=72; //cover accomedation
var mainCoverSize=4;
var range=1.5; //>0

/*********************************************************/
/************************* SETUP *************************/
/*********************************************************/
var coverIdAbs=0.0;
var animating=false;
var theta=0.0;

/*********************** FUNCTIONS ***********************/
function isAnimating(coverId){
animating=false; //sets the global variable animating
coverIdAbs=Math.abs(coverId); //sets the global variable coverIdAbs
var diff=coverIdAbs-Math.floor(coverIdAbs);
if(diff>0 && diff<1)
animating=true; //sets the global variable animating
}

function setTheta(coverId){
theta=(180+coverId*(360/numberOfCovers)); //sets the global variable theta
}

function degToRad(deg){
return Math.PI*deg/180.0;
}

/*********************************************************/
/********************** COVER SETUP **********************/
/*********************************************************/

function drawCovers(){
var covers=Math.floor(numberOfCovers/2);
return new Array(-covers, covers);
}

function coverPosition(coverId){
isAnimating(coverId);
setTheta(coverId);
var x, y, z;
//circle equation (x-a)2+(y-b)2+(z-c2)=r2
//y axis is ignored
x = radius*Math.cos(degToRad(theta))+(radius+coverStackOffset); //(x-a)=r*cos(theta)
y = 0;
z = -radius*Math.sin(degToRad(theta)); //(z-c)=r*sin(theta)
if(coverIdAbs<range){
x=coverXPos+((x-coverXPos)*coverIdAbs*(1/range));
}
return new Array(x, y, z);
}

function coverAlign(coverId){
isAnimating(coverId);
setTheta(coverId)
return new Array(0, -1);
}

function coverRotation(coverId){
isAnimating(coverId);
setTheta(coverId);
var angle=theta-180;
return new Array(angle, 0, 1, 0);
}

function coverSizeLimits(coverId){
isAnimating(coverId);
setTheta(coverId)
var t=mainCoverSize-(mainCoverSize-1)*(coverIdAbs)*(1/range);
if(coverIdAbs<range){
return new Array(t,t);
}
return new Array(1, 1);
}

function aspectBehaviour(){
return new Array(0,1);
}


function eyePos(){
return new Array(-2, 2.5, 5);
}

function lookAt(){
return new Array(0, mainCoverSize/2, 0);
}

function upVector(){
return new Array(0, 1, 0);
}

/*********************************************************/
/********************* MIRROR SETUP **********************/
/*********************************************************/

function showMirrorPlane(){
return true;
}

function mirrorPoint(){
return new Array(0, 0, 0);
}

function mirrorNormal(){
return new Array(0, 1, 0);
}

Re: foo_chronflow – Coverflow

Reply #94
A curious thing happens to me, although I have updated coverflow several times:
The title of the song that it shows does not correspond to the one that is playing. The album is always the right one



You can see the contradiction in the screenshot: In the chronflow - Preview preferences box the song that shows is the correct one: Bruce Springsteen - Born to run
But in the crhonflow window it shows another song from the album: Backstreets
Any solution?
Ignasi

Re: foo_chronflow – Coverflow

Reply #95
A curious thing happens to me, although I have updated coverflow several times:
The title of the song that it shows does not correspond to the one that is playing. The album is always the right one

Any solution?

There is no solution, only an explanation :). Chronflow works with albums, not songs. It will always pick a random song from the album as input for the title formatting. That the preview displays what you want is just coincidence.

Re: foo_chronflow – Coverflow

Reply #96
Great job on the update. Even .png images display cleanly now. Kudos.

I would recommend someone changes the warning that reads "Repeated crash reports; component no longer under development," under this plug-in found at the top of the page that automatically pops up from Foobar's Online Troubleshooter link in the Help Menu.
 
Neither an audiophile, nor album snob. Why do ratings threads always have someone saying they don't believe in rating music?
Record Label Icons: 600x600 pngs appropriate for any color background:
freeimage.host/johnbuck/?list=images&sort=name_asc&page=1

Re: foo_chronflow – Coverflow

Reply #97
Thanks for the kind words :).

Regarding the crash reports, I think I will have to contact Peter about that, will do.

 

Re: foo_chronflow – Coverflow

Reply #98
Recently updated from 0.4.5 to 5.1 and have an issue now: The displayed cover doesn't follow the played track anymore. When I start a song by double clicking it in a random self generated playlist (all files are in my media library) Chronflow won't automatically display the album playing anymore. I can chose an album in Chronflow and it will play in the chronflow-playlist though.

I am 100% positive that this change in behavior was because of the update (or another component update? I use columns_ui) because  I replicated it with my old laptop today: Up until today it had version 0.4.5 and it worked like a charm than after the update it has the same issue as my main system.

Re: foo_chronflow – Coverflow

Reply #99
I just tested a backup of 0.4.5 - it works flawlessly, so the change in behavior is really because of the update to the current version.