커뮤니티 오디오 녹음
- audioSession.setCategory mode videoRecording으로 수정
This commit is contained in:
parent
0be8d0d98a
commit
85a871693c
|
@ -23,6 +23,8 @@ struct CreatorCommunityRecordingVoiceView: View {
|
||||||
@Binding var fileName: String
|
@Binding var fileName: String
|
||||||
@Binding var soundData: Data?
|
@Binding var soundData: Data?
|
||||||
|
|
||||||
|
@State private var tempFileName = ""
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ZStack {
|
ZStack {
|
||||||
Color.black.opacity(0.7)
|
Color.black.opacity(0.7)
|
||||||
|
@ -65,9 +67,8 @@ struct CreatorCommunityRecordingVoiceView: View {
|
||||||
.onTapGesture {
|
.onTapGesture {
|
||||||
if !soundManager.isLoading {
|
if !soundManager.isLoading {
|
||||||
if !soundManager.isRecording {
|
if !soundManager.isRecording {
|
||||||
let fileName = "\(Date().timeIntervalSince1970 * 1000).m4a"
|
tempFileName = "now_voice_\(Int(Date().timeIntervalSince1970 * 1000)).m4a"
|
||||||
self.fileName = fileName
|
soundManager.startRecording(tempFileName)
|
||||||
soundManager.startRecording(fileName)
|
|
||||||
} else {
|
} else {
|
||||||
soundManager.stopRecording()
|
soundManager.stopRecording()
|
||||||
recordMode = .PLAY
|
recordMode = .PLAY
|
||||||
|
@ -84,7 +85,7 @@ struct CreatorCommunityRecordingVoiceView: View {
|
||||||
|
|
||||||
Text("삭제")
|
Text("삭제")
|
||||||
.font(.custom(Font.medium.rawValue, size: 15.3))
|
.font(.custom(Font.medium.rawValue, size: 15.3))
|
||||||
.foregroundColor(Color(hex: "bbbbbb").opacity(0))
|
.foregroundColor(Color.graybb.opacity(0))
|
||||||
|
|
||||||
Spacer()
|
Spacer()
|
||||||
|
|
||||||
|
@ -112,7 +113,6 @@ struct CreatorCommunityRecordingVoiceView: View {
|
||||||
soundManager.stopAudio()
|
soundManager.stopAudio()
|
||||||
soundManager.deleteAudioFile()
|
soundManager.deleteAudioFile()
|
||||||
recordMode = .RECORD
|
recordMode = .RECORD
|
||||||
fileName = "녹음"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Spacer()
|
Spacer()
|
||||||
|
@ -134,7 +134,6 @@ struct CreatorCommunityRecordingVoiceView: View {
|
||||||
soundManager.stopAudio()
|
soundManager.stopAudio()
|
||||||
soundManager.deleteAudioFile()
|
soundManager.deleteAudioFile()
|
||||||
recordMode = .RECORD
|
recordMode = .RECORD
|
||||||
fileName = "녹음"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Text("녹음완료")
|
Text("녹음완료")
|
||||||
|
@ -147,6 +146,7 @@ struct CreatorCommunityRecordingVoiceView: View {
|
||||||
do {
|
do {
|
||||||
let soundData = try Data(contentsOf: soundManager.getAudioFileURL())
|
let soundData = try Data(contentsOf: soundManager.getAudioFileURL())
|
||||||
self.soundData = soundData
|
self.soundData = soundData
|
||||||
|
self.fileName = tempFileName
|
||||||
self.isShowing = false
|
self.isShowing = false
|
||||||
} catch {
|
} catch {
|
||||||
errorMessage = "녹음파일을 생성하지 못했습니다.\n다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
|
errorMessage = "녹음파일을 생성하지 못했습니다.\n다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
|
||||||
|
|
|
@ -26,14 +26,14 @@ class CreatorCommunitySoundManager: NSObject, ObservableObject {
|
||||||
var player: AVAudioPlayer!
|
var player: AVAudioPlayer!
|
||||||
var audioRecorder: AVAudioRecorder!
|
var audioRecorder: AVAudioRecorder!
|
||||||
|
|
||||||
var fileName = "record.m4a"
|
var fileName = "now_voice.m4a"
|
||||||
|
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: .videoRecording)
|
||||||
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 {
|
||||||
|
@ -56,6 +56,9 @@ class CreatorCommunitySoundManager: NSObject, ObservableObject {
|
||||||
func startRecording(_ fileName: String) {
|
func startRecording(_ fileName: String) {
|
||||||
self.fileName = fileName
|
self.fileName = fileName
|
||||||
|
|
||||||
|
player?.stop()
|
||||||
|
player = nil
|
||||||
|
|
||||||
isLoading = true
|
isLoading = true
|
||||||
let settings = [
|
let settings = [
|
||||||
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
|
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
|
||||||
|
@ -66,6 +69,9 @@ class CreatorCommunitySoundManager: NSObject, ObservableObject {
|
||||||
]
|
]
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
try audioSession.setCategory(.playAndRecord, mode: .videoRecording)
|
||||||
|
try audioSession.setActive(true)
|
||||||
|
|
||||||
audioRecorder = try AVAudioRecorder(url: getAudioFileURL(), settings: settings)
|
audioRecorder = try AVAudioRecorder(url: getAudioFileURL(), settings: settings)
|
||||||
audioRecorder.record()
|
audioRecorder.record()
|
||||||
isRecording = true
|
isRecording = true
|
||||||
|
@ -91,9 +97,9 @@ class CreatorCommunitySoundManager: 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(.playback, 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))
|
||||||
|
|
|
@ -91,6 +91,7 @@ struct CreatorCommunityWriteView: View {
|
||||||
.background(Color.bg)
|
.background(Color.bg)
|
||||||
.cornerRadius(5.3)
|
.cornerRadius(5.3)
|
||||||
.frame(maxWidth: .infinity)
|
.frame(maxWidth: .infinity)
|
||||||
|
.contentShape(Rectangle())
|
||||||
.overlay(
|
.overlay(
|
||||||
RoundedRectangle(cornerRadius: 5.3)
|
RoundedRectangle(cornerRadius: 5.3)
|
||||||
.stroke(Color.button, lineWidth: 1)
|
.stroke(Color.button, lineWidth: 1)
|
||||||
|
|
Loading…
Reference in New Issue