大学の自主制作グループ課題でタイトルのような機能を持ち合わせたiOSアプリを作ろうとしているのですが、エラーがたくさん出てしまい困っています。どなたか教えてくださると幸いです。
エラーは以下のとおりです。
Swift
1(l25) 2sound.data // → Data型、音データが入っている 3エラーメッセージ 4Expected declaration 5 6(l41) 7override func viewDidLoad() { 8エラーメッセージ 9'viewDidLoad()' has already been overridden 10 11(l128) 12self.statusImage.isHidden = (levelMeter.mPeakPower >= -1.0) ? false : true 13エラーメッセージ 14Value of type 'ViewController' has no member 'statusImage'
全体のコードは以下の通りです。
Swift
1// 2// ViewController.swift 3// 4 5import UIKit 6import AVFoundation 7import AudioToolbox 8 9private func AudioQueueInputCallback( 10 inUserData: UnsafeMutableRawPointer?, 11 inAQ: AudioQueueRef, 12 inBuffer: AudioQueueBufferRef, 13 inSrartTime: UnsafePointer<AudioTimeStamp>, 14 inNumberPacketDescriptions: UInt32, 15 inPacketDescs: UnsafePointer<AudioStreamPacketDescription>?) { 16} 17 18class ViewController: UIViewController { 19 20 let sound = NSDataAsset(name: "imazinnza0") 21 sound.data // → Data型、音データが入っている 22 23 override func viewDidLoad() { 24 super.viewDidLoad() 25 // Do any additional setup after loading the view, typically from a nib. 26 } 27 28 override func didReceiveMemoryWarning() { 29 super.didReceiveMemoryWarning() 30 // Dispose of any resources that can be recreated. 31 } 32 33 // 音声入力用のキューと監視用タイマーの準備 34 var queue: AudioQueueRef! 35 var recordingTimer: Timer! 36 37 override func viewDidLoad() { 38 super.viewDidLoad() 39 // 録音レベルの検知を開始する 40 self.startUpdatingVolume() 41 } 42 43 override func viewDidDisappear(_ animated: Bool) { 44 super.viewDidDisappear(animated) 45 // 録音レベルの検知を停止する 46 self.stopUpdatingVolume() 47 } 48 49 // 以下の処理を実行したいタイミングでタイマーをスタートさせるだけで録音レベルが検知できる 50 51 // MARK: - 録音レベルを取得する処理 52 func startUpdatingVolume() { 53 // 録音データを記録するフォーマットを決定 54 var dataFormat = AudioStreamBasicDescription( 55 mSampleRate: 44100.0, 56 mFormatID: kAudioFormatLinearPCM, 57 mFormatFlags: AudioFormatFlags(kLinearPCMFormatFlagIsBigEndian | 58 kLinearPCMFormatFlagIsSignedInteger | 59 kLinearPCMFormatFlagIsPacked), 60 mBytesPerPacket: 2, 61 mFramesPerPacket: 1, 62 mBytesPerFrame: 2, 63 mChannelsPerFrame: 1, 64 mBitsPerChannel: 16, 65 mReserved: 0 66 ) 67 // オーディオキューのデータ型を定義 68 var audioQueue: AudioQueueRef? = nil 69 // エラーハンドリング 70 var error = noErr 71 // エラーハンドリング 72 error = AudioQueueNewInput( 73 &dataFormat, 74 AudioQueueInputCallback, 75 UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque()), 76 .none, 77 .none, 78 0, 79 &audioQueue 80 ) 81 if error == noErr { 82 self.queue = audioQueue 83 } 84 AudioQueueStart(self.queue, nil) 85 86 var enabledLevelMeter: UInt32 = 1 87 AudioQueueSetProperty( 88 self.queue, 89 kAudioQueueProperty_EnableLevelMetering, 90 &enabledLevelMeter, 91 UInt32(MemoryLayout<UInt32>.size) 92 ) 93 94 self.recordingTimer = Timer.scheduledTimer( 95 timeInterval: 1 / 30, 96 target: self, 97 selector: #selector(self.detectVolume(timer:)), 98 userInfo: nil, 99 repeats: true 100 ) 101 self.recordingTimer?.fire() 102 } 103 104 // 録音レベル検知処理を停止 105 func stopUpdatingVolume() { 106 // Finish observation 107 self.recordingTimer.invalidate() 108 self.recordingTimer = nil 109 AudioQueueFlush(self.queue) 110 AudioQueueStop(self.queue, false) 111 AudioQueueDispose(self.queue, true) 112 } 113 var levelMeter = AudioQueueLevelMeterState() 114 @objc func detectVolume(timer: Timer) { 115 var propertySize = UInt32(MemoryLayout<AudioQueueLevelMeterState>.size) 116 117 AudioQueueGetProperty( 118 self.queue, 119 kAudioQueueProperty_CurrentLevelMeterDB, 120 &levelMeter, 121 &propertySize) 122 123 // 取得した録音レベルに応じてimageを切り替える 124 self.statusImage.isHidden = (levelMeter.mPeakPower >= -1.0) ? false : true 125 print(levelMeter.mPeakPower) 126 } 127 128 // 録音レベルの値によってmp3ファイル”imazinzza0”を鳴らす 129 func setLabelText () { 130 if levelMeter.mPeakPower > -40.0 { 131 132 class ViewController: UIViewController { 133 var player: AVAudioPlayer? 134 135 func tapBtn() { 136 if let sound = NSDataAsset(name: "imazinnza0") { 137 player = try? AVAudioPlayer(data: sound.data) 138 player?.play() // → これで音が鳴る 139 } 140 } 141 } 142 143 } 144 } 145} 146 147
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/26 11:48