2017-12-14 19 views
1

Mac OSX에서 AKMidiSampler로 작업하려고합니다. 파일에서 샘플 데이터를로드 할 수 없습니다. 맥 OS 프로젝트에 대한 AudioKit에서 개발 놀이터에 넣으면 다음 코드는 문제를 설명합니다 :MacOSX에서 AKMidiSampler에 WAV를로드 할 수 없습니다.

수입 AudioKit 오류가 바로 2 호선에서 발생

let sampler1 = AKMIDISampler() 
sampler1.loadPath("/Users/shane/Documents/Cel1.wav") 
AudioKit.output = sampler1 
AudioKit.start() 
sampler1.play(noteNumber: 64, velocity: 100, channel: 0) 
sleep(5) 
sampler1.stop(noteNumber: 64, channel: 0) 

:

AKSampler.swift : loadPath : 114 : /Users/shane/Documents/samples/Cel1.wav에서 오디오 파일을로드하는 중 오류가 발생했습니다.

이 모든 것이 기본 죄입니다. 전자음. 나는 명백한 것을 검사했다. 파일이 확실히 확실히 존재합니다. 권한은 OK입니다. 실제로 모든 사람에게 rwx가 있습니다. ESX 파일을로드하려고 시도한 이전 실험에서 사용 권한 오류 (코드 -54)가 나타났습니다.

누구나 AKSampler 및/또는 AKMIDISampler가 실제로 OSX에서 작동하는지 확인할 수 있습니까?

답변

1

AudioKit 소스 코드에서 loadPath (_ :)는 번들 파일을 찾는 loadInstrument (_ : type :)를 호출합니다. 출처의 사본보기 :

@objc open func loadPath(_ filePath: String) { 
    do { 
     try samplerUnit.loadInstrument(at: URL(fileURLWithPath: filePath)) 
    } catch { 
     AKLog("Error loading audio file at \(filePath)") 
    } 
} 

internal func loadInstrument(_ file: String, type: String) throws { 
    //AKLog("filename is \(file)") 
    guard let url = Bundle.main.url(forResource: file, withExtension: type) else { 
     fatalError("file not found.") 
    } 
    do { 
     try samplerUnit.loadInstrument(at: url) 
    } catch let error as NSError { 
     AKLog("Error loading instrument resource \(file)") 
     throw error 
    } 
} 

오디오 파일을 앱 또는 놀이터의 번들에 넣어서 작동하도록 요청해야합니다.

+0

아마도 뭔가가 빠졌지 만, 호출되는'loadInstrument' 메서드는 보여준 것이 아닙니다. 이 호출은'AVAudioUnitSampler' 타입의'samplerUnit' 객체에서 이루어집니다. 그것의 버전의'loadInstrument' (https://developer.apple.com/documentation/avfoundation/avaudiounitsampler/1389514-loadinstrument 참조)는 간단한 파일 URL을 취합니다. – getdunne

+0

필자가 보여준'loadInstrument()'버전을 호출하는'AKMIDISampler' 객체에서'loadESX24()'를 호출하여) 내 응용 프로그램 번들 내에서 인스트루먼트 파일을로드 할 수 있다는 것을 확인했습니다. iOS 응용 프로그램이지만 Mac에서 실행하려고 할 때의 요지는이 제한을 피하는 것이 었습니다. AVAudioUnitSampler 설명서에 디스크의 아무 곳에서나 파일을로드 할 수 없다고 제안하는 내용이 없습니다. – getdunne

+0

동의합니다 - 위의 내 대답은 귀하의 질문에 적절하게 해결하지 못했습니다. 심지어 samplerUnit.loadInstrument 메서드를 직접 호출 할 때에도 작동하지 않습니다.이 문제가 놀이터의 샌드 박스 속성과 관련이 있는지 궁금합니다. –