我无法在录制音频时找到文件的大小

时间:2017-07-16 15:29:45

标签: ios swift avaudioplayer filesize

这是我的整个视图控制器,带有一些基本的录音和播放内容,它记录并播放正常,但我想在控制台中打印文件大小,不知怎的,它给了我一个错误, $ 无法获取本地路径的文件属性:file:/// Users / ashutoshmane / Library / Developer / CoreSimulator / Devices / DF46178B-BD38-45A9-87D8-4D4F378EEE8B / data / Containers / Data / Application / B949B5FF- 9ACB-485F-BAE5-39F2D32664A0 / Documents / sound.caf,错误:错误Domain = NSCocoaErrorDomain Code = 260“由于没有这样的文件,无法打开文件”sound.caf“。

import UIKit

导入AudioKit 导入AVFoundation

类MyViewController:UIViewController,AVAudioPlayerDelegate,AVAudioRecorderDelegate {     //音频播放器和rec vars

var audioPlayer: AVAudioPlayer?
var audioRecorder: AVAudioRecorder?
var fileSize:UInt64 = 0

//record settings dictionary
var recordSettings =
    [AVEncoderAudioQualityKey: AVAudioQuality.min.rawValue,
     AVEncoderBitRateKey : 128,
      AVNumberOfChannelsKey:1 ,
        AVSampleRateKey: 22050 ] as [String : Any]



//creating file and checking size
func createFile() -> URL {
    let dirPaths = FileManager.default.urls(for: .documentDirectory,
                                            in: .userDomainMask)
    let soundFileURL = dirPaths[0].appendingPathComponent("sound.caf")
    print(soundFileURL)
    return soundFileURL
}

func KnowFileSize(filesUrl:URL){

    let StringURL=String(describing:filesUrl)
    do {
        let fileAttribute=try FileManager.default.attributesOfItem(atPath:StringURL )
        fileSize=fileAttribute[FileAttributeKey.size] as! UInt64
        print( "file size is:", fileSize)
    }
    catch {
        print("Failed to get file attributes for local path: \(StringURL) with error: \(error)")
    }



}




@IBOutlet weak var recordButton: UIButton!

@IBOutlet weak var playButton: UIButton!

@IBOutlet weak var stopButton: UIButton!

//record audio
@IBAction func recordAudio(_ sender: Any) {
    if audioRecorder?.isRecording == false {
        playButton.isEnabled = false
        stopButton.isEnabled = true
        audioRecorder?.record()
    }
}

//stop button
@IBAction func stopAudio(_ sender: Any) {
    stopButton.isEnabled = false
    playButton.isEnabled = true
    recordButton.isEnabled = true

    if audioRecorder?.isRecording == true {
        audioRecorder?.stop()
    } else {
        audioPlayer?.stop()
    }

}


//play button
@IBAction func playAudio(_ sender: Any) {

    if audioRecorder?.isRecording == false {
        stopButton.isEnabled = true
        recordButton.isEnabled = false

        do {
            try audioPlayer = AVAudioPlayer(contentsOf:
                (audioRecorder?.url)!)
            audioPlayer!.delegate = self
            audioPlayer!.prepareToPlay()
            audioPlayer!.play()
        } catch let error as NSError {
            print("audioPlayer error: \(error.localizedDescription)")
        }
    }
}

//视图加载了//     覆盖func viewDidLoad(){

    super.viewDidLoad()
    print("in view didload")

    playButton.isEnabled = false
    stopButton.isEnabled = false

    //creating file in VDL

    let soundFile=createFile()

    print(AVSampleRateKey)
    let audioSession = AVAudioSession.sharedInstance()

    do {
        try audioSession.setCategory(
            AVAudioSessionCategoryPlayAndRecord)
    } catch let error as NSError {
        print("audioSession error: \(error.localizedDescription)")
    }

    do {

        try audioRecorder = AVAudioRecorder(url: soundFile,
                                            settings: recordSettings as [String : AnyObject])
        audioRecorder?.prepareToRecord()
        print(recordSettings)

    } catch let error as NSError {
        print("audioSession error: \(error.localizedDescription)")
    }

    //ending audio recorder task and checking file size
    audioRecorderDidFinishRecording(audioRecorder!, successfully: true)
    print(soundFile)
    KnowFileSize(filesUrl:soundFile)



}





//delegate functions


func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
    recordButton.isEnabled = true
    stopButton.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")
}

}

0 个答案:

没有答案