[Xcode / Swift] libpd, PdDispatcher를 활용한 Pure Data Listener 구현

Pd-0.48-1(Vanilla)를 사용하여 아래와 같이 구현된 click 사운드 2의 Sequence와 Count를 받는 방법. Listener를 구현하여 받는 방법이고, 아래 코드는 cheetomoskeeto Youtube Page를 참조.

PdDispatcher를 활용하여 Message를 받으려면 아래와 같은 작업을 요한다.

libpd 헤더 파일과 본인의 프로젝트가 브리징이 잘 이루어졌다면, 다른 설정은 필요하지 않다. 본인의 프로젝트가 Listener 기능을 빼고도 동작하지 않는다면, 아래 영상을 참조 바란다. 바로 ViewController로 이동한다. 아래 빨간 부분만 주의하여 구현한다.

ViewController.swift

import UIKit

class ViewController: UIViewController, PdListener {
    
    var dispatcher: PdDispatcher?
    
    override func viewDidLoad() {
        super.viewDidLoad()
           
        //Receiving Data from Pd
        dispatcher = PdDispatcher()
        dispatcher?.add(self, forSource: "sequence")//pd에서 만든 변수 1
        dispatcher?.add(self, forSource: "count")//pd에서 만든 변수 2
        PdBase.setDelegate(dispatcher)
    }
  
    
    func receive(_ received: Float, fromSource source: String!) {
        if source == "count" {
            print("\(received)")
        }
        if source == "sequence"{
            print("\(received)")
        }
    }

}

Listener를 받는 함수는 receive 외에 아래와 같다.

AppDelegate.swift

import UIKit
import CoreData

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var pd:PdAudioController?
    var dispatcher:PdDispatcher?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        pd = PdAudioController()
        dispatcher = PdDispatcher()
        PdBase.setDelegate(dispatcher)
        
        let pdInt = pd?.configureAmbient(withSampleRate: 44100, numberChannels: 2, mixingEnabled: true)
        
        if pdInt == PdAudioOK{
            print ("pd is ready to go")
        }
        else{
            print ("something goes wrong")
        }
        
        return true
    }

//중략
}

실행 결과

pd is ready to go
2018-03-25 23:37:38.269748+0900 libPdSwift[10878:25101327] Pd: bonk version 1.5
2018-03-25 23:37:38.269889+0900 libPdSwift[10878:25101327] Pd: fiddle version 1.1 TEST4
2018-03-25 23:37:38.269998+0900 libPdSwift[10878:25101327] Pd: pique 0.1 for PD version 23
2018-03-25 23:37:38.270136+0900 libPdSwift[10878:25101327] Pd: sigmund~ version 0.07
0.0
0.0
1.0
1.0
2.0
2.0
3.0
3.0
0.0
4.0
1.0
5.0
2.0
6.0
3.0
7.0
0.0
8.0
1.0
9.0

참고 사이트

  •  
  •  
  •  
  •  
  •  
  •  
SHARE