Skip to main content

Recent Posts

1
Ogg Vorbis - General / Re: Vorbis comment padding issue
Last post by lithopsian -
The tag names and contents in flac and vorbis are (largely) the same but the container formatting is very different.  Except that flac can be placed in an ogg container, that's very rare though and you should probably just forget I said it.

I have no idea if including more padding will help in your situation.  The tagger is clearly doing something undesirable that could possibly be considered a bug.  You can play with padding but a more reliable solution might be to try different software.  Even just as a test, it would show that you aren't doing something completely crazy and that it is just one program that is messing up.

Just for the record, I've tagged a lot of flac and vorbis files without seeing symptoms like you describe.  They aren't inherent to the tag format.
2
3rd Party Plugins - (fb2k) / Re: JScript Panel
Last post by TheQwertiest -
I find that pretty hard to reproduce but I do get the occasional flicker.
I can consistently reproduce it though. The easiest way:
1. Open property list that is big enough to have scrollbar.
2. Click on top item to make it 'blue'.
3. Click on 'arrow down' button on scrollbar.
Result: value of first item is wrong now and matches the selected 'blue' item.

FWIW, it looks like 3rd party PropertyList library is to blame but I have no idea how to fix it.
I've tried debugging a bit (lib is back from 2003, lol), but couldn't find the exact source of the problem. I've managed to prevent the bug from happening by removing "bHandled = FALSE" from OnLButtonUp method (PropertyList.h:605). But that's just brute-force programming -_-. This lib should be probably replaced some day with the more robust one (and may be a bit younger than 14 years old).
3
Hello,

I follow advices and with the code below : this compile.
However, the output entry does not appear in FB2K output combobox.
I probably miss something, but I don't know what...

(output_asio derives from output_v2).

Code: [Select]
class output_asio_instance : public output_asio
{

public:

output_asio_instance()
{
Init();
OpenDriver = false;
};

output_asio_instance(const GUID & p_device, double p_buffer_length, bool p_dither, t_uint32 p_bitdepth)
{
Init();
OpenDriver = false;
}

~output_asio_instance(void)
{
if (OpenDriver) ParamMsg(MSG_CLOSE_DRIVER).Call();
}

static bool g_advanced_settings_query() { return FALSE; };
static bool g_needs_dither_config() { return TRUE; };
static bool g_needs_bitdepth_config() { return TRUE; };
static bool g_needs_device_list_prefixes() { return TRUE; };

static void g_advanced_settings_popup(HWND p_parent, POINT p_menupoint) {};

static const char* g_get_name(void) { return NAME2; }
static const GUID g_get_guid(void) { return g_guid; }

static t_uint32 get_config_flags(void) {
//return ;
};

static void g_enum_devices(output_device_enum_callback & p_callback) {
p_callback = output_device_enum_callback_impl();
};

void
open(const t_samplespec & sspec) {
//const int RetCode = ParamMsg(MSG_OPEN, sspec.m_sample_rate, format_code, bps, sspec.m_channels).Call();
//OpenDriver = RetCode != 0;
//return RetCode;
};
void
pause(bool) {};
void
flush(void) {
ParamMsg(MSG_FLUSH).Call();
};
void
volume_set(double) {};
void
update(bool &) {};
void
process_samples(const audio_chunk &) {};
t_size
can_write_samples(void) {
return ParamMsg(MSG_CAN_WRITE).Call();
};

double
get_latency() {
return pPcmAsio->MsgGetLatency();
}


int
open_ex(int srate, int bps, int nch, int format_code)
{
const int RetCode = ParamMsg(MSG_OPEN, srate, format_code, bps, nch).Call();
OpenDriver = RetCode != 0;
return RetCode;
}

//int
// output_asio_instance::can_write(void)
//{
// return ParamMsg(MSG_CAN_WRITE).Call();
//}

int
write(const char* data, int bytes)
{
return ParamMsg(MSG_WRITE, bytes,
reinterpret_cast<unsigned char*>(const_cast<char*>(data))).Call();
}

//int
// output_asio_instance::get_latency_bytes(void)
//{
// return pPcmAsio->MsgGetLatency();
//}

void
pause(int state)
{
ParamMsg(MSG_PAUSE, state).Call();
}

void
force_play(void)
{
ParamMsg(MSG_PLAY).Call();
}

//int
// output_asio_instance::do_flush(void)
//{
// return ParamMsg(MSG_FLUSH).Call();
//}

int
is_playing(void)
{
return !!pPcmAsio->MsgGetLatency();
}

protected:
class output_device_enum_callback_impl : public output_device_enum_callback {

public:
output_device_enum_callback_impl() {};
~output_device_enum_callback_impl() {};

void on_device(const GUID &p_guid, const char *p_name, unsigned p_name_length) {

//p_guid = p_device;
p_name = output_asio_instance::g_get_name();
p_name_length = 20;
}
};

};


class output_entry_impl : public output_entry {

output_entry_impl();

~output_entry_impl() {};

public:

void instantiate(service_ptr_t<output> & p_out, const GUID & p_device, double p_buffer_length, bool p_dither, t_uint32 p_bitdepth) {
p_out = new service_impl_t<output_asio_instance>(p_device, p_buffer_length, p_dither, p_bitdepth);
};

void enum_devices(output_device_enum_callback &) {};
GUID get_guid() { return output_asio_instance::g_get_guid(); };
const char *get_name(void) { return output_asio_instance::g_get_name(); };
void advanced_settings_popup(HWND, POINT) {  };

t_uint32 get_config_flags(){
output_asio_instance::get_config_flags();
};

};


output_factory_t<output_asio_instance> foo2;

4
General - (fb2k) / Re: New HDD and Mass lossless conversion
Last post by Rollin -
If you are going to delete the old - and, assuming you have not already done so - I would have used a utility that deletes duplicates by name and/or by content, to see if there is anything left uncopied / unconverted.
If you do that a clever way, you could possibly detect if there were any files too corrupted for fb2k to even recognize as FLAC.
Audiotester can be very useful to find corrupted FLACs, which are too corrupted to be recognized by fb2k as FLACs, before mass conversion. Also it is multi-threaded, so much faster than foo_verifier.
5
I've had quite a few discs die, mainly due to poor handling when younger, using them in 10 disc cd stackers in cars (swirling scratches) and disc rot (I think caused by moving to a country with high humidity).

Now my music protected in a 3-2-1 backup ( 3 copies, 2 different media, 1 offsite) so i don't have to go through the pain of re ripping, musicbrains tagging, album arting those CDs again.
6
Support - (fb2k) / Re: Empty value is treated as not empty
Last post by VEG -
I agree, but I can't force the Radio Paradise to fix their tags. foobar2000 could handle this case properly by default.
7
Support - (fb2k) / Re: Empty value is treated as not empty
Last post by Rollin -
This is just bad tagging. If there is no artist, there should not be ARTIST= in file.
8
I'd rather recommend a "banned" plugin than lie "it is not possible, just live with it".

I use this plugin (version 2013-02-19) for years and it does a lot of very useful things which are not possible without it, and these settings make the player much more convenient at least for me. For example, using Shift+Esc for minimizing the window of the player is very inconvenient for me, I use just Esc for years. Also I like that now the player is smart enough to stop playing music when I mute the system sound or when I start to speak with someone using Skype. There are really a lot of very useful settings, the plugin is very stable (last time my foobar2000 had been crashed years ago because of another plugin), and "banned" status doesn't make this plugin less useful. On the contrary, this plugin makes foobar2000 more useful and smart.
9
Support - (fb2k) / Re: Empty value is treated as not empty
Last post by VEG -
I'm quite sure that the problem is not caused by any plugin. You can reproduce it easily on your copy of the player. Just try to listen the radio and open settings where you can change title formatting:
http://veg.by/z/2017-11-24-21-39-35-e06d055d.png
10
Please don't use spectrum analysis to compare audio quality for lossy codecs such as MP3.
I have an idea: let's download Spek, flag it as virus and submit to all AV engines.