ios - 将音频添加到 iphone 应用程序 xcode 7.3

标签 ios iphone swift avaudioplayer

我对 Swift 和 Xcode 还很陌生。

我正在尝试设计一个简单的相机应用程序。我已经成功集成了相机,除了我想在相机拍照时播放声音。我不确定该怎么做。

下面是我的代码,调用的时候一直报错

Error : (EXC_BAD_ACCESS(code=1, address=0x38)

in the line audioPlayer.play()

import UIKit
import AVFoundation

class ViewController: UIViewController {

var captureSession = AVCaptureSession()
var sessionOutput = AVCaptureStillImageOutput()
var previewLayer = AVCaptureVideoPreviewLayer()


    var kranz = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Din Daa Daa ; George Kranz", ofType: "mp3")!)
    var audioPlayer = AVAudioPlayer()


    override func viewDidLoad() {
        super.viewDidLoad()
        do {let audioPlayer = try AVAudioPlayer(contentsOfURL: kranz, fileTypeHint: nil)
        audioPlayer.prepareToPlay()

        }
       catch{
           print("error")
        }
    }



@IBOutlet weak var CameraView: UIView!

override func viewWillAppear(animated: Bool) {

    let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
    for device in devices {
        if device.position == AVCaptureDevicePosition.Back {

            do {
                let input = try AVCaptureDeviceInput(device: device as! AVCaptureDevice)
                if captureSession.canAddInput(input){
                    captureSession.addInput(input)
                    sessionOutput.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]

                    if captureSession.canAddOutput(sessionOutput){
                        captureSession.addOutput(sessionOutput)
                        captureSession.startRunning()
                        previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
                        previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
                        previewLayer.connection.videoOrientation = AVCaptureVideoOrientation.LandscapeRight
                        CameraView.layer.addSublayer(previewLayer)

                        previewLayer.position = CGPoint(x: self.CameraView.frame.width / 2, y: self.CameraView.frame.height / 2)
                        previewLayer.bounds = CameraView.frame

                    }
                }

            }
            catch{
                print("ERror")
            }
        }
    }
}


@IBAction func TakePhoto(sender: UIButton) {
    audioPlayer.play()
    if let videoConnection = sessionOutput.connectionWithMediaType(AVMediaTypeVideo){

        sessionOutput.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: {
            buffer, error in

            let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer)
            UIImageWriteToSavedPhotosAlbum(UIImage(data: imageData)!, nil, nil, nil)

            })
    }
}


}

最佳答案

import UIKit import AVFoundation

 class ViewController: UIViewController {

   var captureSession = AVCaptureSession()
   var sessionOutput = AVCaptureStillImageOutput()
   var previewLayer = AVCaptureVideoPreviewLayer()
   var audioPlayer = AVAudioPlayer()

   override viewDidLoad(){
      super.viewDidLoad()

          prepareMusic("LazerNoise",type : "mp3" )      
         } 

   func prepareMusic(name :String! , type :String!){

        let path = NSBundle.mainBundle().pathForResource(name, ofType: type)
        let soundURL = NSURL(fileURLWithPath: path!)
    do{
       try audioPlayer = AVAudioPlayer(contentsOfURL: soundURL)
       audioPlayer.prepareToPlay()
    }
  catch let err as NSError
   {
    print(err.debugDescription)
  }

 }

 func playNstop(){

    if audioPlayer.playing{

      audioPlayer.stop()
   }else{

    audioPlayer.play()
   }
 }



@IBOutlet weak var CameraView: UIView!

 override func viewWillAppear(animated: Bool) {

  let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
   for device in devices {
    if device.position == AVCaptureDevicePosition.Back {

        do {
            let input = try AVCaptureDeviceInput(device: device as! AVCaptureDevice)
            if captureSession.canAddInput(input){
                captureSession.addInput(input)
                sessionOutput.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]

                if captureSession.canAddOutput(sessionOutput){
                    captureSession.addOutput(sessionOutput)
                    captureSession.startRunning()
                    previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
                    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
                    previewLayer.connection.videoOrientation = AVCaptureVideoOrientation.LandscapeRight
                    CameraView.layer.addSublayer(previewLayer)

                    previewLayer.position = CGPoint(x: self.CameraView.frame.width / 2, y: self.CameraView.frame.height / 2)
                    previewLayer.bounds = CameraView.frame

                }
            }

        }
        catch{
            print("ERror")
        }
      }
    }
  }


@IBAction func TakePhoto(sender: UIButton) {

 audioPlayer.play()
 if let videoConnection = sessionOutput.connectionWithMediaType(AVMediaTypeVideo){sessionOutput.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: {
        buffer, error in

        let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer)
        UIImageWriteToSavedPhotosAlbum(UIImage(data: imageData)!, nil, nil, nil)

        })
     }
   }
 }

关于ios - 将音频添加到 iphone 应用程序 xcode 7.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39321674/

相关文章:

ios - 合并两个旋转和缩放的UIImage

ios - Swift - 声明泛型数组

iphone - 如何判断应用是否通过教育商店安装?

ios - 如何阅读本地化的 plist 作为字典?

swift - 如何在swift的后台进程子函数中将值返回给函数

ios - 如何在 Swift 中设置属性本身可变的属性值

ios - 如何将非消耗性订阅改为自动续订并保留老用户?

ios - 转换到另一个 ViewController 时出现黑屏

iphone - 设备上的 iOS Dropbox SDK 无法使用 NSURLErrorDomain 登录

iphone - 显示大型 PDF 文档 iPhone