端末のマイクから取得した音声を wavで録音するアプリの作成をしています。
コメントアウト部分を kAudioFileAIFFType で保存すると aAudioFileID は問題なく取得できますが、Wavで保存したいので、kAudioFileAIFFType を kAudioFileWAVEType に変更して指定すると aAudioFileID が nil になってしまいます。
・ソースコードはこちらで試しています。
https://github.com/TachibanaKaoru/AudioQueueRecorder
func prepare(){ var aAudioFileID: AudioFileID? let documentDirectories = FileManager.default.urls( for: FileManager.SearchPathDirectory.documentDirectory, in: FileManager.SearchPathDomainMask.userDomainMask) let docDirectory = (documentDirectories.first)! var audioFilePathURL = docDirectory.appendingPathComponent("audiotest") audioFilePathURL.appendPathExtension("wav") //nilになる // audioFilePathURL.appendPathExtension("aiff") //nilにならない AudioFileCreateWithURL(audioFilePathURL as CFURL, kAudioFileWAVEType, //nilになる // kAudioFileAIFFType, //nilにならない ¤tMusicDataFormat, AudioFileFlags.eraseFile, &aAudioFileID) print(aAudioFileID as Any) // 結果 audioFile = aAudioFileID! } var currentMusicDataFormat = AudioStreamBasicDescription( mSampleRate: 44100, mFormatID: kAudioFormatLinearPCM, mFormatFlags: AudioFormatFlags(kAudioFormatFlagIsBigEndian|kLinearPCMFormatFlagIsSignedInteger|kAudioFormatFlagIsPacked), mBytesPerPacket: 4, mFramesPerPacket: 1, mBytesPerFrame: 4, mChannelsPerFrame: 2, mBitsPerChannel: 16, mReserved: 0 )
これは何が原因でしょうか。
追記:
下記のようにする事でエラーは出なくなりました。
let format = AVAudioFormat(commonFormat: AVAudioCommonFormat.pcmFormatInt16, sampleRate: 44100.0, channels: 1, interleaved: true) let dir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! as String self.filePath = dir.appending("/audiotest.wav") _ = ExtAudioFileCreateWithURL( URL(fileURLWithPath: self.filePath!) as CFURL, kAudioFileWAVEType, (format?.streamDescription)!, nil, AudioFileFlags.eraseFile.rawValue, &aAudioFileID) print(aAudioFileID)
よろしくお願いします。
エラーの場合 AudioFileCreateWithURL の戻り値としてエラーコードが返りますので、まずそれをご確認ください。
どうも、ありがとうございます。
SetDataFormat failed と返却されるようです。
kAudioFileWAVEType は使えない仕様という事なのでしょうか。。
そのようですね。iOS のネイティブの音声フォーマットは AIFF ですから。(ちなみに、WAV フォーマットの正式名称は Microsoft WAVE です。) 録音終了後に変換する必要があるのでは。
ありがとうございます。
WAV以外のフォーマットで保存して、使用するときにWAVに変換するという考え方でしょうか。
追記のような形に変更することによる、エラーは出なくなりました。
あなたの回答
tips
プレビュー