SwiftPM으로 C 언어가 포함된 라이브러리 만들기
SwiftPM으로 C 언어가 포함 된 라이브러리를 만들었습니다.
동작의 모습
world의 swift의 wrapper를 공개했습니다 - iPhone에서 보이첸을 할 수 있습니다! htps // t. 코/t2Y3Bvhvぃ 피 c. 라고 r. 이 m/b7아이 4F1Qkr — 후지키 (@fzkqi) February 17, 2020
Vocoder 자체의 이야기는 이쪽
WorldInApple 구현
했던 일
- 공식 문서의 Creating C Language Targets와 같습니다
- C++로 구현 된 World 본문의 대상을 만들고 Swift 래퍼의 대상에서 종속했습니다.
Package.swift
->htps : // 기주 b. 이 m/후지키/를 rlぢ나 pぇ/bぉb/로 수 ft
import PackageDescription
let package = Package(
name: "WorldInApple",
platforms: [.iOS(.v11), .macOS(SupportedPlatform.MacOSVersion.v10_15)],
products: [
.library(
name: "WorldInApple",
targets: ["WorldInApple"]),
],
targets: [
// C++ で書かれた、World 本体
.target(
name: "WorldLib"
),
// WorldLib の Swift ラッパー
.target(
name: "WorldInApple",
dependencies: ["WorldLib"]), // WorldLib に依存
]
)
WorldLib
- C++ 로 구현된 World 본체입니다
- SwiftPM에서 USER_HEADER_SEARCH_PATHS를 지정하는 방법을 찾을 수 없으므로 복사하여 헤더를 편집하고 있습니다.
- 차이는 패치 파일에 요약되어 있습니다.
htps : // 기주 b. 이 m/후지키/를 rlぢ나 pぇ/bぉb/로 ゔぇぉp/훗 x-를 rld-에 어서 r파 th. 파 tch
- 차이는 패치 파일에 요약되어 있습니다.
WorldLib/include/World.h
->htps : // 기주 b. 이 m/후지키/를 rlぢ나 pぇ/bぉb/로 ゔぇぉp/그래서 s/를 rlddb/인 cぅ로/를 rld. h
- WorldLib의 공개 헤더입니다.
- World에 필요한 헤더를 게시하고 있습니다
#import "../world/dio.h"
#import "../world/stonemask.h"
#import "../world/cheaptrick.h"
#import "../world/d4c.h"
#import "../world/synthesis.h"
#import "../world/harvest.h"
#import "../world/synthesisrealtime.h"
#import "../world/matlabfunctions.h"
WorldInApple
- WorldLib의 Swift 래퍼입니다
import WorldLib
World로 정의 된 기능을 사용할 수 있습니다.
->htps : // 기주 b. 코 m / 후지 키 / rl ぢ p / b b Shichi s Chima와 r. 수 ft
import WorldLib
public class AperiodicityEstimator: WorldInAppleComponents {
private var d4cOption = D4COption() // World で定義された構造体が利用できる
//〜中略〜
public func estimatAperiodicity(x: UnsafeMutablePointer<Double>, x_length: Int32) {
// World で定義された関数が利用できる
D4C(x, x_length, Int32(parameters.fs), parameters.time_axis, parameters.f0, Int32(parameters.f0_length), Int32(parameters.fft_size), &d4cOption, parameters.aperiodicity)
}
}
샘플 구현(Examples)
- WorldInApple 패키지에서 참조되지 않도록 더미 Package.swift를 배치했습니다.
->htps : // 기주 b. 이 m/후지키/를 rlぢ나 pぇ/bぉb/로 수 ft
import PackageDescription
let package = Package(
name: "dummy",
products: [],
targets: []
)
- WorldInApple.xcworkspace에서 실행 가능
- Examples 프로젝트와 WorldInApple 패키지가 들어 있습니다.
- Examples 타겟으로부터 WorldInApple를 참조합니다.
import WorldInApple
이렇게하면 만든 World Swift 래퍼를 사용할 수 있습니다
->htps : // 기주 b. 이 m/후지키/를 rlぢ나 pぇ/bぉb/로 수 ft
import AVFoundation
import Combine
import Foundation
import SwiftUI
import WorldInApple
class ContentViewModel: ObservableObject {
private let world = WorldInApple(fs: 48000, frame_period: 5, x_length: 38400)
// 〜中略〜
}
게시 & 사용
- GitHub에 push하여 pure swift 패키지와 마찬가지로 사용할 수있었습니다.
Reference
이 문제에 관하여(SwiftPM으로 C 언어가 포함된 라이브러리 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fuziki/items/2809e3dcfcb6360c3642
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(SwiftPM으로 C 언어가 포함된 라이브러리 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fuziki/items/2809e3dcfcb6360c3642텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)