From db33f0567958cddb9d20433d31d69c44688817b7 Mon Sep 17 00:00:00 2001 From: talksik Date: Tue, 4 Jan 2022 09:30:44 -0800 Subject: [PATCH] good enough sound effect --- nirvana-ios.xcodeproj/project.pbxproj | 8 ++-- .../Views/InnerCircle/CircleGridView.swift | 4 -- .../InnerCircle/InnerCircleViewModel.swift | 38 +++++++++--------- nirvana-ios/sounds/woosh.mp3 | Bin 38271 -> 26751 bytes 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/nirvana-ios.xcodeproj/project.pbxproj b/nirvana-ios.xcodeproj/project.pbxproj index 5220a96..1e6ac67 100644 --- a/nirvana-ios.xcodeproj/project.pbxproj +++ b/nirvana-ios.xcodeproj/project.pbxproj @@ -17,7 +17,6 @@ 890919A42781845D0025F4BB /* AlertToast in Frameworks */ = {isa = PBXBuildFile; productRef = 890919A32781845D0025F4BB /* AlertToast */; }; 890919A7278299590025F4BB /* RuleBook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890919A6278299590025F4BB /* RuleBook.swift */; }; 890919AB2782DC760025F4BB /* ProgressBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890919AA2782DC760025F4BB /* ProgressBarView.swift */; }; - 890919B3278424C70025F4BB /* woosh.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 890919B2278424C70025F4BB /* woosh.mp3 */; }; 890C245D277BF628009B4A30 /* AgoraRtcKit in Frameworks */ = {isa = PBXBuildFile; productRef = 890C245C277BF628009B4A30 /* AgoraRtcKit */; }; 890C2460277BF896009B4A30 /* AgoraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890C245F277BF896009B4A30 /* AgoraViewController.swift */; }; 890C2462277BF935009B4A30 /* CallView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890C2461277BF935009B4A30 /* CallView.swift */; }; @@ -45,6 +44,7 @@ 892179E42765FEB8001E6C60 /* FooterControlsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 892179E32765FEB8001E6C60 /* FooterControlsView.swift */; }; 892179E62765FECD001E6C60 /* FooterControlsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 892179E52765FECD001E6C60 /* FooterControlsViewModel.swift */; }; 89288ECB27675B9F00E962C4 /* OnboardingTemplateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89288ECA27675B9F00E962C4 /* OnboardingTemplateView.swift */; }; + 894E41D92784BB8000A68728 /* woosh.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 894E41D82784BB8000A68728 /* woosh.mp3 */; }; 894E80BE276ED7A700624B72 /* avatars.swift in Sources */ = {isa = PBXBuildFile; fileRef = 894E80BD276ED7A700624B72 /* avatars.swift */; }; 894E80C1276EFD0500624B72 /* AudioPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 894E80C0276EFD0400624B72 /* AudioPlayerView.swift */; }; 894E80C327702E5900624B72 /* AddBasicInfoViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 894E80C227702E5800624B72 /* AddBasicInfoViewModel.swift */; }; @@ -110,7 +110,6 @@ 8909199D278155920025F4BB /* UserStatusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserStatusView.swift; sourceTree = ""; }; 890919A6278299590025F4BB /* RuleBook.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleBook.swift; sourceTree = ""; }; 890919AA2782DC760025F4BB /* ProgressBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressBarView.swift; sourceTree = ""; }; - 890919B2278424C70025F4BB /* woosh.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = woosh.mp3; sourceTree = ""; }; 890C245F277BF896009B4A30 /* AgoraViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgoraViewController.swift; sourceTree = ""; }; 890C2461277BF935009B4A30 /* CallView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallView.swift; sourceTree = ""; }; 890C2463277BFA97009B4A30 /* AgroRep.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgroRep.swift; sourceTree = ""; }; @@ -137,6 +136,7 @@ 892179E32765FEB8001E6C60 /* FooterControlsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FooterControlsView.swift; sourceTree = ""; }; 892179E52765FECD001E6C60 /* FooterControlsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FooterControlsViewModel.swift; sourceTree = ""; }; 89288ECA27675B9F00E962C4 /* OnboardingTemplateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTemplateView.swift; sourceTree = ""; }; + 894E41D82784BB8000A68728 /* woosh.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = woosh.mp3; sourceTree = ""; }; 894E80BD276ED7A700624B72 /* avatars.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = avatars.swift; sourceTree = ""; }; 894E80C0276EFD0400624B72 /* AudioPlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioPlayerView.swift; sourceTree = ""; }; 894E80C227702E5800624B72 /* AddBasicInfoViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddBasicInfoViewModel.swift; sourceTree = ""; }; @@ -211,8 +211,8 @@ 8909199A277EFDE50025F4BB /* sounds */ = { isa = PBXGroup; children = ( + 894E41D82784BB8000A68728 /* woosh.mp3 */, 8909199B277EFDF30025F4BB /* joinSound.mp3 */, - 890919B2278424C70025F4BB /* woosh.mp3 */, 89091998277EFDCC0025F4BB /* leaveSound.mp3 */, ); path = sounds; @@ -629,7 +629,7 @@ 891A15E827653A7100B26659 /* Preview Assets.xcassets in Resources */, 8909199C277EFDF30025F4BB /* joinSound.mp3 in Resources */, 891A15E527653A7100B26659 /* Assets.xcassets in Resources */, - 890919B3278424C70025F4BB /* woosh.mp3 in Resources */, + 894E41D92784BB8000A68728 /* woosh.mp3 in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/nirvana-ios/Views/InnerCircle/CircleGridView.swift b/nirvana-ios/Views/InnerCircle/CircleGridView.swift index 35f52ed..4c3f74a 100644 --- a/nirvana-ios/Views/InnerCircle/CircleGridView.swift +++ b/nirvana-ios/Views/InnerCircle/CircleGridView.swift @@ -369,8 +369,6 @@ struct CircleGridView: View { } self.animateLiveConvos = true - - self.innerCircleVM.playWoosh() } .onReceive(self.authSessionStore.$messagesArr) {_ in // TODO: don't know if this fires if I am active and I receive a message but that's not something I am allowing right now with the continuous convo feature @@ -383,8 +381,6 @@ struct CircleGridView: View { } // scrollview reader } - - private func haveNewMessageFromFriend(friendDbId: String) -> Bool { if self.authSessionStore.user != nil { let userId = self.authSessionStore.user!.id // O(1) // currUser who is signed in diff --git a/nirvana-ios/Views/InnerCircle/InnerCircleViewModel.swift b/nirvana-ios/Views/InnerCircle/InnerCircleViewModel.swift index 10e32c5..51ece8a 100644 --- a/nirvana-ios/Views/InnerCircle/InnerCircleViewModel.swift +++ b/nirvana-ios/Views/InnerCircle/InnerCircleViewModel.swift @@ -73,6 +73,7 @@ class InnerCircleViewModel: NSObject, ObservableObject { var audioRecorder : AVAudioRecorder! var queuePlayer = AVQueuePlayer() + var avplayer: AVPlayer? private var cachedPlayerItemsDict: [String: URL] = [:] // firebase audio url to local url @Published var isRecording : Bool = false @@ -203,24 +204,7 @@ extension InnerCircleViewModel { return FileManager.default.temporaryDirectory } - func playWoosh() { - if let wooshFilePath = Bundle.main.url(forResource: "woosh", withExtension: "mp3") { - self.stopPlayingAnyAudio() - - print(wooshFilePath) - - let player = AVPlayer(url: wooshFilePath) - player.play() - -// self.queuePlayer = AVQueuePlayer(playerItem: AVPlayerItem(url: wooshFilePath)) -// self.queuePlayer.automaticallyWaitsToMinimizeStalling = false -// self.queuePlayer.play() - } - else { - print("didn't get the ath") - } - } - + } // handling saving device token for notifications @@ -274,6 +258,24 @@ extension InnerCircleViewModel { // everything to do with listening to messages extension InnerCircleViewModel { + func playWoosh() { + if let wooshFilePath = Bundle.main.url(forResource: "woosh", withExtension: "mp3") { + self.stopPlayingAnyAudio() + + print(wooshFilePath) + + self.avplayer = AVPlayer(url: wooshFilePath) + avplayer?.play() + +// self.queuePlayer = AVQueuePlayer(playerItem: AVPlayerItem(url: wooshFilePath)) +// self.queuePlayer.automaticallyWaitsToMinimizeStalling = false +// self.queuePlayer.play() + } + else { + print("didn't get the ath") + } + } + func stopPlayingAnyAudio() { self.queuePlayer.removeAllItems() } diff --git a/nirvana-ios/sounds/woosh.mp3 b/nirvana-ios/sounds/woosh.mp3 index f65c2cef20497ff3db204d24d56d545a3e4e8e0f..898a690b30072ff5531b0927f8e84bd75dec2227 100644 GIT binary patch delta 6730 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 HE69HVY$72} delta 6267 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