class VoiceRecogViewController: UIViewController, AVAudioPlayerDelegate, AVAudioRecorderDelegate {
var audioPlayer: AVAudioPlayer?
var audioRecorder: AVAudioRecorder?
var error: NSError?
var soundFileURL: URL?
var soundFilePath: String = ""
var data : NSData?
@IBOutlet weak var startRocordButton: UIButton!
@IBOutlet weak var stopRecordButton: UIButton!
@IBOutlet weak var playRecordButton: UIButton!
@IBOutlet weak var continueButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
playRecordButton.isEnabled = false
stopRecordButton.isEnabled = false
let dirPaths =
NSSearchPathForDirectoriesInDomains(.documentDirectory,
.userDomainMask, true)
let docsDir = dirPaths[0]
soundFilePath = (docsDir as NSString).appendingPathComponent("sound.wav")
soundFileURL = URL(fileURLWithPath: soundFilePath)
let recordSettings = [AVEncoderAudioQualityKey: AVAudioQuality.min.rawValue,
AVEncoderBitRateKey: 16,
AVNumberOfChannelsKey: 2,
AVSampleRateKey: 44100.0] as [String : Any]
let audioSession = AVAudioSession.sharedInstance()
try! audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [])
try! audioSession.setActive(true)
if let err = error {
print("audioSession error: \(err.localizedDescription)")
}
do {
audioRecorder = try AVAudioRecorder(url: soundFileURL!,
settings: recordSettings as [String : AnyObject])
} catch {
audioRecorder = nil
}
audioRecorder?.prepareToRecord()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func startRecord(_ sender: AnyObject) {
if audioRecorder?.isRecording == false {
playRecordButton.isEnabled = false
startRocordButton.isEnabled = false
stopRecordButton.isEnabled = true
audioRecorder?.record()
}
}
@IBAction func stopRecord(_ sender: AnyObject) {
stopRecordButton.isEnabled = false
playRecordButton.isEnabled = true
startRocordButton.isEnabled = true
if audioRecorder?.isRecording == true {
audioRecorder?.stop()
} else {
audioPlayer?.stop()
}
}
@IBAction func playRecord(_ sender: AnyObject) {
if audioRecorder?.isRecording == false {
stopRecordButton.isEnabled = true
startRocordButton.isEnabled = false
}
do {
try audioPlayer = AVAudioPlayer(contentsOf: soundFileURL!)
audioPlayer?.delegate = self
audioPlayer?.prepareToPlay()
audioPlayer?.play()
} catch {
print("audioPlayer error")
}
}
@IBAction func continueRegist(_ sender: AnyObject) {
let headers: HTTPHeaders = ["Authorization": "Token ___(**token**)_____",
"Accept": "application/json"]
data = NSData (contentsOf: soundFileURL!)
let parameters: Parameters = ["from_account_id": "3",
"to_account_id": "4",
"file": data!,
]
let URL = "http://leaofımjpüsmfweüdıpckfw"
Alamofire.request(URL, method: .put, parameters: parameters, headers: headers).responseJSON { response in
if let data = response.result.value {
print(data)
}
}
}
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
startRocordButton.isEnabled = true
stopRecordButton.isEnabled = false
}
func audioPlayerDecodeErrorDidOccur(_ player: AVAudioPlayer, error: Error?) {
print("Audio Play Decode Error")
}
func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool) {
}
func audioRecorderEncodeErrorDidOccur(_ recorder: AVAudioRecorder, error: Error?) {
print("Audio Record Encode Error")
}
Я поделился своим кодом выше. Здесь точка записывает аудио как .wav, воспроизводит его в приложении и в continueRegist part Я хочу вызвать метод put с alamofire и загрузить аудио на наш amazons3server. Запись и воспроизведение аудио-части полностью работают. Проблема заключается в методе continueRegist. После вызова метода я получаю правильный ответ, он выглядит успешным. Затем я проверяю его с URL-адреса нашего s3-сервера. Звук кажется загруженным, но когда я загружаю и воспроизвожу его, он не работает. Я не мог понять, где проблема.Не удается загрузить аудиофайл через сервер с помощью Alamofire
Кроме того, когда я пытаюсь загрузить из Postman с выбором файла и предоставления правильной информации о форме, я могу прослушать звук, который я загрузил на сервер s3. Что здесь может быть неправильным?
Ниже вы можете найти свой запрос через Почтальон:
Я забыл выбрать файл, когда я беру скриншот, но это просто .wav файл.
Пожалуйста, не стесняйтесь задавать мне вопросы, те, не удовлетворяет вас.
Надеюсь, вы можете мне помочь.
Спасибо!
Какая ошибка вы получаете? – ELKA
Ошибка не указана. И сервер, и amazon s3 принимают мой запрос и помещают файл в s3. По некоторым причинам я не понимаю и верю в проблему где-то там, когда я вручную загружаю файл из ссылки s3, мой файл не может быть воспроизведен. Обратите внимание, что я могу воспроизводить аудиофайл с загрузкой, которую я отправляю через Postman. Может возникнуть проблема с конструированием тела. –
Таким образом, проблема заключается в том, когда вы загружаете звук, не загружая его, так как вы можете воспроизводить звук через Postman – ELKA