๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป/iOS

AVFoundation, Timer๋ž€?

reujusong 2020. 7. 8. 16:34
๋ณธ ๊ฒŒ์‹œ๊ธ€์€ edwith ๋ถ€์ŠคํŠธ์ฝ”์Šค iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€ ์ž…๋‹ˆ๋‹ค.

 

 

AVFoundation

Objective-C ๋ฐ Swift์˜ API๊ฐ€ ํฌํ•จ ๋œ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ํ”„๋ ˆ์ž„ ์›Œํฌ๋กœ, Apple Darwin ๊ธฐ๋ฐ˜ ์šด์˜ ์ฒด์ œ (iOS, macOS, tvOS ๋ฐ watchOS)์—์„œ ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ์‹œ์ฒญ๊ฐ ๋ฏธ๋””์–ด ์ž‘์—…์„ ์œ„ํ•œ ๊ณ ๊ธ‰ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. 

 

์ฃผ์š” ๊ธฐ๋Šฅ

  • ๋ฏธ๋””์–ด ์žฌ์ƒ ๋ฐ ํŽธ์ง‘(QuickTime ๋™์˜์ƒ ๋ฐ MPEG-4 ํŒŒ์ผ ์žฌ์ƒ/์ƒ์„ฑ/ํŽธ์ง‘, HLS ์ŠคํŠธ๋ฆผ ์žฌ์ƒ: ์žฌ์ƒ๊ฐ€๋Šฅ ํŒŒ์ผ ๋ชฉ๋ก ๋งํฌ)
  • ๋””๋ฐ”์ด์Šค ์นด๋ฉ”๋ผ์™€ ๋งˆ์ดํฌ๋ฅผ ์ด์šฉํ•œ ์˜์ƒ ๋…นํ™” ๋ฐ ์‚ฌ์šด๋“œ ๋…น์Œ
  • ์‹œ์Šคํ…œ ์‚ฌ์šด๋“œ ์ œ์–ด
  • ๋ฌธ์ž์˜ ์Œ์„ฑํ™”

 

AVAudioPlayer Class 

ํŒŒ์ผ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ์‚ฌ์šด๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์ƒํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

 

  • ํŒŒ์ผ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ์‚ฌ์šด๋“œ ์žฌ์ƒ(๋„คํŠธ์›Œํฌ์— ์žˆ๋Š” ์‚ฌ์šด๋“œ ํŒŒ์ผ์€ ์žฌ์ƒ ๋ถˆ๊ฐ€)
  • ํŒŒ์ผ ์žฌ์ƒ ์‹œ๊ฐ„ ๊ธธ์ด์˜ ์ œํ•œ์—†์ด ์‚ฌ์šด๋“œ ์žฌ์ƒ
  • ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šด๋“œ ํŒŒ์ผ ๋™์‹œ ์žฌ์ƒ
  • ์‚ฌ์šด๋“œ์˜ ์žฌ์ƒ ์†๋„ ์ œ์–ด ๋ฐ ์Šคํ…Œ๋ ˆ์˜ค ํฌ์ง€์…”๋‹
  • ์•ž์œผ๋กœ ๊ฐ๊ธฐ์™€ ๋’ค๋กœ ๊ฐ๊ธฐ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ด ์‚ฌ์šด๋“œ ํŒŒ์ผ์˜ ํŠน์ • ์ง€์  ์ฐพ๊ธฐ
  • ํ˜„์žฌ ์žฌ์ƒ ์ •๋ณด ๋ฐ์ดํ„ฐ ์–ป๊ธฐ
  • ์‚ฌ์šด๋“œ ๋ฐ˜๋ณต์žฌ์ƒ ๊ธฐ๋Šฅ

 

AVAudioPlayer ์ฃผ์š” ํ”„๋กœํผํ‹ฐ

  • var isPlaying: Bool: ์‚ฌ์šด๋“œ๊ฐ€ ํ˜„์žฌ ์žฌ์ƒ๋˜๊ณ  ์žˆ๋Š”์ง€ ์•„๋‹Œ์ง€ ์—ฌ๋ถ€
  • var volume: Float: ์‚ฌ์šด๋“œ์˜ ๋ณผ๋ฅจ๊ฐ’, ์ตœ์†Œ 0.0 ~ ์ตœ๋Œ€ 1.0
  • var rate: Float: ์‚ฌ์šด๋“œ์˜ ์žฌ์ƒ ์†๋„
  • var numberOfLoops: Int: ์‚ฌ์šด๋“œ ์žฌ์ƒ ๋ฐ˜๋ณต ํšŸ์ˆ˜
    • ๊ธฐ๋ณธ๊ฐ’์€ 0์œผ๋กœ ์‚ฌ์šด๋“œ 1ํšŒ ์žฌ์ƒ ํ›„ ์ž๋™ ์ข…๋ฃŒ
    • ์–‘์ˆ˜๊ฐ’์œผ๋กœ ์„ค์ •์‹œ ์„ค์ •๊ฐ’+1ํšŒ ์žฌ์ƒ(ex. 1๋กœ ์„ค์ •์‹œ 2ํšŒ ์žฌ์ƒ ํ›„ ์ข…๋ฃŒ)
    • ์Œ์ˆ˜๊ฐ’์œผ๋กœ ์„ค์ •์‹œ stop ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋ ๋•Œ๊นŒ์ง€ ๋ฌดํ•œ ์žฌ์ƒ
  • var dutation: TimeInterval: ์‚ฌ์šด๋“œ์˜ ์ด ์žฌ์ƒ ์‹œ๊ฐ„(์ดˆ ๋‹จ์œ„)
  • var currentTime: TimeInterval: ์‚ฌ์šด๋“œ์˜ ํ˜„์žฌ ์žฌ์ƒ ์‹œ๊ฐ(์ดˆ ๋‹จ์œ„)
  • protocol AVAudioPlayerDelegate: ์‚ฌ์šด๋“œ ์žฌ์ƒ ์™„๋ฃŒ, ์žฌ์ƒ ์ค‘๋‹จ ๋ฐ ๋””์ฝ”๋”ฉ ์˜ค๋ฅ˜์— ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ

 

AVAudioPlayer ์ฃผ์š” ๋ฉ”์„œ๋“œ

  • AVAudioPlayer ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ
// ํŠน์ • ์œ„์น˜์— ์žˆ๋Š” ์‚ฌ์šด๋“œ ํŒŒ์ผ๋กœ ์ดˆ๊ธฐํ™” 
func init(contentOf: URL) 

// ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™€์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ์ดˆ๊ธฐํ™” 
func init(data: Data)

 

  • AVAudioPlayer ์žฌ์ƒ๊ด€๋ จ ๋ฉ”์„œ๋“œ
// ์‚ฌ์šด๋“œ ์žฌ์ƒ 
func play() 

// ํŠน์ • ์‹œ์ ์—์„œ ์‚ฌ์šด๋“œ ์žฌ์ƒ 
func play(atTime: TimeInterval) 

// ์‚ฌ์šด๋“œ ์ผ์‹œ ์ •์ง€ 
func pause() 

// ์‚ฌ์šด๋“œ ์žฌ์ƒ ์ •์ง€ 
func stop()

 


Timer

ํƒ€์ด๋จธ ํด๋ž˜์Šค๋Š” ์ผ์ • ๊ฐ„๊ฒฉ์ด ๊ฒฝ๊ณผ๋˜๋ฉด ํƒ€๊ฒŸ ์˜ค๋ธŒ์ ํŠธ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค.

 

Timer ํŠน์ง•

  • ํƒ€์ด๋จธ๋Š” ๋Ÿฐ ๋ฃจํ”„(run loops)์—์„œ ์ž‘๋™
  • ํƒ€์ด๋จธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ฐ˜๋ณต ์—ฌ๋ถ€๋ฅผ ์ง€์ •
    • ๋น„ ๋ฐ˜๋ณต ํƒ€์ด๋จธ: ํ•œ ๋ฒˆ ์‹คํ–‰๋œ ๋‹ค์Œ ์ž๋™์œผ๋กœ ๋ฌดํšจํ™”
    • ๋ฐ˜๋ณต ํƒ€์ด๋จธ: ๋™์ผํ•œ ๋Ÿฐ ๋ฃจํ”„์—์„œ ํŠน์ • TimeInterval ๊ฐ„๊ฒฉ์œผ๋กœ ์‹คํ–‰. ๋ฐ˜๋ณต๋˜๋Š” ํƒ€์ด๋จธ ๊ธฐ๋Šฅ์„ ์ •์ง€ํ•˜๋ ค๋ฉด invalidate() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ

 

Timer ์ฃผ์š” ํ”„๋กœํผํ‹ฐ

  • var isValid: Bool: ํƒ€์ด๋จธ๊ฐ€ ํ˜„์žฌ ์œ ํšจํ•œ์ง€ ์•„๋‹Œ์ง€ ์—ฌ๋ถ€
  • var fireDate: Date: ๋‹ค์Œ์— ํƒ€์ด๋จธ๊ฐ€ ์‹คํ–‰๋  ์‹œ๊ฐ
  • var timeInterval: TimeInterval: ํƒ€์ด๋จธ์˜ ์‹คํ–‰ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ(์ดˆ ๋‹จ์œ„)

 

Timer ์ƒ์„ฑ ๋ฉ”์„œ๋“œ

ํƒ€์ด๋จธ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ๋Ÿฐ ๋ฃจํ”„์— default mode๋กœ ๋“ฑ๋กํ•˜๋Š” ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ

 

class func scheduledTimer(withTimeInterval: TimeInterval, repeats: Bool, block: (Timer) -> Void) {}
class func scheduledTimer(timeInterval: TimeInterval, target: Any, selector: Selector, userInfo: Any?, repeats: Bool) {}
class func scheduledTimer(timeInterval: TimeInterval, invocation: NSInvocation, repeats: Bool) {}

 

 

ํƒ€์ด๋จธ ์ƒ์„ฑ ํ›„ ์ˆ˜๋™์œผ๋กœ ํƒ€์ด๋จธ ๊ฐ์ฒด๋ฅผ add(_:forMode:) ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ๋Ÿฐ ๋ฃจํ”„์— ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋ฉ”์„œ๋“œ

 

func init(timeInterval: TimeInterval, invocation: NSInvocation, repeats: Bool) {}
func init(timeInterval: TimeInterval, target: Any, selector: Selector, userInfo: Any?, repeats: Bool) {}
func init(fireAt: Date, interval: TimeInterval, target: Any, selector: Selector, userInfo: Any?, repeats: Bool) {}

 

 

 

 

 

 

'๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป > iOS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

UIKit๋ž€?  (0) 2020.07.12
Cocoa Touch ํ”„๋ ˆ์ž„์›Œํฌ๋ž€?  (0) 2020.07.08
UIButton, UISlider, UILabel์ด๋ž€?  (0) 2020.07.07
IBOutlet, IBAction์ด๋ž€?  (0) 2020.06.26
์—์…‹ ์นดํƒˆ๋กœ๊ทธ๋ž€?  (0) 2020.06.26