Сохраненный путь показывается с помощью симулятора, но не при тестировании на реальном устройстве SmartWatch (Audio Recorder) - PullRequest
0 голосов
/ 24 мая 2019

Надеюсь, вы мне поможете. Я попытался написать небольшую простую программу, где я записываю звук в течение 5 секунд и сохраняю его в каталоге документов.

Я проверил его с помощью симулятора, и я увидел путь в выходных данных, а также увидел файл sound.wav, который был создан. И я могу включить этот файл sound.wav.

Вот путь, который я получил с симулятором:

(file:///Users/Username/Library/Developer/CoreSimulator/Devices/3721A435-C765-4C8D-BA59-04477B070F80/data/Containers/Data/PluginKitPlugin/476CD646-D534-46C0-B5D2-88D7429DFF8F/Documents/sound.wav)

Однако, когда я запускаю его на реальных умных часах, в Xcode ничего не выводится. Несмотря на то, что я вставил в код команды печати, они не отображаются. Я не знаю, в чем проблема.

Я также хочу получить аудиофайл и отправить его на сервер (mysql). Как можно получить настоящий аудиофайл, файл wav в этом случае? И как я могу получить путь из каталога документов, где предполагается сохранить аудиофайл.

Вот как выглядит мой код:

Надеюсь, вы мне поможете. Большое спасибо.

import WatchKit
import Foundation
import AVFoundation

class InterfaceController: WKInterfaceController, AVAudioRecorderDelegate{
    @IBOutlet weak var btn: WKInterfaceButton!
    var recordingSession : AVAudioSession!
    var audioRecorder : AVAudioRecorder!
    var settings = [String : Any]()

    override func awake(withContext context: Any?) {
        super.awake(withContext: context)
        recordingSession = AVAudioSession.sharedInstance()

        do{
            try recordingSession.setCategory(AVAudioSession.Category.playAndRecord)
            try recordingSession.setActive(true)
            recordingSession.requestRecordPermission(){[unowned self] allowed in
            DispatchQueue.main.async {
                if allowed{
                    print("Allow")
                } else{
                    print("Don't Allow")
                }
            }
        }
    }
        catch{
            print("failed to record!")
        }
        // Configure interface objects here.

   // Audio Settings

        settings = [
            AVFormatIDKey:Int(kAudioFormatLinearPCM),
            AVSampleRateKey:44100.0,
            AVNumberOfChannelsKey:1,
            AVLinearPCMBitDepthKey:8,
            AVLinearPCMIsFloatKey:false,
            AVLinearPCMIsBigEndianKey:false,
            AVEncoderAudioQualityKey:AVAudioQuality.max.rawValue

            ]

    }

    override func willActivate() {
        // This method is called when watch view controller is about to be visible to user
        super.willActivate()
    }

    override func didDeactivate() {
        // This method is called when watch view controller is no longer visible
        super.didDeactivate()
    }


    func directoryURL() -> NSURL? {
        let fileManager = FileManager.default
        let urls = fileManager.urls(for: .documentDirectory, in: .userDomainMask)
        let documentDirectory = urls[0] as NSURL
        let soundUrl = documentDirectory.appendingPathComponent("sound.wav")
        print(soundUrl)
        return soundUrl as NSURL?

    }

    func startRecording(){
        let audioSession = AVAudioSession.sharedInstance()

        do{
            audioRecorder = try AVAudioRecorder(url: self.directoryURL()! as URL,
            settings: settings)
            audioRecorder.delegate = self
            audioRecorder.prepareToRecord()
            audioRecorder.record(forDuration: 5.0)

        }
        catch {
            finishRecording(success: false)
        }

        do {
            try audioSession.setActive(true)
            audioRecorder.record()
        } catch {
        }
    }

    func finishRecording(success: Bool) {
        audioRecorder.stop()
        if success {
            print(success)
        } else {
            audioRecorder = nil
            print("Somthing Wrong.")
        }
    }


    @IBAction func recordAudio() {
        if audioRecorder == nil {
            print("Pressed")
            self.btn.setTitle("Stop")
            self.btn.setBackgroundColor(UIColor(red: 119.0/255.0, green: 119.0/255.0, blue: 119.0/255.0, alpha: 1.0))
            self.startRecording()


        } else {
            self.btn.setTitle("Record")
            print("Pressed2")
            self.btn.setBackgroundColor(UIColor(red: 221.0/255.0, green: 27.0/255.0, blue: 50.0/255.0, alpha: 1.0))
            self.finishRecording(success: true)

        }
    }

    func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool) {
        if !flag {
            finishRecording(success: false)
        }
    }

}

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Просто из любопытства я хотел посмотреть, будет ли что-то напечатано в консоли вывода в терминах другого приложения.А другое приложение выводит операторы на консоль вывода.Таким образом, эта проблема не имеет ничего общего с xcode, я думаю. введите описание изображения здесь

0 голосов
/ 24 мая 2019

Путь к файлу для симулятора и реального устройства различен. Для симуляторов он использует хранилище файлов MacOS, тогда как на реальном устройстве он использует хранилище устройства.

...