تا اینجا ۲ قسمت از این مطلب رو گذروندیم و چیز های باحال و ساده رو با هم بررسی کردیم ...
توی این قسمت میخوایم در مورد اسکرین About و پکیج sound که داخل قسمت قبلی معرفیش کردیم و ازش استفاده کردیم صحبت کنیم.
اگر قسمت قبل رو نخوندی:
و همچنین ریپویی که در موردش صحبت میکنیم.
func AboutScreen(a fyne.App) fyne.CanvasObject { filePath, err := filepath.Abs("../Jami/assets/about.png") if err != nil { fmt.Println("ERR in read about.png ", err) } logo := canvas.NewImageFromFile(filePath) logo.SetMinSize(fyne.NewSize(390, 212)) return widget.NewVBox( widget.NewHBox(layout.NewSpacer(), logo, layout.NewSpacer()), widget.NewLabelWithStyle("Jami is not just a musical instrument", fyne.TextAlignCenter, fyne.TextStyle{Bold: false}), widget.NewHBox(layout.NewSpacer(), widget.NewHyperlink("github", parseURL("https://github.com/mehrdad-dev")), widget.NewLabel("-"), widget.NewHyperlink("contact", parseURL("http://www.mehrdad-dev.ir/contact-me/")), layout.NewSpacer(), ), )}
کد بالا تمام کدی هست که تابع AboutScreen داره.
اول از همه لوگو پروژه جامی رو باز کردیم و بعدش با استفاده از متد NewImageFromFile عکس رو اضافه میکنیم و سایزش رو تغییر میدیم.
از این جا تا آخر با استفاده از NewVBox یک باکس vertical یا همون عمودی رو برمیگردونیم.
که خود این باکس شامل یک باکس عرضی حاوی لوگو، یک لیبل زیر لوگو که با استفاده از متد NewLabelWithStyle ایجاد کردیم.
و دوباره ساخت یک باکس عرضی با استفاده از NewHBox که شامل ۲ تا هایپر لینک هست و با استفاده از NewHyperlink هم این دو رو ساختیم.
در نهایت یک فضای خالی هم بعد از همه باکس ها ایجاد میکنیم.
که در نهایت به چنین صفحه ای میرسیم.
خوب یادتونه که توی قسمت قبلی از این پکیج استفاده کردیم که شامل ۲ تا تابع هست.
که ابتدا تابع PlayNotes رو بررسی میکنیم.
// PlayNotes play a string of notes func PlayNotes(notes string) { music := beep.NewMusic("") volume := 100 if err := beep.OpenSoundDevice("default"); err != nil { log.Fatal(err) } if err := beep.InitSoundDevice(); err != nil { log.Fatal(err) } //beep.PrintSheet = true this is a comment ! defer beep.CloseSoundDevice() reader := bufio.NewReader(strings.NewReader(notes)) go music.Play(reader, volume) music.Wait() beep.FlushSoundBuffer() }
ابتدا با استفاده ازکتابخونه beep یک موزیک جدید رو ایجاد کردیم، که میتونه به عنوان یک فایل هم ذخیره بشه اگر بهش استرینگ خالی ندیم.
بعد از اون با استفاده از ۲ تابع OpenSoundDevice و InitSoundDevice از beep سخت افزار رو برای پخش نت هامون آماده کردیم، و با استفاده از Play که داخل یک goroutine اجرا شده و یک خواننده از بافر گرفته و میزان صدا که از متغیر volume میاد، نت هامون رو پخش میکنیم.
تابع SaveNotes هم دقیقا شبیه به تابع قبلیه اما فقط به جای استرینگ خالی NewMusic اسم فایل رو با پسوند wav قرار بدید.
ممنون از اینکه تا اینجا دنبال کردی :)))))))
اگر مطالب مفید بود اینجا میتونید حمایت کنید :)))