diff --git a/src/lynq/lib/liblynq-call/lynq_call.cpp b/src/lynq/lib/liblynq-call/lynq_call.cpp
index 6fb06f0..e7d0585 100755
--- a/src/lynq/lib/liblynq-call/lynq_call.cpp
+++ b/src/lynq/lib/liblynq-call/lynq_call.cpp
@@ -100,6 +100,10 @@
     /*Null anomaly*/
     LYNQ_E_NULL_ANONALY=9001
 }LYNQ_E;
+typedef enum{
+    LYNQ_E_VOLUMN_SET_DTMF,
+    LYNQ_E_VOLUMN_SET_SPEECH
+}LYNQ_E_VOLUMN_SET;   
 
 int lynq_call_state =CALL_OFF;
 int lynq_call_client_sockfd = 0;
@@ -819,7 +823,58 @@
     LYINFLOG("auto answer call mode =%d",mode);
     return 0;
 }
-int lynq_get_mute_status(int *status)
+int lynq_get_current_call_state(int *handle,    int *call_state,int *toa,int *direction,char addr[])
+{
+    int lynq_call_id = 0;
+    if(handle==NULL)
+    {
+        return LYNQ_E_NULL_ANONALY;
+    }
+    lynq_call_id = *handle;
+    *call_state = lynq_call_lists[lynq_call_id].call_state;
+    *toa = lynq_call_lists[lynq_call_id].toa;
+    *direction = lynq_call_lists[lynq_call_id].direction;
+    memcpy(addr,lynq_call_lists[lynq_call_id].addr,strlen(lynq_call_lists[lynq_call_id].addr)+1);
+    return 0;
+}
+
+/*audio begin*/
+int lynq_set_common_request(int request_id, int argc, const char* format,...)
+{
+    Parcel p;
+    lynq_client_t client;
+    int resp_type = -1;
+    int request = -1;
+    int slot_id = -1;
+    int error = -1;
+    //if(!lynq_call_state)
+    //{
+    //    LYERRLOG("LYNQ_E_CONFLICT");
+    //    return LYNQ_E_CONFLICT;
+    //}
+    client.uToken = Global_uToken_call;
+    client.request = request_id;
+    client.paramLen = argc;
+    bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
+    va_list args;
+    va_start(args, format);
+    vsnprintf(client.param, LYNQ_REQUEST_PARAM_BUF, format, args);
+    va_end(args);    
+    LYDBGLOG("uToken=%d,request=%d,paralen=%d,param=%s\n",client.uToken,client.request,client.paramLen,client.param);
+    if(send_request(lynq_call_client_sockfd,&client)==-1)
+    {
+        LYERRLOG("send request fail");
+        return -1;
+    }
+    if(get_response(lynq_call_client_sockfd,p)==0)
+    {    
+        JumpHeader(p,&resp_type,&request,&slot_id,&error);
+        LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
+    }
+    return error;
+}
+
+int lynq_get_common_request(int request_id, int* status)
 {
     Parcel p;
     lynq_client_t client;
@@ -833,7 +888,7 @@
         return -1;
     }
     client.uToken = Global_uToken_call;
-    client.request = 54;//RIL_REQUEST_GET_MUTE
+    client.request = request_id;
     client.paramLen = 0;
     bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
     LYDBGLOG("uToken=%d,request=%d,paralen=%d,param=%s\n",client.uToken,client.request,client.paramLen,client.param);
@@ -842,10 +897,12 @@
         LYERRLOG("send request fail");
         return -1;
     }
-    get_response(lynq_call_client_sockfd,p);
-    JumpHeader(p,&resp_type,&request,&slot_id,&error);
-    p.readInt32(status);
-    LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
+    if(get_response(lynq_call_client_sockfd,p)==0)
+    {
+        JumpHeader(p,&resp_type,&request,&slot_id,&error);
+        p.readInt32(status);
+        LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
+    }
     return error;
 }
 
@@ -865,27 +922,11 @@
     if(!judge_mic(enable)){
         return LYNQ_E_CONFLICT;
     }
-    Parcel p;
-    lynq_client_t client;
-    int resp_type = -1;
-    int request = -1;
-    int slot_id = -1;
-    int error = -1;
-    client.uToken = Global_uToken_call;
-    client.request = 53;//RIL_REQUEST_SET_MUTE
-    client.paramLen = 1;
-    bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
-    sprintf(client.param,"%d",enable);
-    LYDBGLOG("uToken=%d,request=%d,paralen=%d,param=%s\n",client.uToken,client.request,client.paramLen,client.param);
-    if(send_request(lynq_call_client_sockfd,&client)==-1)
-    {
-        LYERRLOG("send request fail");
-        return -1;
-    }
-    get_response(lynq_call_client_sockfd,p);
-    JumpHeader(p,&resp_type,&request,&slot_id,&error);
-    LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
-    return error;
+    return lynq_set_common_request(53,1,"%d",enable); //RIL_REQUEST_SET_MUTE    
+}
+int lynq_get_mute_mic(int *status)
+{
+    return lynq_get_common_request(54,status);//RIL_REQUEST_GET_MUTE    
 }
 
 /**
@@ -917,89 +958,55 @@
     {
         return LYNQ_E_CONFLICT;
     }
-    Parcel p;
-    lynq_client_t client;
-    int resp_type = -1;
-    int request = -1;
-    int slot_id = -1;
-    int error = -1;
     if(!lynq_call_state)
     {
         LYERRLOG("LYNQ_E_CONFLICT");
         return LYNQ_E_CONFLICT;
     }
-    client.uToken = Global_uToken_call;
-    client.request = 24;//RIL_REQUEST_DTMF
-    client.paramLen = 1;
-    bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
-    sprintf(client.param,"%c",callnum);
-    LYDBGLOG("uToken=%d,request=%d,paralen=%d,param=%s\n",client.uToken,client.request,client.paramLen,client.param);
-    if(send_request(lynq_call_client_sockfd,&client)==-1)
-    {
-        LYERRLOG("send request fail");
-        return -1;
-    }
-    get_response(lynq_call_client_sockfd,p);
-    JumpHeader(p,&resp_type,&request,&slot_id,&error);
-    LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
-    return error;
-
+    return lynq_set_common_request(24,1,"%c",callnum); //RIL_REQUEST_DTMF  
 }
-
-static int judge_volume(const int volume){
-    if(volume < 0 ||volume >36){
-        return 0;
+static int judge_volume(LYNQ_E_VOLUMN_SET set,const int volume){
+    if(set==LYNQ_E_VOLUMN_SET_DTMF){
+        if(volume < 0 ||volume >36){
+            return 0;
+        }
+    }
+    else if (set==LYNQ_E_VOLUMN_SET_SPEECH)
+    {
+        if(volume < 1 ||volume >7){
+            return 0;
+        }
     }
     return 1;
 }
-
 int lynq_set_DTMF_volume(const int volume)
 {   
-    if(!judge_volume(volume)){
+    if(!judge_volume(LYNQ_E_VOLUMN_SET_DTMF,volume)){
         return LYNQ_E_CONFLICT;
     }
-    Parcel p;
-    lynq_client_t client;
-    int resp_type = -1;
-    int request = -1;
-    int slot_id = -1;
-    int error = -1;
-    //if(!lynq_call_state)
-    //{
-    //    LYERRLOG("LYNQ_E_CONFLICT");
-    //    return LYNQ_E_CONFLICT;
-    //}
-    client.uToken = Global_uToken_call;
-    client.request = 8003;//LYNQ_REQUEST_SET_DTMF_VOLUME
-    client.paramLen = 1;
-    bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
-    sprintf(client.param,"%d",volume);
-    LYDBGLOG("uToken=%d,request=%d,paralen=%d,param=%s\n",client.uToken,client.request,client.paramLen,client.param);
-    if(send_request(lynq_call_client_sockfd,&client)==-1)
-    {
-        LYERRLOG("send request fail");
-        return -1;
-    }
-    get_response(lynq_call_client_sockfd,p);
-    JumpHeader(p,&resp_type,&request,&slot_id,&error);
-    LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
-    return 0;
+    return lynq_set_common_request(8003,1,"%d",volume);//LYNQ_REQUEST_SET_DTMF_VOLUME
 }
-int lynq_get_current_call_state(int *handle,    int *call_state,int *toa,int *direction,char addr[])
+int lynq_set_speech_volume(int volume)//mixer_set_volume
 {
-    int lynq_call_id = 0;
-    if(handle==NULL)
+    if(!judge_volume(LYNQ_E_VOLUMN_SET_SPEECH,volume))
     {
-        return LYNQ_E_NULL_ANONALY;
+        return LYNQ_E_CONFLICT;
     }
-    lynq_call_id = *handle;
-    *call_state = lynq_call_lists[lynq_call_id].call_state;
-    *toa = lynq_call_lists[lynq_call_id].toa;
-    *direction = lynq_call_lists[lynq_call_id].direction;
-    memcpy(addr,lynq_call_lists[lynq_call_id].addr,strlen(lynq_call_lists[lynq_call_id].addr)+1);
-    return 0;
+    return lynq_set_common_request(8009,1,"%d",volume); //LYNQ_REQUEST_SET_SPEECH_VOLUME
 }
-
+int lynq_get_speech_volume(int* volumn)//mixer_get_volume
+{
+    return lynq_get_common_request(8010,volumn);//LYNQ_REQUEST_GET_SPEECH_VOLUME
+} 
+int lynq_incall_record_start(char* file_path)
+{
+	return lynq_set_common_request(8011,2,"%s\0%s","1",file_path); //LYNQ_REQUEST_RECORD
+}
+int lynq_incall_record_stop()
+{
+    return lynq_set_common_request(8011,2,"%s\0%s","0",""); //LYNQ_REQUEST_RECORD
+}
+/*audio end*/
 #if 0
 int main(int argc,char **argv)
 {
