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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

702閲覧

AVAudioRecorderで録音中にAudioServicesPlaySystemSoundで音を再生したい

satoban

総合スコア7

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2018/04/09 05:02

初めてiPhoneアプリを製作しています。
1秒間隔でメトロノーム音を鳴らしつつ、録音できるアプリを製作したいのですが、AVAudioRecorderで録音を開始するとメトロノーム音が再生できません。
シミュレーター上では録音中にもメトロノーム音が鳴るのですが、実機で動作させると音が再生されません。
メトロノーム音の再生はAudioServicesPlaySystemSoundを使用しています。

必ずしもAudioServicesPlaySystemSoundで再生する必要はないのですが、メトロノーム音の感覚をtimerで変更することを考えてこちらを使用しています。

色々調べてみたのですが、ズバリの解決方法が見つかりません。
解決法をご存知の方がいらっしゃればご教授お願いいたします。

Swift

1import UIKit 2import AudioToolbox 3import AVFoundation 4 5 6class ViewController: UIViewController, AVAudioRecorderDelegate { 7 8 let fileManager = FileManager() 9 var soundId:SystemSoundID = 0 10 var audioRecorder: AVAudioRecorder? 11 var timer: Timer! 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 // AudioSession setup 16 let session = AVAudioSession.sharedInstance() 17 try! session.setCategory(AVAudioSessionCategoryPlayAndRecord) 18 try! session.setActive(true) 19 // SoundURL setup 20 let soundUrl = Bundle.main.url(forResource: "click", withExtension: "mp3")! 21 AudioServicesCreateSystemSoundID(soundUrl as CFURL, &soundId) 22 //Recorder setup 23 let recordSetting : [String : Any] = [ 24 AVEncoderAudioQualityKey : AVAudioQuality.min.rawValue, 25 AVEncoderBitRateKey : 16, 26 AVNumberOfChannelsKey: 2, 27 AVSampleRateKey: 44100.0 28 ] 29 do { 30 try audioRecorder = AVAudioRecorder(url: fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("record.caf"), settings: recordSetting) 31 audioRecorder?.delegate = self 32 } catch { 33 print("error") 34 } 35 } 36 37 // 録音開始ボタン 38 @IBAction func pushRecordButton(sender: AnyObject) { 39 timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.playClickSound), userInfo: nil, repeats: true) 40 audioRecorder?.record() 41 } 42 43 @objc func playClickSound(tm: Timer) { 44 AudioServicesPlaySystemSound(soundId) 45 } 46 47 // 録音停止ボタン 48 @IBAction func pushRecordStopButton(sender: AnyObject) { 49 audioRecorder?.stop() 50 timer.invalidate() 51 } 52} 53

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

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

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

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

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

guest

回答1

0

ベストアンサー

勘違いでしたらすいません。
端末がサイレントモードになっていたりしませんでしょうか?サウンド音は着信通知音量の大きさで決まります。(以前同じ現象ではまったことがありましたので。。。)
http://bamka.info/2-volume-type

投稿2018/04/09 22:32

newmt

総合スコア1277

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

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

satoban

2018/04/09 22:36

ご回答ありがとうございます。 残念ながらサイレントにはなっていませんでした。 記載したソースは質問のために編集してあり、実際は録音開始とは別にメトロノームのみを鳴らすことができるように実装してあるのですが、そちらでは音が鳴るようになっています。 メトロノーム音のみの再生は問題なく動作しますが、録音と同時に再生を行うとメトロノーム音が鳴らなくなります。 iPhoneの仕様なのでしょうか…
satoban

2018/04/11 08:21

なんと、AVAudioEngineというものを知りませんでした! AVAudioEngineを使用して実機で動作させたところ、録音と再生が同時にできました! ありがとうございます! 残る課題は指定したリズムでメトロノーム音を鳴らすことですが、「録音と同時に再生」という質問にはバッチリの方法を教えていただいたのでベストアンサーとさせていただきます。 AVAudioEngineは1つのプレイヤーから1つの音しか再生できないみたいですね。複数のプレイヤーを作ってみて試したいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問