❶ 我想在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聊天