package Ġcom . k ang ra oo . base kt lib . tools . audio . type Ċ Ċ import Ġcom . k ang ra oo . base kt lib . tools . U Time . currentTimeMillis Ċ import Ġcom . k ang ra oo . base kt lib . tools . audio . I Audio Type Ċ import Ġcom . k ang ra oo . base kt lib . tools . log . UL og . e Ċ import Ġcom . k ang ra oo . base kt lib . tools . store . file . Attachment Store Ċ import Ġcom . k ang ra oo . base kt lib . tools . store . file storage . Storage Type Ċ import Ġcom . k ang ra oo . base kt lib . tools . store . file storage . U Storage Ċ import Ġjava . io .* Ċ Ċ /** Ċ Ġ* Ġauthor Ġ: Ġs dw Ċ Ġ* Ġe - mail Ġ: Ġsh id awei @ xiao he . com Ċ Ġ* Ġtime Ġ: Ġ 2 0 1 9 / 0 9 / 1 0 Ċ Ġ* Ġdesc Ġ: Ċ Ġ* Ġversion : Ġ 1 . 0 Ċ Ġ*/ Ċ class ĠW av Type Ġ: ĠI Audio Type Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġto Type ( file List : ĠList < File >): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Size Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfile List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Size Ġ+= Ġfile List [ i ]. length (). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ å¡« åħ¥ åıĤæķ° ï¼Į æ¯Ķ çī¹ çİĩ çŃī çŃī ãĢĤ è¿ĻéĩĮ çĶ¨ çļĦæĺ¯ 1 6 ä½į åįķ å£° éģĵ Ġ 8 0 0 0 Ġh z ĊĠĠĠĠĠĠĠ Ġval Ġheader Ġ= ĠWave Header () ĊĠĠĠĠĠĠĠ Ġ// Ġ éķ¿åº¦ åŃĹæ®µ Ġ= Ġ åĨħå®¹ çļĦ å¤§å°ı ï¼Ī TOTAL _ SIZE ) Ġ+ ĊĠĠĠĠĠĠĠ Ġ// Ġ å¤´ éĥ¨ åŃĹæ®µ çļĦ å¤§å°ı ( ä¸į åĮħæĭ¬ åīį éĿ¢ 4 åŃĹèĬĤ çļĦ æłĩè¯Ĩ ç¬¦ RI FF ä»¥åıĬ file Length æľ¬ èº« çļĦ 4 åŃĹèĬĤ ) ĊĠĠĠĠĠĠĠ Ġheader . file Length Ġ= Ġtotal Size Ġ+ Ġ( 4 4 Ġ- Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġheader . fmt Hdr Le th Ġ= Ġ 1 6 ĊĠĠĠĠĠĠĠ Ġheader . bits Per Sample Ġ= Ġ 1 6 ĊĠĠĠĠĠĠĠ Ġheader . channels Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġheader . format Tag Ġ= Ġ 0 x 0 0 0 1 ĊĠĠĠĠĠĠĠ Ġheader . samples Per Sec Ġ= Ġ 8 0 0 0 ĊĠĠĠĠĠĠĠ Ġheader . block Align Ġ= Ġ( header . channels Ġ* Ġheader . bits Per Sample Ġ/ Ġ 8 ). to Short () ĊĠĠĠĠĠĠĠ Ġheader . avg Bytes Per Sec Ġ= Ġheader . block Align Ġ* Ġheader . samples Per Sec ĊĠĠĠĠĠĠĠ Ġheader . data Hdr Le th Ġ= Ġtotal Size ĊĠĠĠĠĠĠĠ Ġvar Ġh : ĠByteArray ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġh Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader . header ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe ( e , Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( h ?. size Ġ!= Ġ 4 4 ) Ġ{ Ġ// ĠW AV æłĩåĩĨ ï¼Į å¤´ éĥ¨ åºĶè¯¥ æĺ¯ 4 4 åŃĹèĬĤ , å¦Ĥæŀľ ä¸įæĺ¯ 4 4 ä¸ª åŃĹèĬĤ åĪĻ ä¸į è¿Ľè¡Į è½¬æį¢ æĸĩä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠU Storage . get Write Path ( currentTimeMillis (). toString () Ġ+ Ġ". wav ", ĠStorage Type . TYPE _ AUDIO ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĲĪ æĪĲ æīĢæľīçļĦ pcm æĸĩä»¶ çļĦæķ°æį® ï¼Į åĨĻ åĪ° çĽ®æłĩ æĸĩä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwav file Ġ= ĠAttachment Store . create ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( wav file ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbuffer Ġ= ĠByteArray ( 1 0 2 4 Ġ* Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuffered OutputStream ( it ). write ( h , Ġ 0 , Ġh . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġfile List . indices ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileInputStream ( file List [ j ]). use Ġ{ Ġins Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsize Ġ= Ġins . read ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( size Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġins . read ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfile List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfile List [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwav file ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ