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_wave_seekbar (Read 799471 times) previous topic - next topic
0 Members and 2 Guests are viewing this topic.

foo_wave_seekbar

Reply #1350
Thank you so much Zao... This is exactly what I was looking for  . So, GDI interface will not be used here anymore.
I liked the idea of waveform seekbar since I have seen it on list of official components for the first time, but today I see how good component it is  . I wonder how others can use other software music players like iTunes for example... If for some reason foobar couldn't run on my PC anymore, then I would just stop listening to the music on PC. Or buy new one .
I am little bit scared that I have to run PC for whole day and night again, to let it extract new signatures... Does this recently found bug alters only FLAC, only lossless or just every kind of music files?

foo_wave_seekbar

Reply #1351
It affects everything, no matter what format the source is.

In my analysis, I split all the samples in the song up into 2048 partitions.
When I get audio from the decoder, it arrives in chunks of a few thousand samples.

Code: [Select]
[_partition #0_______________________][_partition #1_______________]...
[_chunk #0_____][_chunk #1__][_chunk #2______][_chunk #3___][_chunk #4____]...
abcdefghijklmnopabcdefghijklmabcdefghijklmnopqabcdefghijklmnabcdefghijklmno...

The problem occured when a chunk was part of more than one partition, like chunk #2 is in the example above. What ended up happening was that the beginning of the chunk was replicated into the second partition, instead of the remainder.

Code: [Select]
...________][_partit...
...[_chunk #2______]...
...abcdefghijklmnopq...
became
Code: [Select]
...________][_partit...
...[_chunk #2______]...
...abcdefghiabcdefgh...
, which irrecoverably lost the jklmnopq information contained in chunk #2's second half.

The only way to not have experienced this is if the chunk size of the decoder aligned perfectly with the partition boundary, but that's a lucky corner case and near impossible.

I hope this explains the underlying problem. If you're fine with the replication of a miniscule part of the samples and a loss of the samples it clobbers, you can continue using the waveforms you have. If you want perfection, regenerate them. Don't forget that the component remembers that you've told it to scan something, so it continues when you restart the player.
Stay sane, exile.

foo_wave_seekbar

Reply #1352
So, 0.2.35 is a thing. It's also released.

New is that it's built with the v110_xp toolchain from Visual Studio 2012 Update 1, which probably shouldn't break too much. You XP-using people owe me back for a few days of facedesking.
Versions starting from 0.2.35 require the Visual Studio 2012 Update 1 (x86) runtime installed. If you're the portable kind, you can probably put in the msvcr110.dll and msvcp110.dll from that installer manually in the foo_wave_seekbar directory.

It should fix the Direct2D shows a lengthwise squished waveform for mono-analysed tracks bug, and the chunk/bucket granularity issue.

You need to regenerate your waveforms if you feel you suffer from the small artifacts that they caused, or if you think your mono database is too large.

It also exposes three new semantics to the effect, namely TRACKTIME, TRACKDURATION and REALTIME. They are all floating point numbers in seconds, holding the current position and duration of the track, and seconds since some arbitrary reference point. You could use these to make time-dependent shimmer or some other snazzy effects.
Stay sane, exile.

foo_wave_seekbar

Reply #1353
Just attempted to update from 0.2.34 to 0.2.35 from within foobar 1.25 but after restart got error message stating there is problem loading .dll because either dependency is missing or it was created for different version of program. Usinf Win 7 Pro 64 bit. Previous version was working OK

foo_wave_seekbar

Reply #1354
Quote
Versions starting from 0.2.35 require the Visual Studio 2012 Update 1 (x86) runtime installed. If you're the portable kind, you can probably put in the msvcr110.dll and msvcp110.dll from that installer manually in the foo_wave_seekbar directory.
Stay sane, exile.

foo_wave_seekbar

Reply #1355
(Oops, please ignore! I went and looked in C:\Windows\System32\ and lo and behold!)

Hey Zao, I've installed it so it's OK on my local computer, but wondering where to find the dlls for portable purposes?
I changed the extension of the VS installer to .zip but it's not an obvious folder structure inside. And I'm not sure where the dlls would be installed on my computer (XP, sorry!)

foo_wave_seekbar

Reply #1356
Yeah it's not obvious on the Microsoft download site for the Visual Studio runtime update, but it's OK to install the x86 version, even if you are using a 64-bit version of Windows. It doesn't hurt to install the 64-bit version, but it won't help with the Waveform Seekbar because it's using the the x86 files.

foo_wave_seekbar

Reply #1357
Thanks it works now and sorry for not paying attantion about new reqirement

foo_wave_seekbar

Reply #1358
olegausa: It's a tricky situation, as there's no way to communicate what went wrong from my component's side. It's inevitable that people will mistake it for a bug or miss the information. You made me smile a bit.

frogworth: If you're taking them from an existing 64-bit Windows installation, note that their system32 is 64-bit and syswow64 is 32-bit.

I put the two files needed for my component up at a reasonably permanent location.
You can put them either in a directory you control in the PATH or in the foobar2000 application directory. Note that if you put them in user-components\foo_wave_seekbar, installing an update will remove them.
Stay sane, exile.

foo_wave_seekbar

Reply #1359
Zao - I got a question about that required MSVC11 dlls. What are all possible localizations where I can put them to be properly recognized?
From previous post I am sure these 2 are OK:
1. main "foobar2000" directory
2. "user-components\foo_wave_seekbar"
but how about this:
3. "foobar2000\components" directory (when I'm installing all my components manually)?

foo_wave_seekbar

Reply #1360
surely trying it yourself would have been easier than typing out that post?

foo_wave_seekbar

Reply #1361
No as I have simply installed vc_redist_x86 2012 on my system a while ago as well as on my wife's laptop and I don't have any other computer to try it. Programmers mostly don't have to test such things - they just know it from practice or because they know they programming environment, so they can give such answer as quickly as I asked it.

foo_wave_seekbar

Reply #1362
EpicForever,

Install a program named Process Hacker (free, open source - http://processhacker.sourceforge.net/)

Temporarily rename* . . .
C:\WINDOWS\system32\msvcp110.dll  to  C:\WINDOWS\system32\msvcp110.dll.bak
and
C:\WINDOWS\system32\msvcr110.dll  to  C:\WINDOWS\system32\msvcr110.dll.bak

Then manually copy . . .
msvcp110.dll  to  foobar2000\components\msvcp110.dll
and
msvcr110.dll  to  foobar2000\components\msvcr110.dll

Run foobar2000 and play a track . . .

Open Process Hacker main window . . . double-click foobar2000.exe in the list of processes . . . foobar2000.exe Properties window will open
Go to Modules tab, scroll down to msvcp110.dll and hover your mouse over it . . . a tooltip will pop up and display the working path of the DLL .
Do the same for msvcr110.dll

* path used in Windows XP; may not be the same in other Windows OS versions.

foo_wave_seekbar

Reply #1363
Thanks for the tip derty  . OK, I had to temporarily shutdown some app to make renaming of dlls in syswow64 possible. But now I can say that all 3 locations work, for both foo_wave_seekbar and foo_bestversion

foo_wave_seekbar

Reply #1364
3. "foobar2000\components" directory (when I'm installing all my components manually)?

You should not modify the components directory. That's only for components bundled with the player itself.
Anything third party belongs in the user-components tree, even if you "install them manually". If you install anything manually for some mysterious reason, you should put them in an equivalent structure in the user-components tree like if it was installed through the player.
Stay sane, exile.

foo_wave_seekbar

Reply #1365
The only safe place to put the runtime is either in the foobar2000 directory, or in a directory in your PATH.
If you put anything in components, foobar2000 will attempt to eject it into user-components and break multi-file components in the process.
If you put anything in user-components/foo_wave_seekbar, it will be destroyed whenever the component is upgraded or reinstalled.
Stay sane, exile.

foo_wave_seekbar

Reply #1366
I install everything manually into foobar2000\components  - I just put them .dll files from unpacked components - everybody (currently just my wife) can use whatever I use in foobar.
While I tested putting MSVCP dlls into foobar2000\components directory nothing bad has happened. Foobar and both components depending on those MSVCP11 dlls worked as long as I manually quited it. And started again without problems when I started it again. There was no interruptions  and no dlls were moved or deleted.

foo_wave_seekbar

Reply #1367
Hey Zao, thanks for the tips re the dlls - I've put 'em in the foobar application directory, so should be fine from now on.

One thing I've noticed with the latest version (using Direct3D) is that when I load a file that has no stored waveform (and, say, if I'm playing from an Audio CD where it won't autogenerate), the old waveform stays displayed.
It used to blank out the waveform, which of course is preferable to having an unmatching waveform to seek over.

Do I have a setting wrong, or is it a (minor) bug?

foo_wave_seekbar

Reply #1368
It's a known "bug". I need to move the eligibility testing out of the cache so that I can communicate a "nope, never will be a waveform for this".

It's a bit tricky, as you on one hand do not want a flicker of empty between tracks, but still want it to eventually go away.
Stay sane, exile.

foo_wave_seekbar

Reply #1369
Maybe I'm doing something wrong but when I updated and restarted fb2k, it showed me: "Failed to load DLL: foo_wave_seekbar.dll, reason: This component is missing a required dependency, or was made for different version of foobar2000".

I then tried to manually extract the 4 files from .fb2k-component and place it into my components folder but no luck. I also tried un-installing and re-installing the component and the same message appears. Perhaps I forgot some step in the instructions?


foo_wave_seekbar

Reply #1371
AFAIK you can just put the 2 relevant dlls in your foobar2000 root directory (without installing the whole runtime -- is that correct?)
Zao put them up here, presumably for that reason.

C.

EDIT: @ Zao -- thanks for sorting out the "color choice in configuration" issue. Great component!
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_wave_seekbar

Reply #1372
I strongly suggest installing the real redistributable with the installer if possible. Putting it in your foobar2000 directory is an ultimate fallback and shouldn't really be done unless you truly don't have the rights to install it properly.
Stay sane, exile.

foo_wave_seekbar

Reply #1373
Thanks for clarification.

C.
PC = TAK + LossyWAV  ::  Portable = Opus (130)

foo_wave_seekbar

Reply #1374
No, I haven't (it's possible that it is already installed but I don't know that for a fact). Strange that it would break the installation of the component like that, if that is the cause. I will install the runtime and try the component again. For some odd reason, foobar2k process is permanently stuck and it seems I have to restart.