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 72487 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

foo_chronflow

Reply #50
Chronial, thanks for you help!
I removed foo_dop.dll (iPod manager) and Chronflow is started successfully.
I had added this component very very long ago and it is transfered from foobar to foobar 

foo_chronflow

Reply #51
This is such a cool plugin. Great work.

I have a question about the actions between foo_chronflow and album list.

Edit layout with default UIs and create a playlist as below:


After launching foobar2k, I click any songs in playlist and cover on foo_chronflow changes to correct one.
Once I do actions on foo_chronflow (click, scroll, etc..), go back to click songs on playlist and foo_chronflow fails to change cover automatically.

It seems if I do nothing to foo_chronflow and cover change always works.
Is there any limitation and design concern?

foo_chronflow

Reply #52
Have a look at the settings, behaviour tab. There is an option “Displayed cover follows playing track, after seconds of inactivity:”. You probably want to reduce the number there, it is set to 60 by default. I personally use 15 – maybe you want even less.

foo_chronflow

Reply #53
Have a look at the settings, behaviour tab. There is an option “Displayed cover follows playing track, after seconds of inactivity:”. You probably want to reduce the number there, it is set to 60 by default. I personally use 15 – maybe you want even less.


Hi Chronial
Thank you for explanation.  I now realize what this option for.

Gonna update all my foobar2k. 

foo_chronflow

Reply #54
For some reason, the latest version of ChronFlow yields an error message in Foobar that it is not a valid dll file.  Perhaps the foo_chronflow.fb2k-component has gotten corrupted online?  I have installed the 32-bit VisualBasic 2013 Runtime, but to no avail.  Pity, because this newly-revamped ChronFlow was a great Foobar compontent when i'd used it before with older versions of Foobar.

foo_chronflow

Reply #55
I'm pretty sure the file is fine – it seems to work for everybody else. Maybe download it again and try it in a fresh portable foobar.

foo_chronflow

Reply #56
I tried that too, but I still get the same error message in Foobar that it's not a valid Win32 application.  Dependency Walker seems to indicate it's a Windows 10 problem; OS is missing files or not recognizing some system file locations.

 

foo_chronflow

Reply #57
Hi I guess it is related: I  just started getting some crashes with chronflow. I'm with Windows 10 (latest update) too.

Code: [Select]
Illegal operation:
Code: C0000005h, flags: 00000000h, address: 089A11A8h
Access violation, operation: read, address: 00000004h

Call path:
Chronflow AsynchTexLoader

Code bytes (089A11A8h):
089A1168h:  8B E5 5D C2 04 00 CC CC 55 8B EC 83 EC 24 A1 E0
089A1178h:  D9 A0 08 BA 04 D5 A0 08 39 05 04 D5 A0 08 53 56
089A1188h:  57 8D 75 F4 89 45 F4 0F 4D D6 89 4D F0 8B 71 04
089A1198h:  8D 79 04 8D 45 FC C7 45 FC 00 00 00 00 50 8B 1A
089A11A8h:  FF 76 04 FF 15 D0 34 9E 08 85 C0 74 03 89 46 08
089A11B8h:  8B 3F 8D 45 FC 8B 75 FC 50 C7 45 FC 00 00 00 00
089A11C8h:  FF 77 04 FF 15 CC 34 9E 08 85 C0 74 03 89 47 08
089A11D8h:  8B 45 FC 66 0F 6E CE 8B 4D F0 0F 5B C9 66 0F 6E

foo_chronflow

Reply #58
Am I the only one experiencing crashes with Chronflow?

foo_chronflow

Reply #59
Can you post the full crash report? Or ideally send me the .txt and .dmp via pm.

foo_chronflow

Reply #60
pm sent

foo_chronflow

Reply #61
Thx, I managed to track it down: It's a bug in the new cover loading code – if that encounters an invalid image that it can't open it crashes :/.

I will try to fix this soon but am short on time at the moment. Till then you can go to the chronflow preferences->album source and untick "ignore sources and use foobar's cover image lookup". This will activate the old cover loading code that does not have this bug.

foo_chronflow

Reply #62
Fixed it . It is actually surprising that you are the first to report this crash. But I guess most people just don't have broken image files in their music collection.

New Release (v0.4.5):
  •   Fixed crash on invalid images
  • Changed config to better defaults

foo_chronflow

Reply #63
It works perfectly now. Indeed, I had one invalid image that was added recently!

foo_chronflow

Reply #64
I wonder if someone could help me, ChronFlow is failing to fetch a cover. Initially it didn't had any, used Album Art Dler to get the cover, cover.jpg file saved to the album directory, and so far CF hasn't detect it.

Refreshed CF (F5)
Reinstalled CF
Even placed another cover in the album dir, just to make sure the cover wasn't damaged or something, no results.

foo_chronflow

Reply #65
Does the cover appear in the DUI album art display?


foo_chronflow

Reply #67
But it happens only with this one album? Anything specific about it?

foo_chronflow

Reply #68
But it happens only with this one album? Anything specific about it?


Found the problem (sort of) renamed the folder as it was, basically deleted the name and hand typed it, perhaps there was some sort of "illegal" character.

Working now.

Re: foo_chronflow

Reply #69
If you get a "This component is missing a required dependency, or was made for different version of foobar2000." error when starting foobar, you are probably missing the "Visual C++ Redistributable Package for Visual Studio 2013". You can download that from Microsoft. Note that you need the 32bit version (vcredist_x86.exe).

If you still get that error, you might need to install Windows Script Control, but newer versions of windows should already have it.

I have installed both of them but still have that issue, why?
Something to do?
Thanks

Re: foo_chronflow

Reply #70
Hi all, haven't used fb2k for awhile until recently, glad to see Chronial back on Chronflow (even if it was a year ago).
Anyway, I gathered all the configs that I had in my old installation, that are not bundled with Chronflow, most taken from the old thread and some from skins (sorry, can't remember the original author if not mentioned within the config), plus my interpretation of Vinyl Collection to fit in DarkOne's left panel (see attatched pic), so, here they are.

Code: [Select]
// General Notes:
// Most of these functions return an array with 3 elements
// These are the x,y,z coordinates in 3d-space
// x is left to right
// y is bottom to top
// z is front to back


/************************* COVER DISPLAY *****************/
// These functions define the Display of the single Covers
// The given parameter coverId is a floating point number.
// It is 0 for the center cover, 1 for the one right
// beneath it, -1 for the one on the left side and so on.
// During movement the values float between the integer
// values.
function coverPosition(coverId){
var x, y, z;
y = 0;
if (Math.abs(coverId) <= 1){ // The centered cover
z = 1 + 2.7 * (1 - Math.abs(coverId));
x = coverId;
} else { // The covers on the side
z = 1 - (Math.abs(coverId)-1) * 0.15;
x = 1 + 0.5 * (Math.abs(coverId)-1);
if (coverId < 0)
x *= -1;
}
return new Array(x, y, z);
}
// return array is (angle, x, ,y, z) - this rotates
// the cover *angle* degrees around the vector (x,y,z)
// With (0,0,0,0) the cover is parallel to the y-z-Plane
function coverRotation(coverId){
var angle;
if (Math.abs(coverId) < 1){ // The centered cover
angle = coverId * -70;
} else { // The covers on the side
if (coverId > 0)
angle = -70;
else
angle = 70;
}
return new Array(angle, 0, 1, 0);
}

// Sets 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.
// The cover is also rotated around this point.
function coverAlign(coverId){
return new Array(0, -1);
}

// Defines the the size boundaries for the cover.
// Aspect ratio is preserved.
// Return Array is (widht, height)
function coverSizeLimits(coverId){
if (Math.abs(coverId) < 1){ // The centered cover
var w, h;
w = 1;
h = 1;
// Shrinks the centered cover to a height of 1
if (Math.abs(coverId) > 0.5)
h = 1 + (Math.abs(coverId) - 0.5)*2;
// Allows the centered cover to have a width of 2.5;
if (Math.abs(coverId) < 0.5)
w = 1 + (0.5 - Math.abs(coverId))*3;
return new Array(w, h);
} else { // The covers on the side
return new Array(1, 2);
}
}

// Defines the range of covers to draw.
// Return array is (leftmostCover, rightmostCover)
// This interval shouldn't be larger than 80
// The center cover is 0.
function drawCovers(){
return new Array(-21, 40);
}


// In which direction should the fov be expanded/shrinked
// when the panel is resized?
// If this returns (0,1), the height is fixed.
// If this returns (1,0), the width is fixed.
// You can also return stuff like (0.5,0.5) or (7, 3)
// The values determine how important it is for this
// dimension to stay fixed.
function aspectBehaviour(){
return new Array(0,1);
}

/************************** CAMMERA SETUP ****************/
// Position of the viewport
function eyePos(){
return new Array(0, 0.76, 5.7);
}
// Defines the point for the eye to look at
function lookAt(){
return new Array(1.02, -0.5, 0);
}
// Used to rotate the view.
// The returned Vector points upwards in the viewport.
// This vector must not be parallel to the line of sight from the
// eyePos point to the lookAt point.
function upVector(){
return new Array(0, 1, 0);
}

/************************** MIRROR SETUP *****************/
function showMirrorPlane(){
return true; // return false to hide the mirror
}
// Any Point on the Mirror Plane
function mirrorPoint (){
return new Array(0, 0, 0);
}
// Normal of the Mirror Plane
function mirrorNormal (){
return new Array(0, 1, 0);
}

Code: [Select]
//----------------------------------------------------//
// THE CIRCLE
// by subsonic
//

var num = 60;
// NUMBER OF COVERS DISPLAYED IN THE CIRCLE
// NO NEGATIVE VALUES!! SHOULD BE > 2

var r = 5;
// RADIUS OF THE CIRCLE
// ALSO AFFECTS THE CAMERA

var rotation = 90;
// ANGLE OF THE COVERS IN THE CIRCLE
// 90 = POINTING TO CENTER

var o = 1;
//AFFECTS THE SYMMETRY!
//
// THIS SHOULD BE 1 OR -1 ONLY!
// -1 = symmetric circle
// 1 = asymmetric


var width = 1.2;
//SIZE OF THE OUTER COVERS

var width_center = 5;
//SIZE OF THE CENTER COVER




//------------- DONT EDIT BELOW
//----- only if you know what you're doing





var p = Math.ceil(num/2);
if(num/p != 2) { num++; }

function coverPosition(coverId){
var x, y, z; y = 0;
x = r*Math.sin(coverId*Math.PI/p);
z = r*Math.cos(coverId*Math.PI/p);
if ((Math.abs(coverId) <= 0.5) && (Math.abs(coverId) >= 0)) {
z = 0.2;
x = 0;
y = -Math.abs(coverId)*(width_center+2)*2;
} else if ((Math.abs(coverId) <= 1) && (Math.abs(coverId) > 0.5)) {
y = -(width+1.2) + (width+1.2)*Math.abs(coverId)*Math.abs(coverId);
} else if(Math.abs(coverId) > p) {
x = 0; y=0; z = -40;
}

return new Array(x, y, z);
}

function coverRotation(coverId){
if (Math.abs(coverId) <= 0.5){
return new Array(-10, 1, 0, 0);
} else {
angle = coverId*(180/p) - rotation;
if(coverId < 0) {
angle = coverId*(180/p) - o*rotation;
}
return new Array(angle, 0, 1, 0);
}
}

function coverSizeLimits(coverId){
if (Math.abs(coverId) < 0.5) {
return new Array(width_center, width_center+1);
}
else {
return new Array(width, width+1);
}
}

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

function drawCovers(){
return new Array(-p, p);
}

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

/************************** CAMERA SETUP ****************/
function eyePos(coverId){
return new Array(0, r*2.3, r*3.3);
}

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

// Used to rotate the view.
// The returned Vector points upwards in the viewport.
// This vector must not be parallel to the line of sight from the
// eyePos point to the lookAt point.
function upVector(){
return new Array(0, 1, 0);
}

/************************** MIRROR SETUP *****************/
function showMirrorPlane(){
return true; // return false to hide the mirror
}

// Any Point on the Mirror Plane
function mirrorPoint(){
return new Array(0, 0, 0);
}

// Normal of the Mirror Plane
function mirrorNormal(){
return new Array(0, 1, 0);
}

Code: [Select]
// Author: mil3s

// General Notes:
// Most of these functions return an array with 3 elements
// These are the x,y,z coordinates in 3d-space
// x is left to right
// y is bottom to top
// z is front to back

var coverSpacing = 0.05;

/************************* COVER DISPLAY *****************/
// These functions define the Display of the single Covers
// The given parameter coverId is a floating point number.
// It is 0 for the center cover, 1 for the one right
// beneath it, -1 for the one on the left side and so on.
// During movement the values float between the integer
// values.
function coverPosition(coverId){
    var x, y, z;
    y = 0;
    if (Math.abs(coverId) <= 1){ // The centered cover
        z = 4 + 0.5 * (1 - Math.abs(coverId));
        x = coverId * 0.875;
    } else { // The covers on the side
        z = 4 - (Math.abs(coverId)-1) * 0.01;
        x = 0.875 + coverSpacing * (Math.abs(coverId)-1);
        if (coverId < 0)
            x *= -1;
    }
    return new Array(x, y, z);
}

// return array is (angle, x, y, z) - this rotates
// the cover *angle* degrees around the vector (x,y,z)
// With (0,0,0,0) the cover is parallel to the x-y-Plane
function coverRotation(coverId){
    var angle;
    if (Math.abs(coverId) < 1){ // The centered cover
        angle = coverId * -60;
    } else { // The covers on the side
        if (coverId > 0)
            angle = -60;
        else
            angle = 60;
    }
    return new Array(angle, 0, 1, 0);
}

// Defines the the size boundaries for the cover.
// Aspect ratio is preserved.
// Return Array is (widht, height)
function coverSizeLimits(coverId){
    return new Array(1, 1);
}


// Sets 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.
// The cover is also rotated around this point.
function coverAlign(coverId){
    return new Array(0, -1);
}


// Defines the range of covers to draw.
// Return array is (leftmostCover, rightmostCover)
// This interval shouldn't be larger than 80
// The center cover is 0.
function drawCovers(){
    return new Array(-30, 30);
}


// In which direction should the fov be expanded/shrinked
// when the panel is resized?
// If this returns (0,1), the height is fixed.
// If this returns (1,0), the width is fixed.
// You can also return stuff like (0.5,0.5) or (7, 3)
// The values determine how important it is for this
// dimension to stay fixed.
function aspectBehaviour(){
    return new Array(0, 1);
}

/************************** CAMMERA SETUP ****************/
// Position of the viewport
function eyePos(){
    return new Array(0, 1.15, 6.1);
}
// Defines the point for the eye to look at
function lookAt(){
    return new Array(0, -1.15, 0);
}
// Used to rotate the view.
// The returned Vector points upwards in the viewport.
// This vector must not be parallel to the line of sight from the
// eyePos point to the lookAt point.
function upVector(){
    return new Array(0, 1, 0);
}

/************************** MIRROR SETUP *****************/
function showMirrorPlane(){
    return true; // return false to hide the mirror
}
// Any Point on the Mirror Plane
function mirrorPoint (){
    return new Array(0, 0, 0);
}
// Normal of the Mirror Plane
function mirrorNormal (){
    return new Array(0, 1, 0);
}

Code: [Select]
// General Notes:
// Most of these functions return an array with 3 elements
// These are the x,y,z coordinates in 3d-space
// x is left to right
// y is bottom to top
// z is front to back


/************************* COVER DISPLAY *****************/
// These functions define the Display of the single Covers
// The given parameter coverId is a floating point number.
// It is 0 for the center cover, 1 for the one right
// beneath it, -1 for the one on the left side and so on.
// During movement the values float between the integer
// values.
function coverPosition(coverId){
   var x, y, z;
   y = 0;
   if (Math.abs(coverId) <= 1){ // The centered cover
      z = 1 + 3 * (1 - Math.abs(coverId));
      x = coverId;
   } else { // The covers on the side
      z = 1 + (Math.abs(coverId)-1) * 1;
      x = 1 + 0.5 * (Math.abs(coverId)-1);
      if (coverId < 0)
         x *= -1;
   }
   return new Array(x, y, z);
}
// return array is (angle, x, ,y, z) - this rotates
// the cover *angle* degrees around the vector (x,y,z)
// With (0,0,0,0) the cover is parallel to the y-z-Plane
function coverRotation(coverId){
   var angle;
   if (Math.abs(coverId) < 1){ // The centered cover
      angle = coverId * -70;
   } else { // The covers on the side
      if (coverId > 0)
         angle = -70;
      else
         angle = 70;
   }
   return new Array(angle, 0, 1, 0);
}

// Sets 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.
// The cover is also rotated around this point.
function coverAlign(coverId){
   return new Array(0, -1);
}

// Defines the the size boundaries for the cover.
// Aspect ratio is preserved.
// Return Array is (widht, height)
function coverSizeLimits(coverId){
   if (Math.abs(coverId) < 1){ // The centered cover
      var w, h;
      w = 1;
      h = 1;
      // Shrinks the centered cover to a height of 1
      if (Math.abs(coverId) > 0.5)
         h = 1 + (Math.abs(coverId) - 0.5)*2;
      // Allows the centered cover to have a width of 2.5;
      if (Math.abs(coverId) < 0.5)
         w = 1 + (0.5 - Math.abs(coverId))*3;
      return new Array(1.35, 1.35);
   } else { // The covers on the side
      return new Array(1, 2);
   }
}

// Defines the range of covers to draw.
// Return array is (leftmostCover, rightmostCover)
// This interval shouldn't be larger than 80
// The center cover is 0.
function drawCovers(){
   return new Array(-20, 20);
}


// In which direction should the fov be expanded/shrinked
// when the panel is resized?
// If this returns (0,1), the height is fixed.
// If this returns (1,0), the width is fixed.
// You can also return stuff like (0.5,0.5) or (7, 3)
// The values determine how important it is for this
// dimension to stay fixed.
function aspectBehaviour(){
   return new Array(0,1);
}

/************************** CAMMERA SETUP ****************/
// Position of the viewport
function eyePos(){
    return new Array(0, 0.6, 6);
}
// Defines the point for the eye to look at
function lookAt(){
   return new Array(0, 0.6, 0);
}
// Used to rotate the view.
// The returned Vector points upwards in the viewport.
// This vector must not be parallel to the line of sight from the
// eyePos point to the lookAt point.
function upVector(){
   return new Array(0, 1, 0); 
}

/************************** MIRROR SETUP *****************/
function showMirrorPlane(){
   return true; // return false to hide the mirror
}
// Any Point on the Mirror Plane
function mirrorPoint (){
   return new Array(0, 0, 0);
}
// Normal of the Mirror Plane
function mirrorNormal (){
   return new Array(0, 1, 0);
}

Code: [Select]
// Original Concept: Martin Gloderer
// Mod: host505

var viewFromLeftSide = false;
var coverSpacing = 0.07;


function coverPosition(coverId){
var z = -coverId * coverSpacing;
return new Array(0.2, 0.4, z);
}

function coverRotation(coverId){
var angle;
if (coverId < -0.7){
angle = 34;
} else if (coverId >= -0.7 && coverId <= -0.3) {
angle = -32 * (1 + (coverId + 0.3) * 5);
} else { // coverId > -0.3
angle = -45;
}
angle += 25;
return new Array(angle,1,0,0);
}

function coverAlign(coverId){ return new Array(-2, -1) }
function coverSizeLimits(coverId){ return new Array(1, 1) }

function drawCovers(){ return new Array(-7, 17) }
function aspectBehaviour(){ return new Array(0,1) }

function eyePos(){
var x = 1;
if (viewFromLeftSide) x *= -1;
return new Array(0.5, 1.7, 1.8);
}
function lookAt(){ return new Array(1, 1, 0.4) }
function upVector(){ return new Array(-0.08, 1, 0) }

function showMirrorPlane(){ return false; }

Re: foo_chronflow

Reply #71
I just released a new version (v0.5.0). Changes:

  • Major rewrite for improved stability
  • Various performance optimizations
  • Automatically stay in sync with foobar library
  • Better visual find as you type feedback
  • Use default colors from main ui

Re: foo_chronflow

Reply #72
Thx Chronial, but help me. I want to sort by Folder (same coverflow by Br3tt)

Re: foo_chronflow

Reply #73
Thx Chronial, but help me. I want to sort by Folder (same coverflow by Br3tt)

That is not very detailed explanation :). Maybe you want to set "$directory_path(%_path%)" as you grouping and sorting string?

Re: foo_chronflow

Reply #74
It's a great component and I'm really thrilled to see that it is still supported.
For the time being however, in my installation it's causing a weird side effect:

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.