(ضبط نكردن صدا) (هنگامي كه بهش ميگيم اين كار رو تو كامپيوتري با اين IP اجرا كنه)
سلام و خسته نباشيد خدمت اساتيد محترم، وقت بخير
من يه برنامه ساده ضبط صدا از ميكروفن نوشتم، از طريق مثالهايي كه تو همين سايت بوده.
از دو كامپوننت TCPserver و TCPclient استفاده كردم، وقتي شروع ركورد رو ميزنيم ازمون يه IP ميگيره و از طريق TCPclient به اون كامپيوتر يه پيامي ميدم و كامپيوتر مقصد با ديدن اين پيغام شروع به ركورد كردن صدا ميكنه...
اما انگار كه نميكنه!!! چون وقتي به كامپيوتر مقصد دستور ذخيره رو ميدم توي مسير مورد نظرم پوشه رو ميسازه اما فايلي ذخيره نميكنه! تو ادامه سورس اين كار رو ميزارم، لطفا راهنمائيم كنيد، ممنون از لطفتون...
دستورات شروع به ركورد كردن صدا
mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mysound', nil, 0, Handle);
mciSendString('SET mysound TIME FORMAT MS ' +
'BITSPERSAMPLE 8 ' +
'CHANNELS 1 ' +
'SAMPLESPERSEC 8000 ' +
'BYTESPERSEC 8000',
nil, 0, Handle);
mciSendString('RECORD mysound', nil, 0, Handle);
دستورات مربوط به ذخيره كردن
if not DirectoryExists('c:\SoundRecord') then
CreateDir('c:\SoundRecord');
textSave:='C:\SoundRecord\SoundRecord.wav';
mciSendString(PChar('SAVE mysound ' + textSave), nil, 0, Handle);
mciSendString('STOP mysound', nil, 0, Handle);
mciSendString('CLOSE mysound', nil, 0, Handle);
وقتي رو شروع به ركورد كليك ميكنيم
IdTCPClient1.Host:=ComputerForm.Edit1.Text;
IdTCPClient1.Port:=8344;
IdTCPClient1.Connect();
IdTCPClient1.WriteLn('1');
IdTCPClient1.Disconnect;
وقتي روي استپ كليك ميكنيم
IdTCPClient1.Host:=ComputerForm.Edit1.Text;
IdTCPClient1.Port:=8344;
IdTCPClient1.Connect();
IdTCPClient1.WriteLn('2');
IdTCPClient1.Disconnect;
تو كامپيوتر مقصد پيام رو ميگيرم و اگه 1 بود ميگم شروع به ركورد كنه و اگه 2 بود ميگم استپ كنه و ذخيره كنه
نقل قول: (ضبط نكردن صدا) (هنگامي كه بهش ميگيم اين كار رو تو كامپيوتري با اين IP اجرا كنه)
نقل قول:
تو كامپيوتر مقصد پيام رو ميگيرم و اگه 1 بود ميگم شروع به ركورد كنه و اگه 2 بود ميگم استپ كنه و ذخيره كنه
این کد مهمترین قسمت کده.
اینو چی نوشتی؟
نقل قول: (ضبط نكردن صدا) (هنگامي كه بهش ميگيم اين كار رو تو كامپيوتري با اين IP اجرا كنه)
CommandText:=StrToInt(AThread.Connection.ReadLn()) ;
case CommandText of
1:
BTN1.Click;
2:
BTN2.Click;
end;
اگه يك بود اون دستور اولي
اگه دو بود دستور دومي
نقل قول: (ضبط نكردن صدا) (هنگامي كه بهش ميگيم اين كار رو تو كامپيوتري با اين IP اجرا كنه)
رويداد BTN1.ONclick
mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mysound', nil, 0, Handle);
mciSendString('SET mysound TIME FORMAT MS ' +
'BITSPERSAMPLE 8 ' +
'CHANNELS 1 ' +
'SAMPLESPERSEC 8000 ' +
'BYTESPERSEC 8000',
nil, 0, Handle);
mciSendString('RECORD mysound', nil, 0, Handle);
رويداد BTN2.ONclick
if not DirectoryExists('c:\SoundRecord') then
CreateDir('c:\SoundRecord');
textSave:='C:\SoundRecord\SoundRecord.wav';
mciSendString(PChar('SAVE mysound ' + textSave), nil, 0, Handle);
mciSendString('STOP mysound', nil, 0, Handle);
mciSendString('CLOSE mysound', nil, 0, Handle);
نقل قول: (ضبط نكردن صدا) (هنگامي كه بهش ميگيم اين كار رو تو كامپيوتري با اين IP اجرا كنه)
نقل قول:
CommandText:=StrToInt(AThread.Connection.ReadLn()) ;
case CommandText of
1:
BTN1.Click;
2:
BTN2.Click;
end;
چنتا نکته :
چون کامپوننت TCPServer برای هر کانکشن یه ترد میسازه ، شما نمیتونید به اشیا مین ترد در یه ترد جانبی دسترسی داشته باشید.
بهتره با یه SendMessage این پیغام رو به فرم اصلی برنامتون بفرستید و با یه مسیج هندلر (WndProc) پیغام رو مورد بررسی قرار بدید.
دوم اینکه روی اون سیستم کلاینتتون ، برید و ببینید به صورت لوکال این کار انجام میشه؟
شاید میکروفون رو نمیشناسه.
اولا از صحت شرایط رو کلاینت مطمئن بشید.
نقل قول: (ضبط نكردن صدا) (هنگامي كه بهش ميگيم اين كار رو تو كامپيوتري با اين IP اجرا كنه)
وقتي روي شروع ركورد كليك ميشه يه فرم ديگه ظاهر ميشه ميپرسه همين سيستم يا يه سيستم ديگه، اگه يه سيستم ديگه رو انتخاب كنه ip طرف رو ميده و ...
رو همون سيستم كار ميكنه.
نقل قول:
چون کامپوننت TCPServer برای هر کانکشن یه ترد میسازه ، شما نمیتونید به اشیا مین ترد در یه ترد جانبی دسترسی داشته باشید.
من با ترد اصلا كار نكردم و نميدونم چيه!!!
امكانش هست يه منبع يا تاپيكي معرفي كنيد كه برم از توش مطالعه كنم.
نقل قول: (ضبط نكردن صدا) (هنگامي كه بهش ميگيم اين كار رو تو كامپيوتري با اين IP اجرا كنه)
امكانش هست با همين سورسهايي كه نوشتم ضبط صدا تو يه كامپيوتر ديگه شدني باشه؟
تو لوكال درسته كار ميكنه كه!!!
نقل قول: (ضبط نكردن صدا) (هنگامي كه بهش ميگيم اين كار رو تو كامپيوتري با اين IP اجرا كنه)
نقل قول:
امكانش هست با همين سورسهايي كه نوشتم ضبط صدا تو يه كامپيوتر ديگه شدني باشه؟
بله شدنیه.
نقل قول:
تو لوكال درسته كار ميكنه كه!!!
اینم بله .
نقل قول: (ضبط نكردن صدا) (هنگامي كه بهش ميگيم اين كار رو تو كامپيوتري با اين IP اجرا كنه)
کد رو دیباگ کن ، اگر در مورد دیباگ کردن اطلاعاتی نداری تو همین سایت و گوگل جستجو کن ، Remote Debuging هم میتونه برای تست در شبکه کمکت کنه :
http://delphi.wikia.com/wiki/Remote_Debugger
http://docwiki.embarcadero.com/RADSt...mote_Debugging