アプリ開発初心者です.SwiftUIで簡易的なピアノアプリを作成しています.
- キーをタップすると音が鳴る
- キー上でドラッグすると音が変わる
- ピッチを変えるとキーの音が変わる
という仕様を実装することが目標です.これらの仕様を満たすように作ってみたのですが,動画のとおり,処理方法の問題なのか音がなる際にノイズ音が発生しています.このノイズ音が鳴らないようにするための解決策・改善方法などあれば教えていただけると幸いです.
ソースコード
SwiftUI
1 @State private var noteNum: UInt8 = 0 2 @State private var soundKey: UInt8 = 9 3 @State private var location: CGPoint = .zero 4 5 var body: some View { 6 let sampler = Sampler(noteNum: noteNum) 7 let drag = DragGesture(minimumDistance: 0.0, coordinateSpace: .local) 8 .onChanged({ drag in 9 self.location = drag.location 10 if (self.location.y >= 70 && self.location.y <= 180) { 11 switch (self.location.x) { 12 case (34 ... 97): 13 noteNum = upperKeySound[0] + self.soundKey 14 case (100 ... 163): 15 noteNum = upperKeySound[1] + self.soundKey 16 case (166 ... 229): 17 noteNum = upperKeySound[2] + self.soundKey 18 case(232 ... 295): 19 noteNum = upperKeySound[3] + self.soundKey 20 case(298 ... 361): 21 noteNum = upperKeySound[4] + self.soundKey 22 case(364 ... 427): 23 noteNum = upperKeySound[5] + self.soundKey 24 case(430 ... 493): 25 noteNum = upperKeySound[6] + self.soundKey 26 case(496 ... 559): 27 noteNum = upperKeySound[7] + self.soundKey 28 case(562 ... 625): 29 noteNum = upperKeySound[8] + self.soundKey 30 default: 31 noteNum = 0 32 } 33 } else if (self.location.y >= 190 && self.location.y <= 300) { 34 switch (self.location.x) { 35 case (1 ... 64): 36 noteNum = lowerKeySound[0] + self.soundKey 37 case (67 ... 130): 38 noteNum = lowerKeySound[1] + self.soundKey 39 case (133 ... 196): 40 noteNum = lowerKeySound[2] + self.soundKey 41 case(199 ... 262): 42 noteNum = lowerKeySound[3] + self.soundKey 43 case(265 ... 328): 44 noteNum = lowerKeySound[4] + self.soundKey 45 case(331 ... 394): 46 noteNum = lowerKeySound[5] + self.soundKey 47 case(397 ... 460): 48 noteNum = lowerKeySound[6] + self.soundKey 49 case(463 ... 526): 50 noteNum = lowerKeySound[7] + self.soundKey 51 case(529 ... 592): 52 noteNum = lowerKeySound[8] + self.soundKey 53 case(595 ... 658): 54 noteNum = lowerKeySound[9] + self.soundKey 55 default: 56 noteNum = 0 57 } 58 } 59 sampler.play() 60 }) 61 .onEnded({ _ in 62 sampler.stop() 63 noteNum = 0 64 self.location = .zero 65 })
DragGestureでドラッグしている座標を取得して,あるキー上に座標がきたとき,そのキーの音が鳴ります.
sampler.play()で音が鳴り,sampler.stop()で停止します.
noteNumはMIDIのノートナンバーで,Samplerクラスに渡すことでそのノートナンバーの音が鳴ります.
soundKeyは音調です.
teratailの利用も初めてなので情報の不足等あるかもしれませんが,アドバイスよろしくお願いします.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。