質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

396閲覧

Swift・AVFoundationで録音設定時にエラーが発生する(Xcode)

hassy_ta

総合スコア49

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/02/06 02:21

編集2018/02/08 01:11

前提・実現したいこと

iOSアプリで録音機能を実装、一旦tmpディレクトリに保存後、サーバーにアップロードしてディレクトリの音声削除、というフローを考えています。
AVFoundationを使用しています。

AVFoundationRecorder|GitHub
こちらのコードを参考にしながら+いろいろ調べながら書いているのですが、録音の設定部分でどうしてもエラーになる箇所があります。

発生している問題・エラーメッセージ

Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

該当のソースコード

以下の部分(設定部分のみ抜粋)

Swift

1 2import UIKit 3import AVFoundation 4import NCMB 5 6class RecordViewController: UIViewController, AVAudioRecorderDelegate { 7 var recorder = AVAudioRecorder() 8 let user = NCMBUser.current() //ログイン中のユーザーIDの取得 9 var chapter = 1 //チャプター番号を取得 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 // Do any additional setup after loading the view. 14 } 15 16 override func didReceiveMemoryWarning() { 17 super.didReceiveMemoryWarning() 18 // Dispose of any resources that can be recreated. 19 } 20 21//*********中略************ 22 23 func recordSetting() { 24 let session = AVAudioSession.sharedInstance() 25 do { 26 try session.setCategory(AVAudioSessionCategoryPlayAndRecord) 27 } catch { 28 print("カテゴリ設定失敗") 29 print(error.localizedDescription) 30 } 31 do { 32 try session.setActive(true) 33 } catch { 34 print("session有効化失敗") 35 print(error.localizedDescription) 36 } 37 let soundFileName = "(getToday())(user?.userName! ?? "")-(chapter!).m4a" 38 let tempFilePath = NSTemporaryDirectory() 39 let fileURL = URL(fileURLWithPath: "(tempFilePath)(soundFileName)") 40 print("(fileURL)に書き込み") 41 let recordSetting: [String: Any] = [ 42 AVFormatIDKey: Int(kAudioFormatMPEG4AAC), 43 AVEncoderAudioQualityKey: AVAudioQuality.medium.rawValue, 44 AVEncoderBitRateKey: 128, 45 AVNumberOfChannelsKey: 2, 46 AVSampleRateKey: 44100.0 47 ] 48 do { 49 recorder = try AVAudioRecorder.init(url: fileURL, settings: recordSetting) //この行でエラー発生 50 recorder.delegate = self 51 recorder.isMeteringEnabled = true 52 recorder.prepareToRecord() 53 print("初期設定に成功しました") 54 } catch { 55 //alertを出す 56 print("初期設定に失敗しました: (error.localizedDescription)") 57 } 58 } 59//***********中略************ 60 func getToday() { 61 //現在の日時取得 62 } 63}

デバックのとき「0 -[AVAudioRecorder privCommonCleanup]」を見ると

1 AVFAudio`-[AVAudioRecorder privCommonCleanup]: ~ //略 8 -> 0x118f15a08 <+18>: movq $0x0, (%rbx) //ここにエラーが書いてある

試したこと

ディレクトリの指定自体はできている(ターミナルで移動できる・tmpディレクトリではなくLibrary/Cachesディレクトリに変えても同じエラー)のと、きちんとURL型に変更しているのでそこではないようなのですが。

上に示したように0 -[AVAudioRecorder privCommonCleanup]で該当エラーが出ているのですが、何を意味しているのかわからず、かつ調べているとメモリが関係しているようなのですが、そのあたりをよく知らない・調べても出てこないもので手詰まりになっている状況です。

補足情報(FW/ツールのバージョンなど)

Swift4
XCode8.0Format(XCode9.x)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

非常に初歩的な文法ミスでした
#####修正前

Swift

1class RecordViewController: UIViewController, AVAudioRecorderDelegate { 2 var recorder = AVAudioRecorder()

#####修正後

Swift

1class RecordViewController: UIViewController, AVAudioRecorderDelegate { 2 //var recorder = AVAudioRecorder() 3 var recorder: AVAudioRecorder!

recorderはAVAudioRecorder型の変数を宣言するだけですね……
お目汚し失礼しました。

投稿2018/02/08 03:10

hassy_ta

総合スコア49

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問