PDA

View Full Version : سوال: کامپوننتی برای پخش صوتی اعداد



nice boy
پنج شنبه 16 دی 1389, 09:10 صبح
آیا کامپوننتی برای پخش صوتی اعداد وجود داره؟
مثلا یک عدد رو به عنوان ورودی بگیره و بتونه جداسازی و پخش کنه.
البته مهم الگوریتم جدا سازی اعداد هست و قسمت پخش صوت که با API قابل انجامه
اگه کسی از دوستان سراغ داره لطفا معرفی کنه.

Touska
پنج شنبه 16 دی 1389, 10:04 صبح
اگر انگلیسی بخواهید خود SPeech مایکروسافت هست ، اگر فارسی باید خودتون طراحی کنید ،

ولی قبلا یکی از بچه های سایت یک همچین کار انجام داده بود ، یک جسجتجو بکنید و با هاش تماس بگیرید.

gbg
پنج شنبه 16 دی 1389, 10:49 صبح
جدا سازی که کاری نداره
با یه for جداش کن بره دیگه

mohsen24000
پنج شنبه 16 دی 1389, 14:32 عصر
اگه میخوایی اعداد را تک تک بخونه یه بحثی و اگر میخوایی همونطور که هست برمبنای ده بخونه باید از شماره 1تا20 و 20تا100 ده تا ده تا و 100تا1000 صدتا صدتا اعداد رو تلفظ کنی و هر کدوم رو مجزا در فایل ضبط کنی اونوقت با یه الگوریتم خیلی ساده مقدار عدد رو به فراخور موقعیت مکانی اون فایلهات رو پشت سرهم فراخوانی کنی...
اگه خواستی برات الگوریتمی که جدا سازی میکنه رو برات بنویسم...:متفکر:

nice boy
پنج شنبه 16 دی 1389, 15:26 عصر
جدا سازی که کاری نداره
با یه for جداش کن بره دیگه

از دوستان خواهش می کنم حداقل خودشون یکبار امتحان کنن بعد جواب بدن.
من خودم سالهاست دارم برنامه نویسی می کنم هیچ وقت سوالی رو که جوابش یک حلقه For ساده باشه توی این سایت مطرح نمی کنم


اگه میخوایی اعداد را تک تک بخونه یه بحثی
این که کاری نداره!!!


اگر میخوایی همونطور که هست برمبنای ده بخونه باید از شماره 1تا20 و 20تا100 ده تا ده تا و 100تا1000 صدتا صدتا اعداد رو تلفظ کنی و هر کدوم رو مجزا در فایل ضبط کنی اونوقت با یه الگوریتم خیلی ساده مقدار عدد رو به فراخور موقعیت مکانی اون فایلهات رو پشت سرهم فراخوانی کنی...
انقدر هم ساده نیست. مثلا عدد 30025 رو میشه به صورت سیصد - بیست و پنج خوند یعنی سه رقم اول رو یک تکه و دو رقم بعدی رو یه تکه دیگه بگیریم
ولی عدد 30001 رو نمشه به این صورت جدا کرد (01-300) و یا (1-3000) چون موقع خوندن با عدد سه هزار و یک اشتباه میشه. در نتیجه الگوریتم باید براساس تعداد ارقام و موقعیت قرار گرفتن صفر درست تصمیم گیری کنه.


اگه خواستی برات الگوریتمی که جدا سازی میکنه رو برات بنویسم
اگه لطف کنید کدش رو اینجا بزارید همه می تونن استفاده کنن

mohsen24000
پنج شنبه 16 دی 1389, 17:08 عصر
کد زیر 6504203 رو به عبارت شش میلیون و پانصد و چهار هزار و دویست و سه تبدیل می کنه... حالا شما رشته رو pars کن و فایل صوتی متناظر اون رو پخش کن...:بامزه:


function mmm2text(n:integer):string;
begin
case n of
1:result:='یک';
2:result:='دو';
3:result:='Óå';
4:result:='åÇÑ';
5:result:='äÌ';
6:result:='ÔÔ';
7:result:='åÝÊ';
8:result:='åÔÊ';
9:result:='äå';
10:result:='Ïå';
11:result:='íÇÒÏå';
12:result:='ÏæÇÒÏå';
13:result:='ÓíÒÏå';
14:result:='åÇÑÏå';
15:result:='ÇäÒÏå';
16:result:='ÔÇäÒÏå';
17:result:='åÝÏå';
18:result:='åÌÏå';
19:result:='äæÒÏå';
20:result:='ÈíÓÊ';
30:result:='Óí';
40:result:='åá';
50:result:='äÌÇå';
60:result:='ÔÕÊ';
70:result:='åÝÊÇÏ';
80:result:='åÔÊÇÏ';
90:result:='äæÏ';
100:result:='íßÕÏ';
200:result:='ÏæíÓÊ';
300:result:='ÓíÕÏ';
400:result:='åÇÑÕÏ';
500:result:='ÇäÕÏ';
600:result:='ÔÔÕÏ';
700:result:='åÝÊÕÏ';
800:result:='åÔÊÕÏ';
900:result:='äåÕÏ';
end;
end;

function m2text(n:longint):string;
var s,s1,s2,s3:string;
nt,nt1:integer;
begin
nt:=n div 1000000;
if nt>0 then begin
nt1:=nt div 100;
if nt1>0 then s1:=s1+mmm2text(nt1*100);
nt1:=(nt mod 100);
if nt1>0 then begin
if nt1<20 then begin
if s1<>'' then s1:=s1+' æ ';
s1:=s1+mmm2text(nt1);
end else begin
if s1<>'' then s1:=s1+' æ ';
s1:=s1+mmm2text((nt1 div 10)*10);
if (nt1 mod 10)>0 then begin
if s1<>'' then s1:=s1+' æ ';
s1:=s1+mmm2text(nt1 mod 10);
end;
end;
end;
s:=s1+' '+'ãíáíæä';
end;
//
nt:=(n mod 1000000)div 1000;
if nt>0 then begin
if s<>'' then s:=s+' æ ';
nt1:=nt div 100;
if nt1>0 then s2:=s2+mmm2text(nt1*100);
nt1:=(nt mod 100);
if nt1>0 then begin
if nt1<20 then begin
if s2<>'' then s2:=s2+' æ ';
s2:=s2+mmm2text(nt1);
end else begin
if s2<>'' then s2:=s2+' æ ';
s2:=s2+mmm2text((nt1 div 10)*10);
if (nt1 mod 10)>0 then begin
if s2<>'' then s2:=s2+' æ ';
s2:=s2+mmm2text(nt1 mod 10);
end;
end;
end;
s:=s+s2+' '+'åÒÇÑ';
end;
//
nt:=(n mod 1000);
if nt>0 then begin
if s<>'' then s:=s+' æ ';
nt1:=nt div 100;
if nt1>0 then s3:=s3+mmm2text(nt1*100);
nt1:=(nt mod 100);
if nt1>0 then begin
if nt1<20 then begin
if s3<>'' then s3:=s3+' æ ';
s3:=s3+mmm2text(nt1);
end else begin
if s1<>'' then s3:=s3+' æ ';
s3:=s3+mmm2text((nt1 div 10)*10);
if (nt1 mod 10)>0 then begin
if s3<>'' then s3:=s3+' æ ';
s3:=s3+mmm2text(nt1 mod 10);
end;
end;
end;
s:=s+s3;
end;
//
result:=s;
end;
procedure Tform1.btnClick(Sender: TObject);
begin
lable1.Caption:=m2text(trunc(edit1.value));
end;

gbg
شنبه 18 دی 1389, 11:03 صبح
دقیقه به همون راحتی که گفتم و فقط یه راهنمایی و اون اینکه اگه عدد رو ابتدا برعکس کنی محاسبش راحت تره :چشمک:
این کامپوننت رو قبلا نوشتم شبیه برنامه شماست پس دقیقا می دونم چی دارم میگم
http://barnamenevis.org/showthread.php?96096-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D8%B9%D8%AF%D8%AF-%D8%A8%D9%87-%D8%AD%D8%B1%D9%88%D9%81&highlight=