mp3的ID3 TAG编辑器,,目前只是半成品,只实现了ID3V1的编辑,我不确定以后是不是会有时间加入对ID3V2的支持。虽然,ID3V1几乎已经被淘汰了……
这个小项目的构思来自三年前学习C++的时候,当时觉得自己已经会编程了,只是不知道该写些什么。由于当时在Linux下mp3 id3信息乱码,于是有了这么一个想法,想写一个转换编码的程序,可是却毫无头绪。觉得自己会了,想要写一个东西却完全不知道该怎么下手,这真是一件奇妙的事。后来C++我没学会,这个构思也只是偶尔想起来。直到最近……
运行在Linux系统上:
切确的说,windows上也能运行,不过由于gtk在windows的bug,在GtkEntry Widget中无效的UTF-8字符无法被清除——导致几乎不能使用。虽然这样,但是它的绝大部分代码确实是在windows下编写的。
写出来以后,我不知道该是高兴还是沮丧:3600多行的代码,几乎没有多少功能,花了近一个半月(虽然不是全花在上面)。倒是有了一些感想:
1、没事别写GUI
2、针对GTK的:Use Glade, but do not generate code. 不要在glade中创建复杂widget,像是GtkTreeView这种MVC结构的Widget,View可以用Glade 创建,但是Model还是自己来的好(ID3 Editor并没有完全遵循这个,能运行就懒得改了)。顺便说一句,我一直没搞懂Controller是什么概念。
3、对于某个数据结构,写一个dump的函数,对调试有很大帮助,这是从gdsl的代码里面学来的。如果当初为毕业设计的驱动程序写这么一个dump函数,调试应该会轻松很多吧……
4、编写的时候,遇到两个困扰的问题,都跟内存释放有关:一次是错误的使用g_free()来使用释放Gerror;另一次是释放了一个错误的指针,造成两次释放,当然这不是我的本意,是我写错了一个变量名导致的。在windows下调试得焦头烂额也没明白哪里出错了,最后是在linux下根据glib的backtrack信息确定的。我有个想法是:如果完全不考虑内存释放,就不会遇到这种问题Orz