私は現在、Chris Adamsonの「Learning Core Audio」を読んでおり、Swift 3(Objective-Cの代わりに)に沿ってフォローしようとしています。Swift 3 - UnsafePointer <CFDictionary>を使用していますか?
最初のコード例では、AudioTool
を使用して、オーディオファイルに関する情報を収集しています。マイスウィフト3バージョンは、次のようになります
import Foundation
import AudioToolbox
func main() {
let arguments = CommandLine.arguments
guard arguments.count > 1 else {
print("Usage: CAMetaData /full/path/to/audiofile")
return
}
// Get filepath out of cmd-arguments
let audiofilePath = NSString(string: arguments[1]).expandingTildeInPath
// Load audio file into appropriate data structure
let audioURL = NSURL(fileURLWithPath: audiofilePath)
var audiofile: AudioFileID? = nil
var possibleError = noErr
possibleError = AudioFileOpenURL(audioURL, AudioFilePermissions.readPermission, 0, &audiofile)
assert(possibleError == noErr)
// Get size of metadata dictionary
var outDataSize: UInt32 = 0
possibleError = AudioFileGetPropertyInfo(audiofile!, kAudioFilePropertyInfoDictionary, &outDataSize, nil)
assert(possibleError == noErr)
// Get metadata
var outDataPointer: UnsafePointer<CFDictionary>? = nil
possibleError = AudioFileGetProperty(audiofile!, kAudioFilePropertyInfoDictionary, &outDataSize, &outDataPointer)
assert(possibleError == noErr)
// How to use this outDataPointer?
let outData = outDataPointer!.pointee as NSDictionary
dump(outData)
// No CFRelease necessary - Swift takes care of that
// Close connection to audiofile
possibleError = AudioFileClose(audiofile!)
assert(possibleError == noErr)
}
main()
すべてが素晴らしい(すべての表明/ AudioToolbox
-APIコールパスを)動作するようです。今私はoutDataPointer
の中に格納されているデータをどのように表示できるか自分に尋ねています。
これは私が状況を理解する方法です。outDataPointer
には、オプションの関連タイプUnsafePointer<CFDictionary>
が保持されています。 outDataPointer
がnil
ではないことを確認できます。したがって、関連付けられた値にアクセスしてもプログラムがクラッシュすることはありません。 outDataPointer!.pointee
はCFDictionary
に、outDataPointer
の背後にある関連する値で示されているはずです。 CFDictionary
はNSDictionary
にキャスト可能です。
は悲しいコンソールへ
- __NSAtom#0
下地データの印刷をダンプ。まさに私が期待したものではない(オーディオファイルに関する情報)。このデータを私のoutDataPointer
変数からどのように得ることができますか?
は、詳細な回答ありがとうございます!これは間違いなく私のために物事をクリアしました。私は、最初に 'UnsafePointer 'を使ってどうやって終わったのかは分かりません。すべてが今期待どおりに動作しています。 –
Herickson
@NobodyNada、 'AudioFileGetProperty'で' NSDictionary'を使用できるのであれば、 'CFDictionary'を使う理由は何ですか? Swift Dictionaryを使用する方法はありますか? (私は[String:Any]を試しましたが、キー/値で埋められませんでした...)ありがとう –