ورود

View Full Version : سوال: (ضبط نكردن صدا) (هنگامي كه بهش ميگيم اين كار رو تو كامپيوتري با اين IP اجرا كنه)



diamond_guilan
دوشنبه 23 بهمن 1391, 16:40 عصر
سلام و خسته نباشيد خدمت اساتيد محترم، وقت بخير
من يه برنامه ساده ضبط صدا از ميكروفن نوشتم، از طريق مثالهايي كه تو همين سايت بوده.
از دو كامپوننت 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 بود ميگم استپ كنه و ذخيره كنه

Mask
دوشنبه 23 بهمن 1391, 16:42 عصر
تو كامپيوتر مقصد پيام رو ميگيرم و اگه 1 بود ميگم شروع به ركورد كنه و اگه 2 بود ميگم استپ كنه و ذخيره كنه
این کد مهمترین قسمت کده.
اینو چی نوشتی؟

diamond_guilan
دوشنبه 23 بهمن 1391, 16:46 عصر
CommandText:=StrToInt(AThread.Connection.ReadLn()) ;
case CommandText of
1:
BTN1.Click;
2:
BTN2.Click;
end;

اگه يك بود اون دستور اولي
اگه دو بود دستور دومي

diamond_guilan
دوشنبه 23 بهمن 1391, 16:50 عصر
رويداد 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);

Mask
دوشنبه 23 بهمن 1391, 16:59 عصر
CommandText:=StrToInt(AThread.Connection.ReadLn()) ;
case CommandText of
1:
BTN1.Click;
2:
BTN2.Click;
end;
چنتا نکته :
چون کامپوننت TCPServer برای هر کانکشن یه ترد میسازه ، شما نمیتونید به اشیا مین ترد در یه ترد جانبی دسترسی داشته باشید.
بهتره با یه SendMessage این پیغام رو به فرم اصلی برنامتون بفرستید و با یه مسیج هندلر (WndProc) پیغام رو مورد بررسی قرار بدید.
دوم اینکه روی اون سیستم کلاینتتون ، برید و ببینید به صورت لوکال این کار انجام میشه؟
شاید میکروفون رو نمیشناسه.
اولا از صحت شرایط رو کلاینت مطمئن بشید.

diamond_guilan
دوشنبه 23 بهمن 1391, 17:04 عصر
وقتي روي شروع ركورد كليك ميشه يه فرم ديگه ظاهر ميشه ميپرسه همين سيستم يا يه سيستم ديگه، اگه يه سيستم ديگه رو انتخاب كنه ip طرف رو ميده و ...
رو همون سيستم كار ميكنه.



چون کامپوننت TCPServer برای هر کانکشن یه ترد میسازه ، شما نمیتونید به اشیا مین ترد در یه ترد جانبی دسترسی داشته باشید.


من با ترد اصلا كار نكردم و نميدونم چيه!!!
امكانش هست يه منبع يا تاپيكي معرفي كنيد كه برم از توش مطالعه كنم.

diamond_guilan
دوشنبه 23 بهمن 1391, 17:13 عصر
امكانش هست با همين سورسهايي كه نوشتم ضبط صدا تو يه كامپيوتر ديگه شدني باشه؟
تو لوكال درسته كار ميكنه كه!!!

Mask
دوشنبه 23 بهمن 1391, 18:50 عصر
امكانش هست با همين سورسهايي كه نوشتم ضبط صدا تو يه كامپيوتر ديگه شدني باشه؟
بله شدنیه.

تو لوكال درسته كار ميكنه كه!!!
اینم بله .

Felony
پنج شنبه 26 بهمن 1391, 10:54 صبح
کد رو دیباگ کن ، اگر در مورد دیباگ کردن اطلاعاتی نداری تو همین سایت و گوگل جستجو کن ، Remote Debuging هم میتونه برای تست در شبکه کمکت کنه :

http://delphi.wikia.com/wiki/Remote_Debugger
http://docwiki.embarcadero.com/RADStudio/XE3/en/Overview_of_Remote_Debugging