Table of Contents

आईओएस के लिए एक उच्च प्रदर्शन कस्टम संगीत प्लेयर का निर्माण

आईओएस के लिए एक कस्टम संगीत खिलाड़ी का विकास एक प्ले बटन में रैपिंग से कहीं अधिक दूर हो जाता है। उपयोगकर्ता सहज पृष्ठभूमि प्लेबैक, समृद्ध अब खेलने वाला एकीकरण, एयरप्ले समर्थन और उत्तरदायी नियंत्रण की उम्मीद करते हैं जो मूल महसूस करते हैं। यह गाइड आपको स्विफ्ट, यूआईकेआईटी और आधुनिक ढांचे जैसे उन्नत नियंत्रणों के साथ एक उत्पादन-तैयार संगीत खिलाड़ी बनाने के माध्यम से चलता है। हम वास्तुकला, यूआई डिजाइन, पृष्ठभूमि ऑडियो, रिमोट कंट्रोल हैंडलिंग और प्रदर्शन ट्यूनिंग को कवर करेंगे ताकि आप ऐप स्टोर पर खड़े होने वाले एप्लिकेशन को जहाज कर सकें।

कोर आर्किटेक्चर: AVFoundation को लीवरेज करना

आईओएस में हर कस्टम संगीत खिलाड़ी AVFoundation] के साथ शुरू होता है। प्राथमिक खिलाड़ी कक्षाएं हैं ( स्ट्रीमिंग और स्थानीय फ़ाइलों के लिए) और (सरल स्थानीय ऑडियो प्लेबैक के लिए)। एक पूर्ण फीचर्ड प्लेयर के लिए, AVPlayer] बेहतर विकल्प है क्योंकि यह स्ट्रीमिंग, समयबद्ध मेटाडाटा और AirPlay और पृष्ठभूमि मोड के साथ एकीकरण का समर्थन करता है।

खिलाड़ी की स्थापना

एक सिंगलटन या सर्विस क्लास बनाएं जो उदाहरण रखती है। यह देखने के नियंत्रकों के पार लगातार प्लेबैक स्टेट सुनिश्चित करता है। खिलाड़ी को स्थानीय या दूरस्थ यूआरएल के साथ कॉन्फ़िगर करें:

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()
 }
}

हमेशा ऑडियो सत्र श्रेणी को ].playback में सेट करें ताकि खिलाड़ी तब काम करना जारी रखता है जब फोन बंद हो जाता है या चुप मोड में। यह किसी भी संगीत ऐप के लिए अनिवार्य है।

प्रबंध खिलाड़ी

पर KVO (Key-Value Observing) का प्रयोग ] और 's to use the state change (playing, pause, इंतज़ार करने के लिए नेटवर्क)]. ] के माध्यम से ] अपने प्रगति स्लाइडर ड्राइव और समय लेबल समाप्त.

SwiftUI के साथ उपयोगकर्ता इंटरफ़ेस को डिजाइन करना

जबकि UIKit परिपक्व है, SwiftUI संगीत खिलाड़ी UI के लिए एकदम सही गति से पुनरावृत्ति और एक घोषणात्मक वाक्यविन्यास प्रदान करता है। एल्बम कला, ट्रैक जानकारी, प्रगति स्लाइडर, वॉल्यूम नियंत्रण और प्लेबैक बटन के साथ एक स्वच्छ लेआउट बनाएं।

कुंजी यूआई घटक

  • ]Album Art View – a that loads the कलाकृति from a Remote URL or स्थानीय परिसंपत्ति.
  • Track and Artist Labels – गतिशील पाठ जो आपके व्यू मॉडल में गुण के माध्यम से अद्यतन करता है।
  • Progress स्लाइडर - एक कस्टम ट्रैक और अंगूठे रंग के साथ शैली, खिलाड़ी के वर्तमान समय के लिए बाध्य।
  • ]Volume स्लाइडर - सिस्टम वॉल्यूम को लक्षित करते समय का उपयोग करें, या एक कस्टम स्लाइडर का निर्माण करें जो ]] सेट करता है (नोट: सिस्टम वॉल्यूम स्थिरता के लिए पसंदीदा है)।
  • Play/Pause, Forward, Backward Buttons - स्पष्ट रूप से लेबल, स्पर्श पर haptic प्रतिक्रिया के साथ।

विभिन्न स्क्रीन आकारों के अनुकूल होने के लिए का उपयोग करें, विशेष रूप से एल्बम कला के लिए जो आईपैड पर अच्छी तरह से स्केल करना चाहिए।

यूआई को प्लेयर से कनेक्ट करना

अपने विचार मॉडल को के अनुरूप होने दें और वर्तमान ट्रैक, प्लेबैक टाइम और राज्य बजाने को प्रकाशित करें। SwiftUI view इन बातों का पालन करता है:

class PlayerViewModel: ObservableObject {
 @Published var currentTime: TimeInterval = 0
 @Published var isPlaying = false
 @Published var currentTrack: Track?

 // … bindings to MusicPlayerManager
}

]] का प्रयोग करें और ] या आवधिक समय पर्यवेक्षक को अद्यतन करने के लिए ] आसानी से.

रिमोट कंट्रोल और अब खेलने की जानकारी को एकीकृत करना

एक पेशेवर संगीत खिलाड़ी को रिमोट कंट्रोल इवेंट्स (लॉक स्क्रीन, कंट्रोल सेंटर, एप्पल वॉच, एयरपॉड) का जवाब देना चाहिए और "अब बजाना" जानकारी प्रदर्शित करना चाहिए। यह MPNowPlayingInfoCenter और MPRemoteCommandCenter]]] के माध्यम से किया जाता है।

दूरस्थ कमांड की स्थापना

] या आपके खिलाड़ी प्रबंधक, ऑडियो सत्र सक्रिय होने के बाद दूरस्थ कमांड सेंटर को कॉन्फ़िगर करते हैं:

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 परियोजना में पृष्ठभूमि मोड सक्षम करें: लक्ष्य का चयन करें, साइनिंग और क्षमताओं पर जाएं, "बैकग्राउंड मोड" जोड़ें, और "ऑडियो, एयरप्ले, और पिक्चर में पिक्चर" की जांच करें।

अब तक की जानकारी खेल रहा है

हर बार ट्रैक में बदलाव या प्लेबैक स्टेटस अपडेट, ] को एक शब्दकोश के साथ ], , , ], और ]. कलाकृति के लिए, अपनी ] को ] में परिवर्तित करें।

ऑडियो सत्रों के साथ पृष्ठभूमि ऑडियो को संभालने

लॉन्च पर एक बार ऑडियो सत्र को कॉन्फ़िगर करें:

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)")
 }
}

उन ऐप्स के लिए जो वॉयस रिकॉर्ड या उपयोग करते हैं, श्रेणी के साथ सावधान रहें। ऑडियो को पृष्ठभूमि में जारी रखने के लिए संगीत खिलाड़ियों को लगभग हमेशा का उपयोग करना चाहिए। एक उपकरण पर टेस्ट करें: स्क्रीन को लॉक करें और प्लेबैक जारी रखें सत्यापित करें; नियंत्रण केंद्र को अपना "अब बजाना" कार्ड दिखाना चाहिए।

उन्नत नियंत्रण को लागू करना: तुल्यकारक, प्लेलिस्ट और एयरप्ले

एक बार जब मूल काम करते हैं, तो अपने खिलाड़ी को उन्नत सुविधाओं के साथ अलग करें।

ग्राफिक तुल्यकारक

] का उपयोग के साथ 10-बैंड या कस्टम बराबरी करने वाले को लागू करने के लिए। इसके लिए को इंजन के लिए इंजन आधारित दृष्टिकोण के साथ बदलना या कनेक्ट करना आवश्यक है। पर Apple का प्रलेखन नमूना कोड प्रदान करता है। प्रीसेट बैंड (Rock, पॉप, जैज़) की पेशकश करें और कस्टम स्लाइडर्स की अनुमति दें।

प्लेलिस्ट प्रबंधन

कोर डेटा या SwiftData में प्लेलिस्ट स्टोर करें। प्रत्येक प्लेलिस्ट में ट्रैक URL (स्थानीय या रिमोट) की एक ऑर्डर की गई सूची होती है। या ] में ड्रैग-एंड-ड्रॉप रीऑर्डर को लागू करें। ] पृष्ठभूमि विन्यास का उपयोग करके ऑफ़लाइन डाउनलोड का समर्थन करें ताकि ऐप के बाहर डाउनलोड जारी रहे।

AirPlay और बाह्य उपकरणों

]] स्वचालित रूप से AirPlay का समर्थन करता है जब ऑडियो सत्र पर सेट किया जाता है और मार्ग उपलब्ध है। ठीक-ग्रेन नियंत्रण के लिए, का मार्ग पिकर या (iOS 11+) का उपयोग करें। केवल जरूरत पड़ने पर स्थानीय प्लेबैक को मजबूर करने के लिए एक टॉगल प्रदान करें।

परीक्षण और प्रदर्शन अनुकूलन

संगीत खिलाड़ियों को उत्तरदायी होना चाहिए। ऐप को तेज़ और बैटरी के अनुकूल रखने के लिए इन सुझावों का पालन करें।

  • ]उपकरणों के साथ प्रोफाइल - मुख्य-थ्रेड अवरोधों का पता लगाने के लिए टाइम प्रोफाइलर और कोर एनिमेशन इंस्ट्रूमेंट्स का उपयोग करें। प्रत्येक फ्रेम पर भारी यूआई अपडेट से बचें; थ्रॉटल स्लाइडर को ~ 30 एफपीएस तक अद्यतन किया गया।
  • ]Buffering Strategy – set on to be a time-up time बनाम स्मृति उपयोग.
  • Memory प्रबंधन - जब स्विचिंग ट्रैक्स, पुराने खिलाड़ी आइटम और कलाकृति छवियों को जारी करते हैं। एल्बम कला के लिए ] का उपयोग करें।
  • ]background Crash हैंडलिंग - यह सुनिश्चित करने के लिए कि आपका खिलाड़ी खेलते समय सौदा नहीं करता है। मजबूत संदर्भों का उपयोग करें और यदि आवश्यक हो तो पुनर्वित्त करें।

रियल डिवाइस पर परीक्षण

सिमुलेटर पृष्ठभूमि ऑडियो, एयरप्ले या वॉल्यूम कंट्रोल का सही ढंग से परीक्षण नहीं कर सकते हैं। हमेशा भौतिक iPhones और iPads पर अलग-अलग iOS संस्करणों को चलाने का परीक्षण करते हैं। सत्यापित करें कि नियंत्रण केंद्र सही ढंग से अद्यतन करता है और लॉक स्क्रीन एल्बम कला दिखाता है।

आईओएस संगीत प्लेयर विकास के लिए सर्वश्रेष्ठ अभ्यास

उत्पादन अनुभव के वर्षों से ड्राइंग, यहाँ अतिरिक्त सिफारिशें हैं।

  • ]Optimize performance – बड़ी प्लेलिस्टों के लिए आलसी लोडिंग का उपयोग करें और थंबनेल आकार पर पूर्व-डेकोड कलाकृति का उपयोग करें।
  • डिजाइन सहज ज्ञान युक्त यूआई - मीडिया प्लेबैक के लिए एप्पल के मानव इंटरफेस दिशानिर्देशों का पालन करें। shuffle और दोहराने जैसे मानक कार्यों के लिए सिस्टम आइकन का उपयोग करें।
  • ]हैन्डल रुकावटें gracefully - ]] को सुनने के लिए और तदनुसार रोकें / फिर से शुरू करें। एक अस्थायी ओवरले दिखाएं यदि कोई फोन कॉल आता है।
  • Respect user privacy[ - केवल अनुरोध माइक्रोफोन अनुमति यदि आपको वास्तव में इसकी आवश्यकता है (जैसे, आवाज कमांड)। हमेशा क्यों समझाते हैं।
  • ]Provide accessibility - सभी बटन लेबल, समर्थन वॉयसओवर, और लेबल के लिए गतिशील प्रकार को अपनाने।

निष्कर्ष

आईओएस में उन्नत नियंत्रण के साथ एक कस्टम संगीत खिलाड़ी का निर्माण पुरस्कृत है लेकिन ऑडियो सत्र प्रबंधन, रिमोट कंट्रोल एकीकरण और यूआई प्रतिक्रियाशीलता में विस्तार के लिए ध्यान देने की आवश्यकता है। AVFoundation] का लाभ उठाकर, MPNowPlayingInfoCenter, और ]SwiftUI]], आप एक ऐसा ऐप बना सकते हैं जो एक पॉलिश सुनने का अनुभव प्रदान करता है। कोर प्लेयर के साथ शुरू करें, पृष्ठभूमि प्लेबैक जोड़ें, फिर समानार्थक और प्लेलिस्टों की तरह की भूमिकाओं पर निर्भर करता है।

आगे पढ़ने के लिए, Apple के ]AVFoundation Media Playback प्रलेखन , ]MediaPlayer फ्रेमवर्क संदर्भ, और Audio Interruptions गाइड ]. ये संसाधन आपको किनारे के मामलों को संभालने और एक मजबूत उत्पाद प्रदान करने में मदद करेंगे।