回答編集履歴

2

追記2

2017/06/18 07:52

投稿

izkn
izkn

スコア1698

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  本件に関しては忘れても良いです。なぜか...
18
18
 
19
- `macOS`には、`AvAudioSession`はありません。
19
+ `macOS`には、`AVAudioSession`はありません。
20
20
 
21
21
 
22
22
 
@@ -295,3 +295,41 @@
295
295
 
296
296
 
297
297
  `ViewController`クラスの`func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool)`などでようやく処理が実装されました。そのため、`override`は付きません。
298
+
299
+
300
+
301
+ ###追記2
302
+
303
+ 悲しいお知らせです。`AVAudioRecorder`は`mp3`形式で録音できません。
304
+
305
+ ```swift
306
+
307
+ recoder = try AVAudioRecorder(url: recodingUrl, settings: recordSettings)
308
+
309
+ ```
310
+
311
+ この時点で形式等に問題があれば、キャッチしてくれています。見ても何の事やらですが。
312
+
313
+
314
+
315
+ `caf`形式か,`iTunes`で開きたいというのであれば`m4a`形式を使ってください。
316
+
317
+ 最低限`AVFormatIDKey`は必要です。
318
+
319
+ ```swift
320
+
321
+ let recodingUrl = documentDirectory.appendingPathComponent("result.m4a", isDirectory: false)
322
+
323
+ let recordSettings : [String : Any] = [
324
+
325
+ AVFormatIDKey: UInt(kAudioFormatMPEG4AAC)
326
+
327
+ ]
328
+
329
+ ```
330
+
331
+
332
+
333
+ 次からは新規で質問立ててくださいね。その方が早く回答もつくでしょうから。
334
+
335
+ では、良い開発を ノシ

1

コメントへの返信

2017/06/18 07:52

投稿

izkn
izkn

スコア1698

test CHANGED
@@ -235,3 +235,63 @@
235
235
 
236
236
 
237
237
  ```
238
+
239
+
240
+
241
+
242
+
243
+ ###追記
244
+
245
+
246
+
247
+ > 関数名に書かれているようなタイミングで処理されるのでしょうか。(audioRecorderDidFinishRecordingならレコードが終了したときでしょうか。)
248
+
249
+
250
+
251
+ はい。そのタイミングで呼ばれるものですね。
252
+
253
+
254
+
255
+
256
+
257
+ > イベント系の関数はoverrideするものだとばかり思っていたのですが
258
+
259
+
260
+
261
+ そもそもこいつらは一体何者なんでしょうか。`AVAudioRecorderDelegate`と`AVAudioPlayerDelegate`のメソッドです。
262
+
263
+
264
+
265
+ では、`AVAudioRecorderDelegate`とは何なのかというと、クラスではなく、プロトコルです。つまり定義です。
266
+
267
+ 以下、`AVFoundation.framework/Frameworks/AVFAudio.framework/Headers/AVAudioRecorder.h`より抜粋
268
+
269
+
270
+
271
+ ```
272
+
273
+ /* A protocol for delegates of AVAudioRecorder */
274
+
275
+ __TVOS_UNAVAILABLE __WATCHOS_PROHIBITED
276
+
277
+ @protocol AVAudioRecorderDelegate <NSObject>
278
+
279
+ @optional
280
+
281
+
282
+
283
+ /* audioRecorderDidFinishRecording:successfully: is called when a recording has been finished or stopped. This method is NOT called if the recorder is stopped due to an interruption. */
284
+
285
+ - (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag;
286
+
287
+
288
+
289
+ /* if an error occurs while encoding it will be reported to the delegate. */
290
+
291
+ - (void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError * __nullable)error;
292
+
293
+ ```
294
+
295
+
296
+
297
+ `ViewController`クラスの`func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool)`などでようやく処理が実装されました。そのため、`override`は付きません。