
سلام دوستان
امروز به درخواست یکی از دوستان اموزش ساخت موزیک پلیر رو آماده کردم
البته این نکته رو بگم این آموزش یکی از اموش های خود سایت اصلی b4a هسته و من فقط ترجمه کردم + کمی تغییرات برای درک بهتر
ویژگی های خوب این سورس کد که میتونید ازش استفاده کنید :
۱- استفاده از seekbar برای تغییر صدا و عقب جلو کردن موزیک به وسیله کاربر
۲- استفاده از تایمر
۳- قابلت تکرار دوباره اهنگ پس از اتمام
۴- نشان دادن زمان آهنگ
ابتدا به کل کد های این سورس کد دقت کنید تا توضیحات لازم به شما داده بشه
Sub Process_Globals
Dim MediaPlayer1 As MediaPlayer
Dim timer1 As Timer
End Sub
Sub Globals
Dim barPosition As SeekBar
Dim barVolume As SeekBar
Dim lblPosition As Label
Dim Looping As ToggleButton
End Sub
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
MediaPlayer1.Initialize( )
MediaPlayer1.Load(File.DirAssets, "IsawHerStandingThere.mid")
timer1.Initialize("timer1", 1000)
End If
Activity.LoadLayout("1")
Looping_CheckedChange(Looping.Checked) 'set the default value
End Sub
Sub Activity_Resume
MediaPlayer1.Play
timer1.Enabled = True
timer1_Tick 'don't wait one second for the UI to update.
End Sub
Sub Activity_Pause (UserClosed As Boolean)
If MediaPlayer1.IsPlaying Then MediaPlayer1.Pause
timer1.Enabled = False
End Sub
Sub timer1_Tick
If MediaPlayer1.IsPlaying Then
barPosition.Value = MediaPlayer1.Position / MediaPlayer1.Duration * 100
lblPosition.Text = "Position: " & ConvertToTimeFormat(MediaPlayer1.Position) & _
" (" & ConvertToTimeFormat(MediaPlayer1.Duration) & ")"
End If
End Sub
'converts milliseconds to m:ss format.
Sub ConvertToTimeFormat(ms As Int) As String
Dim seconds, minutes As Int
seconds = Round(ms / 1000)
minutes = Floor(seconds / 60)
seconds = seconds Mod 60
Return NumberFormat(minutes, 1, 0) & ":" & NumberFormat(seconds, 2, 0) 'ex: 3:05
End Sub
Sub barVolume_ValueChanged (Value As Int, UserChanged As Boolean)
MediaPlayer1.SetVolume(barVolume.Value / 100, barVolume.Value / 100)
End Sub
Sub barPosition_ValueChanged (Value As Int, UserChanged As Boolean)
If UserChanged = False Then Return 'the value was changed programmatically
MediaPlayer1.Position = Value / 100 * MediaPlayer1.Duration
If MediaPlayer1.IsPlaying = False Then 'this can happen when the playback reached the end and the user changes the position
MediaPlayer1.Play
End If
timer1_Tick 'immediately update the progress label
End Sub
Sub Looping_CheckedChange(Checked As Boolean)
MediaPlayer1.Looping = Checked
End Sub
در این قسمت زیر ابتدا کنترل میکنیم که بار اول است که برنامه روی دستگاه کاربر اجرا شده است یا خیر؟
If FirstTime Then
MediaPlayer1.Initialize( )
MediaPlayer1.Load(File.DirAssets, "IsawHerStandingThere.mid")
Timer1.Initialize("timer1", ۱۰۰۰)
End If
Activity.LoadLayout("1")
Looping_CheckedChange(Looping.Checked) 'set the default value
که اگر اولین دفعه اجراست کد های خط ۳-۴-۵ اجرا میشوند
قطعه کد خط ۸ نیز ، پیشفرض تکرار آهنگ رو بر روی تکرار قرار میده.
قطعه کد زیر نیز ، هر ۱ ثانیه یک بار ، زمان اهنگ و همینطور مکان اهنگ(مثلا قانیه ی ۲۰ پخش بشه)رو بروز رسانی میکنه
Sub timer1_Tick
If MediaPlayer1.IsPlaying Then
barPosition.Value = MediaPlayer1.Position / MediaPlayer1.Duration * 100
lblPosition.Text = "Position: " & ConvertToTimeFormat(MediaPlayer1.Position) & _
" (" & ConvertToTimeFormat(MediaPlayer1.Duration) & ")"
End If
End Sub
در بیسیک فور اندروید زمان بر حسب میلی ثانیه هست. پس:
کد زیر زمان پخش رو از میلی ثانیه به ثانیه و سپس به دقیقه تبدیل میکنه
Sub ConvertToTimeFormat(ms As Int) As String
Dim seconds, minutes As Int
seconds = Round(ms / 1000)
minutes = Floor(seconds / 60)
seconds = seconds Mod 60
Return NumberFormat(minutes, 1, 0) & ":" & NumberFormat(seconds, 2, 0) 'ex: 3:05
End Sub
برای تغییر صدا هم از کد زیر استفاده میکنیم :
Sub barVolume_ValueChanged (Value As Int, UserChanged As Boolean)
MediaPlayer1.SetVolume(barVolume.Value / 100, barVolume.Value / 100)
End Sub
دقت کنید که صدا در بیسیک فور اندروید حتما باید مقداری بین ۰ تا ۱ باشه. به همین دلیل مقداری رو که از Seekbar میگیره ، تقسیم بر ۱۰۰ میکنه.
یکی از مهم ترین قسمت های این سورس کد، استفاده از seekbar جهت عقب و جلو بردن موریک هست که قطعه کد زیر، این کار رو انجام میده.
Sub barPosition_ValueChanged (Value As Int, UserChanged As Boolean)
If UserChanged = False Then Return 'the value was changed programmatically
MediaPlayer1.Position = Value / 100 * MediaPlayer1.Duration
If MediaPlayer1.IsPlaying = False Then 'this can happen when the playback reached the end and the user changes the position
MediaPlayer1.Play
End If
timer1_Tick 'immediately update the progress label
End Sub
در خط دوم ، شرط میکنه که اگه کاربر مقدار seek bar رو تغییر نداد(چون سیک بار هر ثانیه به جلو حرکت میکنه)، برنامه به کارش ادامه بده
در خط سوم، مقداری رو که کاربر تغییر میده تقسیم بر ۱۰۰ میکنه و در Seek bar اجرا میکنه(عقب و جلو میکنه)
در خط ۴-۵-۶ شرط میکنه که اگه موزیک در حال پخش نبود، و کاربر مقدار رو تغغیر داد، موزشک رو پخش کن
خط هفتم هم ، ساب timer_Tick رو صدا میزنه و مقدار سیک بار و لیبل رو به روز میکنه
دوستان امیدوارم که این سورس کد براتون مفید باشه
سوالاتتون رو در بخش نظرات بپرسید.
موفق باشید
مطالب وب سایت Dev-Iran :
کپی و رایت مطلب به تیم Dev-Iran.ir باز میگردد که در حال حاضر صاحب امتیاز این وب سایت گروه اوکسو می باشد.
حامد
9 بهمن 1395سلام سایتتون عالی ولی نمیشه هیچی دانلود کرد
پاسخ شما
alies
9 بهمن 1395سلام هر کدوم از مطالب که نمیتونید دانلود کنید رو برامون لینکش رو ایمیل کنید تا برطرف کنیم مشکلش رو . ممنون که اطلاع میدید.