Recently in Programming Projects Category

The other day I was looking through my MP3 collection and found that for some reason, iTunes was showing several tracks as having a time of 0:00 and refusing to play them. Fearing that my files were bad, I tried them in VLC and SongBird and they played without any problem. A definite WTF moment.

Some web searching later, I found that this is not an uncommon problem and that you can use a free tool called mp3val to validate and fix these problem files. I began using it and it was working great except for a "small" problem: it refused to read files that had any multi-byte characters in the filename. Oops.

I spent a few hours hacking together a solution that will read filenames with multi-byte characters without any issue. The logging is horked, and it doesn't seem to work with the mp3val front-end software (that probably needs some refactoring as well, but I'm too lazy to do that at the moment), but it gets the job done and seems to work perfectly at its job, and that's fixing busted MP3s.

I've provided my modified sources and the executable for those who just want to fix their stuff without fiddling with it. Link is at the end of this post.

This is provided as-is with no warranties or guarantees. Use at your own risk! Don't blame me if this hoses up your MP3s. :) I've only tested and built this on Windows, so I have no idea if these changes are portable to other OSes or not. Sorry.

As to what originally hosed these files, I blame Picard as that was the last thing I ran against these files before iTunes started pitching a fit, but it could have just as easily been iTunes.

mp3val-unicode.zip

I've had a program I've been tooling around with for a while now. It started out as something I could use to fix the tags on my MP3s (sort of like my old MP3 Unicoder application) and convert the text from various encodings to Unicode.

I redid this prototype called Text Converter, it doesn't write MP3 ID3 tags yet (mainly because I couldn't get CSID3Lib to actually write tags properly) but the text conversion piece seems to be working beautifully.

If there's any actual interest in using this aside from a little app that I use to fix my non-Unicoded tags, then let me know and I'll clean it up and make it something usable for anybody other than myself.

Here's an example converting Shift-JIS:

Here's another example converting EUC-KR:

Ultimately, I'm going to finish this to actually read and write MP3 tags (right now it's too much of a manual process), but is there any interest in something like this?

I’ve struggled with this for a couple of weeks now, and figured somebody could offer me some assistance.

As a proof of concept, I’m writing a small CLI program that sits idly waiting for COM events from an application. The application throws COM events as dispinterfaces using IDispatch.

Using C# or .NET, subscribing to events is an almost trivial undertaking, but doing this under Win32 and C++ seems ridiculously complicated, and I’m utterly lost as to what to do. I’ve found a plethora of tutorials on the web, but none of them seem to help very much. Perhaps I don’t know what I’m looking for. I’ve searched on things like “connection points”, “IDispatch”, “dispinterfaces”, “COM events”, and a dizzying array of other combinations.

Basically, how can I tell this simple CLI driven application to listen to COM events and run the methods specified by the dispinterface. What I want to do surely doesn’t seem complicated, but with the level of simplicity I’m looking for in this case, it’s leaving me completely lost as far as where to go.

Any help would be much appreciated, as I figure I can’t be the only person in the world who wants to do something like this. >_<

Could some kind soul please tell me where in the fuck I can procure man3 stdlib pages for OSX? It's really pissing me off trying to do a man on a stdlib function only to once again realize the man pages are missing.

Hugs and kisses..

I discovered this great Microsoft blog called "The Daily WTF" with all kinds of amusing attempts at technological mishaps and general WTF behavior.

This one linked here was by far the most amusing, and saddening.

C'mon people, if you're going to turn C into VB, just write it in VB.

The link: Stupid Curly Braces

The sound pressure makes you feel refreshment of mind and body.: Newest version of XiTunes Released

Same features as before, but timestamps now display properly (stupid printf).

Instructions and details on how to retrieve it are here

I've released my 0.2 version.

Here's what's been done.

1) Unicode support is 100% working. No matter what codepage you're using in X-Chat, it will do the right thing to convert the Unicode into something that your codepage can understand.
2) icmd command has added a "track" to show yourself (and not bug the channel) what you're playing.
3) Output now shows title, artist, album, time, bitrate, kind.

Things to come are full customizability on the layout, and better library controls (none of this icmd crap).

I've completed an early, but usable prototype plugin for X-Chat and iTunes users.

XiTunes was originally written using the old iTunes "Visualizer" SDK. It was difficult to write for, and requried the use of multiple DLLs to ship data between X-Chat and iTunes. With the new iTunes COM SDK, it makes it much easier to talk between the two applications.

Download the XiTunes DLL, and load it in X-Chat. You can get help by typing /xihelp after it loads.

Current features:
* Announce to the channel what track you're listening to.
* Play/Pause, Track-Forward, Track-Backwards all from within iTunes.

More features to come. I plan to add a /dcc download trigger, further iTunes integration including buttons in the GUI itself, and other features.

Download From Here.

Notes:
Requires Windows iTunes 4.5 or newer.
Tested with Windows X-Chat 2.0.8b. I do not know how well it works with earlier/later versions.

I don't guarantee that it won't crash your X-Chat. X-Chat's C plugin API doesn't seem very stable sometimes. But, in all, it works pretty well.

The new iTunes SDK is so nice, I plan to write more applications taking advantage of it, including programs to fetch album art, fix MP3 tags, normalize internationalization, and many others. I'm swimming in ideas for this right now.

Enjoy, and let me know if you have any problems.

Just in case any geeks have problems, I also have the debugging symbols available.

I've got a C++ function that returns a struct that I created. While running in the debugger, everything in the struct looks fine.

However, once I return the pointer and collect it in the other function, one of the fields in the struct is all mangled. I don't understand what the hell is going on.

Read on for more information.

(Edit: Solved.)
(Edit #2: Moved the details to a summary, it was breaking XML syndication X_x).

I'm up to 107 entries. I just updated it today. If you use the wonderful Adblock extension for Firefox, then you owe it to yourself to import this list into your filters. :)

For more details including how to use this list and where to get it, check out my prior entry.

Maybe this stuff will be/is fixed in Whidbey, I don't know. The May Preview of VS.NET2005 is so busted for me, I can't even create a new smart device project.

There's two programs I'm trying to write in my spare time. The first is a Weight Watchers Points calculator for the Smartphone, the other is a Weight Watchers virtual diary application for the Pocket PC. Both have been a struggle.

First, with the calculator app, I can't find a way to create a NumericUpDown control, or worse yet, I can't find a way to create a text box that only accepts numbers. For a phone device, these oversights are simply unforgivable. Yes, I could do this kind of stuff with custom programming, but I'm trying to make these apps as simple as possible.

With the diary application, I'm trying to use a datagrid to display information in a friendly and readable format. Since I'm not connecting to a database or anything, I figure that the best method would be to use an XML data store. Pretty simple, I figure. .NET's serialization can easily transform data from objects to XML and back. It's extremely cool and convenient and many programs I've used lately have made use of it. But, the .NET Compact Framework doesn't support this. Damn~! Apparently, Whidbey supports this, but since I can't get VS.NET 2005 to work, it's kind of a moot point.

I was going to install VS.NET2005 in a Virtual PC since installing it on my XP box completely hosed the .NET FW support for many of my existing applications. I read that VPC doesn't support the Windows Mobile device emulator so I may be SOL until a more stable version of VS.NET2005 comes out. *sigh*

ATTN: THIS HAS BEEN DEPRECATED. PLEASE DO NOT TRY TO INSTALL OR USE IT. INSTEAD, OPEN THIS BLOG ENTRY TO INSTALL THE LATEST WORKING VERSION. THANK YOU.

Edit: Sorry, Remy. Since the X-Chat and iTunes APIs are platform specific, it's Windows only. Besides, there's already a Mac X-Chat/iTunes plugin. XD

I have finished a very early, very alpha version of my silly "Now Playing" plugin thingy for iTunes/X-Chat.

It's very early in its development, and unfourtunately at this stage requires the SwissArmiTunes plugin to operate properly.

To run it, download the DLL from here and tell your X-Chat to "Load Plugin or Script" on it. Type /mp3 to announce to the channel what you're listening to.

Here's what it does do:
* In conjunction with the SwissArmiTunes plugin, "/me"s what you're playing to the channel.
* Shouldn't crash your X-Chat ;)

Here's what's to come:
* Unicode support: The X-Chat API does not support double-byte chars, so Unicode support does not work right now. This is a fundamental X-Chat API flaw and requires someone (me or them) to fix it.
* All-in-One plugin: Right now the plugin requires my hacked together SwissArmiTunes plugin which populates the registry. The next step is to write a single plugin that interoperates with X-Chat and iTunes in a single DLL. This allows for ..
* Customizability and More Verbosity: Right now all it does is print the artist/title/album in a set format. Future releases will be able to have a custom format along with what you want it to say.

If you experience any problems, you can do this to help me: type
/mp3debug (turn on debugging) and then tell me what happens when you type /mp3. If X-Chat crashes, let me know what the crash message was.

[Listening to: Jesus - Queen - Queen ()]

I am almost done with the back-end piece to the MP3 Pictifier portion of my MP3Magick software suite. To make my life easier, and reduce the headache of there not being a real .NET API for WMP right now, I'm writing the back-end APIC processing piece in C++. I'm getting pretty close.

Mikimis: prepare to be inseminated.

[Listening to: RUGGED ASH - SYMPHONIC DEFOGGERS - beatmania 4th MIX Original Sound Tracks ()]

ATTN: THIS HAS BEEN DEPRECATED. PLEASE DO NOT TRY TO INSTALL OR USE IT. INSTEAD, OPEN THIS BLOG ENTRY TO INSTALL THE LATEST WORKING VERSION. THANK YOU.

I've completed phase 1 in my iTunes plugin, and that's the facility that populates the "HKCU\Software\Microsoft\MediaPlayer\CurrentMetadata" field that various some programs use to get the "Now Playing" status. This documented as part of the WMP9 Fun Pack Blogging Plug-In, but since this plug-in is written entirely from scratch, I didn't use any of it. :)

Also, despite the fact that the tool I'm using to post this (w.bloggar) is most certainly *not* Unicode friendly, my app is and writes to the registry using Unicode.

If you want to check it out, download the DLL from here, and copy it to your iTunes\Plug-Ins directory. That's it. It doesn't need to be enabled or anything to work.

I plan on adding much more kitchen sink functionality to it (hence the name) but this is a start at the very least.

Gamercard

Recent Flickr Uploads

www.flickr.com
This is a Flickr badge showing public photos from rampage. Make your own badge here.

Recently Played

Archives

Tag Cloud

Support this site!

Creative Commons License
This weblog is licensed under a Creative Commons License.
Powered by Movable Type