مشاهده نسخه کامل
: تلفن گویا و منشی تلفنی : تشخیص برداشتن یا گذاشتن گوشی در تلفن گویا
maddahi.m.p
20-11-2010, 10:05
در برنامه ی تلفن گویا اصلا بفرمایید که میشه تشخیص داد طرف گوشی رو برداشته یا گذاشته ؟؟
چون کامپوننت ها از زمانی که گوشی طرف شروع به زنگ خوردن میکنه رو برقراری اتصال در نظر میگیره
که اینجوری نمیشه فهمید طرف پیام ما رو گوش کرده یا اصلا جواب نداده ؟؟؟
پیشاپیش از سپاسگذارم
Mahdi_S_T
20-11-2010, 10:41
با KDTele میتونی این کار رو بکنی
maddahi.m.p
20-11-2010, 13:45
بسیار ممنون از توجه تون
ولی با kdtele من این کار رو کردم ولی زمانی که شروع میکنه به زنگ زدن اتصال رو برقرار شده حساب میکنه حالا اگر برداره طرف گوشی رو یا نه هیچ فرقی نمی کنه حتی تلفن رو هم نمیتونه تشخیص بده قطع کرده یا نه .
maddahi.m.p
21-11-2010, 08:17
البته میشه نتیجه گرفت خط های مخابرات (تلفن ثابت ضعیفه سیستمش) چون با موبایل تشخیص میده گوشی رو برداشته یا قطع کرده ولی در تلفن ثابت خیر ؟
آیا کسی اطلاع بیشتری نداره که درسته یا نه ؟ آیا راهی هست که تشخیص بدیم گوشی رو برداشته یا نه که پیام پخش بشه ؟
شما باید بروید مخابرات و بگید ۱۶ کیلو را برای خط شما فعال کنند که در نتیجه با هر پالس ۴۶ ریالی یک سیگنال دریافت می کنید (یکی هم در شروع مکالمه)
samirparsa
02-05-2011, 19:30
البته میشه نتیجه گرفت خط های مخابرات (تلفن ثابت ضعیفه سیستمش) چون با موبایل تشخیص میده گوشی رو برداشته یا قطع کرده ولی در تلفن ثابت خیر ؟
آیا کسی اطلاع بیشتری نداره که درسته یا نه ؟ آیا راهی هست که تشخیص بدیم گوشی رو برداشته یا نه که پیام پخش بشه ؟
سلام دوست عزیز با کامپوننت kdlisten و کنترل رخداد (Event) می توانید DListen.OnListenState کنترل کنید که گوشی برداشته شده یا نه.پارامتر بازگشتی یک ListenState می باشد. که به شرح ذیل است:
rtSoundStart = 0
Indicates that the recognition engine detected a sound and the recognition process will be started. During the recognition process, if a phrase is recognized, the KDListen.OnRecognition event is fired.
rtSoundEnd = 1
Occurs after a pre-determined amount of time passes during which recognition engine have heard no sound.
rtInterference = 2
Indicates that the recognition failed due to the interference problem specified by the Param1 parameter.
سلام دوست عزیز با کامپوننت kdlisten و کنترل رخداد (Event) می توانید DListen.OnListenState کنترل کنید که گوشی برداشته شده یا نه.پارامتر بازگشتی یک ListenState می باشد. که به شرح ذیل است:
rtSoundStart = 0
Indicates that the recognition engine detected a sound and the recognition process will be started. During the recognition process, if a phrase is recognized, the KDListen.OnRecognition event is fired.
rtSoundEnd = 1
Occurs after a pre-determined amount of time passes during which recognition engine have heard no sound.
rtInterference = 2
Indicates that the recognition failed due to the interference problem specified by the Param1 parameter.
سلام بزرگوار ، ظاهرا شما با کامپوننت KDTele آشنایی زیادی دارید،چند سوال داشتم که اگر جواب بدهید ممنون می شوم،برای همین مدت زمان مکالمه من در جایی خواندم که از ,وضعیت های ssListenBegin و ssListenEnd استفاده می کنند که در قسمت KDVoice هست،ولی من در کامپوننت ورژن 3.6 که دارم یه همچین وضعیت هایی ندیدم!!!آیا ممکن است مربوط به رجیستر نشدن کامپوننت باشد؟چون سی روزه هست،تا الان توانستم ارتباط تماس را برقرار کنم ولی در این که مدت زمان مکالمه را ثبت کنم به مشکل بر خوردم،با سی شارپ هم کار می کنم،اگر بتوانید کمکی و یا راهنمایی برسانید بسیار سپاسگذار می شوم،با تشکر.
samirparsa
06-05-2011, 14:09
دوست عزیز. سلام
شما اگر از سی شازپ استفاده می کنید حتما از activx کی دی تله استفاده می کنید. تقریبا فانکشن ها در اکتیوایکس متفاوت با کامپوننت دلفی می باشد. برای همین شما اگر جایی مطلبی را خواندید بهتر است به help کامپوننت رجوع کنید و معادل و نحوه استفاده از آن را در activx بیابید. ربطی به رجیستری ندارد و این بندگان خدا دیگه این کامپ.ننت رو فی سبیل کردن.
ایا شما زمان مکالمه را می خواهید یا ضبط را؟
اگر ضبط را KDVoice.TimerPlay را بررسی کنید. البته هر چیز که برای play نوشته عینا برای ضبط هم می باشد.
اگر مدت زمان مکالمه: در خود مثالهای کامپوننت از تایمر استفاده شده. یعنی در رویداد کانکت تایمر روشن و با disconnect تامیر خاموش و ثبت می گردد.
دوست عزیز. سلام
شما اگر از سی شازپ استفاده می کنید حتما از activx کی دی تله استفاده می کنید. تقریبا فانکشن ها در اکتیوایکس متفاوت با کامپوننت دلفی می باشد. برای همین شما اگر جایی مطلبی را خواندید بهتر است به help کامپوننت رجوع کنید و معادل و نحوه استفاده از آن را در activx بیابید. ربطی به رجیستری ندارد و این بندگان خدا دیگه این کامپ.ننت رو فی سبیل کردن.
ایا شما زمان مکالمه را می خواهید یا ضبط را؟
اگر ضبط را KDVoice.TimerPlay را بررسی کنید. البته هر چیز که برای play نوشته عینا برای ضبط هم می باشد.
اگر مدت زمان مکالمه: در خود مثالهای کامپوننت از تایمر استفاده شده. یعنی در رویداد کانکت تایمر روشن و با disconnect تامیر خاموش و ثبت می گردد.
با سلام دوباره،از پاسخ شما ممنون،حقیقتش من زمان مکالمه ی دقیق را می خواهم ،رویداد کانکت وقتی رخ می دهد که تلفن طرف مقابل شروع به زنگ خوردن می کند و دیس کانکت هم وقتی که ما تلفن را قطع می کنیم(حالا یا من وارد نیستم یا واقعا تشخیص قطع تلفن از طرف دیگر مشکل است)!!!من دقیقا زمان شروع صحبت را می خواهم،ببینم منظورتون از تایمر همان تایمر خود زبان برنامه نویسی است یا KDTele خودش تایمر خاص دارد؟؟؟؟؟موضوع دیگری هم هست و آن این که من از KDTele 3.6 buid71 استفاده می کنم،و راهنمایی هم که داشتم مربوط به همان است،در KDVoice در رویداد OnSoundState می بایست طبق راهنما 11 وضعیت باشد از جمله ssListenBegin و ssListenEnd, اما من تمام وضعیت ها به غیر از این دو را دارم!!!!متن راهنما هم دقیقا این وضعیت ها را نوشته!!1 در ضمن همین موضوع در ورژن 3.5 هم که امتحان کردم وجود داشت!!!آیا در KDTele که شما استفاده می کنید این دو وضعیت وجود دارد؟آیا راه دیگری هست که بتوان مدت زمان دقیق مکالمه را یافت؟؟؟؟موضوع دیگر این که من مطلب پست قبلی شما را امتحان کردم ولی این رویداد ها اصلا موقع جواب دادن طرف مقابل به تلفن شلیک نمی شوند!!!!آیا باید از قبل کار خاصی انجام داد؟؟؟؟در اصل همان زمان برداشته شدن گوشی را می خواهم تشخیص دهم و اگر قطع کردن توسط طرف مقابل هم بدونم که دیگه عالیه،در ضمن من تعجب می کنم در اکثر مطالبی که دوستان برای این کامپوننت گذاشتند از همین دو رویداد کانکت و دیس کانکت برای پخش صدا استفاده کرده اند ولی این که درست نیست چون شاید طرف تا گوشی را بخواهد بردارد پخش صدا به پایان رسیده باشد!!!از راهنمایی شما ممنون.
samirparsa
07-05-2011, 01:17
درود بر تو،
1- شما از اکتیو ایکس استفاده می کنید و این رویدادها در زمان Listenstart و listenstop فعال می شود.
2- بله منطور تایمر #C است.
3- من متوجه شدم که شما می خواهید تماس بگیرید نه با شما تماس بگیرند؟
4- silentDetect را روشن کنید تا وضعیف قطع کنترل شود. به آن زمان هم می توانید بدهید تا از آن زمان به بعد را قطع کند.
5- شما باید برای قطع و وصل KDPhone را کنترل کنید و نه KDVoice را.
6- KDPhone.OnConsultCallState Event تمام نیاز شما برای انتقال تماس را تامین میکند. برای کنترل رویدادها یک کیس بنویسید و در آن در زمان وصل تماس تایمر را روشن کنید. در پایین چند آیتم کار را بنداز onCallState را توضیح می دهم:
ccsStarted = 0: زمانی که ارتباط بامودم برقرار شده و منتظر زنگ خوردن یا شماره گیری توسط شما می باشد.
ccsProceeding = 1: زمانی می باشد که شما گوشی را برداشتید و شماره گرفتید و به اصطلاح بوق می خورد.
ccsDialTone = 2:شخص تماس گیرنده یک کلید فشرده
ccsConnected = 3: تماس برقرار شده و اصطلاحا شخص الو می گوید ;)
ccsDisconnected = 8: تماس قطع شد.
ccsDialing = 2: شما در حال شماره گیری هستید
ccsWaitingDisconnection = 7: هیشکی توش نیست و گوشی بزار ثواب داره
درود بر تو،
1- شما از اکتیو ایکس استفاده می کنید و این رویدادها در زمان Listenstart و listenstop فعال می شود.
2- بله منطور تایمر #C است.
3- من متوجه شدم که شما می خواهید تماس بگیرید نه با شما تماس بگیرند؟
4- silentDetect را روشن کنید تا وضعیف قطع کنترل شود. به آن زمان هم می توانید بدهید تا از آن زمان به بعد را قطع کند.
5- شما باید برای قطع و وصل KDPhone را کنترل کنید و نه KDVoice را.
6- KDPhone.OnConsultCallState Event تمام نیاز شما را تامین میکند. برای کنترل رویدادها یک کیس بنویسید و در آن در زمان وصل تماس تایمر را روشن کنید. در پایین چند آیتم کار را بنداز CallStateرا توضیح می دهم:
ccsStarted = 0: زمانی که ارتباط بامودم برقرار شده و منتظر زنگ خوردن یا شماره گیری توسط شما می باشد.
ccsProceeding = 1: زمانی می باشد که شما گوشی را برداشتید و شماره گرفتید و به اصطلاح بوق می خورد.
ccsDialTone = 2:شخص تماس گیرنده یک کلید فشرده
ccsConnected = 3: تماس برقرار شده و اصطلاحا شخص الو می گوید ;)
ccsDisconnected = 8: تماس قطع شد.
ccsDialing = 2: شما در حال شماره گیری هستید
ccsWaitingDisconnection = 7: هیشکی توش نیست و گوشی بزار ثواب داره
با سلام دوباره،ممنون از این که وقت می گذارید و سوالات حقیر را جواب می دهید،این طور یک روز هم همین سوالات را به دیگران جواب می دهم و ثواب راه انداختن کار خلق به شما هم می رسد،من رویداد OnConsultState را که در بالا گفته بودید کدش را نوشتم،مشکل این است که این رویداد اصلا صدا زده نمی شود،آیا باید چیز خاصی را فعال کرد؟تنها رویدادی که به طور مشخص برای من صدا زده می شه همان OnCallState است!!!سوال دیگری داشتم و این که اگر اشتباه نکنم منظور شما از ListenStart و ListenEnd در بالا توابع KDVoice است،حقیقتش وقتی من این تابع ListenStart را صدا می زنم (در هنگام رویداد , OnCallState و در وضعیت Connected)پیغامی می دهد به قرار زیر:
شماره ی خطا 10
Sound Device is Exclusively Allocated By another application
من نمی دانم آیا در کارت صدا باید تنظیم خاصی انجام داد یا موضوع چیز دیگری هست؟؟؟؟در ضمن رویداد OnSilentDetect هم که در KDVoice هست را تا وقتی ListenStart انجام نشود فکر نکنم صدا زده شود،البته اگر منظور شما از فعال کردن این رویداد را درست متوجه شده باشم،درباره ی آن Cunsolt هم من در راهنمای کامپوننت خواندم که در روی هر مودمی جواب نمی دهد و برای مواردی همچون جابجایی تماس روی تلفن دیگر به کار می رود و وقتی که Cunsoltation تماس عوض می شود صدا زده میشود،ایا ممکن است مشکل از مودمم باشد؟آیا مودم خوب و ارزانی استفاده کرده اید که تمام این موارد را پشتیبانی کند،من مودم خودم یک TP_Link internal 56k halfDuplex مدل Tm-Ip5600 هست،وقتی در آن دو نفر همزمان صحبت کنند صدا اکو می گیرد،آیا این بخاطر HalfDuplex بودن آن است؟؟اگر اطاعاتی دارید ممنون می شوم مرا راهنمایی کنید!!ببخشید سوالات زیاد شد چون هیچ جایی جواب درست نمی دهند،امیدوارم خیرش را ببرید>متشکرم
samirparsa
07-05-2011, 16:55
ممنون راه خوب رو باید ادامه داد.
اصلا مودم رو فراموش کن. من خودم هم با اکتیو ایکس کار کردم مشکل می شه باهاش کار کن. از گفتن Listenstart منظورم این بود که اون دوتا رویداد در این زمان شروع می شود. نه اینکه از اون استفاده کنیم. توجه کن در زمانی که ارتباط قطع است از این فانکشنها استفاده کنید. مانند زمانی که شما می خواهید پیغامی را ضبط کنید. معلوم پسر وقتی پورت مودم بازه نمی تونی اونو در اختیار بگیری ;)
شرمنده CallConsulation در زمان کال ویتینگ و در زمان انتقال تماس به خط دیگر فعال می شود . مانند وقتی که منشی ارتباط برقرار می کند. شب بود قاطی کردیم:31: . همون توضیحات ولی با CallSate
و اما بعد.
procedure TMainForm1.Main_KDPhone1CallState(Sender: TObject;
CallState: TCallState; Param1, Param2, CallHandle: Integer);
begin
Case CallState Of
csOffering : Begin
Memo_Message (Get_Message_String ( 2 )) ;
End ;
csConnected: Begin
FirstSilence := true;
StopPlay := true;
Main_Form . CallPhoneHandle[1,1] := Main_KDPhone1 . CallHandle;
StatusRec := -1;
Main_KDPhone1 . OnDigitDetected := Main_KDPhone1DigitDetected ;
Is_Digit_Detected := False ;
Memo_Message (Get_Message_String ( 3 )) ;
ConnectionTimeLimitationDetector . Enabled := True ;
//1 If Main_KDVoice1 . PlayingState <> psIdle Then Main_KDVoice1 . PlayStop ;
//1 If Main_KDVoice1 . RecordingState <> rsIdle Then Main_KDVoice1 . RecStop ;
Begin_Of_Connection := True ;
TransferTimer . Enabled := False ;
Show_KDTele_Error_Messages(Main_KDPhone1 . ExtDevAux .SetMicSpeakerState( msMicOnSpeakerOn )) ;
End ;
csDisconnected: begin
StatusRec := -1;
Timer . Enabled := False ;
Is_Digit_Detected := False ;
Main_KDPhone1 . OnDigitDetected := Main_KDPhone1DigitDetected ;
ConnectionTimeLimitationDetector . Enabled := False ;
FirstSilence := false;
SilenceDetector . Enabled := False ;
RecordingTimer . Enabled := False ;
Memo_Message (Get_Message_String ( 4 )) ;
ConnectionTimeLimitationDetector . Enabled := False ;
//1 If Main_KDVoice1 . PlayingState <> psIdle Then Main_KDVoice1 . PlayStop ;
//1 If Main_KDVoice1 . RecordingState <> rsIdle Then Main_KDVoice1 . RecStop ;
TransferTimer . Enabled := False ;
// Show_KDTele_Error_Messages ( Main_KDPhone1.Hangup) ;
//Show_KDTele_Error_Messages ( Main_KDPhone1.LineActive(0,False)) ;
//Show_KDTele_Error_Messages ( Main_KDPhone1.LineActive(0,TRUE));
Show_KDTele_Error_Messages(Main_KDPhone1 . ExtDevAux .SetMicSpeakerState( msMicOffSpeakerOff )) ;
end;
csRemotePartyDisconnected :
begin
Memo_Message (Get_Message_String ( 5 ) );
Main_KDPhone1.Hangup ;
//Show_KDTele_Error_Messages ( Main_KDPhone1.LineActive(0,False)) ;
//Show_KDTele_Error_Messages ( Main_KDPhone1.LineActive(0,TRUE));
end;
csError : begin
Memo_Message (Get_Message_String ( 6 ) );
Show_KDTele_Error_Messages(Param1);
Show_KDTele_Error_Messages(Main_KDPhone1.Hangup);
end;
csBusy : begin
Memo_Message (Get_Message_String ( 7 ) );
Main_KDPhone1.Hangup ;
end;
csRing : begin
Memo_Message (Get_Message_String ( 8 ) );
If Param1 = Main_Form . CallPhoneHandle[1,2] then Main_KDPhone1.Answer(param2);
end;
End ;
end;
سلام بزرگوار،نمی دانم برایتان امکان دارد با هم تلفنی صحبت کنیم؟
اگر زحمتی نیست تلفن همراهتان را به آدرس زیر بفرستید تا تماس بگیرم.ممنون
wandering_traveler@Ymail.com
ممنون راه خوب رو باید ادامه داد.
اصلا مودم رو فراموش کن. من خودم هم با اکتیو ایکس کار کردم مشکل می شه باهاش کار کن. از گفتن Listenstart منظورم این بود که اون دوتا رویداد در این زمان شروع می شود. نه اینکه از اون استفاده کنیم. توجه کن در زمانی که ارتباط قطع است از این فانکشنها استفاده کنید. مانند زمانی که شما می خواهید پیغامی را ضبط کنید. معلوم پسر وقتی پورت مودم بازه نمی تونی اونو در اختیار بگیری ;)
شرمنده CallConsulation در زمان کال ویتینگ و در زمان انتقال تماس به خط دیگر فعال می شود . مانند وقتی که منشی ارتباط برقرار می کند. شب بود قاطی کردیم:31: . همون توضیحات ولی با CallSate
و اما بعد.
procedure TMainForm1.Main_KDPhone1CallState(Sender: TObject;
CallState: TCallState; Param1, Param2, CallHandle: Integer);
begin
Case CallState Of
csOffering : Begin
Memo_Message (Get_Message_String ( 2 )) ;
End ;
csConnected: Begin
FirstSilence := true;
StopPlay := true;
Main_Form . CallPhoneHandle[1,1] := Main_KDPhone1 . CallHandle;
StatusRec := -1;
Main_KDPhone1 . OnDigitDetected := Main_KDPhone1DigitDetected ;
Is_Digit_Detected := False ;
Memo_Message (Get_Message_String ( 3 )) ;
ConnectionTimeLimitationDetector . Enabled := True ;
//1 If Main_KDVoice1 . PlayingState <> psIdle Then Main_KDVoice1 . PlayStop ;
//1 If Main_KDVoice1 . RecordingState <> rsIdle Then Main_KDVoice1 . RecStop ;
Begin_Of_Connection := True ;
TransferTimer . Enabled := False ;
Show_KDTele_Error_Messages(Main_KDPhone1 . ExtDevAux .SetMicSpeakerState( msMicOnSpeakerOn )) ;
End ;
csDisconnected: begin
StatusRec := -1;
Timer . Enabled := False ;
Is_Digit_Detected := False ;
Main_KDPhone1 . OnDigitDetected := Main_KDPhone1DigitDetected ;
ConnectionTimeLimitationDetector . Enabled := False ;
FirstSilence := false;
SilenceDetector . Enabled := False ;
RecordingTimer . Enabled := False ;
Memo_Message (Get_Message_String ( 4 )) ;
ConnectionTimeLimitationDetector . Enabled := False ;
//1 If Main_KDVoice1 . PlayingState <> psIdle Then Main_KDVoice1 . PlayStop ;
//1 If Main_KDVoice1 . RecordingState <> rsIdle Then Main_KDVoice1 . RecStop ;
TransferTimer . Enabled := False ;
// Show_KDTele_Error_Messages ( Main_KDPhone1.Hangup) ;
//Show_KDTele_Error_Messages ( Main_KDPhone1.LineActive(0,False)) ;
//Show_KDTele_Error_Messages ( Main_KDPhone1.LineActive(0,TRUE));
Show_KDTele_Error_Messages(Main_KDPhone1 . ExtDevAux .SetMicSpeakerState( msMicOffSpeakerOff )) ;
end;
csRemotePartyDisconnected :
begin
Memo_Message (Get_Message_String ( 5 ) );
Main_KDPhone1.Hangup ;
//Show_KDTele_Error_Messages ( Main_KDPhone1.LineActive(0,False)) ;
//Show_KDTele_Error_Messages ( Main_KDPhone1.LineActive(0,TRUE));
end;
csError : begin
Memo_Message (Get_Message_String ( 6 ) );
Show_KDTele_Error_Messages(Param1);
Show_KDTele_Error_Messages(Main_KDPhone1.Hangup);
end;
csBusy : begin
Memo_Message (Get_Message_String ( 7 ) );
Main_KDPhone1.Hangup ;
end;
csRing : begin
Memo_Message (Get_Message_String ( 8 ) );
If Param1 = Main_Form . CallPhoneHandle[1,2] then Main_KDPhone1.Answer(param2);
end;
End ;
end;
سلام دوباره
پیش از هرچیز از پاسخ شما بسیار متشکرم و همچنین شهادت حضرت فاطمه زهرا (سلام الله علیه) را به شما تسلیت عرض می نمایم.
مهندس جان لازم به ذکر است وقتی رویداد OnConnected فعال میشود زمانی است که تلفن طرف مقابل زنگ میخورد و اگر من تایمیر را در این لحظه روشن کنم زمان واقعی مکالمه را به من نمی دهد.
اگر بتونید تلفنی بنده را راهنمایی کنید لطف بزرگی کرده اید. متاسفانه زمان من برای انجام این کار ( قطعه کد ) بسیار محدود می باشد چون پروژه من کامل شده و تنها همین قسمت مانده است .[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
با تشکر
itman_90
12-06-2012, 18:04
با سلام خدمت آقای samirparsa ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) اگر میشه در مورد نحوه شناسایی مودم ivrboard در دلفی و کامپوننت kdtele توضیح بدبد
من مودم رو نصب کردم ولی وقتی یه برنامه که در دلفی با kdtele نوشته شده رو اجرا میکنم ivrboard رو شناسایی نمیکنه
ممنون میشم اگه مشکله من رو حل کنید
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.