Hydrogenaudio Forums

Hosted Forums => foobar2000 => 3rd Party Plugins - (fb2k) => Topic started by: Chronial on 2015-02-20 04:29:43

Title: foo_chronflow – Coverflow
Post by: Chronial on 2015-02-20 04:29:43
After a 7 year development break, it’s time to bring back foo_chronflow. For those of you that don’t know it: It’s a coverflow display for your foobar2000 database and looks like this:

(http://chronial.de/foobar2000/foo_chronflow-1000.jpg)
But that is just one possibility, as the display is highly customizable. The plugin supports both columns ui and default ui.

The latest release and changelog can be found on github: https://github.com/Chronial/foo_chronflow/releases/latest (https://github.com/Chronial/foo_chronflow/releases/latest)

Some quick notes on things that might not be discoverable:
Some more infos can be found on the old wiki page (http://wiki.hydrogenaud.io/index.php?title=Foobar2000:Components_0.9/Chronial%27s_Coverflow_%28foo_chronflow%29). And then there are also the two (http://www.hydrogenaud.io/forums/index.php?showtopic=55607) old (http://www.hydrogenaud.io/forums/index.php?showtopic=63982) threads.

If you want to contribute to this project, I'm always looking for new Cover Display Configs. So if you have a nice one, please post it here (ideally inside a codebox and with a screenshot).

Find as you type demonstration:
(http://chronial.de/foobar2000/foo_chronflow-fayt.gif) (http://chronial.de/foobar2000/foo_chronflow-fayt.mp4)
Title: foo_chronflow
Post by: Falstaff on 2015-02-20 07:36:30
Welcome back to chronflow, that sounds goods, thank you Chronial
Title: foo_chronflow
Post by: MaCs on 2015-02-21 02:18:43
Good news!

Possible bug: the "frame width" option in the Display tab does not seem to do anything.
Title: foo_chronflow
Post by: Chronial on 2015-02-21 07:03:48
Are you sure? There should be an outline around the currently selected cover in the same color as the text. Frame with changes the thickness of that outline.
Title: foo_chronflow
Post by: MyMaster on 2015-02-21 11:12:00
Is there any chance that we could get it for columns ui?
Title: foo_chronflow
Post by: Chronial on 2015-02-21 14:08:14
If there is a lot of demand, I will think about it. It’s just not very nice for me to support, as I don’t use columns ui.
Title: foo_chronflow
Post by: MachineHead on 2015-02-21 14:35:24
Embedded images in the works?
Title: foo_chronflow
Post by: The Link on 2015-02-21 14:53:13
Embedded images in the works?
Using the foobar api this should work automatically imho.
Title: foo_chronflow
Post by: MaCs on 2015-02-21 19:30:36
Are you sure? There should be an outline around the currently selected cover in the same color as the text. Frame with changes the thickness of that outline.

That's weird, it doesn't do anything here... But don't lose time on this, that's not a problem for me.
Title: foo_chronflow
Post by: Chronial on 2015-02-21 19:44:11
New Release (v0.4.1):
Title: foo_chronflow
Post by: NEMO7538 on 2015-02-24 06:29:58
Nice !
Could we have an option to restrict the display to the current playlist ?
Title: foo_chronflow
Post by: Chronial on 2015-02-24 14:30:12
Restricting the display to the current playlist has always been a frequent request, but unless I miss something that would require a lot more changes, and basically turn this into a different component.

This component is a library viewer. Its main functional purpose is to be used to create/extend playlists from library content. That results in the following assumptions:

Turning this component into a playlist viewer would invalidate all these assumptions and also change the underlying data structure (tracks vs library entries). As I very clearly intend foo_chronflow to be a library viewer, it is unlikely that I will ever go through the effort of also making it a playlist viewer.
Title: foo_chronflow
Post by: bulletproof2k on 2015-02-28 20:28:05
Hello!
This version does not appear in the Popup panels?
If covers are sewn into the files, what to write in the "Resources"?

Sorry for the bad english.
Title: foo_chronflow
Post by: fbuser on 2015-02-28 20:53:25
This version does not appear in the Popup panels?
No, because foo_chronflow is now a Default UI component. Popup panels only support Columns UI components.
Title: foo_chronflow
Post by: mjm716 on 2015-02-28 23:38:17
is there a way to get wildcard filetypes to work, e.g. cover.*
Title: foo_chronflow
Post by: bulletproof2k on 2015-03-01 12:53:35
This version does not appear in the Popup panels?
No, because foo_chronflow is now a Default UI component. Popup panels only support Columns UI components.

Ok, this is a great component that advise for CUI ?

is there a way to get wildcard filetypes to work, e.g. cover.*

You mean "cover.jpg" ???
Title: foo_chronflow
Post by: Chronial on 2015-03-02 17:21:09
Quote
If covers are sewn into the files, what to write in the "Resources"?

Embedded covers are not supported at the moment.

Quote
is there a way to get wildcard filetypes to work, e.g. cover.*

Wildcards are not supported at the moment.

Fixing these issues by moving to the build-in cover support is at the top of my todo-list .
Title: foo_chronflow
Post by: bulletproof2k on 2015-03-03 07:53:37
Ok, thank U
Title: foo_chronflow
Post by: Chronial on 2015-09-07 00:40:55
New Release (v0.4.2):
Title: foo_chronflow
Post by: Chronial on 2015-09-07 02:32:37
Supporting embedded album art turns out to be harder than expected – it is so slow that just loading the images when needed is not fast enough. I will probably have to cache the album art. Looking into that .
Title: foo_chronflow
Post by: dinodisc on 2015-09-14 22:44:42
Thank you very much for this brilliant component, I love it!
Title: foo_chronflow
Post by: nightfishing on 2015-09-18 07:42:25
Great to see Chronflow alive!

Any chance something along the lines of" hover shows back cover" could be possible?
Title: foo_chronflow
Post by: Chronial on 2015-09-19 17:28:43
Any chance something along the lines of" hover shows back cover" could be possible?

In general: yes. Any time soon: Probably not.

Implementing that does not fit the current architecture very well. For now my recommended workaround is to drag&drop the album in the playlist and have a look there.
Title: foo_chronflow
Post by: Chronial on 2015-09-26 10:21:59
New Release (v0.4.3):
This release changes quite a lot of the internals of the component. That might have introduced some new bugs, but the component should mostly be *a lot* more stable now.

(big thanks to Zao, whose open source foo_wave_seekbar motivated me to add support for columns_ui again )
Title: foo_chronflow
Post by: 2tec on 2015-09-26 14:41:45
New Release (v0.4.3)

Thanks, a great component is getting greater!
Title: foo_chronflow
Post by: MaCs on 2015-09-26 16:08:18
Great, performance seems to have improved a lot!

Is there a reason why collection wrap around has been removed? Would it be possible to have it as an option?
Title: foo_chronflow
Post by: dinodisc on 2015-09-26 21:58:10
Thanks for the update!
Is there a reason why collection wrap around has been removed? Would it be possible to have it as an option?
+1 
Title: foo_chronflow
Post by: Chronial on 2015-09-27 10:44:44
Is there a reason why collection wrap around has been removed? Would it be possible to have it as an option?

I simply didn't like it anymore so it didn't survive the rewrite . I'll think about adding it as an option.
But first: 

New Release (v0.4.3.1):

And could a mod please change the description of this thread to mention columns_ui support?
Title: foo_chronflow
Post by: marc2003 on 2015-09-27 10:56:27
^i think if you contact an admin like Peter or kode54, you can ask for "developer" status. this gives you the right to edit your own posts.
Title: foo_chronflow
Post by: Lesmo16 on 2015-09-27 11:59:29
After updating from v0.4.2 to 0.4.3.1 the action "Replace Default Playlist" does not work with DoubleClick.
Using  the Enter key works as usual.
Title: foo_chronflow
Post by: Chronial on 2015-09-27 16:37:35
After updating from v0.4.2 to 0.4.3.1 the action "Replace Default Playlist" does not work with DoubleClick.
Using  the Enter key works as usual.

Thanks for reporting. Looks like I broke double click handling in 0.4.3. Fixed in:

New Release (v0.4.4):
Please use and test this release. The embedded album art causes slower album art loading, but I think it's acceptable (or at least justifiable ). If I don't hear any complaints about performance, I'm going to remove support for my self-made cover loading soon.
Title: foo_chronflow
Post by: Lesmo16 on 2015-09-27 17:21:48
Thanks for the quick fix, Chronial. Works fine now!

Just let me explain an other unexpected behavior of Chronflow (all versions).

Assume an album with 3 discs.
5 Tracks on disc 1 and 3 tracks on disc 2 and 3.
Files named like in the list below.

Code: [Select]
playlist sent by     playlist sent by
Facets or            Chronflow
AlbumList

101. Track_1         101. Track_1
102. Track_2         201. Track_1
103. Track_3         301. Track_1
104. Track_4         102. Track_2
105. Track_5         202. Track_2
201. Track_1         302. Track_2
202. Track_2         103. Track_3
203. Track_3         203. Track_3
301. Track_1         303. Track_3
302. Track_2         104. Track_4    
303. Track_3         105. Track_5


The album is perfectly tagged with foobar.
Tracks have 'Track Number' with 'Total Tracks' and 'Disc Number' with 'Total Discs'.
Files also named in that way.

Hopefully I could explain it understandable.
Title: foo_chronflow
Post by: Chronial on 2015-09-27 17:54:43
@Lesmo16: You need to change “Album Source” => “Sort Tracks within Album By” to %discnumber%|$num(%tracknumber%,3)
Title: foo_chronflow
Post by: Lesmo16 on 2015-09-27 18:50:09
Works! Thanks a lot for Chronflow.
Title: foo_chronflow
Post by: dinodisc on 2015-10-03 15:20:21
For transitions over more than say a couple of hundred albums my system can't keep up (covers become black).

Configuration: default (v0.3) (build-in).
I have a decent CPU (i5) but a mid/low end graphics card (NVidia GT640).
Played arround with the settings and reduced albumart from 800x800 to 600x600px but that didn't improve the performance.

What else can I do, I really like the animation.
Is it possible to reduce the maximum "flow speed" a bit and if possible how?
Are there other options?
Title: foo_chronflow
Post by: Chronial on 2015-10-03 19:50:25
dinodisc, don't blame your poor system, this is intended behavior . In the usual case (covers in various sizes, stored on HDD), loading a single cover takes 100-200 ms (with foobar cover loading – the old system took 50-150ms). That means we can only load 5-10 covers per second. Because of this, chronflow works as follows:

Only covers around your current "target position" (the cover you want to look at) are loaded. If the screen is still, the target position is the cover you're looking at. If the screen is moving, the target position is the cover you are moving to.

Chronflow does not try to load covers that you are just moving past. For that to be sensible, cover loading time would have to go down to < 10ms, which is only achievable with some sort of caching mechanism. That is something I try to stay away from because it would be complex.

But if the black covers really annoy you, you can change the following settings: Set texture size to 512 or 256 (any non power of two is rounded up to a power of two) and the cache size to a number higher than the number of albums in your collection. You should also disable "empty cache when window is minimized", as chronflow would otherwise load all the covers in your collection every time you minimize and restore foobar.

Just be aware of the amount of gpu memory this takes up: (cover size)² × 4 × number of covers bytes
So if you have 500 covers and set 512 as cover size, that would be 512² × 4 × 500 = 524MB. Reducing cover size to 256 would reduce that to 130MB.

You could also decrease that number by enabling texture compression, but that will slow down the initial texture loading and cause stuttery animation while the covers are loading.

You can use process explorer (https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) to see how much gpu memory foobar takes up.
Title: foo_chronflow
Post by: dinodisc on 2015-10-03 20:45:06
Chronial, thank you very much for your detailed answer.

I have lowered the texture size to 256 and the "black outs" are fewer!
Process Explorer reports max memory for Foobar2000 of around 0,5 GB.
That is a lot but it is definitely worth it!
(And I have 8 GB of memory so I woudn't mind if you increase cache size).

Thanks again for your component. I have altered my Foobar layout for the first time in a couple years to let it shine!

Title: foo_chronflow
Post by: clemux on 2015-10-08 19:03:19
After updating from v0.4.2 to 0.4.3.1 the action "Replace Default Playlist" does not work with DoubleClick.
Using  the Enter key works as usual.

Thanks for reporting. Looks like I broke double click handling in 0.4.3. Fixed in:

New Release (v0.4.4):
  • Added support for embedded album art (now the default)
  • Fixed double click handling

Please use and test this release. The embedded album art causes slower album art loading, but I think it's acceptable (or at least justifiable ). If I don't hear any complaints about performance, I'm going to remove support for my self-made cover loading soon.


Hello,

Some problem with lastest version

Failed to load DLL: foo_chronflow.dll
Reason: This component is missing a required dependency, or was made for different version of foobar2000.

what is the problem?

thanks

c.
Title: foo_chronflow
Post by: lvqcl on 2015-10-08 19:13:11
foo_chronflow.dll requires glfw3.dll (bundled) which in turn requires Visual C++ Redistributable Packages for Visual Studio 2013 (http://www.microsoft.com/en-us/download/details.aspx?id=40784)
Title: foo_chronflow
Post by: clemux on 2015-10-08 19:27:23
foo_chronflow.dll requires glfw3.dll (bundled) which in turn requires Visual C++ Redistributable Packages for Visual Studio 2013 (http://www.microsoft.com/en-us/download/details.aspx?id=40784)


I just try to install "Visual C++ Redistributable Packages for Visual Studio 2013" but i have the same error ...
Title: foo_chronflow
Post by: clemux on 2015-10-08 19:43:07
foo_chronflow.dll requires glfw3.dll (bundled) which in turn requires Visual C++ Redistributable Packages for Visual Studio 2013 (http://www.microsoft.com/en-us/download/details.aspx?id=40784)


I just try to install "Visual C++ Redistributable Packages for Visual Studio 2013" but i have the same error ...



oh yes 32 bit version is the solution thanks
Title: foo_chronflow
Post by: Chronial on 2015-10-09 10:29:11
Added that info to the first post.
Title: foo_chronflow
Post by: zeremy on 2015-10-13 10:17:27
When new albums are added to the media library they only get displayed when you reload sources / F5.

Is it possible to automate this process to keep them in sync?
Title: foo_chronflow
Post by: Chronial on 2015-10-13 11:03:34
That is on the todo list, and the recent restructuring should have made this possible to implement. But since you typically don't change your library that frequently I don't see it as such an important feature.

But it would smooth integration, since you need to know one less detail about one component.
Title: foo_chronflow
Post by: zeremy on 2015-10-13 11:17:01
That is on the todo list, and the recent restructuring should have made this possible to implement. But since you typically don't change your library that frequently I don't see it as such an important feature.

But it would smooth integration, since you need to know one less detail about one component.


OK , nice to see it on your todo list even with low priority.
Thanks.
Title: foo_chronflow
Post by: dinodisc on 2015-10-15 17:35:44
Just a small issue: Vertical postioning of the album title is a bit off in the last version (0.4.4).
In my set up the text enters the screen when the slider is at approximately 10% and at 100% the title is only just underneath the covers.
No other issues encountered so far.
Title: foo_chronflow
Post by: Dimon83 on 2015-10-18 18:34:35
I used this great plugin with foobar 0.9. It was the best visual view. Thanks!
now, i upgrade to 1.3.8 and can't start Chronflow 0.4.4

Chronflow's window write:
Code: [Select]
foo_chronflow failed to open an opengl window :(
See console for details


Console:
Code: [Select]
foo_chronflow glfw error: WGL: The driver does not appear to support OpenGL


I use Win7 x64 and install latest videocard driver NVIDIA GTX580: 358.50-desktop-win8-win7-winvista-64bit-international-whql
I install vcredist_x86.exe and Windows Script Control (sct10en.exe).
I put glfw3.dll to c:\windows\system32 and c:\windows\SysWOW64
Additionally I install DirectX 9.0c and start foobar2000 with Windows XP SP3 compatibility - it need for milkdrop 2.24 working
and chronflow didn't work

what i need to start it?
Title: foo_chronflow
Post by: Chronial on 2015-10-19 22:07:31
@Dimon83: What is the output if you run this tool? http://chronial.de/foobar2000/glfwinfo.exe (http://chronial.de/foobar2000/glfwinfo.exe)
What is the output if you run it as "glfwinfo --samples=4"?

Oh, and please remove these dll files from your system folders – they can only cause harm there .
Title: foo_chronflow
Post by: Dimon83 on 2015-10-20 08:35:21
@Dimon83: What is the output if you run this tool? http://chronial.de/foobar2000/glfwinfo.exe (http://chronial.de/foobar2000/glfwinfo.exe)
What is the output if you run it as "glfwinfo --samples=4"?

Oh, and please remove these dll files from your system folders – they can only cause harm there .

I've transfered my foobar to work and got the same problem
(http://i017.radikal.ru/1510/9b/269e6181013a.png)
Code: [Select]
d:\SOFT>glfwinfo --samples=4
GLFW header version: 3.1.2
GLFW library version: 3.1.2
GLFW library version string: "3.1.2 Win32 WGL VisualC"
OpenGL context version string: "4.4.0"
OpenGL context version parsed by GLFW: 4.4.0
OpenGL context flags (0x00000000):
OpenGL context flags parsed by GLFW:
OpenGL profile mask (0x00000000): unknown
OpenGL profile mask parsed by GLFW: compat
OpenGL robustness strategy (0x00008261): none
OpenGL robustness strategy parsed by GLFW: none
OpenGL context renderer string: "GeForce GT 630/PCIe/SSE2"
OpenGL context vendor string: "NVIDIA Corporation"
OpenGL context shading language version: "4.40 NVIDIA via Cg compiler"
Framebuffer:
red: 8 green: 8 blue: 8 alpha: 8 depth: 24 stencil: 8
samples: 4 sample buffers: 1
accum red: 16 accum green: 16 accum blue: 16 accum alpha: 16 aux buffers: 4


I'll run this tool at home tonight.
Title: foo_chronflow
Post by: Chronial on 2015-10-20 09:35:17
If you get the same problem on a different computer, that sounds like something is wrong with your foobar config. Maybe try chronflow with a clean copy of foobar in portable mode (no other plugins) and see if that works.

Judging from the output of glfwinfo, chronflow should work on your work computer.
Title: foo_chronflow
Post by: Dimon83 on 2015-10-22 10:42:09
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 
Title: foo_chronflow
Post by: fallouter007 on 2015-10-30 03:19:04
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:
(https://dl.dropboxusercontent.com/u/30627130/foo_chronflow.JPG)

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?
Title: foo_chronflow
Post by: Chronial on 2015-10-30 07:52:49
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.
Title: foo_chronflow
Post by: fallouter007 on 2015-10-30 08:16:24
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. 
Title: foo_chronflow
Post by: ZavierQuixote on 2015-11-25 23:39:42
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.
Title: foo_chronflow
Post by: Chronial on 2015-11-25 23:42:18
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.
Title: foo_chronflow
Post by: ZavierQuixote on 2015-11-26 01:25:49
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.
Title: foo_chronflow
Post by: MaCs on 2015-11-26 01:56:09
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
Title: foo_chronflow
Post by: MaCs on 2015-11-29 21:12:32
Am I the only one experiencing crashes with Chronflow?
Title: foo_chronflow
Post by: Chronial on 2015-11-30 13:05:15
Can you post the full crash report? Or ideally send me the .txt and .dmp via pm.
Title: foo_chronflow
Post by: MaCs on 2015-11-30 23:02:21
pm sent
Title: foo_chronflow
Post by: Chronial on 2015-12-01 04:26:28
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.
Title: foo_chronflow
Post by: Chronial on 2015-12-01 12:49:21
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):
Title: foo_chronflow
Post by: MaCs on 2015-12-01 15:28:58
It works perfectly now. Indeed, I had one invalid image that was added recently!
Title: foo_chronflow
Post by: ZarkBit on 2015-12-03 17:43:50
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.
Title: foo_chronflow
Post by: Chronial on 2015-12-07 10:49:34
Does the cover appear in the DUI album art display?
Title: foo_chronflow
Post by: ZarkBit on 2015-12-07 12:02:41
Does the cover appear in the DUI album art display?


yes
Title: foo_chronflow
Post by: Chronial on 2015-12-07 14:42:24
But it happens only with this one album? Anything specific about it?
Title: foo_chronflow
Post by: ZarkBit on 2015-12-08 16:00:43
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.
Title: Re: foo_chronflow
Post by: netsky3 on 2016-04-17 13:21:54
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 (http://www.microsoft.com/en-us/download/details.aspx?id=40784). Note that you need the 32bit version (vcredist_x86.exe).

If you still get that error, you might need to install Windows Script Control (http://www.microsoft.com/en-us/download/details.aspx?id=1949), 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
Title: Re: foo_chronflow
Post by: host505 on 2016-11-09 01:35:29
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 (https://hydrogenaud.io/index.php/topic,55607.0.html) 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 (http://tedgo.deviantart.com/art/DarkOne-v4-360862076) 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; }
Title: Re: foo_chronflow
Post by: Chronial on 2019-05-16 20:35:01
I just released a new version (v0.5.0) (https://github.com/Chronial/foo_chronflow/releases). Changes:

Title: Re: foo_chronflow
Post by: IP974 on 2019-05-17 05:00:28
Thx Chronial, but help me. I want to sort by Folder (same coverflow by Br3tt)
Title: Re: foo_chronflow
Post by: Chronial on 2019-05-17 09:36:31
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?
Title: Re: foo_chronflow
Post by: PleasantSounds on 2019-05-17 13:14:10
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.
Title: Re: foo_chronflow
Post by: Chronial on 2019-05-17 14:54:29
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?
Title: Re: foo_chronflow
Post by: PleasantSounds on 2019-05-18 01:16:44
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.

Title: Re: foo_chronflow
Post by: Flexx on 2019-06-02 22:00:58
I just released a new version (v0.5.0) (https://github.com/Chronial/foo_chronflow/releases).

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...
Title: Re: foo_chronflow
Post by: Chronial on 2019-06-02 22:08:23
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
Title: Re: foo_chronflow
Post by: Flexx on 2019-06-02 23:25:13
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) (https://github.com/Chronial/foo_chronflow/issues/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
Title: Re: foo_chronflow – Coverflow
Post by: Chronial on 2019-06-05 23:08:29
New Release (v0.5.1):


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.
Title: Re: foo_chronflow – Coverflow
Post by: Boris222 on 2019-06-17 21:00:09
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
Title: Re: foo_chronflow – Coverflow
Post by: Chronial on 2019-06-17 21:31:09
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.
Title: Re: foo_chronflow – Coverflow
Post by: Boris222 on 2019-06-18 11:50:31
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
Title: Re: foo_chronflow – Coverflow
Post by: Chronial on 2019-06-18 23:21:12
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);
}
Title: Re: foo_chronflow – Coverflow
Post by: Boris222 on 2019-06-19 17:44:24
Thank you very much.

I works like a charm  :-) .

Boris
Title: Coverflow - where are those nice & cool looking screenshots?
Post by: fuffi on 2019-06-23 05:17:29
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?
Title: Re: foo_chronflow – Coverflow
Post by: dinodisc on 2019-06-28 11:35:49
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
Title: Re: foo_chronflow – Coverflow
Post by: Chronial on 2019-06-28 14:30:40
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.
Title: Re: foo_chronflow – Coverflow
Post by: dinodisc on 2019-06-28 16:55:28
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...
Title: Re: foo_chronflow – Coverflow
Post by: Chronial on 2019-06-28 17:25:17
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.
Title: Re: foo_chronflow – Coverflow
Post by: dinodisc on 2019-06-28 18:37:42
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!
Title: Re: foo_chronflow – Coverflow
Post by: YashasHebbarbail on 2019-07-26 14:17:16
I have circle setup, I would like to share O:). Play with constants, atleast what I call it :)). Enjoy!!!
(https://hydrogenaud.io/index.php?action=dlattach;sa=tmpattach;attach=post_tmp_130319_dbf6d625b89d2b7013030325522f1577;topic=108450)
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);
}
Title: Re: foo_chronflow – Coverflow
Post by: YashasHebbarbail on 2019-07-29 06:40:12
Circle with large cover
(https://hydrogenaud.io/index.php?action=dlattach;sa=tmpattach;attach=post_tmp_130319_dae574549cb167c76c1d4c9dea940cda;topic=108450)

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);
}
Title: Re: foo_chronflow – Coverflow
Post by: ignasi on 2019-08-01 19:26:14
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

(http://minimwatt.com/Audioplanet/Hydrogen-1.jpg)

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?
Title: Re: foo_chronflow – Coverflow
Post by: Chronial on 2019-08-01 19:37:48
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.
Title: Re: foo_chronflow – Coverflow
Post by: JohnBuckWLD on 2019-08-31 00:19:07
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 (https://help.foobar2000.org/troubleshooter/components/f12e05ef772e8f66+a885fcd866a70c45+cba43d13612b80e2+8030ae95f625cfaa+23628f73007d0460+c54c1cee10f650b6+27209dfe26d9450f+c3ac047600a59bcd+6d0730961e1fb610+b2f809211d3ca063+f45d263883fad11e) link in the Help Menu.
 
Title: Re: foo_chronflow – Coverflow
Post by: Chronial on 2019-08-31 11:08:14
Thanks for the kind words :).

Regarding the crash reports, I think I will have to contact Peter about that, will do.
Title: Re: foo_chronflow – Coverflow
Post by: Urbi on 2019-09-13 14:15:39
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.
Title: Re: foo_chronflow – Coverflow
Post by: Urbi on 2019-09-13 15:31:26
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.
Title: Re: foo_chronflow – Coverflow
Post by: Chronial on 2019-09-13 17:37:42
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.

So the following stopped completely? Is it still activated in the settings? What happens when you focus the panel (click once anywhere in it) and press F6? That should focus the currently playing album.
Title: Re: foo_chronflow – Coverflow
Post by: Urbi on 2019-09-14 14:31:18
Yes following doesn't work at all anymore. It is set to follow after 15 seconds (AFAIK this is default). I tried other values but didn't have success. Also pressing F6 doesn't have a visible effect.

I just backed up foobar2000 and with a fresh config the new version works. So probably something in my config is causing the trouble (still: it's odd that the old version still works okay).

I will now try to refresh my library and see if that changes something. 
Title: Re: foo_chronflow – Coverflow
Post by: Urbi on 2019-09-14 15:49:09
Didn't work.

I think I will have to reset all settings and build my config new. I will copy old files until it doesn't work anymore and adjust the rest manually. So far I can say that neither the core configuration nor the columns_ui config seem to be an issue.
Title: Re: foo_chronflow – Coverflow
Post by: BeLu on 2019-10-06 09:19:36
coverflow seems to stop WIN10-Volume-control-integration. 

 
Title: Re: foo_chronflow – Coverflow
Post by: davessn on 2019-10-23 16:08:58
I love this component, but is it possible to let it show the actual playlist selection?

Specifically I'd like to use the Filters from ColumnsUI and when I select a Genre for example I'd like to see only the albums of that Genre in Coverflow. Also when I then select an album in Coverflow it would be awesome to see the albums content in Playlist view.
Title: Re: foo_chronflow – Coverflow
Post by: madastd on 2019-10-24 04:05:11
I have a problem playing with double click, I noticed only some songs play,
singles with only one track in the album will play, others in albums with multiple tracks just don't.
Any way to fix this?
Title: Re: foo_chronflow – Coverflow
Post by: seb95 on 2019-11-11 20:44:56
Hi Chronial !!
First of everything, a big thank you for your work. It is highly appreciated.
I'm using Foobar2000 v1.4.6, with windows pro XP 32 bits with graphic card AMD Radeon HD 4350.
When using the "new version" foo_chronflow v0.5.0 or foo_chronflow v0.5.1, I always receive the erro message "This component is missing a required dependency, or was made for different version of foobar2000."
I tried to use standard graphic card drivers or the lastest known drivers, same result.
I installed Visual C++ Redistributable Package for Visual Studio 2013 => same result
I installed "Windows Script Control," => same result

No idea what other thing I could try....

So I am using the old last version foo_chronflow v0.4.5, which is almost working fine...
It is usually working fine for 1-2 hours and later the covers are not showed anymore. The movement is working but shows only black covers, like if the memory was not correctly managed.



Any help?

Thank you!!!!!
Title: Re: foo_chronflow – Coverflow
Post by: Chronial on 2019-11-11 22:05:47
Hey seb95. Unfortunately Windows XP is no longer supported by foo_chrownflow. I can't remember, but since v0.4 came out after the end of life of XP, it probably doesn't support XP either. You can give the very old v0.3 a try: http://chronial.de/foobar2000/foo_chronflow_v0.3.0.zip.
Title: Re: foo_chronflow – Coverflow
Post by: seb95 on 2019-11-16 20:03:51
Hi!
I did a lot of tests and here are the results:
For the 0.3.0 version, it simply doesn't work, it is installed, but don't appear to be put in the layout.
I tested the 0.4.0 version and here the result (screenshot attached).
Another problem with the 0.4.2 and 0.4.3.1 version (screenshot attached)
Now I am currently testing the 0.4.4 version which is working fine, I only need to know if like the 0.4.5 version, it is not loading anymore the covers or not after 1 or 2 hours.
I also tested again the 0.5.0 and 0.5.1 versions but same result as before : "This component is missing a required dependency, or was made for different version of foobar2000".
Thanks any way for your help!
Title: Re: foo_chronflow – Coverflow
Post by: seb95 on 2019-11-17 17:28:56
Hi,
So, after testing the 0.4.4, the result is the same as for the 0.4.5, after 1, 2 or 3 hours, it doesn't load anymore the covers.
Regards,
Title: Re: foo_chronflow – Coverflow
Post by: racerxnet on 2019-12-08 17:08:07
Can someone please provide a guide for this plug-in. It looks really cool and I cannot get this working as the Author shows. I have it installed, but stumped in setting it up. Please help.

Thanks,

MAK
Title: Re: foo_chronflow – Coverflow
Post by: Smurth on 2020-02-13 19:46:21
Very great ; terrific plugin.
Thank you !

I just miss one thing: the X1 / X2 mouse buttons (Prev/Next) which seem to be not send to foobar.
Except this detail, everything else is working fine.
Title: Re: foo_chronflow – Coverflow
Post by: 2tec on 2020-02-13 22:08:17
Can someone please provide a guide for this plug-in. It looks really cool and I cannot get this working as the Author shows. I have it installed, but stumped in setting it up.
What exactly has you stumped? Have you added a new panel or tab, then right clicked it, selected "replace UI element" and looked under "Library Media Viewers"? It's listed as "Coverflow".
Title: Re: foo_chronflow – Coverflow
Post by: FletchNZ on 2020-03-27 01:55:23
Noob question.
First time I have used the plugin today. It is great!
For some albums it is displaying a cover for each track - mostly the albums with various artists, where each track has a different artist. What parameters would I change in the filter to fix this behavior?
I can sort with just %album% and that kind of works, but then the albums aren't grouped by artist.

Thanks so much!
Title: Re: foo_chronflow – Coverflow
Post by: JohnBuckWLD on 2020-03-27 05:13:36
I can sort with just %album% and that kind of works, but then the albums aren't grouped by artist.
I guess it depends on whether or not you use the album artist field, and what album artist you use for those "albums with various artists". IF you use the album artist field, and use a tag i.e. Various or  Ξ Various Ξ

In Coverflow preferences, Album Source tab...
Group by: %album artist%|%album%

If you want to sort an artist's album releases by release date (as opposed to alphabetically by album title), put | %date% | between the grouping scheme:  %album artist%|%date%| %album%
Title: Re: foo_chronflow – Coverflow
Post by: Chronial on 2020-05-21 19:47:23
New Release (v0.5.2):

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

I improved the find-as-you-type functionality to now do fuzzy searching in your library:
(http://chronial.de/foobar2000/foo_chronflow-fayt.gif) (http://chronial.de/foobar2000/foo_chronflow-fayt.mp4)

Just click on the panel once and start typing away.
Title: Re: foo_chronflow – Coverflow
Post by: Johnny Blade on 2020-05-21 20:24:44
Very well done, many thanks for that!
Title: Re: foo_chronflow – Coverflow
Post by: rolf1955 on 2020-05-24 14:25:55
Only the first song of an album is displayed when I scroll over the covers.

https://streamable.com/ipkvpx (https://streamable.com/ipkvpx)

How can the whole album be displayed?
Title: Re: foo_chronflow – Coverflow
Post by: MaCs on 2020-06-04 15:17:44
I think there was a graphics driver update on my computer and now I get this error:

foo_chronflow failed to initialize:
glfw error: WGL: The driver does not appear to support OpenGL
Title: Re: foo_chronflow – Coverflow
Post by: Chronial on 2020-06-05 08:12:18
I think there was a graphics driver update on my computer and now I get this error:

foo_chronflow failed to initialize:
glfw error: WGL: The driver does not appear to support OpenGL

Which graphics card are you using?
Title: Re: foo_chronflow – Coverflow
Post by: MaCs on 2020-06-05 19:55:13
Which graphics card are you using?
Intel HD Graphics 4000, on a HP Probook 6570b laptop.
Title: Re: foo_chronflow – Coverflow
Post by: MaCs on 2020-06-11 13:41:42
Which graphics card are you using?
Intel HD Graphics 4000, on a HP Probook 6570b laptop.

Hi, I installed a different driver and now the problem is solved.
Title: Re: foo_chronflow – Coverflow
Post by: koupa on 2020-06-11 17:16:23
Can I select something from Album List panel and load only that covers?
Title: Re: foo_chronflow – Coverflow
Post by: Chronial on 2020-06-11 18:26:56
Hi, I installed a different driver and now the problem is solved.
That's great to hear

Can I select something from Album List panel and load only that covers?
No, that is not supported at the moment
Title: Re: foo_chronflow – Coverflow
Post by: koupa on 2020-06-11 18:41:57
Too bad. I would like to see that as an option. Facets don't work well with Album List.
Title: Re: foo_chronflow – Coverflow
Post by: AlainM51 on 2020-06-12 14:42:27
Hey, i have this message when i want to install the componenet: Could not load component "foo_chronflow-master.zip": Unsupported format or corrupted file.
Thanks.
Title: Re: foo_chronflow – Coverflow
Post by: snotlicker on 2020-06-12 14:48:35
You'll want the .fb2k-component file from the releases page...

https://github.com/Chronial/foo_chronflow/releases
Title: Re: foo_chronflow – Coverflow
Post by: handleyman on 2020-07-15 09:44:41
Is there any way this can display artwork from a folder based the track rather than an album? Quite a lot of tracks are singles, and (depending on the grouping setting) it tries to add them all to the first single, to make an album that doesn't exist. I tried replacing the 'No Cover Image' with a URL to the artwork folder, ending in \%artist% - %title%, but it didn't like it! Or, can a different code be entered into the Database filter box? Also, what is the grouping syntax for %album% when there is one, otherwise %track%?? Thanks for a lovely piece of FB2K input!
Title: Re: foo_chronflow – Coverflow
Post by: Chronial on 2020-07-15 10:05:55
Sorry, I didn't quite get what you are asking for. Do you want one "album" per single? Then you need to change your grouping settings accordingly.
Title: Re: foo_chronflow – Coverflow
Post by: handleyman on 2020-07-15 11:36:24
Sorry, I didn't quite get what you are asking for. Do you want one "album" per single? Then you need to change your grouping settings accordingly.
Thanks for the response. That's part of it, but it's more the 'album art'. When the track is a single, I'd prefer that the artwork was for that track only, preferably sourced from the FB2K Artwork standard: <A:\SongImages\$stripprefix(%filename%.jpg>. At the moment, it groups all singles by the artist from one year into an 'album' and shows them under the first track's artwork. The grouping regime is <[$stripprefix(%artist%,the)][%date%][%album%]>, display syntax is <%artist%$crlf()[%album%]>. This all works great for albums, but not singles...
Title: Re: foo_chronflow – Coverflow
Post by: snotlicker on 2020-07-15 13:06:40
You need to replace [%album%] with $if2(%album%,%title%)
Title: Re: foo_chronflow – Coverflow
Post by: handleyman on 2020-07-26 17:34:15
You need to replace [%album%] with $if2(%album%,%title%)
Brilliant, thank you!
SimplePortal 1.0.0 RC1 © 2008-2020