2017-12-14 14 views
1

Mac OSXでAKMidiSamplerを使用しようとしています。ファイルからサンプルデータを読み込めません。 MacOSのプロジェクトのために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でオーディオファイルの読み込み中にエラーが発生しました。

と私が聞いているのはすべてデフォルトのsinです電子音。わかりやすいものをチェックしました。ファイルはかなり確かに存在し、パーミッションは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'メソッドは表示されていません。この呼び出しは 'samplerUnit'オブジェクト(' AVAudioUnitSampler'型)で行われます。そのバージョンの 'loadInstrument'(https://developer.apple.com/documentation/avfoundation/avaudiounitsampler/1389514-loadinstrumentを参照)は、単純なファイルURLを取ります。 – getdunne

+0

私はあなたのアプリのバンドルから( 'loadInstrument()'のバージョンを呼び出す 'AKMIDISampler'オブジェクトの' loadESX24() 'を呼び出すことによって)計測器ファイルを読み込むことができることを確認しました。 iOSのアプリだが、Macで動かそうと思ったのはこの制限を避けることだった。「AVAudioUnitSampler」のドキュメントにディスク上のどこからでもファイルをロードできないということは何も表示されない – getdunne

+0

私は同意する - 上記の私の答えはあなたの質問に適切に対応していませんでした。私もsamplerUnit.loadInstrumentメソッドを直接呼び出しても、これを動作させることはできません。単純なアプリケーションですか? –

関連する問題