❶ 我想在linux下面用纯C开发一个具有简单界面的音频播放器,我有了一定的C语言基础和linux基础,如何开始
Linux学习起抄来很自由的,所以你现在需要的是一份源码。
Linux下这类的源码很多,比如mplayer。
源码中代码量可能很大,源码中你需要的部分对应你的问题,会有以下相应的代码。
第一步 用C去播放一个音频文件(如mp3)需要一个解码器,因为mp3是一种网络格式,经过压缩的。所以源码中会有encoder,decoder这样的解码器代码,解码出可以直接播放的格式。当然也可以装上别人的播放器内核,这样你只需要一个调用就可以播放了,剩下的就只是界面的开发。
第二步 你可能听说过KDE,GNOME这样的图形界面系统。它们支持的库分别是QT(c++),GTK(C),mplayer用的gtk。这两个库都是跨平台的,你可以把它们想象成MFC。有了这样的库就可以轻松做出界面了。
然后把这两步的代码用数据结构关联起来。点击按钮,回调去调用解码器然后播放,你自己的播放器就成功播放了。
❷ linux音乐播放
MPlayer是基本上基于GPL协议的。但有些非GPL的代码所以不能用binary包发布。依据法律,MPlayer不能够做成rpm包发布。所以大家一定要使用source来编译,当然不能用rpm包发布还因为MPlayer在编译是针对机器的具体配置做了很多优化。所以在一台机器上编译的MPlayer不一定能在另 外的机器上运行(不过他们正在研究实时监测cpu的代码,下个版本应该就可以了)。
MPlayer 能播放的文件:MPEG,VOB,AVI,VIVO,ASF/WMV,QT/MOV,FLI, RM,NuppelVideo,yuv4mpeg,FILM,RoQ文件.可以看VCD,SVCD,DVD,3ivx和Divx,而且最新的 MPlayer还可以播放WMA的音乐文件。此外MPlayer还支持硬件MPEG解码,比如DVB和DXR3/Hollywood+(要另外下支持代码),支持 AC3的声音格式。可以放10种字幕文件(vobsub文件要有.ifo文件,美中不足)。
MPlayer的安装:
MPlayer的安装其实很简单,如果你不想要divx,DVD播放,也不想要DXR3和Hollywood的支持,这两个我觉得非重点,最后再说。只要有两个包:MPlayer的源代码包(MPlayer-********.tar.bz2)和win32解码器的包(win32codec.zip),如果是CVS版本但希望支持divx只要到divx.com去下一个divx4linux装一下(release版本,有libavcodec速度更快所以不要,cvs版本里面没有,要自己去下),另外,大家最介意的一点就是MPlayer不推荐用redhat自带的gcc2.96编译,也不推荐用 gcc3.x.x,最理想的是2.95.3和2.95.4。原因是因为2.96不接受MMX和3DNOW的代码。当然也可以用--disabel- gcc-checking跳过。另外 egcs编译器因为没有测试。可能也要用这个参数。
现在检查一下,你有了MPlayer的包,win32解码器的包。divx4linux装了。gcc2.95.3/4 也有了。下面就可以安装了。
先把win32codec.zip解压缩到/usr/lib/win32下面,然后在编译MPlayer源码。否则就没有avi的支持了编译源码没什么好说的,就是configure,make,make install,如果希望有图形界面的话,在configure是加 --enable-gui,另外还要到mplayer的网页上去下一个skin,解压缩放在.mplayer/Skin下 面。make install结束之后安装就完成了。0.5的MPlayer还要把codecs.conf拷到.mplayer下 面,0.60版的可以自己完成
MPlayer的配置和运行:
编译完了之后只要运行mplayer最简单的方法就是 mplayer 文件名,(如果你用的是 NVidia的显卡,可以装驱动。那样可以直接运行,如果不装驱动。还有两种选择,下面会说明)当然配置一下会更好:
如果要看字幕(vobsub除外),必须把字体安装到.mplayer/font下面,中文字体在172.8可以找到,当然也可以自己作,不过好像有点复杂,具体可以看DOCS的内容还有172.8的中文字体下面的说明编辑.mplayer下面的config文件(不记得MPlayer安装时候是不是创建这个文件,如果没有的话自己建吧),在里面可以添加
skin=newskin,newskin用你在MPlayer下的skin的名字代替,然后用 gmplayer命令就可以看到图形界面, 除非你下的skin是default,否则不设这一项直接用gmplayer是会出错的。这时候要用 gmplayer -skin newskin,这跟上面的设置等价的。
unicode=1
这是看中文字幕必备,看英文字幕也没有妨碍,所以写到config里面。
vaa_nodr=1
如果你用的CVS版本,或者我想将来可能也要用,这是禁止直接写屏的选项。在我的 Nvidia Vanta下面如果没有这一项,显示时间,字幕等等会很不清晰,以前的版本没有问 题。可以不要这个选项。
aop= list=extrastereo
这是使用立体声增强的插件的命令。效果就跟xmms里面的那个效果一样,默认参数是2.5 。可以自己设定。如果你有四声道的声卡,还可以用surround取代extrastereo,那是环 绕立体声。但如果你没有那种声卡用这个参数会无法发声。
另外还有一些不固定的参数,可以在运行mplayer/gmplayer是选用(他们都可以添加到 config下面,config下面的命令也可以变成参数)
-bps/-nobps
这是最重要的参数,这是两种图像和声音同步的方式。如果你播放avi(只有avi文件会有 问题)时如果发现声音图像不同步可以试试这两个选项。
-vo ***
-ao ***
这是设定音频和视频的输出的选项,正常情况下没有什么用,当如果你的机器是nvidia的 显卡有没有装驱动可以用 -vo sdl,就可以播放视频文件了。就是装了驱动。也可以试试这个选项。sdl会自动用nvidia 的库而且显示效果比直接用x11好(拖动窗口是不会有蓝色出现,按f就可以全屏,c可以在 能用的分辨率中切换)或者还有 -vo dga 和 -vo sdl:dga 这是用dga(Direct Graphics Access)显示,但这种方式需要root权限,而且只能全屏播放,所以不推荐。具体可以看 DOCS里的内容
此外如果你有svgalib,用-vo svga可以不进X看avi文件,当然由于没有显卡驱动,你的 cpu最好非常快(我的nvidia显卡不会配svgalib,所以也没有试过,不知道非常快是什么 概念),而且一定用全屏播放
-fm -vm -zoom
据说是全屏命令,我一直用图形界面和sdl,没有试过这个命令
-vcd
-dvd
放影碟时用的命令。我没有光驱,所以没有尝试过
-ss
这是命令行下面设定从什么地方开始放的命令。timepos的格式就是多少秒或者hh:mm:ss ,当看vobsub的电影是有用。
-sub
指定字幕文件,vobsub字幕无效,而且mplayer会自动搜索当前目录下面的同名文件作为 字幕。
-vobsub -vobsubid
这是看vobsub字幕的命令。目前只有cvs版本才有。name是字幕文件的位置+名字,不带后缀。但是后缀名一定要是小写,否则不认(如果你愿意可以修改一下vobsub.c,做个贡献),一定要.idx,.ifo,.sub三个文件都有。我一直没有明白windows下面的vobsub2.09 怎么能不要.ifo。所以如果没有.ifo的话只能去找别的字幕了。id是设定播放的语言。好像没有必然规律。反正试试看,从0到40,一般0不是英语就是汉语。很快就能找到中文字幕了。
播放中还有些常用的功能键
/, 降低音量
*, 提高音量
左右方向键, 前进或后退10s
上下方向键, 前进或后退1min
o, 调整字幕显示方式
f, 全屏(0.60版只有sdl有效,cvs版本全部有效)
还有很多别的功能键可以看DOCS
使用经验
1.播放媒体文件时候非常慢。
如果你没有oss或者alsa的话装一个试试。速度比内核的驱动会有明显的提高。或者用 -ao sdl试试,可能会有效果。如果确认不是声卡的问题,那就看看你的显卡设置。或者你 的机器实在太慢了(pII 400以上都应该可以)。
2.播放vobsub字幕的时候很慢,但如果不用字幕就正常没有什么好办法,好像vobsub.c写的有点问题。具体我也不太明白。但我有个歪招,就是改一下spudec.c,把ANTIALIASING_ALGORITHM的设定值改为0,总共可以设三个值:0,1 ,2。是控制字幕的显示质量的。数字越大质量越高。不过我看0和1没有什么差别。如果 你的机器很牛应该没问题 。
3.播放rm文件
虽然DOCS里面说能够播放。当只是开放编码格式的rm文件,不幸的是现在大部分rm文件都 不是。大家还是再装一个realplay吧。
4.字幕显示在电影画面上
用sdl播放可以把字幕调整到画面下方,如果可能的话。
5.无法使用sdl 升级,redhat自带的sdl好像版本低了点。
具体请见:http://www.linuxpk.com/40115.html
❸ linux下c语言 音乐播放器编码大概框架求高人指点。
Linux操作系统没有自抄带音频解袭码器,必须自己编写。
Windows操作系统自带音频解码器,调用接口是 Windows API 函数mciSendString。
函数原型:
MCIERROR mciSendString( LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback );
❹ 嵌入式培训LinuxC ARM完成5个项目:音乐播放器、聊天室、资源管理器、银行叫号系统、IP电话4000元值不值
看你是什么背景、要来什源么样的需求和你的学习时间。
这种培训,一般都针对,非计算机、电子背景学生,通过老师(一般都是在企业有开发经验的人)的传授,在短期内掌握或者叫可上手嵌入式linux开发;针对性很强,对于马上要求职的人非常有用;但是如果你还是一个在校生,完全可以自己对着资料进行学习,虽然辛苦点,但是收获肯定要大得多。
❺ 如何创建一个Linux音频播放器
Linux学习起来很自由的,所以你现在需要的是一份源码。
Linux下这类的源码很多,比如mplayer。专
源码中代属码量可能很大,源码中你需要的部分对应你的问题,会有以下相应的代码。
第一步 用C去播放一个音频文件(如MP3)需要一个解码器,因为mp3是一种网络格式,经过压缩的。所以源码中会有encoder,decoder这样的解码器代码,解码出可以直接播放的格式。当然也可以装上别人的播放器内核,这样你只需要一个调用就可以播放了,剩下的就只是界面的开发。
第二步 你可能听说过KDE,GNOME这样的图形界面系统。它们支持的库分别是QT(c++),GTK(C),mplayer用的gtk。这两个库都是跨平台的,你可以把它们想象成MFC。有了这样的库就可以轻松做出界面了。
然后把这两步的代码用数据结构关联起来。点击按钮,回调去调用解码器然后播放,你自己的播放器就成功播放了。
❻ linux下c程序执行时播放音乐
/**
*test.c
*
*注意:这个例子在Ubuntu12.04.1环境下编译运行成功。
*
*/
#include<stdio.h>
#include<stdlib.h>
#include<alsa/asoundlib.h>
intmain(intargc,char*argv[])
{
inti;
intret;
intbuf[128];
unsignedintval;
intdir=0;
char*buffer;
intsize;
snd_pcm_uframes_tframes;
snd_pcm_uframes_tperiodsize;
snd_pcm_t*playback_handle;//PCM设备句柄pcm.h
snd_pcm_hw_params_t*hw_params;//硬件信息和PCM流配置
if(argc!=2){
printf("error:alsa_play_test[musicname] ");
exit(1);
}
printf("playsong%sbywolf ",argv[1]);
FILE*fp=fopen(argv[1],"rb");
if(fp==NULL)
return0;
fseek(fp,100,SEEK_SET);
//1.打开PCM,最后一个参数为0意味着标准配置
ret=snd_pcm_open(&playback_handle,"default",SND_PCM_STREAM_PLAYBACK,0);
if(ret<0){
perror("snd_pcm_open");
exit(1);
}
//2.分配snd_pcm_hw_params_t结构体
ret=snd_pcm_hw_params_malloc(&hw_params);
if(ret<0){
perror("snd_pcm_hw_params_malloc");
exit(1);
}
//3.初始化hw_params
ret=snd_pcm_hw_params_any(playback_handle,hw_params);
if(ret<0){
perror("snd_pcm_hw_params_any");
exit(1);
}
//4.初始化访问权限
ret=snd_pcm_hw_params_set_access(playback_handle,hw_params,SND_PCM_ACCESS_RW_INTERLEAVED);
if(ret<0){
perror("snd_pcm_hw_params_set_access");
exit(1);
}
//5.初始化采样格式SND_PCM_FORMAT_U8,8位
ret=snd_pcm_hw_params_set_format(playback_handle,hw_params,SND_PCM_FORMAT_U8);
if(ret<0){
perror("snd_pcm_hw_params_set_format");
exit(1);
}
//6.设置采样率,如果硬件不支持我们设置的采样率,将使用最接近的
//val=44100,有些录音采样频率固定为8KHz
val=8000;
ret=snd_pcm_hw_params_set_rate_near(playback_handle,hw_params,&val,&dir);
if(ret<0){
perror("snd_pcm_hw_params_set_rate_near");
exit(1);
}
//7.设置通道数量
ret=snd_pcm_hw_params_set_channels(playback_handle,hw_params,2);
if(ret<0){
perror("snd_pcm_hw_params_set_channels");
exit(1);
}
/*Setperiodsizeto32frames.*/
frames=32;
periodsize=frames*2;
ret=snd_pcm_hw_params_set_buffer_size_near(playback_handle,hw_params,&periodsize);
if(ret<0)
{
printf("Unabletosetbuffersize%li:%s ",frames*2,snd_strerror(ret));
}
periodsize/=2;
ret=snd_pcm_hw_params_set_period_size_near(playback_handle,hw_params,&periodsize,0);
if(ret<0)
{
printf("Unabletosetperiodsize%li:%s ",periodsize,snd_strerror(ret));
}
//8.设置hw_params
ret=snd_pcm_hw_params(playback_handle,hw_params);
if(ret<0){
perror("snd_pcm_hw_params");
exit(1);
}
/**/
snd_pcm_hw_params_get_period_size(hw_params,&frames,&dir);
size=frames*2;/*2bytes/sample,2channels*/
buffer=(char*)malloc(size);
fprintf(stderr,
"size=%d ",
size);
while(1)
{
ret=fread(buffer,1,size,fp);
if(ret==0)
{
fprintf(stderr,"endoffileoninput ");
break;
}
elseif(ret!=size)
{
}
//9.写音频数据到PCM设备
while(ret=snd_pcm_writei(playback_handle,buffer,frames)<0)
{
usleep(2000);
if(ret==-EPIPE)
{
/*EPIPEmeansunderrun*/
fprintf(stderr,"underrunoccurred ");
//完成硬件参数设置,使设备准备好
snd_pcm_prepare(playback_handle);
}
elseif(ret<0)
{
fprintf(stderr,
"errorfromwritei:%s ",
snd_strerror(ret));
}
}
}
//10.关闭PCM设备句柄
snd_pcm_close(playback_handle);
return0;
}
//注意:编译的时候应该保持“gcc-otesttest.c-L.-lasound”的格式,运行的时候应该保持"./test//clip2.wav"这种格式。
❼ 用C语言怎么编写音乐播放器
一.在程序中直接播放声音文件
在VC++ 中的多媒体动态连接库中提供了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音方法就是直接调用VC++中提供的声音播放函数BOOL sndPlaySound ( LPCSTR lpszSound,UINT fuSound ); 或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );其中参数lpszSound是需要播放声音的.W***文件的路径和文件名, hmod在这里为NULL,fuSound是播放声音的标志,详细说明请参考VC++中的帮助。 例如播放C:soundmusic.wav可以用sndPlaySound ("c:\sound\music.wav",SND_ASYNC);或PlaySound("c:\sound\music.wav",NULL, SND_ASYNC|SND_NODEFAULT );如果没有找到music.wav文件,第一种格式将播放系统默认的声音,第二种格式不会播放系统默认的声音。
二.将声音文件加入到程序中
在VC++的程序设计中,可以利用各种标准的资源,如位图,菜单,对话框等。同时VC++也允许用户自定义资源,因此我们可以将声音文件作为用户自定义资源加入程序资源文件中,经过编译连接生成EXE文件,实现无.W***文件的声音播放。要实现作为资源的声音文件的播放,首先要在资源管理器中加入待播放的声音文件。
具体步骤入下:
1.获得包含资源的模块句柄:
HMODULE hmod=AfxGetResourceHandle();
2.检索资源块信息:
HRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_W***E1),_T("W***E"));
3. 装载资源数据并加锁:
HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource);
LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem);
4.播放声音文件:
sndPlaySound(lpMemSound,SND_MEMORY));
5.释放资源句柄:
FreeResource(hGlobalMem);
❽ 用C语言编写简单的音乐播放器!高悬赏quq
记得有一本书《Linux程序设计》里面有做播放器的步骤和程序,可以看一下
❾ 谁能介绍几个linux中常用的应用软件如音乐播放器,视频播放器,c编译器
现在基本都仿windows操作方式,排版方式与操作方式也都基本一致,画图很像PS,视频和realplayer基本一样,C编有些不同,语句不太一样.
是想问什么呢?想得到怎样的介绍?
❿ linux c 实现MP3音乐播放器(非图形化)的代码谁有啊
楼主的想法跟我的一样,哈哈!我是这样想啊,能不能不用图形化,而直接采用已有的源代码进行修改,然后生成图形办面的音乐播放器。还有一个就是字符界面下的QQ或者MSN聊天