커뮤니티 오디오 녹음
- 녹음시간이 3분이 되면 녹음 멈춤
This commit is contained in:
@@ -8,14 +8,8 @@
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct CreatorCommunityRecordingVoiceView: View {
|
struct CreatorCommunityRecordingVoiceView: View {
|
||||||
enum RecordMode {
|
|
||||||
case RECORD, PLAY
|
|
||||||
}
|
|
||||||
|
|
||||||
@StateObject var soundManager = CreatorCommunitySoundManager()
|
@StateObject var soundManager = CreatorCommunitySoundManager()
|
||||||
|
|
||||||
@State var recordMode = RecordMode.RECORD
|
|
||||||
|
|
||||||
@Binding var isShowing: Bool
|
@Binding var isShowing: Bool
|
||||||
@Binding var isShowPopup: Bool
|
@Binding var isShowPopup: Bool
|
||||||
@Binding var errorMessage: String
|
@Binding var errorMessage: String
|
||||||
@@ -57,7 +51,7 @@ struct CreatorCommunityRecordingVoiceView: View {
|
|||||||
.foregroundColor(.white)
|
.foregroundColor(.white)
|
||||||
.padding(.top, 80)
|
.padding(.top, 80)
|
||||||
|
|
||||||
switch recordMode {
|
switch soundManager.recordMode {
|
||||||
case .RECORD:
|
case .RECORD:
|
||||||
if !soundManager.isLoading {
|
if !soundManager.isLoading {
|
||||||
Image(soundManager.isRecording ? "ic_record_stop" : "ic_record")
|
Image(soundManager.isRecording ? "ic_record_stop" : "ic_record")
|
||||||
@@ -71,7 +65,7 @@ struct CreatorCommunityRecordingVoiceView: View {
|
|||||||
soundManager.startRecording(tempFileName)
|
soundManager.startRecording(tempFileName)
|
||||||
} else {
|
} else {
|
||||||
soundManager.stopRecording()
|
soundManager.stopRecording()
|
||||||
recordMode = .PLAY
|
soundManager.recordMode = .PLAY
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -112,12 +106,12 @@ struct CreatorCommunityRecordingVoiceView: View {
|
|||||||
.onTapGesture {
|
.onTapGesture {
|
||||||
soundManager.stopAudio()
|
soundManager.stopAudio()
|
||||||
soundManager.deleteAudioFile()
|
soundManager.deleteAudioFile()
|
||||||
recordMode = .RECORD
|
soundManager.recordMode = .RECORD
|
||||||
}
|
}
|
||||||
|
|
||||||
Spacer()
|
Spacer()
|
||||||
}
|
}
|
||||||
.padding(.top, 80)
|
.padding(.vertical, 52.3)
|
||||||
|
|
||||||
HStack(spacing: 13.3) {
|
HStack(spacing: 13.3) {
|
||||||
Text("다시 녹음")
|
Text("다시 녹음")
|
||||||
@@ -133,7 +127,7 @@ struct CreatorCommunityRecordingVoiceView: View {
|
|||||||
.onTapGesture {
|
.onTapGesture {
|
||||||
soundManager.stopAudio()
|
soundManager.stopAudio()
|
||||||
soundManager.deleteAudioFile()
|
soundManager.deleteAudioFile()
|
||||||
recordMode = .RECORD
|
soundManager.recordMode = .RECORD
|
||||||
}
|
}
|
||||||
|
|
||||||
Text("녹음완료")
|
Text("녹음완료")
|
||||||
@@ -154,7 +148,7 @@ struct CreatorCommunityRecordingVoiceView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.padding(.vertical, 40)
|
.padding(.bottom, 40)
|
||||||
.padding(.horizontal, 13.3)
|
.padding(.horizontal, 13.3)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,12 @@ import AVKit
|
|||||||
import Combine
|
import Combine
|
||||||
|
|
||||||
class CreatorCommunitySoundManager: NSObject, ObservableObject {
|
class CreatorCommunitySoundManager: NSObject, ObservableObject {
|
||||||
|
enum RecordMode {
|
||||||
|
case RECORD, PLAY
|
||||||
|
}
|
||||||
|
|
||||||
|
@Published var recordMode = RecordMode.RECORD
|
||||||
|
|
||||||
@Published var errorMessage = ""
|
@Published var errorMessage = ""
|
||||||
@Published var isShowPopup = false
|
@Published var isShowPopup = false
|
||||||
@Published var isLoading = false
|
@Published var isLoading = false
|
||||||
@@ -176,6 +182,11 @@ class CreatorCommunitySoundManager: NSObject, ObservableObject {
|
|||||||
let centiseconds = Int((elapsedTime - Double(minutes * 60) - Double(seconds)) * 100)
|
let centiseconds = Int((elapsedTime - Double(minutes * 60) - Double(seconds)) * 100)
|
||||||
|
|
||||||
timeString = String(format: "%02d:%02d.%02d", minutes, seconds, centiseconds)
|
timeString = String(format: "%02d:%02d.%02d", minutes, seconds, centiseconds)
|
||||||
|
|
||||||
|
if minutes >= 3 {
|
||||||
|
stopRecording()
|
||||||
|
recordMode = .PLAY
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
|
|||||||
@@ -24,13 +24,15 @@ class SoundManager: NSObject, ObservableObject {
|
|||||||
var startTimer: (() -> Void)?
|
var startTimer: (() -> Void)?
|
||||||
var stopTimer: (() -> Void)?
|
var stopTimer: (() -> Void)?
|
||||||
|
|
||||||
|
let audioSession = AVAudioSession.sharedInstance()
|
||||||
|
|
||||||
func prepareRecording() {
|
func prepareRecording() {
|
||||||
isLoading = true
|
isLoading = true
|
||||||
|
|
||||||
let audioSession = AVAudioSession.sharedInstance()
|
|
||||||
do {
|
do {
|
||||||
try audioSession.setCategory(.playAndRecord, mode: .default)
|
try audioSession.setCategory(.playAndRecord, mode: .default)
|
||||||
try audioSession.setActive(true)
|
try audioSession.setActive(true)
|
||||||
|
|
||||||
audioSession.requestRecordPermission() { [weak self] allowed in
|
audioSession.requestRecordPermission() { [weak self] allowed in
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
if !allowed {
|
if !allowed {
|
||||||
@@ -58,6 +60,9 @@ class SoundManager: NSObject, ObservableObject {
|
|||||||
]
|
]
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
try audioSession.setCategory(.playAndRecord, mode: .default)
|
||||||
|
try audioSession.setActive(true)
|
||||||
|
|
||||||
audioRecorder = try AVAudioRecorder(url: getAudioFileURL(), settings: settings)
|
audioRecorder = try AVAudioRecorder(url: getAudioFileURL(), settings: settings)
|
||||||
audioRecorder.record()
|
audioRecorder.record()
|
||||||
|
|
||||||
@@ -91,9 +96,9 @@ class SoundManager: NSObject, ObservableObject {
|
|||||||
isLoading = true
|
isLoading = true
|
||||||
|
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
let audioSession = AVAudioSession.sharedInstance()
|
|
||||||
do {
|
do {
|
||||||
try audioSession.setCategory(.playback, mode: .default)
|
try self.audioSession.setCategory(.playAndRecord, mode: .default)
|
||||||
|
try self.audioSession.setActive(true)
|
||||||
|
|
||||||
if let url = url {
|
if let url = url {
|
||||||
self.player = try AVAudioPlayer(data: Data(contentsOf: url))
|
self.player = try AVAudioPlayer(data: Data(contentsOf: url))
|
||||||
|
|||||||
Reference in New Issue
Block a user