2008-04-27

Ubuntu中在系统菜单里面添加程序的快捷方式

和windows不同,貌似linux下要添加快捷方式十分困难的样子,那么,我们来看看这个快捷方式是什么东西。
实际上这些快捷方式都存在:
/usr/share/applications$下,比如我的audacious的快捷方式其实就是这里的文件audacious.desktop我们看看内容:

[Desktop Entry]
Name=Audacious
GenericName=Audio Player
Comment=Play music
Comment[hu]=Zene lejátszása
Exec=audacious %U
Icon=audacious
MimeType=application/x-ogg;audio/mp3;audio/mpeg;audio/mpegurl;audio/prs.sid;audio/x-flac;audio/x-it;audio/x-mod;audio/x-mp3;audio/x-mpeg;audio/x-mpegurl;audio/x-ms-wma;audio/x-musepack;audio/x-s3m;audio/x-scpls;audio/x-stm;audio/x-wav;audio/x-xm;application/ogg;audio/x-vorbis+ogg
Categories=GTK;AudioVideo;Audio;Player;
Terminal=false
Type=Application

这样以来大概情况就清楚了吧?最后一个就是归类,增加一个Network就会出现在互联网底下。

其实还有一种图形化的方法,就是在系统→首选项→主菜单中配置,如果没有就运行:
sudo apt-get install alacarte

--------------------------------------
2008年12月9日更新:
  如果需要在gnome桌面建立一个启动器的话,只需要直接右键点击新建起动器之后输入命令就好,那么,如果需要启动一些需要superuser的权限的程序呢?
其实只需要用gksu我们可以在启动器里面输入:
gksu -S /usr/lib/mplayer/bin/mplayer
这样就新建了一个会要求输入密码以superuser权限运行的启动器。

Ubutu 8.04简单配置影音体验

影音体验自然是日常使用中必不可少的东西,这里我喜欢用mplayer和audacious

首先因该安装gstreamer
GStreamer is a streaming media framework, based on graphs of filters which operate on media data. Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related. Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.

#sudo apt-get install gstreamer0.10-*
再装些相关的东西,
#sudo apt-get install totem-xine
ffmpeg mjpegtools

其中ffmepg有必要介绍下:

FFmpeg is a complete solution to record, convert and stream audio and video. It includes libavcodec, the leading audio/video codec library. FFmpeg is developed under Linux, but it can compiled under most operating systems, including Windows.

组成结构

  • ffmpeg项目由以下几部分组成:
    • ffmpeg 视频文件转换命令行工具,也支持经过实时电视卡抓取和编码成视频文件.
    • ffserver 基于HTTP(RTSP正在开发中)用于实时广播的多媒体服务器.也支持时间平移
    • ffplay 用 SDL和FFmpeg库开发的一个简单的媒体播放器
    • libavcodec 一个包含了所有FFmpeg音视频编解码器的库.为了保证最优性能和高可复用性,大多数编解码器从头开发的.
    • libavformat 一个包含了所有的普通音视格式的解析器和产生器的库.

ffmpeg与ffdshow的关系

看不少人对ffdshow和ffmpeg的关系有点搞不清楚,所以响应Leon老大的号召,发个帖子简单说明一下。

ffdshow is DirectShow and VFW codec for decoding/encoding many video and audio formats, including DivX and XviD movies using libavcodec, xvid and other opensourced libraries with a rich set of postprocessing filters.

上边是sf的ffdshow的简单说明。我得理解就是,ffdshow是对一些codec(ffmpeg, xvid, and other)的封装,封装成了DirectShow和VFW的标准组件。比如对于xvid来讲,ffdshow是可以选择具体使用那个codec的, ffmpeg(libavcodec) or xvid。

那么封装有没有额外的成本哪?有,但对大部分应用来讲,可以忽略不计。就如c++和c。

先说这么多,欢迎拍砖。

写得不错,目前群里面的兄弟都在研究ffmpeg,对ffdshow研究的少,因为ffdshow只是一件外衣,核心还是ffmpeg,估计等一段时间就会有些朋友转向ffdshow的。

我再补充几句吧,vfw和dshow里的CODEC分别是通过fourcc码和guid机制寻找的,可以在系统注册codec后调用,比自 带编解码库形式更加统一,便于使用。此外,vfw和dshow是代表了两个微软不同时期的音视频处理封装库,里面包含了音视频驱动,音视频处理的一整套方 案。

这里引用自http://www.ffmpeg.com.cn/index.php/Ffmpeg%E7%AE%80%E4%BB%8B


最后安装播放器吧
# apt-get install mplayer mplayer-fonts mozilla-mplayer

现在好了,不过还不能播放影片,需要下载一些解码器。
可以到http://www.mplayerhq.hu/MPlayer/releases/codecs/去下载
我的机子是AMD Athlon X2 64的,所以除了
all-20071007.tar.bz2和essential-20071007.tar.bz2外再下一个
essential-amd64-20071007.tar.bz2

此外,如果你需要
放wmv、rmvb等常见视频的话需要安装w32codecs,不过貌似这里和新得利里面找不到w32codecs,所以得自己下载,
到http://debian-multimedia.org/pool/main/w/w32codecs/
去看看。
下载来的解码器得解压到/usr/local/lib/codecs中
另外,Ubuntu官方wiki上介绍要把播放模式设置为xv X11/xv可惜我的机子这样设置没用不能放,所以就直接设置为X11了。

之后就比如配置中文字幕的显示了,如果你需要看到中文字幕的话:
基本可以参照Ubuntu的wiki,不过我这里那个字体文件是.ttc的扩展名,记得改下就好。


mkdir ~/.mplayer
ln -sf /usr/share/fonts/truetype/arphic/uming.ttc ~/.mplayer/subfont.ttf
gedit ~/.mplayer/gui.conf

sub_cp = "cp936"
font_text_scale = "4.000000"
font_osd_scale = "4.000000"
sub_fuzziness=2


  至此,mplayer的设置已经基本可以了,我这里可以播放机子上所有的视频文件了。

接下来是是安装Audacious这个直接用apt-get就好了。
之后打开audacious会发现中文名乱码,只需要在设置,播放列表中改一下就ok~

此外,关于ubuntu下的这个audacious播放器播放midi的问题,可以参考下面这个内容:

How To: Ubuntu MIDI Playback with Audacious

22 01 2008

One of the things I kind of missed from Linux is general MIDI playback. Currently there’s only a few options. Use a software synth such as Timidity or try and fool around for a long time to get your hardware to play MIDI. There is some hope though, a new plugin in the gstreamer-bad package upstream will allow any gstreamer based player play MIDI through Timidity. But if you have a sound card that can play MIDI why not use it? A software synth is very CPU intensive, using the hardware seems optimal. There’s also another way. Audacious has a MIDI plugin that can do both hardware and software synth, so everyone ends up happy.

So how do you do this?

Software Synth, AMIDI Plugin with FluidSynth Backend

This is good for computers that do not have a sound card capable of MIDI playback.

First install Audacious and extras

sudo apt-get install audacious audacious-plugins audacious-plugins-extra

Now open Audacious and right click anywhere on Audacious to bring up the menu. Go to Preference. Click on the Plugins tab and highlight the AMIDI-Plug plugin. Then click Preferences and select the FluidSynth backend. Now select the FluidSynth Backend tab to configure it. You’re going to need to find a general MIDI soundfont. There’s plenty available out there. Now you need to add the location of the soundfont (.SF2) to the SoundFont settings. Now click OK. You should now be able to play back MIDIs :)

Hardware Synth, AMIDI Plugin with ALSA Backend

This is a little more tricky and you need to have a sound card that is capable of MIDI playback. Any card that uses the emu10k1 driver (e.g. Sound Blaster Audigy 2 and 4) should work since they are capable of loading soundfont wave tables into the sound card.
First let’s install the necessary itemsudo apt-get install audacious audacious-plugins audacious-plugins-extra awesfx


Now open Audacious and right click anywhere on it to bring up the menu. Go to Preferences and select the Plugins tab. Highlight the AMIDI-Plug plugin and click on Preferences. Highlight the ALSA Backend. You can configure extra options for the ALSA backend by clicking on the ALSA Backend tab, but the defaults should be fine. Click OK and close the Preferences dialog. Now you’re going to need a SoundFont. If you have a Sound Blaster Audigy check the installation CD. There should be some soundfonts on there. Copy them to your hard drive somewhere. Now open a terminal and cd to the directory where you put themcd /path/to/soundfont/Now load it into the sound card with asfxloadasfxload soundfont.SF2Now you can close the terminal and go back to Audacious. You should now be able to play MIDI files off the hardware. The only slight inconvenience to this is that when you reboot you will have to reload the soundfont before playing MIDIs.I’ve made a screencast of both ways to do this if you need to see it visually ;) Just be warned the first half came out really loud for some reason, so you might want to turn your volume down a bit. :lol: http://www.mediafire.com/?8bdddtxvo1l

这里提供一个下载地址: ftp://ftp.personalcopy.net/pub/Unison.sf2.gz
好了,现在你的视频和音频播放已经完美了!!


/*-----------------------------------------------------*/
*原创文章,转载请保留指向本文的连接
/*-----------------------------------------------------*/

2008-04-26

Ubuntu下初学者常用的一些命令和常识

Ubuntu 8.04终于发布了,传说中的长期支持版一般都拥有不错的品质,这次的版本果然没有让我失望.
由于sun中国技术社区已经打电话确认给我提供SDXE 01/08的光盘了,所以卸了上次那讨厌的自动安装光盘装的openSolaris10,现在先玩Ubuntu了..
话说这次社区的支持情况也不错,不过按照惯例,两个月没用Ubuntu我又忘记一些使用的命令了,为了以防以后这种情况,这篇文章就贴些常识和命令吧.

此外,严重推荐多用man命令来查看命令的详细说明
-------------------------------------------------------
首先关于压缩和打包
不同于windows,linux下常见的压缩包非常多.比如.gz .tar .tar.gz .bz2 .Z 等等.这里面有何区别呢?
首先有两个概念,一个是打包,一个是压缩,都是很容易顾名思义出来的概念.Linux下最常用的打包程序就是tar了,使用tar命令打的包一般以tar结尾,打完包后可以用其他程序来压缩.
先介绍tar命令:
tar [ - ] A --catenate --concatenate | c --create | d --diff --compare | --delete | r --append | t --list | u --update | x --extract --get [ options ] pathname [ pathname ... ]

这个不大好看,其实一般我们用到的命令不多:
-A, --catenate, --concatenate
append tar files to an archive


-c, --create
create a new archive

-d, --diff, --compare
find differences between archive and file system

--delete
delete from the archive (not for use on mag tapes!)

-r, --append
append files to the end of an archive

-t, --list
list the contents of an archive

-u, --update
only append files that are newer than copy in archive

-x, --extract, --get
extract files from an archive
-f, --file [HOSTNAME:]F
use archive file or device F (otherwise value of TAPE environ-ment variable; if unset, "-", meaning stdin/stdout)



还有一个-C 用于指定释放文件到某个路径下.
例如:
#tar -cf temp.tar *.*
指将当前目录下所有文件打包
#tar -uf temp.tar test.png
指更新temp.tar中的test.png文件.
#tar -tf temp.tar
指列出包中的所有文件
#tar -rf temp.tar test.jpg
指向包中追加一个test.jpg文件
#tar -xf temp.tar -C /home/username/tempp
指将文件释放到 /home/username/tempp

此外,tar还可以在打包的同时压缩文件.
比如使用-z参数在打包的同时压缩文件压缩程序是gzip
同理使用-j为用bzip2
使用-Z为用compress
解压也需要用对应的参数.
比如:
#tar -gzf temp.tar.gz
用于解压gzip压缩过的tar包.

此外,在终端通过
#sudo apt-get install rar unrar p7zip
可以安装RAR解压和压缩程序
用法略有不同,可以通过man该命令查看

2008-04-10

光盘刻录的格式ISO or UDF

  像我这样的高清爱好者经常遇到的一个问题就是需要刻录高清影像到光盘,这里自然经常会遇到文件大于2G要使用UDF格式刻录的问题,也许有人已经发现,实际上UDF刻录的光盘有时候读不出来。当然你可以把它当作问题,自然也可以把它当作隐藏光盘上文件内容的一个方法。那么就先看看这两种类型的介绍吧:

  ISO-9660:又简称ISO,是由国际标准化组织在1985年制定的,当前唯一通用的光盘文件系统,任何类型的计算机都支持它,所有的烧录软件也都支持它。而且,若想让所有的CD-ROM都能读取烧录好的光盘,就必须使用ISO-9660或与其兼容的文件系统,其他的文件系统只能在CD-R或CD-RW上读取(有的还需要相应的烧录软件配合)。ISO-9660目前有两个标准:Level 1和Level 2。Level 1与DOS兼容,文件名采用传统的8.3格式,而且所有字符只能是26个大写英文字母、10个阿拉伯数字及下划线。Level 2则在Level 1的基础上加以改进,允许使用长文件名,但不支持DOS。

  UDF是统一光盘格式(Universal Disc Format)的缩写。它采用标准的封装写入技术(PW,Packet Writing)将CD-R当作硬盘来使,用户可以在光盘上修改和删除文件。其基本原理是在进行烧录时先将数据打包,并在内存中临时建立一个特殊的文件目录表,同时接管系统对光盘的访问。被删除的文件或文件中被修改的部分其实仍存在CD-R光盘中,修改后的部分则以单独的数据块写入光盘,只不过在内存的目录表中,通过设定允许和不允许访问以及特殊链接等重定向寻址方法将数据重新组合,让系统找不到“老数据”,或让新数据替换老数据,从而达到删除与修改的目的。当用户结束操作后,便将新的目录表写回光盘并记下操作内容以便光盘日后的读取和数据的恢复(Undo)。这样一来,无疑大大增加了操作的便利性。而且在使用UDF时,一般都可以使用Windows中的资源管理器就能进行烧录,不会象使用ISO映像文件进行烧录时,每次完毕后都要进行关闭区段(Close Session)的操作,减少了烧录失败的机率。目前使用UDF技术的软件也都支持对CD-RW盘片的烧录,但在一些细节上有所不同,如删除的文件真的是被删除而不再是欺骗操作系统了。不过,在增加便利性的同时UDF也减少了有效存储空间,而且还要事先将CD-R与CD-RW盘片进行格式化,其中CD- RW盘片格式化后的容量要减少近100MB,所以大家要视情使用。另外,它还有一种派生的格式,即UDF/ISO,用UDF的技术制作ISO标准的光盘。

两者的区别:

ISO 不支持单个大于2G的文件
UDF 支持2G大小以上文件
ISO 兼容性好
UDF DOS和Win98系统不支持此格式,2000和XP以上系统和MAC系统支持

用NERO刻录大于2G文件的正确方法:
  NERO中新建的时候,选DVD - 选择DVD/UDF - 选择“无多重区段(No Multisession)”
注明:选择“无多重区段(No Multisession)是为了保持DVD的最大兼容性,能在绝大多数光驱读得出的话。

那么如何会出现系统认不出光盘里的内容呢?

Windows 98 支持读取 UDF 版本 1.02 的光盘数据,Windows 2000 可以支持读取 UDF 版本 1.02 和版本 1.50的光盘数据,Windows XP可以支持UDF 2.01版的光盘数据。

这就是答案,剩下的发挥自己的想象力吧。提示一下,我的udf盘系统不认当时UltraISO能认!

2008-04-07

C课程上要求的算法

冒泡算法:
  最简单的排序方法是冒泡排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,“次轻”的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是“最轻”元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。这个算法可实现如下。

#include<stdio.h>

void bubsort(float* arr,int Count);
int main()
{
float Num[10]={5.0,81.5,94.2,57.2,44.6,648.5,41.2,15.2,48.2,16.6};
bubsort(Num,10);
return 0;
}

void bubsort(float* arr,int Count)
{
short a,b,i;
float temp;
for(a=0;a<Count;a++)
{
for(b=0;b<Count-a-1;b++)
{
if(*(arr+b)<(*(arr+b+1)))
{
temp=*(arr+b);(*(arr+b))=(*(arr+b+1));(*(arr+b+1))=temp;
}
}
}

for(i=0;i<Count;i++)
{
printf("%5.1f\n",arr[i]);
}
}


  这段代码是最简单的冒泡法代码,其作用是将一个数列从大到小排列。在我们的作业中还要求要使用冒泡法来拍一个二维字符数组。可以通过简单的修改这段代码实现:

#include<stdio.h>
#include<string.h>

void bubsort(char arr[10][25],int NU);
void swap(char *a,char *b);
int main()
{
char sstr[10][25]={"sdttsdiv","sdtissc","asdi,kf","qwifsad","civje","cvjief","divne","ssdve","dfojeo","ljsijv"};
bubsort(sstr,10);

return 0;
}

void bubsort(char arr[10][25],int NU)
{
int x, y;
char temp[25];
for(y=0;y<NU-1;y++)
{
for(x=1;x<NU-y;x++)
{
if(strcmp(arr[x],arr[x-1])<=0)
{
swap(arr[x],arr[x-1]);
}
}
}
/*sort the arr*/
for(x=0;x<NU-1;x++)
{
printf("%s\n",arr[x]);
}
printf("\n");
}

void swap(char *a,char *b)
{
char tem[25];
strcpy(tem,a);strcpy(a,b);strcpy(b,tem);
}


这种算法是稳定排序法,当遇到相等的情况时会跳过继续排列。
-------------------------------------------------------------------------------------