رفتن به مطلب
  • 0

هایلایت شدن متن همراه با پخش صدا


fariman69

سوال

سلام به مهندسین عزیز

سوالی دارم

من میخوام نرم افزاری بسازم که یک متن داشته باشه و صوتش هم همزمان پخش بشه.

مثل نرم افزار های ادعیه که در بازار هست.

متن دعا تو صفحه به صورت خط به خط نشون داده شده و با زدن دکمه پخش صدا پخش میشه.هر قسمت از متن که خونده میشه همزمان اون خط از متن هایلایت و رنگی میشه.خط به خط میاد پایین.

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

خودم یه حدسایی زدم ولی موفق نشدم.

نمونه رو در عکس پیوست نشون دادم.

خیلی مهمه

post-5891-0-20777300-1469707881_thumb.png

لینک ارسال
به اشتراک گذاری در سایت های دیگر

11 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

با سلام
منم همین مشکل داشتم خیلی هم گشتم پیداش نکردم
تو همین انجمن هم پرسیدم ولی کسی جواب نداد ولی آخر خودم با روش خودم درست کردم،الان کدشو مینویسیم امیدوارم خوب باشه

 

اما راه حل من 

 

قبل از هرچیزی از یک CustomListView استفاده کردم و متنمو تو اون ریختم (اگه استفاده از CustomListView رو بلد نیستید بگید بزارم)

Dim lv_custom As CustomListView 

سپس یک متغیر  از جنس رشته به اسم time تعریف کردم

Dim time As String
time="0@16@32@54@68"

0،16،32،54،68  زمانی است که باید متن بعدی هایلات شود در اصل من نشستم آهنگو گوش دادم وزمانی که خط بعدو میخوند رو بر حسب ثانیه نوشتم و اونا رو با @ جدا کردم.سپس یه آرایه از جنس رشته به اسم value تعریف کردم مغادیر آن را با دستور Regex.Split برابر با ثانیه های که نوشتم گذاشتم.

Dim values() As String
values= Regex.Split("@",time)

سپس یک متغییر به timer1 از فهئثق ساختم و اونو Initialize کردم.

Dim timer1 As Timer
timer1.Initialize("timer1",1000)

بعد به رویداد کلیک دکمه play گفتم timer1 رو فعال کنه ، بعد کار اصلی اینجا بود که باید متن هایلات میشد ، روشم این بود که یه متغیر از جنس رشته به اسم t نوشتم و اونو مساوی با 0 گذاشتم.

Dim t=0 As String

بعدش تو رویداد Tick  متغیر timer 1 کدهای پایینو نوشتم.

Sub timer1_Tick
	
	If t=values(0) Then 

		lv_custom.GetPanel(0).Color=Colors.RGB(0,188,212)	
	Else
		For i=1 To values.Length-1
 			If t=values(i) Then
				
				lv_custom.GetPanel(i).Color=Colors.RGB(0,188,212)
				lv_custom.JumpToItem(i)
				lv_custom.GetPanel(i-1).Color=Colors.White
					
			End If 
	    	Next
	End If

	t=t+1
End Sub

کاری که در این رویداد کردم این بود در هنگام tick  در خط اول میگه اگه t که مساوی 0 است با اندیس صفرم آرایه values که اونم ما مساوی با 0 گذاشتیم برابر بود بیاد lv_custom.GetPanel(0) که همان خط اول ما است رو رنگشو هایلات کنه درغیر اینصورت بیاد یه حلقه for تعریف کنه از i=1 تا values.Length-1 و بیاد بگه هر موقع که t مساوی با یکی از اندیس های   values بود درست برابر با همون اندیس بیاد همون خطو هایلات کنه سپس jump کنه به اون خط بعدشم خط قبلو از هایلاتی در بیاره و بعد از شرطو حلقه میاد بیرون و به t یدونه اضافه میکنه. همین

حالا دیگه میتونید کارا دیگه هم کنید مثلا اگه آهنگ تموم شد چیکار کنه یا کارای دیگه

راستی حتما برای دکمه stop یا pause تعریف کنید که timer متوقف شود

لینک ارسال
به اشتراک گذاری در سایت های دیگر

درود

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

اما در مورد روش این برنامه میتونه روش های مختلفی باشه ...

1- فایل صوتی رو پارت پارت کرده باشن و هر پارت که رد میشه یک خط هایلایت بشه

2- یک تایمر مشخص شده باشه مثلا 5 ثاینه... هر 5 ثانیه خط بعدی هایلایت بشه

3-...

 

بسته به روش برنامه نویس داره

این کارها سلیقه ای هستش

 

لطفا میشه بیشتر توضیح بدین همراه با کد نویسی

خیلی مهمه برام

در مورد راه دوم بیشتر

نمیدونم چجوری برای تایمر شرط بزارم.اخه اینطور نیست که هر 5 ثانیه یا هر10 ثانیه یه متن هایلایت بشه.ممکنه یه قسمت 5 ثانیه طول بکشه خوندش یه قسمت 15 ثانیه.باید شرط گذاشت براش فکر کنم.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ببینید شما هایلایت متن رو اگه بلد باشید کارتون انجام شده حسابه

برای تایمر هم قرار نیست شرط خاصی بزارید

فقط کد هایلایت رو توی تایمر تیک قرار بدید و خلاص

 

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

با سلام

منم همین مشکل داشتم خیلی هم گشتم پیداش نکردم

تو همین انجمن هم پرسیدم ولی کسی جواب نداد ولی آخر خودم با روش خودم درست کردم،الان کدشو مینویسیم امیدوارم خوب باشه

 

اما راه حل من 

 

قبل از هرچیزی از یک CustomListView استفاده کردم و متنمو تو اون ریختم (اگه استفاده از CustomListView رو بلد نیستید بگید بزارم)

Dim lv_custom As CustomListView 

سپس یک متغیر  از جنس رشته به اسم time تعریف کردم

Dim time As String
time="0@16@32@54@68"

0،16،32،54،68  زمانی است که باید متن بعدی هایلات شود در اصل من نشستم آهنگو گوش دادم وزمانی که خط بعدو میخوند رو بر حسب ثانیه نوشتم و اونا رو با @ جدا کردم.سپس یه آرایه از جنس رشته به اسم value تعریف کردم مغادیر آن را با دستور Regex.Split برابر با ثانیه های که نوشتم گذاشتم.

Dim values() As String
values= Regex.Split("@",time)

سپس یک متغییر به timer1 از فهئثق ساختم و اونو Initialize کردم.

Dim timer1 As Timer
timer1.Initialize("timer1",1000)

بعد به رویداد کلیک دکمه play گفتم timer1 رو فعال کنه ، بعد کار اصلی اینجا بود که باید متن هایلات میشد ، روشم این بود که یه متغیر از جنس رشته به اسم t نوشتم و اونو مساوی با 0 گذاشتم.

Dim t=0 As String

بعدش تو رویداد Tick  متغیر timer 1 کدهای پایینو نوشتم.

Sub timer1_Tick
	
	If t=values(0) Then 

		lv_custom.GetPanel(0).Color=Colors.RGB(0,188,212)	
	Else
		For i=1 To values.Length-1
 			If t=values(i) Then
				
				lv_custom.GetPanel(i).Color=Colors.RGB(0,188,212)
				lv_custom.JumpToItem(i)
				lv_custom.GetPanel(i-1).Color=Colors.White
					
			End If 
	    	Next
	End If

	t=t+1
End Sub

کاری که در این رویداد کردم این بود در هنگام tick  در خط اول میگه اگه t که مساوی 0 است با اندیس صفرم آرایه values که اونم ما مساوی با 0 گذاشتیم برابر بود بیاد lv_custom.GetPanel(0) که همان خط اول ما است رو رنگشو هایلات کنه درغیر اینصورت بیاد یه حلقه for تعریف کنه از i=1 تا values.Length-1 و بیاد بگه هر موقع که t مساوی با یکی از اندیس های   values بود درست برابر با همون اندیس بیاد همون خطو هایلات کنه سپس jump کنه به اون خط بعدشم خط قبلو از هایلاتی در بیاره و بعد از شرطو حلقه میاد بیرون و به t یدونه اضافه میکنه. همین

حالا دیگه میتونید کارا دیگه هم کنید مثلا اگه آهنگ تموم شد چیکار کنه یا کارای دیگه

راستی حتما برای دکمه stop یا pause تعریف کنید که timer متوقف شود

احسنت.دمت گرم داداش.عالی بود.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ببینید شما هایلایت متن رو اگه بلد باشید کارتون انجام شده حسابه

برای تایمر هم قرار نیست شرط خاصی بزارید

فقط کد هایلایت رو توی تایمر تیک قرار بدید و خلاص

 

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

عکس پیوست رو ببینید لطفا

با زدن دکمه سمت چپ انتظار دارم که رنگ لیبل عوض بشه و یکی از دکمه مخفی بشه.ولی چنین اتفاقی نمیوفته.به نظر شما مشکل کجاس.

 

x8vs_untitled.png

لینک ارسال
به اشتراک گذاری در سایت های دیگر

شما timer تعریف کردید ولی اصلا enabled = true نکردید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

چرا دیگه.تو رویداد کلیک دکمه start 

بله درسته

Internal رو چرا زدید 1 ؟

1 یعنی یک هزارم ثانیه

هر 1000 interval برابر 1 ثانیه هستش

شما اگر به جای 1 بنویسید 1000 تازه میشه 1 ثانیه.

1 رو که زدید برنامه به محض start کردن هنگ میکنه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بله درسته

Internal رو چرا زدید 1 ؟

1 یعنی یک هزارم ثانیه

هر 1000 interval برابر 1 ثانیه هستش

شما اگر به جای 1 بنویسید 1000 تازه میشه 1 ثانیه.

1 رو که زدید برنامه به محض start کردن هنگ میکنه

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

درود

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

اما در مورد روش این برنامه میتونه روش های مختلفی باشه ...

1- فایل صوتی رو پارت پارت کرده باشن و هر پارت که رد میشه یک خط هایلایت بشه

2- یک تایمر مشخص شده باشه مثلا 5 ثاینه... هر 5 ثانیه خط بعدی هایلایت بشه

3-...

 

بسته به روش برنامه نویس داره

این کارها سلیقه ای هستش

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...