首页> 技术分享

技术分享 存档

解决IE缓存ajax GET信息的问题

2013年09月05日 分类目录 :web技术 0

今天测试组在测试我们发布的网站的时候发现登录的用户看到的信息与期望结果有所不同,而且该现象只在IE下出现,Chrome中显示的数据与期望值相符。于是在持续抱怨奇葩的IE的同时不得不去调查原因,终于在不懈地挖掘下,发现了造成这种情况的奇葩原因。

bug原因

被发现问题的这个功能我们设计的是通过ajax使用GET调用controller中的action来获取数据list,然后显示在界面上。当我debug跟踪相关action的时候发现,被调用的action只在浏览器第一次跑我们的网站的时候才会被调用,之后无论是更换登录的id还是F5刷新页面,这个action都没被调用。于是就将重心放在了浏览器缓存上,事实证明也的确如此。
当分别使用IE和Chrome的开发者工具来查看相关网络情况的时候,我们发现两者在request header中有一个关键的不同。chrome在发出的情况中默认包含了Cache-Control:no-cache信息,而IE没有。这也就造成了IE在执行ajax的时候会从缓存中提取曾经被缓存下来的结果,而chrome则向服务器发出请求重新获取数据。

解决方案

针对上述发现的原因,我尝试了2种不同的方案来强制IE向服务器发出请求重新获取数据,这里做一个分享。
1.使用post替换get。
2.依然使用get,但添加cache:false的header info。
当使用上述任意一种方案之后,在request header中均看到来Cache-Control:no-cache信息。

最后,不得不在抱怨一句,微软的IE还真是奇葩,这已经不知道是最近第几次发生只在IE中出现问题的情况了。尤其是IE还会有IE9错误,IE10正确的奇葩现象(由于我们的项目只要求IE9以上,所以IE9以下版本直接无视,否则可能更加悲剧了吧)

,

[已解决]没有规则可以创建目标“menuconfig”

2013年08月10日 分类目录 :linux&软件技术 0

我在安装Gentoo的时候内核使用的是稳定版里的gentoo-sources-3.8.13,后来瞎折腾又启用了测试源(即在/etc/portage/make.conf中添上”ACCEPT_KEYWORDS=”~amd64″”),于是把内核升级到了3.10.3,但是当我准备重新编译内核并启用新内核时,出现了标题所说的错误信息,经过一番Google终于了解了个大概的解决方法,这里记录一下解决过程。

当我进入/usr/src/linux执行”make menuconfig”命令进行内核选项修改时,终端提示”make :***没有规则可以创建目标“menuconfig”** 错误”, 出现这个错误的原因我并不清楚,也未就它去调查(目前无心研究这些),所以直接找了个解决方案来应付,经过对这一问题进行Google搜索,终于了解了它的原因所在,按常理,当我们执行”emerge -auDN world”来更新软件之后,如果有新内核被安装,我们会直接执行下面将会提到的操作来启用新内核,然后旧内核就会被抛弃,然后当执行”emerge –depclean”的时候,没用了的旧内核会被删除,但是旧内核的目录会被保留,而如果我们/usr/src/linux仍然与旧内核目录进行链接的话,就会出现这些问题了。   

当我看到这个错误之后,我习惯性地执行了”ls -l /usr/src/linux”,然后发现目前使用的仍然是稳定版的内核,新内核并没有使用。于是先执行”cd /usr/src”进入可以执行下面的操作的目录,之后执行”unlink linux”解除/usr/src/linux和/usr/src/linux-3.8.13-gentoo之间的链接关系,再将新内核目录和linux目录链接起来(执行”ln -s linux-3.10.3-gentoo linux”),然后我们需要将linux-3.8.13-gentoo目录里的.config复制到linux-3.10.3-gentoo目录中,这样才能保留原有配置表。最后就可以照旧执行”make menuconfig”(如果需要增加新选项的话)和”make && make modules_install”来编译安装新内核了。

如果在启用新内核成功之后,我们可以考虑将旧内核的目录从文件系统中删除以节省空间。执行的命令是”rm -r /usr/src/linux-3.8.13-gentoo”。

参考链接:make: *** No rule to make target `menuconfig’. [solved]

, , , ,

perl module Locale::gettext required

2013年08月08日 分类目录 :linux&软件技术 0

刚才在升级进程走到emerge help2man时,又出现因为perl module Locale::gettext required而中断的情况,后来通过google得知,重新安装一次Locale-gettext就可以了.

emerge  Locale-gettext

,

解决gcc无法识别命令行选项的错误

2013年08月08日 分类目录 :linux&软件技术 0

今天在升级我自己打磨的Gentoo时,当emerge到sys-block/thin-provisioning-tools时,ebulid进程被中断了,然后在log中看到如下错误信息"cc1plus error unrecognized command line option ‘-std=c++11’",在google无果的情况下前去gentoo的irc频道求助,这才得知,当emerge新的gcc之后,系统并不会自动启用更新版的gcc,而会仍旧使用旧的,这样一来就可能会出现某些命令行选项无法被正确识别的问题.之后根据irc中其他网友给出的建议,参考Gentoo Gcc Upgrade Guide启用了新的gcc,这里简要记录一下使用到的命令,以便将来需要时查看.

Wangqige wankey # gcc-config -l
 [1] x86_64-pc-linux-gnu-4.6.3 *
 [2] x86_64-pc-linux-gnu-4.7.3
Wangqige wankey # gcc-config 2
 * Switching native-compiler to x86_64-pc-linux-gnu-4.7.3 ...
>>> Regenerating /etc/ld.so.cache...                                      [ ok ]

 * If you intend to use the gcc from the new profile in an already
 * running shell, please remember to do:

 *   . /etc/profile

Wangqige wankey # env-update
>>> Regenerating /etc/ld.so.cache...
Wangqige wankey # source /etc/profile
Wangqige wankey # emerge --oneshot libtool

gcc-config -l是列出系统中已安装的所有gcc版本.之后使用gcc-config 2选择使用第二个gcc版本,如果有更多个版本,则将2改为最新的那个版本相应的序号.随后的env-update和source /etc/profile用来让系统能够识别它.当完成这些步骤之后,我们需要重建libtool,即上面最后一句命令.

最后,为了保证系统的健全状态,我们应该使用新的gcc重建一次系统(?真的吗?在最新的英文版中我没见到相关描述,只在中文版中看到,看来又是过时的吧)

emerge -eav system
emerge -eav world

如果希望将旧版本的gcc删除,我们可以使用类似如下命令

emerge -aC =sys-devel/gcc-3.4*

,

Gentoo安装总结

2013年08月03日 分类目录 :linux&软件技术 0

在折腾劲的推动下,花了整整2周(周末全天+工作日晚上)来安装Gentoo,终于在数十次的重复Gentoo HandBook中的步骤,并参考了多篇Gentoo Wiki上的文章及Funtoo Linux Installation,终于实现了我所期望实现的功能,比如使用UEFI直接从主板进入桌面而非使用Grub等传统Bootloader;使用最简化的KDE桌面环境等等。
经过这一番折腾,让我对Linux的了解更加深入,虽然仍然只算是皮毛,但是却是一个好的开始,这里将就这次安装的经过进行一次简单的总结,理出一些需要注意的地方,以及建议点,希望有机会看到我的文章的同好能够吸取到我的经验,少走一些冤枉路,尽快进入到Gentoo奇妙的殿堂。
1.Gentoo安装媒介
Gentoo官方提供了一个最简化的Live镜像,通过使用它我们可以很好地进行安装工作,但是对于像我这种希望能够实现UEFI启动的来说,它似乎就不是最佳选择了,我在使用它进行安装的过程中,只有一次成功实现了UEFI启动(很不幸这唯一的一次因为其他设置的问题被我给格掉了),后来我参考了Funtoo的安装指南,使用了SystemRecueCD作为安装媒介,虽然第一次仍然出现问题,但是第二次就顺利完成了。而且从名字上就可以得知,SystemRecueCD的性质是应急救援盘,无论我们是在使用Linux的过程中,还是使用Windows等系统,在发生灾难性事件的时候(比如无法进入桌面),我们都可以拿它来应急。此外,由于它已经支持efi启动,所以像是我在配置uefi的时候,用它就会非常方便了。
2.Gentoo安装手册(语言问题)
对于初次接触安装Gentoo的人来说,一份详尽的安装手册是必不可少的,它是我们安装Gentoo的指明灯,在Gentoo的官网上,和安装相关的手册非常多,而且有多种语言的版本可供选择,其中就有简体中文。最初几次我按照简体中文语言版的手册来安装,虽然也算是成功了,但是总有一些奇怪的现象发生,比如在emerge软件的时候看到有2份make.conf文件的提示,又如在分配硬盘一节中,没有提供创建ext4文件系统的命令。后来经过和英文版手册的比较发现,简体中文手册上的部分内容早已过时了,由此引申发现,在其他部分的手册中,简体中文手册的内容都或多或少有过时现象。因此,在这里我建议在安装Gentoo的过程中以英文版手册为准,虽然对于我们这种非英文语系国家的人来说,看英文版有一定的难度,但是好在我们主要是看手册中的那些命令以及配置,介绍性的内容的重要度不大,所以应该问题不大。
3.Gentoo安装手册(技术问题)
我想绝大多数安装Gentoo的朋友就和我一样主要是按照Gentoo HandBook上的步骤来的,在这过程中可能安装的应用也都是手册里推荐的,但是当我在照着操作的过程中,我发现一个很不幸的现象,那就是里面推荐使用的一些软件都是过时了的,比如bootloader一节中介绍使用的是grub,但是在我印象中它已经结束了生命周期,目前普遍使用的是Grub2,更别说Syslinux或我使用的uefi了,虽然grub是经受了历史的检验的稳定版本,但是对于使用Linux的来说,稳定是不够的,应该要尝鲜才对(服务器除外)。所以,按照手册只能作为一个参考,我们还应该去广泛参考那些Wiki上介绍的软件、技术,这样才能构建出一个更好的系统来,否则,大可以去使用那些定制好了的发行版,何必来自己整呢?
4.窗口系统
在安装KDE等桌面环境之前,我们必须先安装窗口系统,它是目前我们必须安装的,无论是qt还是gtk目前都是基于它实现的,而目前我们可选的只有有着25年悠久历史的X窗口了,也许等wayland成熟之后我们才能抛弃它吧。按照Gentoo上的Xorg配置手册(貌似现在文档列表(英文)中已经删除它了)来配置的时候,它会要求设置xorg.conf等配置文件,不过在我的实际操作中发现,其实这些步骤并非必须,至少我的在没有配置的情况下仍然能够很好的运作。
X窗口系统有X11-Server和Xorg-Server两个版本,他们的区别在于前者夹带了许多我们永远不会用到的东西,所以我们必选后者。
5.KDE桌面环境
在众多桌面环境中,KDE一直是我心目中最漂亮最现代化的桌面环境了(事实上本来就是),但是很不幸,在使用诸如Fedora\Ubuntu的KDE定制版时发现,它捆绑的形形色色的软件太多,不少还不能安全的删除。而在Gentoo的世界里,这种让人不爽的现象可以有效地避免了。当我在配置桌面环境时,我发现Getnoo的源里有一个startkde版本,于是我尝试性的安装了它,发现果然清爽,只携带了极少的一部分软件(甚至没有浏览器、文件管理器和终端程序)。
6.必装软件
文件管理器:Dolphin(KDE默认文件管理器)
音乐播放器:Clementine(目前我所能找到的最好的基于Qt的音乐播放器)
终端:Konsole(喜欢去到文字界面执行命令的可以无视,否则它是我们执行各种命令的好帮手)
浏览器:Chromium(基于Qt的浏览器我实在没能找到一款满意的,所以就它吧)
输入法:Fcitx(Linux的世界还有哪款输入法和与之匹敌?)
………
7.待续

,

解决源码编译时的cannot found -lXX问题

2013年07月15日 分类目录 :linux&软件技术 0

最近心血来潮编译起了PyQT5,虽然我相信我不会用它做出什么程序来,不过还是对折腾它有兴趣。在我编译的过程中,遇到了一点问题,经过万能google的帮助解决了,这里记录一下。

在我使用python3 configure.py命令配置PyQT5的编译环境的时候,出现了

/usr/bin/ld cannot found -lGL

的错误信息,虽然好像这对最后的编译安装影响不大,至少后面的make命令顺利执行了,但是对我这种不容任何可能出现的问题产生的人来说,消灭它还是必须的,于是就去google上调查了一把,最后发现原来是缺少相应的开发包的缘故。根据网文显示,如果出来形如cannot found -lXX字样的错误信息的话,通常意味着系统中缺少相应的libXX.so,这时我们就需要去源里安装相关的开发包了。相关搜索命令如下:

For Debian:

apt-cache search libXX-dev

For RedHat:

yum search libXX-devel

当搜索到结果之后从中选择适当的安装就可以解决问题了。

, , ,

利用jQuery UI定制表单提交确认对话框

2013年07月08日 分类目录 :web技术 0

在Web开发过程中,确认对话框(confirm dialog)是一个非常常用的组件,无论是删除内容还是创建内容,我们经常会看到这样一个提示框来请求确认执行。如果不追求界面的美观、又希望使用简单,那么就用javascript提供的confirm()方法来制作,反之则可以使用包括jQueryUI等封装了增强版Dialog的框架。

javascript的confirm():

    var confirm=confirm("确定要访问网憩阁吗?");
    if(confirm){
         window.location.href="http://wangqige.com";
    }

上面这是最简单的一个确认对话框,首先我们在调用confirm()时传入一句需要提问的问题,当用户点击“确认”按钮时跳转到指定的页面。
只是可惜confirm提供给我们的定制化性能太弱了,连Ok、cancel两个button上显示的文字都不能随意修改(只能系统本地化为当前区域惯用文字,如简体中文是“确认”和“取消”),在我这次的功能制造过程中,日方要求将“Ok”、“キャンセル”(cancel)改为日语习惯的“はい”、“いいえ”,于是我花了不少时间来调查这个问题,最终发现只有当浏览器为IE时可以借助vbscript来实现这个功能,其余浏览器则不行。于是我转而向jQuery UI方向来调查,终于完美解决了这个烦恼的问题(说完美其实也还差一点,不过这是css方面的问题)。

jQuery UI Dialog:

这是jQuery UI提供的标准化控件之一,通过对它的配置使用,我们可以很好的针对自己的需求来进行定制,而且使用也非常简单,至少我没花多少时间就实现了所有围绕它而做的操作,回头想想之前调查Upload时对Yahoo YUI的尝试,花了几天时间楞是没啥成果。废话不多说了,来段代码实际验证一番。
首先在html代码的底部添加一个空的div层,name命名为”dialog-confirm”,为了看起来舒服,而且规范化,再给加个title,代码效果如下:更新:貌似代码高亮功能出问题了,Html代码还是会被识别出来,只能不贴这部分了

这个div层是用来显示对话框的,在应用的过程中为了增加重用性,所以显示的文本内容由javascript来负责追加,而非写死在html代码中,下面来看javascript部分的代码:

  $(function() {
$( "#dialog-confirm" ).html("确定要访问网憩阁吗?");
$( "#dialog-confirm" ).dialog({
resizable: false,
height:140,
modal: true,
buttons: {
"确定": function() {
$( this ).dialog( "close" );
window.location.href="http://wangqige.com";
},
“取消”: function() {
$( this ).dialog( "close" );
}
}
});
});

对于Dialog所提供的方法,在此我不多作说明,如有需要可以参考官方文档,这里我只说明buttons部分。从上面的代码可知,双引号部分的文本就是Dialog上buton显示的内容,而后面则是触发click事件后的操作,在上面的例子中仅仅是关闭当前对话框,在实际开发中可以在关闭对话框之后调用自己写的function。

使用jQuery UI Dialog制造表单提交确认对话框

在本次的项目中,我所需要实现的是点击表单的submit事件之后,弹出一个对话框让用户确认提交表单。当我按照给出的示例做好对话框之后发现,jQuery UI Dialog不会终端表单的submit进程,因此当对话框仍显示在界面上,并且没有点击任何按钮的情况下,表单的submit操作已经执行完毕。理论性的内容我不是很了解,这里就不对原因进行阐述,下面直接给出解决方案。
首先创建一个简单的表单,在本示例中表单不执行任何实际操作,只是一个空表单,更新:貌似代码高亮功能出问题了,Html代码还是会被识别出来,只能不贴这部分了。之后是对提交按钮增加jQuery UI Dialog功能:

     $("#btnSUbmit").click(function(event){
            event.preventdefault();  //这句话最关键,它是jQuery提供的一个事件,用来阻止元素的默认执行动作,比如这里的表单提交
  $(function() {
$( "#dialog-confirm" ).html("确定要提交表单到网憩阁吗?");
$( "#dialog-confirm" ).dialog({
resizable: false,
height:140,
modal: true,
buttons: {
"确定": function() {
$( this ).dialog( "close" );
$("#myForm).submit();
},
“取消”: function() {
$( this ).dialog( "close" );
}
}
});
     })

, ,

数据库时间字段的几个技巧

2013年06月27日 分类目录 :web技术 0

用于作业环境中的数据库,通常都会在表中定义诸如“创建时间”、“修改时间”之类的字段来记录对该条记录的操作情况(对于像历史版本之类的高级应用来说,会根据“修改时间”来创建多条数据以便于恢复等操作)。在初级阶段,我们会通过在代码层手动修改这类字段,然后这是一种很不节约的办法。因此,在对数据库有了一定的了解之后,这些字段的操作就直接放在了数据库里,让数据库来自动进行修改,而不必由我们在代码层手动修改。

第一阶段的时间字段操作(代码侧)

正如前面提到的,在初级阶段,我们通常是在代码层手动修改这些时间字段,即在代码中执行sql语句,正如下面的语句这样

insert into test(created_date,modified_date) values(getdate(),getdate());
update table set modified_date=getdate() where id=?

理论上来说,这种写法一点问题都没有,也没有多少性能上的消耗,但是当应用日趋复杂,数据库愈发复杂,难免会出现些小问题。因此,对于这类字段,最佳方法当属完全在数据库段进行操作,而且是在创建数据库、表的时候就写好相关的存储过程或者触发器之类的。

第二阶段的时间字段操作(数据库侧)

在本次项目中,我使用了建表语句和触发器相结合的方式来解决这一系列的问题(由于项目关系,以下代码都只适用于sql server,其它数据库需要进行相应的修改才能实现)。首先,来看建表语句,created_date这个字段显然是用来记录这条记录的创建时间,而它只会在insert的时候赋值一次,以后不会再做修改,而modified_date虽然日后仍会修改,但是在insert的时候也需要将当前时间赋给它。既然如此,只需要参照如下修改建表语句就可以了。

create table test(
id int indentify(1,1) not null primary key,
created_date datetime not null default getdate(),
modified_date datetime not null default getdate()
)

说完建表语句,接下来看看每次修改数据时对modified_date进行修改的数据库端实现方式(同样只适用于sql server,其他数据库请进行相应的修改)。

create trigger trigger_test
on test
for update
declare @id int
begin
  select @id=id from inserted
  update test set modified_date =getdate()
  where id=@id
end

, ,

HTML file控件上传文件失败调查结论

2013年06月19日 分类目录 :web技术 0

前言

最近结束了android项目的开发,转做asp.NET网站的开发工作,由于之前从未接触过.NET项目,所以许多功能的实现都要做调查。我除了调查jQuery的使用之外,主要还负责了文件上传下载模块的功能实现。

bug经过

在调查上传功能的过程中,遇到了一个不能算是技术问题的小问题,耽搁了我不少时间,为了避免日后再犯类似问题,特此记录。
当我完成编码并运行测试的时候,发现选择的文件都没有上传到指定的文件夹下(此时我可以保证服务器端的Controller保存模块代码编码没有问题,可以实现保存操作),于是使用Debug监测相关代码,结果发现Requet中Files为空,并没有存入file控件选择的文件。在确定问题之后就此进行深入调查,最后发现,原因是我没有给控件添加name属性,所以导致无法传递。

详细原因:

在HTML中,file控件value值是以键值对的形式来保存并传递的,即给控件定义的name为key,选择的文件路径为value。因此没有定义name的file控件会被忽略掉。而我忽略了这种特性,只给控件定义了一个class来方便部分JavaScript的操作。

针对此次bug的引发观点:

HTML控件可选属性中有id,name,class三个,而它们存在的意义基本一致,既然如此为什么要区分出三个来呢?我看到不少地方的代码,给这三者赋了相同的值,某种程度上来说不是多此一举吗?在这个案例中,我就是因为只定义了一个class来使用而造成了后续的问题?
现在的IDE在静态代码监测并警示上已经做得很好了,解决了不少可能出现的问题,但是我没有给file控件赋name这个小问题竟然没有警示(至少我使用的visual studio2012是这样的),以至于花费了我不少时间来调查。

,

音频文件整理利器推荐

2013年05月15日 分类目录 :windows&软件技术| Windows资源 0

在MP3时代,由于MP3容量普遍较小(我第一个MP3容量仅512MB),所以为了储存更多的音乐,我们不得不使用单曲容量更低的mp3格式,而这带来的一个负面影响就是音质会有所损失,对于“木耳朵”的人问题不大,但是对于“金耳朵”就是个大灾难。好在如今存储技术的突飞猛进,这一问题基本得以解除,越来越多的人开始享受起无损音乐带来的听觉效果,虽然我是一个彻彻底底的“木耳朵”,但是也时髦了吧,电脑上、手机上90%以上的是无损格式。 在解决了存储容量这一问题之后,摆在我们面前的问题依然不少,而今天我所要解决的正是这些烦人的现象,顺便吐槽下国内一些盗版渠道,真是败你们所赐,才要我这么费劲啊。

ID3信息不全、不正

但凡有从网络上下载过音乐都会有这种经历,明明自己下载的音乐文件名是正常的,但是在播放器里显示的确是乱码或者是某网站域名,或者还算客气的只是专辑、年代、曲风等信息为空。当播放列表里有成百上千首时,想找到这首真是件大难事。而这全源于盗版网站为了推广自己,硬是将域名之类的信息植入进去,人为造成了这种ID3tag的不正、不全(这也是为什么当年Google 音乐推出时,会受到欢迎的原因,可惜随着其他互联网企业的进入,它已经寿终正寝了)。 说了那么多,那什么是ID3tag呢?

ID3tag是一种metadata容器,多应用于MP3格式的音频文件中。它可以将相关的曲名、演唱者、专辑、音轨数等信息存储在MP3文件中。

从ID3tag的定义我们可以看出,一个合格的音频文件(尤其是音乐)应当包含这些信息。奈何现实和理想总是有距离的,于是对此有洁癖的我们就只能自己使出浑身解数来补全信息了。经由一些推介优秀软件的介绍,我了解到了Quintessential Media Player这一媒体播放器,不过我只使用了它的媒体库功能,至于媒体播放这一块还是交给了其它播放器(这个播放器稍后也会有所提及介绍,应该会是另成一文吧)。

照例先了解下这播放器的非官方介绍(内容来自小众软件):

Quintessential Media Player 是款音乐播放器,利用 Gracenote 的插件,可以对 MP3 文件实现自动扫描并填充 MP3 ID3 信息。

此软件有非完整版中文包,对英文头疼的可以安装下中文插件。其使用非常简单,安装完成后(注意不要安装Lite版),将音频文件导入到媒体库中,软件就会自动处理音频文件的ID3tag信息了,当状态显示为”identified”后,就可以将从网络获取到的tag信息写入到音频文件的meta里了,就是这么简单。不过仍有3点需要注意:

  1. 非.mp3音频文件可能不会自动处理,需要手动操作
  2. 获取到的tag信息不能保证100%正确,还是有必要人工验证下的
  3. wav\flac等部分格式写入tag信息功能不支持

无损专辑.cue文件不规范

有时候为了保证文件夹里的有序,下载以一张专辑为一个音频文件的flac\ape\wav格式音频文件也是有必要的,而这种格式的音频文件通常会附带一个.cue索引文件,里面记录规定了专辑中每首音乐的起始时间戳、标题、演唱者等信息。现代化的媒体播放器可以根据这个文件将专辑分割出来并加入到播放列表中。然而,国内渠道下载到的音乐附带的cue文件的文字编码几乎100%是GB2312的(微软培养出来的坏习惯啊),而绝大多数国外的播放器都只支持UTF8编码的cue,这就导致了当使用这些播放器时,我们的音频文件无法被播放器正确分割或是分割后无法播放,这种糟糕的情况在Linux下尤其严重。解决这个问题的办法有3种:

  1. 将cue文件用utf8编码重新保存(但是有一定概率会导致乱码的出现);
  2. 换用支持GB2312的播放器;
  3. 通过技术手段将一张专辑分割保存为多个音频文件。 这里的3种方法可以根据自己的喜好来选择,并没有最优项。而对我来说,我比较倾向于第三种,事实上我也这么干了。原先我使用的是千千静听来进行这一操作,不过,为了分割音频文件而再去多安装一个播放器显然是我不需要的,于是就去网上又找了一个新方案,即使用 Medieval CUE Splitter这一专业分割器。它的使用非常简单,基本上看一眼就能了解个7788了。在我整理音频文件的时候,在分割操作结束之后,我会再利用上面提到的Quintessential Media Player处理一下分割后的音频文件,这样一来就完美了。

上述2个实用工具都是Windows环境下才能使用,在Linux环境中也有一些类似工具,只是功能上可能没有它们来得强大,所以,Linux用户如果想对音频文件进行这类处理的话,还是找个Windows平台吧。

, ,