锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鏈榪戝垰濂戒篃鍦ㄥ仛android縐繪宸ヤ綔錛岄『渚挎妸G1鐨剆pec璐村嚭鏉ワ紝鏈夊叴瓚g殑鐪嬬湅
Product Features & Specifications Technical Specifications
Media Support
Bill of Materials
]]>
浣滆咃細 鑲栨枃楣?br> 铏界劧鐩墠Linux鐨勪紭鍔夸富瑕佷綋鐜板湪緗戠粶鏈嶅姟鏂歸潰錛屼絾浜嬪疄涓婂悓鏍蜂篃鏈夌潃闈炲父涓板瘜鐨勫獟浣撳姛鑳斤紝鏈枃灝辨槸浠ュ濯掍綋搴旂敤涓渶鍩烘湰鐨勫0闊充負瀵硅薄錛屼粙緇嶅浣曞湪Linux騫沖彴涓嬪紑鍙戝疄闄呯殑闊抽搴旂敤紼嬪簭錛屽悓鏃惰繕緇欏嚭浜嗕竴浜涘父鐢ㄧ殑闊抽緙栫▼妗嗘灦
涓銆佹暟瀛楅煶棰?/span>
闊抽淇″彿鏄竴縐嶈繛緇彉鍖栫殑妯℃嫙淇″彿錛屼絾璁$畻鏈哄彧鑳藉鐞嗗拰璁板綍浜岃繘鍒剁殑鏁板瓧淇″彿錛岀敱鑷劧闊蟲簮寰楀埌鐨勯煶棰戜俊鍙峰繀欏葷粡榪囦竴瀹氱殑鍙樻崲錛屾垚涓烘暟瀛楅煶棰戜俊鍙蜂箣鍚庯紝鎵嶈兘閫佸埌璁$畻鏈轟腑浣滆繘涓姝ョ殑澶勭悊銆?/p>
鏁板瓧闊抽緋葷粺閫氳繃灝嗗0娉㈢殑娉㈠瀷杞崲鎴愪竴緋誨垪浜岃繘鍒舵暟鎹紝鏉ュ疄鐜板鍘熷澹伴煶鐨勯噸鐜幫紝瀹炵幇榪欎竴姝ラ鐨勮澶囧父琚О涓烘ā/鏁拌漿鎹㈠櫒錛圓/D錛夈侫/D杞崲鍣ㄤ互姣忕閽熶笂涓囨鐨勯熺巼瀵瑰0娉㈣繘琛岄噰鏍鳳紝姣忎釜閲囨牱鐐歸兘璁板綍涓嬩簡鍘熷妯℃嫙澹版嘗鍦ㄦ煇涓鏃跺埢鐨勭姸鎬侊紝閫氬父縐頒箣涓烘牱鏈紙sample錛夛紝鑰屾瘡涓縐掗挓鎵閲囨牱鐨勬暟鐩垯縐頒負閲囨牱棰戠巼錛岄氳繃灝嗕竴涓茶繛緇殑鏍鋒湰榪炴帴璧鋒潵錛屽氨鍙互鍦ㄨ綆楁満涓弿榪頒竴孌靛0闊充簡銆傚浜庨噰鏍瘋繃紼嬩腑鐨勬瘡涓涓牱鏈潵璇達紝鏁板瓧闊抽緋葷粺浼氬垎閰嶄竴瀹氬瓨鍌ㄤ綅鏉ヨ褰曞0娉㈢殑鎸箙錛屼竴鑸О涔嬩負閲囨牱鍒嗚京鐜囨垨鑰呴噰鏍風簿搴︼紝閲囨牱綺懼害瓚婇珮錛屽0闊寵繕鍘熸椂灝變細瓚婄粏鑵匯?/p>
鏁板瓧闊抽娑夊強鍒扮殑姒傚康闈炲父澶氾紝瀵逛簬鍦↙inux 涓嬭繘琛岄煶棰戠紪紼嬬殑紼嬪簭鍛樻潵璇達紝鏈閲嶈鐨勬槸鐞嗚В澹伴煶鏁板瓧鍖栫殑涓や釜鍏抽敭姝ラ錛氶噰鏍峰拰閲忓寲銆傞噰鏍峰氨鏄瘡闅斾竴瀹氭椂闂村氨璇諱竴嬈″0闊充俊鍙風殑騫呭害錛岃岄噺鍖栧垯鏄皢閲囨牱寰楀埌鐨勫0闊充俊鍙峰箙搴﹁漿鎹負鏁板瓧鍊鹼紝浠庢湰璐ㄤ笂璁詫紝閲囨牱鏄椂闂翠笂鐨勬暟瀛楀寲錛岃岄噺鍖栧垯鏄箙搴︿笂鐨勬暟瀛楀寲銆備笅闈粙緇嶅嚑涓湪榪涜闊抽緙栫▼鏃剁粡甯擱渶瑕佺敤鍒扮殑鎶鏈寚鏍囷細
![]() ![]() |
鍑轟簬瀵瑰畨鍏ㄦф柟闈㈢殑鑰冭檻錛孡inux涓嬬殑搴旂敤紼嬪簭鏃犳硶鐩存帴瀵瑰0鍗¤繖綾葷‖浠惰澶囪繘琛屾搷浣滐紝鑰屾槸蹇呴』閫氳繃鍐呮牳鎻愪緵鐨勯┍鍔ㄧ▼搴忔墠鑳藉畬鎴愩傚湪Linux涓婅繘琛岄煶棰戠紪紼嬬殑鏈川灝辨槸瑕佸熷姪浜庨┍鍔ㄧ▼搴忥紝鏉ュ畬鎴愬澹板崱鐨勫悇縐嶆搷浣溿?/p>
瀵圭‖浠剁殑鎺у埗娑夊強鍒板瘎瀛樺櫒涓悇涓瘮鐗逛綅鐨勬搷浣滐紝閫氬父榪欐槸涓庤澶囩洿鎺ョ浉鍏沖茍涓斿鏃跺簭鐨勮姹傞潪甯鎬弗鏍鹼紝濡傛灉榪欎簺宸ヤ綔閮戒氦鐢卞簲鐢ㄧ▼搴忓憳鏉ヨ礋璐o紝閭d箞瀵瑰0鍗$殑緙栫▼灝嗗彉寰楀紓甯稿鏉傝屽洶闅捐搗鏉ワ紝椹卞姩紼嬪簭鐨勪綔鐢ㄦ鏄灞忚斀紜歡鐨勮繖浜涘簳灞傜粏鑺傦紝浠庤岀畝鍖栧簲鐢ㄧ▼搴忕殑緙栧啓銆傜洰鍓峀inux涓嬪父鐢ㄧ殑澹板崱椹卞姩紼嬪簭涓昏鏈変袱縐嶏細OSS 鍜孉LSA銆?/p>
鏈鏃╁嚭鐜板湪Linux涓婄殑闊抽緙栫▼鎺ュ彛鏄疧SS錛圤pen Sound System錛夛紝瀹冪敱涓濂楀畬鏁寸殑鍐呮牳椹卞姩紼嬪簭妯″潡緇勬垚錛屽彲浠ヤ負緇濆ぇ澶氭暟澹板崱鎻愪緵緇熶竴鐨勭紪紼嬫帴鍙c侽SS鍑虹幇鐨勫巻鍙茬浉瀵硅緝闀匡紝榪欎簺鍐呮牳妯″潡涓殑涓閮ㄥ垎錛圤SS/Free錛夋槸涓嶭inux鍐呮牳婧愮爜鍏卞悓鍏嶈垂鍙戝竷鐨勶紝鍙﹀涓浜涘垯浠ヤ簩榪涘埗鐨勫艦寮忕敱4Front Technologies鍏徃鎻愪緵銆傜敱浜庡緱鍒頒簡鍟嗕笟鍏徃鐨勯紟鍔涙敮鎸侊紝OSS宸茬粡鎴愪負鍦↙inux涓嬭繘琛岄煶棰戠紪紼嬬殑浜嬪疄鏍囧噯錛屾敮鎸丱SS鐨勫簲鐢ㄧ▼搴忚兘澶熷湪緇濆ぇ澶氭暟澹板崱涓婂伐浣滆壇濂姐?/p>
铏界劧OSS宸茬粡闈炲父鎴愮啛錛屼絾瀹冩瘯绔熸槸涓涓病鏈夊畬鍏ㄥ紑鏀炬簮浠g爜鐨勫晢涓氫駭鍝侊紝ALSA錛圓dvanced Linux Sound Architecture錛夋伆濂藉譏琛ヤ簡榪欎竴絀虹櫧錛屽畠鏄湪Linux涓嬭繘琛岄煶棰戠紪紼嬫椂鍙︿竴涓彲渚涢夋嫨鐨勫0鍗¢┍鍔ㄧ▼搴忋侫LSA闄や簡鍍廜SS閭f牱鎻愪緵浜嗕竴緇勫唴鏍擱┍鍔ㄧ▼搴忔ā鍧椾箣澶栵紝榪樹笓闂ㄤ負綆鍖栧簲鐢ㄧ▼搴忕殑緙栧啓鎻愪緵浜嗙浉搴旂殑鍑芥暟搴擄紝涓嶰SS鎻愪緵鐨勫熀浜巌octl鐨勫師濮嬬紪紼嬫帴鍙g浉姣旓紝ALSA鍑芥暟搴撲嬌鐢ㄨ搗鏉ヨ鏇村姞鏂逛究涓浜涖侫LSA鐨勪富瑕佺壒鐐規湁錛?/p>
ALSA 鍜孫SS鏈澶х殑涓嶅悓涔嬪鍦ㄤ簬ALSA鏄敱蹇楁効鑰呯淮鎶ょ殑鑷敱欏圭洰錛岃孫SS鍒欐槸鐢卞叕鍙告彁渚涚殑鍟嗕笟浜у搧錛屽洜姝ゅ湪瀵圭‖浠剁殑閫傚簲紼嬪害涓奜SS瑕佷紭浜嶢LSA錛屽畠鑳藉鏀寔鐨勫0鍗$綾繪洿澶氥侫LSA铏界劧涓嶅強OSS榪愮敤寰楀箍娉涳紝浣嗗嵈鍏鋒湁鏇村姞鍙嬪ソ鐨勭紪紼嬫帴鍙o紝騫朵笖瀹屽叏鍏煎浜嶰SS錛屽搴旂敤紼嬪簭鍛樻潵璁叉棤鐤戞槸涓涓洿浣崇殑閫夋嫨銆?/p>
![]() ![]() |
濡備綍瀵瑰悇縐嶉煶棰戣澶囪繘琛屾搷浣滄槸鍦↙inux涓婅繘琛岄煶棰戠紪紼嬬殑鍏抽敭錛岄氳繃鍐呮牳鎻愪緵鐨勪竴緇勭郴緇熻皟鐢紝搴旂敤紼嬪簭鑳藉璁塊棶澹板崱椹卞姩紼嬪簭鎻愪緵鐨勫悇縐嶉煶棰戣澶囨帴鍙o紝榪欐槸鍦↙inux涓嬭繘琛岄煶棰戠紪紼嬫渶綆鍗曚篃鏄渶鐩存帴鐨勬柟娉曘?/p>
鏃犺鏄疧SS榪樻槸ALSA錛岄兘鏄互鍐呮牳椹卞姩紼嬪簭鐨勫艦寮忚繍琛屽湪Linux鍐呮牳絀洪棿涓殑錛屽簲鐢ㄧ▼搴忚鎯寵闂0鍗¤繖涓紜歡璁懼錛屽繀欏誨熷姪浜嶭inux鍐呮牳鎵鎻愪緵鐨勭郴緇熻皟鐢紙system call錛夈備粠紼嬪簭鍛樼殑瑙掑害鏉ヨ錛屽澹板崱鐨勬搷浣滃湪寰堝ぇ紼嬪害涓婄瓑鍚屼簬瀵圭鐩樻枃浠剁殑鎿嶄綔錛氶鍏堜嬌鐢╫pen緋葷粺璋冪敤寤虹珛璧蜂笌紜歡闂寸殑鑱旂郴錛屾鏃惰繑鍥炵殑鏂囦歡鎻忚堪絎﹀皢浣滀負闅忓悗鎿嶄綔鐨勬爣璇嗭紱鎺ョ潃浣跨敤read緋葷粺璋冪敤浠庤澶囨帴鏀舵暟鎹紝鎴栬呬嬌鐢╳rite緋葷粺璋冪敤鍚戣澶囧啓鍏ユ暟鎹紝鑰屽叾瀹冩墍鏈変笉絎﹀悎璇?鍐欒繖涓鍩烘湰妯″紡鐨勬搷浣滈兘鍙互鐢眎octl緋葷粺璋冪敤鏉ュ畬鎴愶紱鏈鍚庯紝浣跨敤close緋葷粺璋冪敤鍛婅瘔Linux鍐呮牳涓嶄細鍐嶅璇ヨ澶囧仛榪涗竴姝ョ殑澶勭悊銆?/p>
int open(const char *pathname, int flags, int mode); |
int read(int fd, char *buf, size_t count); |
size_t write(int fd, const char *buf, size_t count); |
int ioctl(int fd, int request, ...); |
int close(int fd); |
瀵逛簬Linux搴旂敤紼嬪簭鍛樻潵璁詫紝闊抽緙栫▼鎺ュ彛瀹為檯涓婂氨鏄竴緇勯煶棰戣澶囨枃浠訛紝閫氳繃瀹冧滑鍙互浠庡0鍗¤鍙栨暟鎹紝鎴栬呭悜澹板崱鍐欏叆鏁版嵁錛屽茍涓旇兘澶熷澹板崱榪涜鎺у埗錛岃緗噰鏍烽鐜囧拰澹伴亾鏁扮洰絳夌瓑銆?/p>
澹板崱椹卞姩紼嬪簭鎻愪緵鐨?dev/dsp鏄敤浜庢暟瀛楅噰鏍鳳紙sampling錛夊拰鏁板瓧褰曢煶錛坮ecording錛夌殑璁懼鏂囦歡錛屽畠瀵逛簬Linux涓嬬殑闊抽緙栫▼鏉ヨ闈炲父閲嶈錛氬悜璇ヨ澶囧啓鏁版嵁鍗蟲剰鍛崇潃嬋媧誨0鍗′笂鐨凞/A杞崲鍣ㄨ繘琛屾斁闊籌紝鑰屽悜璇ヨ澶囪鏁版嵁鍒欐剰鍛崇潃嬋媧誨0鍗′笂鐨凙/D杞崲鍣ㄨ繘琛屽綍闊熾傜洰鍓嶈澶氬0鍗¢兘鎻愪緵鏈夊涓暟瀛楅噰鏍瘋澶囷紝瀹冧滑鍦↙inux涓嬪彲浠ラ氳繃/dev/dsp1絳夎澶囨枃浠惰繘琛岃闂?/p>
DSP鏄暟瀛椾俊鍙峰鐞嗗櫒錛圖igital Signal Processor錛夌殑綆縐幫紝瀹冩槸鐢ㄦ潵榪涜鏁板瓧淇″彿澶勭悊鐨勭壒孌婅姱鐗囷紝澹板崱浣跨敤瀹冩潵瀹炵幇妯℃嫙淇″彿鍜屾暟瀛椾俊鍙風殑杞崲銆傚0鍗′腑鐨凞SP璁懼瀹為檯涓婂寘鍚袱涓粍鎴愰儴鍒嗭細鍦ㄤ互鍙鏂瑰紡鎵撳紑鏃訛紝鑳藉浣跨敤A/D杞崲鍣ㄨ繘琛屽0闊崇殑杈撳叆錛涜屽湪浠ュ彧鍐欐柟寮忔墦寮鏃訛紝鍒欒兘澶熶嬌鐢―/A杞崲鍣ㄨ繘琛屽0闊崇殑杈撳嚭銆備弗鏍艱鏉ワ紝Linux涓嬬殑搴旂敤紼嬪簭瑕佷箞浠ュ彧璇繪柟寮忔墦寮/dev/dsp杈撳叆澹伴煶錛岃涔堜互鍙啓鏂瑰紡鎵撳紑/dev/dsp杈撳嚭澹伴煶錛屼絾浜嬪疄涓婃煇浜涘0鍗¢┍鍔ㄧ▼搴忎粛鍏佽浠ヨ鍐欑殑鏂瑰紡鎵撳紑 /dev/dsp錛屼互渚垮悓鏃惰繘琛屽0闊崇殑杈撳叆鍜岃緭鍑猴紝榪欏浜庢煇浜涘簲鐢ㄥ満鍚堬紙濡侷P鐢佃瘽錛夋潵璁叉槸闈炲父鍏抽敭鐨勩?/p>
鍦ㄤ粠 DSP璁懼璇誨彇鏁版嵁鏃訛紝浠庡0鍗¤緭鍏ョ殑妯℃嫙淇″彿緇忚繃A/D杞崲鍣ㄥ彉鎴愭暟瀛楅噰鏍峰悗鐨勬牱鏈紙sample錛夛紝淇濆瓨鍦ㄥ0鍗¢┍鍔ㄧ▼搴忕殑鍐呮牳緙撳啿鍖轟腑錛屽綋搴旂敤紼嬪簭閫氳繃 read緋葷粺璋冪敤浠庡0鍗¤鍙栨暟鎹椂錛屼繚瀛樺湪鍐呮牳緙撳啿鍖轟腑鐨勬暟瀛楅噰鏍風粨鏋滃皢琚鍒跺埌搴旂敤紼嬪簭鎵鎸囧畾鐨勭敤鎴風紦鍐插尯涓傞渶瑕佹寚鍑虹殑鏄紝澹板崱閲囨牱棰戠巼鏄敱鍐呮牳涓殑椹卞姩紼嬪簭鎵鍐沖畾鐨勶紝鑰屼笉鍙栧喅浜庡簲鐢ㄧ▼搴忎粠澹板崱璇誨彇鏁版嵁鐨勯熷害銆傚鏋滃簲鐢ㄧ▼搴忚鍙栨暟鎹殑閫熷害榪囨參錛屼互鑷翠綆浜庡0鍗$殑閲囨牱棰戠巼錛岄偅涔堝浣欑殑鏁版嵁灝嗕細琚涪寮冿紱濡傛灉璇誨彇鏁版嵁鐨勯熷害榪囧揩錛屼互鑷撮珮浜庡0鍗$殑閲囨牱棰戠巼錛岄偅涔堝0鍗¢┍鍔ㄧ▼搴忓皢浼氶樆濉為偅浜涜姹傛暟鎹殑搴旂敤紼嬪簭錛岀洿鍒版柊鐨勬暟鎹埌鏉ヤ負姝€?/p>
鍦ㄥ悜DSP璁懼鍐欏叆鏁版嵁鏃訛紝鏁板瓧淇″彿浼氱粡榪嘍/A杞崲鍣ㄥ彉鎴愭ā鎷熶俊鍙鳳紝鐒跺悗浜х敓鍑哄0闊熾傚簲鐢ㄧ▼搴忓啓鍏ユ暟鎹殑閫熷害鍚屾牱搴旇涓庡0鍗$殑閲囨牱棰戠巼鐩稿尮閰嶏紝鍚﹀垯榪囨參鐨勮瘽浼氫駭鐢熷0闊蟲殏鍋滄垨鑰呭仠欏跨殑鐜拌薄錛岃繃蹇殑璇濆張浼氳鍐呮牳涓殑澹板崱椹卞姩紼嬪簭闃誨錛岀洿鍒扮‖浠舵湁鑳藉姏澶勭悊鏂扮殑鏁版嵁涓烘銆備笌鍏跺畠璁懼鏈夋墍涓嶅悓錛屽0鍗¢氬父涓嶄細鏀寔闈為樆濉烇紙non-blocking錛夌殑I/O鎿嶄綔銆?/p>
鏃犺鏄粠澹板崱璇誨彇鏁版嵁錛屾垨鏄悜澹板崱鍐欏叆鏁版嵁錛屼簨瀹炰笂閮藉叿鏈夌壒瀹氱殑鏍煎紡錛坒ormat錛夛紝榛樿涓?浣嶆棤絎﹀彿鏁版嵁銆佸崟澹伴亾銆?KHz閲囨牱鐜囷紝濡傛灉榛樿鍊兼棤娉曡揪鍒拌姹傦紝鍙互閫氳繃ioctl緋葷粺璋冪敤鏉ユ敼鍙樺畠浠傞氬父璇存潵錛屽湪搴旂敤紼嬪簭涓墦寮璁懼鏂囦歡/dev/dsp涔嬪悗錛屾帴涓嬪幓灝卞簲璇ヤ負鍏惰緗伆褰撶殑鏍煎紡錛岀劧鍚庢墠鑳戒粠澹板崱璇誨彇鎴栬呭啓鍏ユ暟鎹?/p>
[xiaowp@linuxgam sound]$ cat audio.au > /dev/audio |
![]() ![]() |
![]() |
鍦↙inux涓嬭繘琛岄煶棰戠紪紼嬫椂錛岄噸鐐瑰湪浜庡浣曟紜湴鎿嶄綔澹板崱椹卞姩紼嬪簭鎵鎻愪緵鐨勫悇縐嶈澶囨枃浠訛紝鐢變簬娑夊強鍒扮殑姒傚康鍜屽洜绱犳瘮杈冨錛屾墍浠ラ伒寰竴涓氱敤鐨勬鏋舵棤鐤戝皢鏈夊姪浜庣畝鍖栧簲鐢ㄧ▼搴忕殑璁捐銆?/p>
瀵瑰0鍗¤繘琛岀紪紼嬫椂棣栧厛瑕佸仛鐨勬槸鎵撳紑涓庝箣瀵瑰簲鐨勭‖浠惰澶囷紝榪欐槸鍊熷姪浜巓pen緋葷粺璋冪敤鏉ュ畬鎴愮殑錛屽茍涓斾竴鑸儏鍐典笅浣跨敤鐨勬槸/dev/dsp鏂囦歡銆傞噰鐢ㄤ綍縐嶆ā寮忓澹板崱榪涜鎿嶄綔涔熷繀欏誨湪鎵撳紑璁懼鏃舵寚瀹氾紝瀵逛簬涓嶆敮鎸佸叏鍙屽伐鐨勫0鍗℃潵璇達紝搴旇浣跨敤鍙鎴栬呭彧鍐欑殑鏂瑰紡鎵撳紑錛屽彧鏈夐偅浜涙敮鎸佸叏鍙屽伐鐨勫0鍗★紝鎵嶈兘浠ヨ鍐欑殑鏂瑰紡鎵撳紑錛屽茍涓旇繕瑕佷緷璧栦簬椹卞姩紼嬪簭鐨勫叿浣撳疄鐜般侺inux鍏佽搴旂敤紼嬪簭澶氭鎵撳紑鎴栬呭叧闂笌澹板崱瀵瑰簲鐨勮澶囨枃浠訛紝浠庤岃兘澶熷緢鏂逛究鍦板湪鏀鵑煶鐘舵佸拰褰曢煶鐘舵佷箣闂磋繘琛屽垏鎹紝寤鴻鍦ㄨ繘琛岄煶棰戠紪紼嬫椂鍙鏈夊彲鑳藉氨灝介噺浣跨敤鍙鎴栬呭彧鍐欑殑鏂瑰紡鎵撳紑璁懼鏂囦歡錛屽洜涓鴻繖鏍蜂笉浠呰兘澶熷厖鍒嗗埄鐢ㄥ0鍗$殑紜歡璧勬簮錛岃屼笖榪樻湁鍒╀簬椹卞姩紼嬪簭鐨勪紭鍖栥備笅闈㈢殑浠g爜紺鴻寖浜嗗浣曚互鍙啓鏂瑰紡鎵撳紑澹板崱榪涜鏀鵑煶錛坧layback錛夋搷浣滐細
int handle = open("/dev/dsp", O_WRONLY); if (handle == -1) { perror("open /dev/dsp"); return -1; } |
榪愯鍦↙inux鍐呮牳涓殑澹板崱椹卞姩紼嬪簭涓撻棬緇存姢浜嗕竴涓紦鍐插尯錛屽叾澶у皬浼氬獎鍝嶅埌鏀鵑煶鍜屽綍闊蟲椂鐨勬晥鏋滐紝浣跨敤ioctl緋葷粺璋冪敤鍙互瀵瑰畠鐨勫昂瀵歌繘琛屾伆褰撶殑璁劇疆銆傝皟鑺傞┍鍔ㄧ▼搴忎腑緙撳啿鍖哄ぇ灝忕殑鎿嶄綔涓嶆槸蹇呴』鐨勶紝濡傛灉娌℃湁鐗規畩鐨勮姹傦紝涓鑸噰鐢ㄩ粯璁ょ殑緙撳啿鍖哄ぇ灝忎篃灝卞彲浠ヤ簡銆備絾闇瑕佹敞鎰忕殑鏄紝緙撳啿鍖哄ぇ灝忕殑璁劇疆閫氬父搴旂揣璺熷湪璁懼鏂囦歡鎵撳紑涔嬪悗錛岃繖鏄洜涓哄澹板崱鐨勫叾瀹冩搷浣滄湁鍙兘浼氬鑷撮┍鍔ㄧ▼搴忔棤娉曞啀淇敼鍏剁紦鍐插尯鐨勫ぇ灝忋備笅闈㈢殑浠g爜紺鴻寖浜嗘庢牱璁劇疆澹板崱椹卞姩紼嬪簭涓殑鍐呮牳緙撳啿鍖虹殑澶у皬錛?/p>
int setting = 0xnnnnssss; int result = ioctl(handle, SNDCTL_DSP_SETFRAGMENT, &setting); if (result == -1) { perror("ioctl buffer size"); return -1; } // 媯鏌ヨ緗肩殑姝g‘鎬? |
鍦ㄨ緗紦鍐插尯澶у皬鏃訛紝鍙傛暟setting瀹為檯涓婄敱涓ら儴鍒嗙粍鎴愶紝鍏朵綆16浣嶆爣鏄庣紦鍐插尯鐨勫昂瀵革紝鐩稿簲鐨勮綆楀叕寮忎負buffer_size = 2^ssss錛屽嵆鑻ュ弬鏁皊etting浣?6浣嶇殑鍊間負16錛岄偅涔堢浉搴旂殑緙撳啿鍖虹殑澶у皬浼氳璁劇疆涓?5536瀛楄妭銆傚弬鏁皊etting鐨勯珮16浣嶅垯鐢ㄦ潵鏍囨槑鍒嗙墖錛坒ragment錛夌殑鏈澶у簭鍙鳳紝瀹冪殑鍙栧艱寖鍥翠粠2涓鐩村埌0x7FFF錛屽叾涓?x7FFF琛ㄧず娌℃湁浠諱綍闄愬埗銆?/p>
鎺ヤ笅鏉ヨ鍋氱殑鏄緗0鍗″伐浣滄椂鐨勫0閬擄紙channel錛夋暟鐩紝鏍規嵁紜歡璁懼鍜岄┍鍔ㄧ▼搴忕殑鍏蜂綋鎯呭喌錛屽彲浠ュ皢鍏惰緗負0錛堝崟澹伴亾錛宮ono錛夋垨鑰?錛堢珛浣撳0錛宻tereo錛夈備笅闈㈢殑浠g爜紺鴻寖浜嗗簲璇ユ庢牱璁劇疆澹伴亾鏁扮洰錛?/p>
int channels = 0; // 0=mono 1=stereo int result = ioctl(handle, SNDCTL_DSP_STEREO, &channels); if ( result == -1 ) { perror("ioctl channel number"); return -1; } if (channels != 0) { // 鍙敮鎸佺珛浣撳0 } |
閲囨牱鏍煎紡鍜岄噰鏍烽鐜囨槸鍦ㄨ繘琛岄煶棰戠紪紼嬫椂闇瑕佽冭檻鐨勫彟涓涓棶棰橈紝澹板崱鏀寔鐨勬墍鏈夐噰鏍鋒牸寮忓彲浠ュ湪澶存枃浠秙oundcard.h涓壘鍒幫紝鑰岄氳繃ioctl緋葷粺璋冪敤鍒欏彲浠ュ緢鏂逛究鍦版洿鏀瑰綋鍓嶆墍浣跨敤鐨勯噰鏍鋒牸寮忋備笅闈㈢殑浠g爜紺鴻寖浜嗗浣曡緗0鍗$殑閲囨牱鏍煎紡錛?/p>
int format = AFMT_U8; int result = ioctl(handle, SNDCTL_DSP_SETFMT, &format); if ( result == -1 ) { perror("ioctl sample format"); return -1; } // 媯鏌ヨ緗肩殑姝g‘鎬? |
澹板崱閲囨牱棰戠巼鐨勮緗篃闈炲父瀹規槗錛屽彧闇鍦ㄨ皟鐢?ioctl鏃跺皢絎簩涓弬鏁扮殑鍊艱緗負SNDCTL_DSP_SPEED錛屽悓鏃跺湪絎笁涓弬鏁頒腑鎸囧畾閲囨牱棰戠巼鐨勬暟鍊煎氨琛屼簡銆傚浜庡ぇ澶氭暟澹板崱鏉ヨ錛屽叾鏀寔鐨勯噰鏍烽鐜囪寖鍥翠竴鑸負5kHz鍒?4.1kHz鎴栬?8kHz錛屼絾騫朵笉鎰忓懗鐫璇ヨ寖鍥村唴鐨勬墍鏈夐鐜囬兘浼氳紜歡鏀寔錛屽湪Linux涓嬭繘琛岄煶棰戠紪紼嬫椂鏈甯哥敤鍒扮殑鍑犵閲囨牱棰戠巼鏄?1025Hz銆?6000Hz銆?2050Hz銆?2000Hz鍜?4100Hz銆備笅闈㈢殑浠g爜紺鴻寖浜嗗浣曡緗0鍗$殑閲囨牱棰戠巼錛?/p>
int rate = 22050; int result = ioctl(handle, SNDCTL_DSP_SPEED, &rate); if ( result == -1 ) { perror("ioctl sample format"); return -1; } // 媯鏌ヨ緗肩殑姝g‘鎬? |
澹板崱涓婄殑娣烽煶鍣ㄧ敱澶氫釜娣烽煶閫氶亾緇勬垚錛屽畠浠彲浠ラ氳繃椹卞姩紼嬪簭鎻愪緵鐨勮澶囨枃浠?dev/mixer榪涜緙栫▼銆傚娣烽煶鍣ㄧ殑鎿嶄綔鏄氳繃ioctl緋葷粺璋冪敤鏉ュ畬鎴愮殑錛屽茍涓旀墍鏈夋帶鍒跺懡浠ら兘鐢盨OUND_MIXER鎴栬匨IXER寮澶達紝琛?鍒楀嚭浜嗗父鐢ㄧ殑鍑犱釜娣烽煶鍣ㄦ帶鍒跺懡浠わ細
鍚?縐?/td> | 浣?鐢?/td> |
SOUND_MIXER_VOLUME | 涓婚煶閲忚皟鑺?/td> |
SOUND_MIXER_BASS | 浣庨煶鎺у埗 |
SOUND_MIXER_TREBLE | 楂橀煶鎺у埗 |
SOUND_MIXER_SYNTH | FM鍚堟垚鍣?/td> |
SOUND_MIXER_PCM | 涓籇/A杞崲鍣?/td> |
SOUND_MIXER_SPEAKER | PC鍠囧彮 |
SOUND_MIXER_LINE | 闊抽綰胯緭鍏?/td> |
SOUND_MIXER_MIC | 楹﹀厠椋庤緭鍏?/td> |
SOUND_MIXER_CD | CD杈撳叆 |
SOUND_MIXER_IMIX | 鍥炴斁闊抽噺 |
SOUND_MIXER_ALTPCM | 浠嶥/A 杞崲鍣?/td> |
SOUND_MIXER_RECLEV | 褰曢煶闊抽噺 |
SOUND_MIXER_IGAIN | 杈撳叆澧炵泭 |
SOUND_MIXER_OGAIN | 杈撳嚭澧炵泭 |
SOUND_MIXER_LINE1 | 澹板崱鐨勭1杈撳叆 |
SOUND_MIXER_LINE2 | 澹板崱鐨勭2杈撳叆 |
SOUND_MIXER_LINE3 | 澹板崱鐨勭3杈撳叆 |
瀵瑰0鍗$殑杈撳叆澧炵泭鍜岃緭鍑哄鐩婅繘琛岃皟鑺傛槸娣烽煶鍣ㄧ殑涓涓富瑕佷綔鐢紝鐩墠澶ч儴鍒嗗0鍗¢噰鐢ㄧ殑鏄?浣嶆垨鑰?6浣嶇殑澧炵泭鎺у埗鍣紝浣嗕綔涓虹▼搴忓憳鏉ヨ騫朵笉闇瑕佸叧蹇冭繖浜涳紝鍥犱負澹板崱椹卞姩紼嬪簭浼氳礋璐e皢瀹冧滑鍙樻崲鎴愮櫨鍒嗘瘮鐨勫艦寮忥紝涔熷氨鏄鏃犺鏄緭鍏ュ鐩婅繕鏄緭鍑哄鐩婏紝鍏跺彇鍊艱寖鍥撮兘鏄粠0鍒?00銆傚湪榪涜娣烽煶鍣ㄧ紪紼嬫椂錛屽彲浠ヤ嬌鐢?SOUND_MIXER_READ瀹忔潵璇誨彇娣烽煶閫氶亾鐨勫鐩婂ぇ灝忥紝渚嬪鍦ㄨ幏鍙栭害鍏嬮鐨勮緭鍏ュ鐩婃椂錛屽彲浠ヤ嬌鐢ㄥ涓嬬殑浠g爜錛?/p>
int vol; ioctl(fd, SOUND_MIXER_READ(SOUND_MIXER_MIC), &vol); printf("Mic gain is at %d %%\n", vol); |
瀵逛簬鍙湁涓涓販闊抽氶亾鐨勫崟澹伴亾璁懼鏉ヨ錛岃繑鍥炵殑澧炵泭澶у皬淇濆瓨鍦ㄤ綆浣嶅瓧鑺備腑銆傝屽浜庢敮鎸佸涓販闊抽氶亾鐨勫弻澹伴亾璁懼鏉ヨ錛岃繑鍥炵殑澧炵泭澶у皬瀹為檯涓婂寘鎷袱涓儴鍒嗭紝鍒嗗埆浠h〃宸︺佸彸涓や釜澹伴亾鐨勫鹼紝鍏朵腑浣庝綅瀛楄妭淇濆瓨宸﹀0閬撶殑闊抽噺錛岃岄珮浣嶅瓧鑺傚垯淇濆瓨鍙沖0閬撶殑闊抽噺銆備笅闈㈢殑浠g爜鍙互浠庤繑鍥炲間腑渚濇鎻愬彇宸﹀彸澹伴亾鐨勫鐩婂ぇ灝忥細
int left, right; left = vol & 0xff; right = (vol & 0xff00) >> 8; printf("Left gain is %d %%, Right gain is %d %%\n", left, right); |
綾諱技鍦幫紝濡傛灉鎯寵緗販闊抽氶亾鐨勫鐩婂ぇ灝忥紝鍒欏彲浠ラ氳繃SOUND_MIXER_WRITE瀹忔潵瀹炵幇錛屾鏃墮伒寰殑鍘熷垯涓庤幏鍙栧鐩婂兼椂鐨勫師鍒欏熀鏈浉鍚岋紝渚嬪涓嬮潰鐨勮鍙ュ彲浠ョ敤鏉ヨ緗害鍏嬮鐨勮緭鍏ュ鐩婏細
vol = (right << 8) + left; ioctl(fd, SOUND_MIXER_WRITE(SOUND_MIXER_MIC), &vol); |
鍦ㄧ紪鍐欏疄鐢ㄧ殑闊抽紼嬪簭鏃訛紝娣烽煶鍣ㄦ槸鍦ㄦ秹鍙婂埌鍏煎鎬ф椂闇瑕侀噸鐐硅冭檻鐨勪竴涓璞★紝榪欐槸鍥犱負涓嶅悓鐨勫0鍗℃墍鎻愪緵鐨勬販闊沖櫒璧勬簮鏄湁鎵鍖哄埆鐨勩傚0鍗¢┍鍔ㄧ▼搴忔彁渚涗簡澶氫釜ioctl緋葷粺璋冪敤鏉ヨ幏寰楁販闊沖櫒鐨勪俊鎭紝瀹冧滑閫氬父榪斿洖涓涓暣鍨嬬殑浣嶆帺鐮侊紙bitmask錛夛紝鍏朵腑姣忎竴浣嶅垎鍒唬琛ㄤ竴涓壒瀹氱殑娣烽煶閫氶亾錛屽鏋滅浉搴旂殑浣嶄負1錛屽垯璇存槑涓庝箣瀵瑰簲鐨勬販闊抽氶亾鏄彲鐢ㄧ殑銆備緥濡傞氳繃 SOUND_MIXER_READ_DEVMASK榪斿洖鐨勪綅鎺╃爜錛屽彲浠ユ煡璇㈠嚭鑳藉琚0鍗℃敮鎸佺殑姣忎竴涓販闊抽氶亾錛岃岄氳繃 SOUND_MIXER_READ_RECMAS榪斿洖鐨勪綅鎺╃爜錛屽垯鍙互鏌ヨ鍑鴻兘澶熻褰撲綔褰曢煶婧愮殑姣忎竴涓氶亾銆備笅闈㈢殑浠g爜鍙互鐢ㄦ潵媯鏌D杈撳叆鏄惁鏄竴涓湁鏁堢殑娣烽煶閫氶亾錛?/p>
ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devmask); if (devmask & SOUND_MIXER_CD) printf("The CD input is supported"); |
濡傛灉榪涗竴姝ヨ繕鎯崇煡閬撳叾鏄惁鏄竴涓湁鏁堢殑褰曢煶婧愶紝鍒欏彲浠ヤ嬌鐢ㄥ涓嬭鍙ワ細
ioctl(fd, SOUND_MIXER_READ_RECMASK, &recmask); if (recmask & SOUND_MIXER_CD) printf("The CD input can be a recording source"); |
鐩墠澶у鏁板0鍗℃彁渚涘涓綍闊蟲簮錛岄氳繃 SOUND_MIXER_READ_RECSRC鍙互鏌ヨ鍑哄綋鍓嶆鍦ㄤ嬌鐢ㄧ殑褰曢煶婧愶紝鍚屼竴鏃跺埢鑳藉浣跨敤鍑犱釜褰曢煶婧愭槸鐢卞0鍗$‖浠跺喅瀹氱殑銆傜被浼煎湴錛屼嬌鐢?SOUND_MIXER_WRITE_RECSRC鍙互璁劇疆澹板崱褰撳墠浣跨敤鐨勫綍闊蟲簮錛屼緥濡備笅闈㈢殑浠g爜鍙互灝咰D杈撳叆浣滀負澹板崱鐨勫綍闊蟲簮浣跨敤錛?/p>
devmask = SOUND_MIXER_CD; ioctl(fd, SOUND_MIXER_WRITE_DEVMASK, &devmask); |
姝ゅ錛屾墍鏈夌殑娣烽煶閫氶亾閮芥湁鍗曞0閬撳拰鍙屽0閬撶殑鍖哄埆錛屽鏋滈渶瑕佺煡閬撳摢浜涙販闊抽氶亾鎻愪緵浜嗗绔嬩綋澹扮殑鏀寔錛屽彲浠ラ氳繃SOUND_MIXER_READ_STEREODEVS鏉ヨ幏寰椼?/p>
涓嬮潰緇欏嚭涓涓埄鐢ㄥ0鍗′笂鐨凞SP璁懼榪涜澹伴煶褰曞埗鍜屽洖鏀劇殑鍩烘湰妗嗘灦錛屽畠鐨勫姛鑳芥槸鍏堝綍鍒跺嚑縐掔闊抽鏁版嵁錛屽皢鍏跺瓨鏀懼湪鍐呭瓨緙撳啿鍖轟腑錛岀劧鍚庡啀榪涜鍥炴斁錛屽叾鎵鏈夌殑鍔熻兘閮芥槸閫氳繃璇誨啓/dev/dsp璁懼鏂囦歡鏉ュ畬鎴愮殑錛?/p>
/* * sound.c */ #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/ioctl.h> #include <stdlib.h> #include <stdio.h> #include <linux/soundcard.h> #define LENGTH 3 /* 瀛樺偍縐掓暟 */ #define RATE 8000 /* 閲囨牱棰戠巼 */ #define SIZE 8 /* 閲忓寲浣嶆暟 */ #define CHANNELS 1 /* 澹伴亾鏁扮洰 */ /* 鐢ㄤ簬淇濆瓨鏁板瓧闊抽鏁版嵁鐨勫唴瀛樼紦鍐插尯 */ unsigned char buf[LENGTH*RATE*SIZE*CHANNELS/8]; int main() { int fd; /* 澹伴煶璁懼鐨勬枃浠舵弿榪扮 */ int arg; /* 鐢ㄤ簬ioctl璋冪敤鐨勫弬鏁?*/ int status; /* 緋葷粺璋冪敤鐨勮繑鍥炲?*/ /* 鎵撳紑澹伴煶璁懼 */ fd = open("/dev/dsp", O_RDWR); if (fd < 0) { perror("open of /dev/dsp failed"); exit(1); } /* 璁劇疆閲囨牱鏃剁殑閲忓寲浣嶆暟 */ arg = SIZE; status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg); if (status == -1) perror("SOUND_PCM_WRITE_BITS ioctl failed"); if (arg != SIZE) perror("unable to set sample size"); /* 璁劇疆閲囨牱鏃剁殑澹伴亾鏁扮洰 */ arg = CHANNELS; status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg); if (status == -1) perror("SOUND_PCM_WRITE_CHANNELS ioctl failed"); if (arg != CHANNELS) perror("unable to set number of channels"); /* 璁劇疆閲囨牱鏃剁殑閲囨牱棰戠巼 */ arg = RATE; status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg); if (status == -1) perror("SOUND_PCM_WRITE_WRITE ioctl failed"); /* 寰幆錛岀洿鍒版寜涓婥ontrol-C */ while (1) { printf("Say something:\n"); status = read(fd, buf, sizeof(buf)); /* 褰曢煶 */ if (status != sizeof(buf)) perror("read wrong number of bytes"); printf("You said:\n"); status = write(fd, buf, sizeof(buf)); /* 鍥炴斁 */ if (status != sizeof(buf)) perror("wrote wrong number of bytes"); /* 鍦ㄧ戶緇綍闊沖墠絳夊緟鍥炴斁緇撴潫 */ status = ioctl(fd, SOUND_PCM_SYNC, 0); if (status == -1) perror("SOUND_PCM_SYNC ioctl failed"); } } |
涓嬮潰鍐嶇粰鍑轟竴涓娣烽煶鍣ㄨ繘琛岀紪紼嬬殑鍩烘湰妗嗘灦錛屽埄鐢ㄥ畠鍙互瀵瑰悇縐嶆販闊抽氶亾鐨勫鐩婅繘琛岃皟鑺傦紝鍏舵墍鏈夌殑鍔熻兘閮芥槸閫氳繃璇誨啓/dev/mixer璁懼鏂囦歡鏉ュ畬鎴愮殑錛?/p>
/* * mixer.c */ #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <sys/ioctl.h> #include <fcntl.h> #include <linux/soundcard.h> /* 鐢ㄦ潵瀛樺偍鎵鏈夊彲鐢ㄦ販闊寵澶囩殑鍚嶇О */ const char *sound_device_names[] = SOUND_DEVICE_NAMES; int fd; /* 娣烽煶璁懼鎵瀵瑰簲鐨勬枃浠舵弿榪扮 */ int devmask, stereodevs; /* 娣烽煶鍣ㄤ俊鎭搴旂殑浣嶅浘鎺╃爜 */ char *name; /* 鏄劇ず鍛戒護鐨勪嬌鐢ㄦ柟娉曞強鎵鏈夊彲鐢ㄧ殑娣烽煶璁懼 */ void usage() { int i; fprintf(stderr, "usage: %s <device> <left-gain%%> <right-gain%%>\n" " %s <device> <gain%%>\n\n" "Where <device> is one of:\n", name, name); for (i = 0 ; i < SOUND_MIXER_NRDEVICES ; i++) if ((1 << i) & devmask) /* 鍙樉紺烘湁鏁堢殑娣烽煶璁懼 */ fprintf(stderr, "%s ", sound_device_names[i]); fprintf(stderr, "\n"); exit(1); } int main(int argc, char *argv[]) { int left, right, level; /* 澧炵泭璁劇疆 */ int status; /* 緋葷粺璋冪敤鐨勮繑鍥炲?*/ int device; /* 閫夌敤鐨勬販闊寵澶?*/ char *dev; /* 娣烽煶璁懼鐨勫悕縐?*/ int i; name = argv[0]; /* 浠ュ彧璇繪柟寮忔墦寮娣烽煶璁懼 */ fd = open("/dev/mixer", O_RDONLY); if (fd == -1) { perror("unable to open /dev/mixer"); exit(1); } /* 鑾峰緱鎵闇瑕佺殑淇℃伅 */ status = ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devmask); if (status == -1) perror("SOUND_MIXER_READ_DEVMASK ioctl failed"); status = ioctl(fd, SOUND_MIXER_READ_STEREODEVS, &stereodevs); if (status == -1) perror("SOUND_MIXER_READ_STEREODEVS ioctl failed"); /* 媯鏌ョ敤鎴瘋緭鍏?*/ if (argc != 3 && argc != 4) usage(); /* 淇濆瓨鐢ㄦ埛杈撳叆鐨勬販闊沖櫒鍚嶇О */ dev = argv[1]; /* 紜畾鍗沖皢鐢ㄥ埌鐨勬販闊寵澶?*/ for (i = 0 ; i < SOUND_MIXER_NRDEVICES ; i++) if (((1 << i) & devmask) && !strcmp(dev, sound_device_names[i])) break; if (i == SOUND_MIXER_NRDEVICES) { /* 娌℃湁鎵懼埌鍖歸厤欏?*/ fprintf(stderr, "%s is not a valid mixer device\n", dev); usage(); } /* 鏌ユ壘鍒版湁鏁堢殑娣烽煶璁懼 */ device = i; /* 鑾峰彇澧炵泭鍊?*/ if (argc == 4) { /* 宸︺佸彸澹伴亾鍧囩粰瀹?*/ left = atoi(argv[2]); right = atoi(argv[3]); } else { /* 宸︺佸彸澹伴亾璁句負鐩哥瓑 */ left = atoi(argv[2]); right = atoi(argv[2]); } /* 瀵歸潪绔嬩綋澹拌澶囩粰鍑鴻鍛婁俊鎭?*/ if ((left != right) && !((1 << i) & stereodevs)) { fprintf(stderr, "warning: %s is not a stereo device\n", dev); } /* 灝嗕袱涓0閬撶殑鍊煎悎鍒板悓涓鍙橀噺涓?*/ level = (right << 8) + left; /* 璁劇疆澧炵泭 */ status = ioctl(fd, MIXER_WRITE(device), &level); if (status == -1) { perror("MIXER_WRITE ioctl failed"); exit(1); } /* 鑾峰緱浠庨┍鍔ㄨ繑鍥炵殑宸﹀彸澹伴亾鐨勫鐩?*/ left = level & 0xff; right = (level & 0xff00) >> 8; /* 鏄劇ず瀹為檯璁劇疆鐨勫鐩?*/ fprintf(stderr, "%s gain set to %d%% / %d%%\n", dev, left, right); /* 鍏抽棴娣烽煶璁懼 */ close(fd); return 0; } |
緙栬瘧濂戒笂闈㈢殑紼嬪簭涔嬪悗錛屽厛涓嶅甫浠諱綍鍙傛暟鎵ц涓閬嶏紝姝ゆ椂浼氬垪鍑哄0鍗′笂鎵鏈夊彲鐢ㄧ殑娣烽煶閫氶亾錛?/p>
[xiaowp@linuxgam sound]$ ./mixer usage: ./mixer <device> <left-gain%> <right-gain%> ./mixer <device> <gain%> Where <device> is one of: vol pcm speaker line mic cd igain line1 phin video |
涔嬪悗灝卞彲浠ュ緢鏂逛究鍦拌緗悇涓販闊抽氶亾鐨勫鐩婂ぇ灝忎簡錛屼緥濡備笅闈㈢殑鍛戒護灝辮兘澶熷皢CD杈撳叆鐨勫乏銆佸彸澹伴亾鐨勫鐩婂垎鍒緗負80%鍜?0%錛?/p>
[xiaowp@linuxgam sound]$ ./mixer cd 80 90 cd gain set to 80% / 90% |
![]() ![]() |
![]()
|
闅忕潃Linux騫沖彴涓嬪濯掍綋搴旂敤鐨勯愭笎娣卞叆錛岄渶瑕佺敤鍒版暟瀛楅煶棰戠殑鍦哄悎蹇呭皢瓚婃潵瓚婂箍娉涖傝櫧鐒舵暟瀛楅煶棰戠壍娑夊埌鐨勬蹇甸潪甯稿錛屼絾鍦↙inux涓嬭繘琛屾渶鍩烘湰鐨勯煶棰戠紪紼嬪嵈騫朵笉鍗佸垎澶嶆潅錛屽叧閿槸鎺屾彙濡備綍涓嶰SS鎴栬匒LSA榪欑被澹板崱椹卞姩紼嬪簭榪涜浜や簰錛屼互鍙婂浣曞厖鍒嗗埄鐢ㄥ畠浠彁渚涚殑鍚勭鍔熻兘錛岀啛鎮変竴浜涙渶鍩烘湰鐨勯煶棰戠紪紼嬫鏋跺拰妯″紡瀵瑰垵瀛﹁呮潵璁插ぇ鏈夎(鐩娿?/p>
2. Graphic
a. 鏁翠綋甯冨眬涓紝鐢ㄦ埛鍏沖績鐨勬暟鎹秺娓呮櫚瓚婂ソ錛堝ぇ錛屽錛夛紝UIWidget鏄劇ず鐨勮秺灝戣秺濂斤紝鍙湁蹇呰鐨勶紝閰嶅悎Gesture瀹屾垚銆?br> b. 鐢婚潰鐨勫垏鎹紝杞満鍔ㄧ敾
b1. 涓嶈榪囦簬鍙傝働C涓婄殑琛ㄧ幇褰㈠紡錛?Windows鍏抽棴鐐筙, Mac OS涔熸槸X, Window CE6 鍏抽棴鐐筙錛屼絾Iphone灝辨槸鍏ㄩ儴Home閿?br> b2. 絎﹀悎浜烘劅瑙夌殑娼滄剰璇嗭細褰撳揩閫焏rag鐢婚潰鏃訛紝鐢婚潰搴旇蹇熼棯榪囷紝鎱㈡參drag鏃剁敾闈㈠簲璇ユ參鎱㈤棯榪囷紝榪佺Щ閫熷害闈欐->鍖鍔犻燂紞>鍖鍑忛燂紞>闈欐
c. 鎸夐敭鐨勭壒鏁?br> c1. 浜紝
c2. 鍥懼艦鍏崇郴灝廎orce feedback錛?鏈?8 Samsung Anycall Haptic
3. 涓庣‖浠剁粨鍚?br> 闄铻轟華
Gsense
鐑紶鎰?/p>
鍒濅腑涔頒簡鐢佃剳鏃訛紝鎯沖仛鐨勫氨鏄墦娓告垙錛屽笇鏈涗互鍚庤兘鍋氭父鎴忓紑鍙戝伐紼嬪笀錛堝綋鏃惰繕鍦ㄦ兂鏈夋病鏈夎繖涓亴浣嶏級錛岃嚜宸變貢涔?/span>3D MAX鐨勪功鐪嬶紱涓婁簡楂樹腑鐨勬椂鍊欙紝鎴戝夠鎯沖綋緗戠粶瀹夊叏涓撳錛屼篃鍙互鏄粦瀹紝鐒跺悗灝辯爺絀剁洍QQ鍙風殑宸ュ叿錛屽懙鍛碉紱涓婁簡澶у錛屾墠紜畾浜嗗仛紼嬪簭鍛橈紝鍋氱殑鏈澶氱殑鏄?/span>JAVA錛?/span>JSP錛涚幇鍦ㄥ埌浜嗗叕鍙稿紑濮嬪張鍋氬祵鍏ュ紡鐨勪笢瑗匡紝璁$畻鏈虹殑涓滆タ鍙湡澶氾紒姣忎竴涓妧鏈瀛︽繁鍏ラ兘瑕佽姳寰堥暱鏃墮棿錛屼絾寰堟湁鎰忔濄傛垜涔熷氨娌夐潤鍦ㄨ綆楁満鐨勪箰瓚d腑銆?/span>
鍦ㄦ垜鐨勮剳嫻蜂腑錛岀‖浠剁殑涓滆タ鎴戞槸涓嶅睉涓欏劇殑錛屽洜涓烘垜瑙夌殑閭d簺涓滆タ鐨勫埗浣滃拰鐢熶駭娌℃湁鎴戠殑鍙傚姞錛屾垜鍙兂鍐欒蔣浠訛紝灝卞儚鎵句簡涓寮犵焊璁╂垜鐢葷敾涓鏍鳳紝浣嗙幇鍦ㄧ湅鏉ユ槸涓嶈浜嗭紝宓屽叆寮忕殑涓滆タ涓庡簳灞傜浉鍏蟲ф瘮杈冨ぇ錛屾墍浠ヤ竴浜涘熀鏈殑紜歡鐭ヨ瘑鍜屼竴浜涜澶囬兘寰椾簡瑙c傛墍浠ユ垜浠婂ぉ鎯蟲葷粨涓嬫垜榪欎袱澶╃敤鍒扮殑鏃犵嚎緗戠粶錛岃繖涔熸槸鎴戠幇鍦ㄩ」鐩腑鐢ㄥ埌鐨勶紝WiFi銆?/span>
絎旇鏈甫鍥炲鎼滅儲浜嗕笅錛屽懆鍥寸珶鐒舵湁鍗佸嚑涓?/span>AP錛屾墍浠ョ幇鍦ㄧ湅鏉ユ棤綰挎妧鏈凡緇忔槸寰堝父瑙佺殑浜嗐傛棤綰跨綉緇滀篃瑙e喅浜嗕互鍓嶅竷綰匡紝鎻掑駭錛屾帴澶達紝闆嗙嚎鍣ㄧ瓑鏂藉伐鍜屾垚鏈棶棰樸傛湁浜鴻鏃犵嚎緗戠粶鎶鏈兘鍙戝睍錛屾湁浜涘師鍥犺褰掑姛浜庣瑪璁版湰鐨勭晠閿錛岀幇鍦ㄥ嚑涔庢瘡涓棤綰塊兘闆嗘垚浜?/span>802.11b鎴?/span>
802.11鏍囧噯
搴旂敤浜?/span>PC鐨勬棤綰跨綉緇滅敱IEEE錛堟庝箞涓浗灝辨病鏈夎繖鏍風殑緇勭粐錛夊埗瀹氫簡鏍囧噯錛?/span>802.11灝辨槸灝辨槸鏃犵嚎灞鍩熺綉鐨勬爣鍑嗭紝瀹冭繕鏈夊ソ澶氬瓙鏍囧噯錛?/span>
802.11b錛?/span>2.4GHz棰戞錛?/span>11Mbps錛?/span>
802.11i錛?/span> 鐮旂┒闃舵錛屼富瑕佽В鍐沖畨鍏ㄩ棶棰樸?/span>
802.11n錛?/span>2.4GHz棰戞錛?/span>100Mbps錛岀爺絀墮樁孌碉紝涓嶈繃宸叉湁浜у搧錛屼絾涓嶅瀹屽杽銆?/span>
802.11鏈夊縐嶇綉緇滄嫇鎵戞ā寮忥紝浣嗘渶鍩虹鐨勮繕鏄?/span>infrastructure mode鍜?/span>ad-hoc mode銆?/span>
infrastructure mode錛氫篃鍙互璇存槸涓涓泦涓槦鍨嬫棤綰跨綉緇滐紝鏈変竴涓墍璋撶殑鏃犵嚎鎺ュ叆鐐癸紙Access Point錛?/span>AP錛夋潵榪炴帴鍚勮妭鐐逛箣闂寸殑璁$畻鏈洪氳錛屽叾浼犺緭閫熷害鎺ヨ繎鏈夌嚎緗戠粶錛屽緢閫傚悎閰嶇疆鍦ㄥ閲岋紝鎴栬呭姙鍏銆?/span>
Ad-hoc mode錛氬睘浜庡絳夊瀷鏃犵嚎緗戠粶錛屽悇涓澶囧彲浠ョ洿鎺ヨ繛鎺ヤ笉閫氳繃鍏朵粬璁懼錛岀粍鎴愮偣瀵圭偣緗戠粶銆傚儚PC涔嬮棿浼犺緭鏁版嵁錛?/span>PSP涔嬮棿鐜╂父鎴忕瓑絳夈?/span>
鐜板湪姣旇緝澶寸柤鐨勫氨鏄畨鍏ㄩ棶棰樹簡錛堝懙鍛碉紝榪欎篃鏄垜姣旇緝澶寸柤鐨勶紝鎴戠殑紼嬪簭鏈夋椂鍊?/span>WEP KEY閿欎篃鑳借繛涓婏級錛屾棤綰跨殑浼犺緭濯掍粙鏄數娉紝鍙鍦ㄧ數娉㈡兜鐩栬寖鍥村唴鐨勫氨鍙互鎺ユ敹鍒扮綉緇滀俊鍙鳳紝鎵鏈変笉闃叉湁涓浜涗漢鎺ュ埌浣犵殑AP涓嬮潰鍋氫竴浜涢潪娉曠殑浜嬫儏錛屽洜涓?/span>WEP鍔犲瘑宸茬粡瀹e竷鍙互琚牬瑙d簡錛屾墍浠ョ幇鍦ㄦ柊鐨勬爣鍑嗕篃鍦ㄨ繖涓鏂歸潰涓嬪姛澶憿錛?/span>
qt鏄疶rolltech鎻愪緵鐨勪竴涓敤浜庤法騫沖彴鍥懼艦鐢ㄦ埛鐣岄潰搴旂敤紼嬪簭寮鍙戠殑C++宸ュ叿鍖呫俀t鎻愪緵浜嗗彲浠ヨ法Microsoft Windows銆丮ac OS X銆丩inux銆佹墍鏈塙nix鐨勪富瑕佸晢涓氬彉縐嶄互鍙婂祵鍏ュ紡Linux澶氬鉤鍙扮Щ妞嶇殑鍗曚竴婧愮▼搴忋傚湪宓屽叆寮廘inux涓婏紝Qt搴旂敤紼嬪簭緙栫▼鎺ュ彛鏄氳繃Qtopia Core瀹炵幇鐨勩?/p>
Qt涓哄簲鐢ㄧ▼搴忓紑鍙戣呮彁渚涗簡鏋勫緩鐩墠浣跨敤鏈鏂版按騫崇殑鍥懼艦鐢ㄦ埛鐣岄潰鐨勫簲鐢ㄧ▼搴忔墍闇瑕佺殑鍏ㄩ儴鍔熻兘銆俀t鏄畬鍏ㄩ潰鍚戝璞$殑銆佸鏄撴墿灞曠殑銆佸茍涓斿厑璁哥湡姝g殑緇勪歡緙栫▼銆傝闃呰鐧界毊涔︽潵寰楀埌涓涓叏闈㈢殑鎶鏈榪般?/p>
鑷粠1996騫存棭鏈烸t榪涘叆鍟嗕笟棰嗗煙錛屽畠宸茬粡鎴愪負浜嗕笘鐣岃寖鍥翠腑鏁板崈涓垚鍔熷簲鐢ㄧ▼搴忕殑鍩虹銆俀t榪樻槸澶т紬鍖栫殑KDE Linux妗岄潰鐜鐨勫熀紜錛孠DE鐜板湪鏄墍鏈変富嫻丩inux鍙戣鐗堢殑涓涓爣鍑嗙粍浠躲傝鍙傝冩垜浠殑瀹㈡埛鎴愬姛鏁呬簨鏉ュ緱鍒頒竴浜決t鐨勫晢涓氬紑鍙戠殑瀹炰緥銆?/p>
Qt琚笅闈㈣繖浜涘鉤鍙版敮鎸侊細
Microsoft Windows -- 98銆丯T 4.0銆丮E銆?000鍜孹P
Unix/X11 -- Linux銆丼un Solaris銆丠P-UX銆丠P Tru64 UNIX銆両BM AIX銆丼GI IRIX鍜屽緢澶氬叾瀹僓nix鍙樼
Mac OS X -- Mac OS X 10.2+
宓屽叆寮廘inux -- 鏀寔甯х紦鍐詫紙framebuffer錛夌殑Linux騫沖彴
璇峰弬鑰僒rolltech鐨勭綉绔欒幏寰楁敮鎸佺殑騫沖彴鍜岀紪璇戝櫒鐨勫畬鏁村垪琛ㄣ?/p>
Qt琚寜涓嶅悓鐨勭増鏈彂甯冿細
Qt鍟嗕笟鐗堣鐢ㄤ簬鍟嗕笟杞歡寮鍙戙傚畠浠彁渚涗紶緇熷晢涓氳蔣浠跺彂琛岀増騫朵笖鎻愪緵鍏嶈垂鍗囩駭鍜屾妧鏈敮鎸佹湇鍔°傚鏋滆鑾峰緱鏈鏂版姤浠鳳紝璇鋒祻瑙堝湪綰跨殑浠鋒牸淇℃伅欏甸潰鎴栬呬笌sales@trolltech.com鑱旂郴銆?
Qt寮婧愮増浠呰鐢ㄤ簬寮鍙戣嚜鐢卞拰寮婧愯蔣浠躲傚熀浜嶲鍏叡璁稿彲鍗忚鍜孏NU閫氱敤鍏叡璁稿彲鍗忚鐨勬潯嬈句笅錛屽畠鏄鍏嶈垂鎻愪緵鐨勩?/p>
Trolltech榪樻彁渚涗簡Qt瑙e喅鏂規錛屽畠鏄竴濂楁鍦ㄥ澶氱殑鐢ㄤ簬瀹屽杽Qt鐨勯傜敤浜庡伐涓氶鍩熷拰騫沖彴鐗瑰畾鑼冨洿鐨勭粍浠躲傚畠浠腑鐨勪竴浜涚粍浠朵粎鎻愪緵緇欏晢涓氬鎴鳳紝鍏跺畠鐨勫浜庢墍鏈塓t鐢ㄦ埛閮芥槸鍙敤鐨勩?
鍥藉唴鐩稿叧緗戠珯涓嶅錛屽湪榪欓噷鎴戞帹鑽愪竴涓猀T鐨勭綉绔欙細http://www.qtcn.org/bbs/
鐩稿叧璧勬簮涓嬭澆錛歠tp://ftp.trolltech.com/qt/source