Table of Contents
ساخت یک بازیکن موسیقی سفارشی با کیفیت بالا برای iOS
توسعه یک پخش موسیقی سفارشی برای iOS بسیار فراتر از بسته بندی (FLT:0) در یک دکمه بازی است. کاربران انتظار پخش پس زمینه یکپارچه، غنی در حال حاضر بازی ادغام، پشتیبانی AirPlay و کنترل های پاسخگو که احساس بومی است، این راهنمای شما را از طریق ایجاد یک پخش موسیقی آماده با کنترل پیشرفته با استفاده از Swift، UIKit، و چارچوب های مدرن مانند F.1، ما می توانیم طراحی از راه دور، و کنترل برنامه را پوشش دهیم، مدیریت می کند، و اجرای برنامه، مدیریت فایل های صوتی، مدیریت می تواند شما را کنترل کند.
معماری اصلی: Leveraging AVFoundation
هر بازیکن موسیقی سفارشی در iOS با شروع می شود کلاس های اصلی بازیکن (برای جریان و فایل های محلی) و (برای پخش صوتی محلی ساده تر) برای یک بازیکن کامل، [FLT3][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۲][۳][۳][۳][۳][۳][۳][۳][۳][۳][۲][۲][۳][۳][۲][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۳][۲][۲][۲][۲][۳][۳][۲][۲][۲][۲][۲][۳][
دانلود بازی The Player Asnce
یک تکتون یا کلاس خدمات ایجاد کنید که نمونه (FLT:4) را در خود جای می دهد، این حالت پخش مداوم را در سراسر کنترل کننده های دید تضمین می کند.
import AVFoundation
class MusicPlayerManager {
static let shared = MusicPlayerManager()
let player: AVPlayer
private init() {
player = AVPlayer()
configureAudioSession()
}
func play(url: URL) {
let item = AVPlayerItem(url: url)
player.replaceCurrentItem(with: item)
player.play()
}
}
همیشه دسته ی جلسه ی صوتی را تنظیم کنید تا (FLT:0) را به برگردانید تا بازیکن به کار خود ادامه دهد، زمانی که تلفن قفل شده یا در حالت خاموش باشد، این برای هر برنامه موسیقی اجباری است.
مدیریت دولت های بازیکن
از KVO (X-Value) در [FLT-7] و استفاده کنید تا به تغییرات دولتی واکنش نشان دهید (بازی، توقف، انتظار شبکه)
طراحی رابط کاربری با SwiftUI
در حالی که UIKit بالغ است، SwiftUI ارائه می دهد سرعت و یک ترکیب توصیفی برای UI های پخش موسیقی است. ایجاد یک طرح تمیز با هنر آلبوم، ردیابی اطلاعات، پیشرفت، لغزنده، کنترل حجم و دکمه های پخش.
Key UI
- [FLT: 12] [که] یک نمایش هنری را از یک URL از راه دور یا دارایی محلی پوشش می دهد.
- ]Track و نام هنرمند - متن پویا که از طریق [FLT13 ] به روز رسانی می شود، خواص در مدل دید شما.
- [[۱] [۱۰] [۱۰] [۱۰] [۱]] [۱]] [۱۰]] [۱] [۳]] [۳] [۱]] [۱]] [۱] [۱۰] [۱]] [۱۰] [۱]] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [بر [بر روی [بر روی [بر روی [بر روی [بر روی پوست و رنگ های [بر روی پوست] [بر روی پوست] قرار گرفت.
- (فَلَهُمَهُمَهُوا بِنَهُمَهُمَهُمَهُمَهُمَهُوا مِنَهُمَهُمَهُمَهُوا بِهَهَهُمَهُمَهُمَهُمَهُمَهُمَهُمَهُمَهُمَهُوا مَهُوا مَهُمَهُوا مِهُوا مَهُوا مَهُمَهُمَهُمَهُمَهُمَهُوا مَهُمَهُوَهُمَهُمَهُوا مَهُمَهُوا مَهُمَهُمَهُمَهُمَهُوا مَهُمَهُمَهُمَهُوَهُمَهُوَهُوَهُمَهُوَهُوَهُوَهُم
- [در این میان]، [به صورت مستقیم]، [به صورت مستقیم]، [به صورت مستقیم]، [به صورت مستقیم]، با بازخوردهای ضعیف در تماس، به جلو، دکمه های پشت سر بزنید.
از یک برای انطباق با اندازه های مختلف صفحه نمایش استفاده کنید، به ویژه برای هنر آلبوم که باید به خوبی در iPads مقیاس.
اتصال UI به بازیکن
مدل دید خود را مطابق با [FLT 18] و انتشار مسیر فعلی، زمان پخش و بازی حالت مشاهده کنید.
class PlayerViewModel: ObservableObject {
@Published var currentTime: TimeInterval = 0
@Published var isPlaying = false
@Published var currentTrack: Track?
// … bindings to MusicPlayerManager
}
استفاده از [[FLT 20|3|و|FLT:21|و یا ناظر زمان دوره ای برای به روز رسانی (FLT 22)
یکپارچه سازی کنترل از راه دور و حالا بازی Info
یک بازیکن حرفه ای موسیقی باید به رویدادهای کنترل از راه دور (صفحه قفل، مرکز کنترل، Apple Watch، AirPods) و نمایش "حالا بازی" اطلاعات، این کار را از طریق MPNowPlayinginfoCenter [FLT 1] و MPRemoteCommandCenter انجام می دهد.
راه اندازی Commands Remote
در [FLT23] یا مدیر بازیکن خود، مرکز فرماندهی از راه دور را پس از جلسه صوتی فعال کنید:
import MediaPlayer
func setupRemoteCommands() {
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.playCommand.addTarget { [weak self] _ in
self?.player.play()
return .success
}
commandCenter.pauseCommand.addTarget { [weak self] _ in
self?.player.pause()
return .success
}
commandCenter.nextTrackCommand.addTarget { [weak self] _ in
self?.skipToNext()
return .success
}
commandCenter.previousTrackCommand.addTarget { [weak self] _ in
self?.skipToPrevious()
return .success
}
commandCenter.changePlaybackPositionCommand.addTarget { [weak self] event in
guard let event = event as? MPChangePlaybackPositionCommandEvent else { return .commandFailed }
self?.player.seek(to: CMTime(seconds: event.positionTime, preferredTimescale: 1000))
return .success
}
}
گزینه های پس زمینه در پروژه Xcode خود را: انتخاب هدف، رفتن به ثبت نام و قابلیت ها، اضافه کردن "حالت های پیش زمینه" و بررسی "Audio، AirPlay و تصویر در تصویر".
دانلود بازی Now Play Info
هر بار که تغییر یا پخش به روز رسانی وضعیت، با یک فرهنگ لغت حاوی کلید هایی مانند [FLT 26] تماس بگیرید، ، ، [FLT 29 ] و برای آثار هنری، تبدیل خود را [FLT 31]
مدیریت زمینه صوتی با جلسات صوتی
جلسه صوتی را یک بار در راه اندازی کنید:
func configureAudioSession() {
do {
let session = AVAudioSession.sharedInstance()
try session.setCategory(.playback, mode: .default, policy: .longFormAudio)
try session.setActive(true)
} catch {
print("Failed to set audio session: \(error)")
}
}
برای برنامه هایی که همچنین ضبط یا استفاده از صدا، مراقب باشید با دسته بندی. پخش کنندگان موسیقی باید تقریبا همیشه از (FLT:34) استفاده کنند تا اطمینان حاصل شود که صدا در پس زمینه آزمایش می شود: قفل صفحه نمایش و تأیید پخش ادامه دارد؛ مرکز کنترل باید کارت "اکنون بازی" خود را نشان دهد.
پیاده سازی کنترل های پیشرفته: برابر سازی، Playlists و AirPlay
هنگامی که اصول کار می کنند، بازیکن خود را با ویژگی های پیشرفته متمایز کنید.
سازنده : Equalizer
از برای استفاده از یک باند 10 یا مساوی سفارشی استفاده کنید، این نیاز به جایگزینی (FLT:37) با یک رویکرد مبتنی بر موتور یا اتصال یک [FLT 38] به موتور دارد.
مدیریت بازی
فروشگاه های موجود در داده های Core یا SwiftData هر لیست لیست شامل لیست سفارش شده از URL های ردیابی (محلی یا دور) است که قابلیت بارگیری و بازیابی را در یک برنامه (FLT:40) یا (FLT:41) پشتیبانی از دانلود آفلاین با استفاده از پیکربندی پس زمینه: دانلود پس زمینه پس زمینه پس زمینه پس از آن ادامه می دهد.
AirPlay و دستگاه های خارجی
به طور خودکار از AirPlay پشتیبانی می کند، زمانی که جلسه صوتی برای تنظیم شده است و مسیر در دسترس است.برای کنترل دقیق دانه، استفاده از را انتخاب کننده مسیر یا (iOS 11، ارائه یک اسباب بازی برای پخش محلی تنها در صورت نیاز.
تست و بهینه سازی عملکرد
بازیکنان موسیقی باید پاسخگو باشند، این راهنمایی ها را دنبال کنند تا برنامه را سریع و مناسب با باتری نگه دارند.
- Profile with Instruments - از ابزار زمان پروفایل و انیمیشن های Core برای تشخیص انسداد عمده خواندن استفاده کنید.از به روز رسانی های سنگین UI در هر فریم اجتناب کنید؛ به روز رسانی کشویی تر به ~30 FPS.
- استراتژی تقویت کننده [FLT: ] [ [FLT ] [ [ [FLT ] ] [ [ [ ] ] ] [برای تعادل زمان شروع به کار در برابر استفاده از حافظه] تنظیم کنید.
- ] مدیریت حافظه - هنگامی که سوئیچ می کند، اقلام بازیکن قدیمی و تصاویر هنری را آزاد می کند.
- Background Crashment [FLT 1] - اطمینان حاصل کنید که مدیر بازیکن شما در هنگام بازی با هم معامله نمی کند.
تست در دستگاه های واقعی
شبیه ساز ها نمی توانند به درستی صدای پس زمینه، AirPlay یا کنترل حجم را آزمایش کنند.همیشه روی آیفون های فیزیکی و iPads تست نسخه های مختلف iOS را بررسی کنند.
بهترین روش برای توسعه iOS Music Player
با توجه به سال ها تجربه تولید، در اینجا توصیه های اضافی وجود دارد.
- عملکرد بهینه سازی [FLT 1] - استفاده از بارگذاری تنبل برای لیست های بزرگ و آثار پیش از کد در اندازه کوچک.
- UI شهودی طراحی - دستورالعمل های رابط کاربری انسانی اپل برای پخش رسانه ها را دنبال کنید.از آیکون های سیستم برای اقدامات استاندارد مانند shddle و تکرار استفاده کنید.
- [در این باره] [و] [به صورت شایسته] به [و [از این رو] [به] [و [از این رو] [به] [و [از این رو]] [به] [و]] [از [و]]]] [به [و]] [و [از [به]]] [و]]] [به [و [و [و]]] [به [و [از [که] [از [از [و] [که] [از [از [از [از [از [که] [به [به [به]]]]]] [از [از [و] [و]]]]]]] [و]] [به [و [و [که] [از [به [به [از [از [از [از [از [از [و]]]]]]]]]]]]]] [از [از [از [از [از [از [از [از [از [از [از [به [به [به [به [از [از [به [و]]]]]]]]]]]]]]]]]]] [به [به
- حفظ حریم خصوصی کاربر [FLT 1] - فقط اجازه میکروفون را درخواست کنید اگر واقعا به آن نیاز دارید (به عنوان مثال، دستورات صوتی) همیشه توضیح دهید که چرا.
- دسترسی به لیست - برچسب تمام دکمه ها، پشتیبانی از VoiceOver، و اتخاذ نوع پویا برای برچسب.
نتیجه گیری
ساخت یک بازیکن موسیقی سفارشی با کنترل های پیشرفته در iOS پاداش می دهد اما نیاز به توجه به جزئیات در مدیریت جلسه صوتی، یکپارچه سازی کنترل از راه دور و پاسخگویی UI دارد. AVFoundation [FLT 1]، MPPlayinginfo] و UI پاسخگو بودن [F3] و Swi] [از طریق یک تجربه واقعی در یک برنامه گوش دادن به طور کامل می تواند ثابت کند.
برای مطالعه بیشتر، بررسی مرجع و [Foundation Media Playback] ، ] و راهنمای Interruptions [ این منابع به شما کمک می کند تا موارد لبه را مدیریت کنید و محصول قوی ارائه دهید.