Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在客户课程中播放声音并识别声音播放的结束_Ios_Swift_Avaudioplayer - Fatal编程技术网

Ios 如何在客户课程中播放声音并识别声音播放的结束

Ios 如何在客户课程中播放声音并识别声音播放的结束,ios,swift,avaudioplayer,Ios,Swift,Avaudioplayer,我想在单独的类(而不是viewController类)中播放swift应用程序中的mp3文件,并识别声音的结尾。 我的代码在AppDelegate.swift中发送EXC\u BAD\u访问权限 这是我的代码: UIViewController.swift class ViewController: UIViewController, AVAudioPlayerDelegate { override func viewDidLoad() { super.viewDid

我想在单独的类(而不是viewController类)中播放swift应用程序中的mp3文件,并识别声音的结尾。 我的代码在AppDelegate.swift中发送EXC\u BAD\u访问权限

这是我的代码:

UIViewController.swift

class ViewController: UIViewController, AVAudioPlayerDelegate {


    override func viewDidLoad() {
        super.viewDidLoad()


        let soundM = soundManager()
        soundM.loadFile("glass_ping", soundType: "mp3")
        soundM.playNow()
import Foundation
import AVFoundation

var audioPlayer = AVAudioPlayer();

class soundManager: NSObject, AVAudioPlayerDelegate {

    override init()
    {
        super.init();
        print("hallo")
    }

    func playNow(){
        audioPlayer.play()
    }

    func loadFile(_ soundName: String, soundType: String){
        let sound = Bundle.main.path(forResource: soundName, ofType: soundType)

        do{
            audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
            audioPlayer.delegate = self
            audioPlayer.prepareToPlay()
            audioPlayer.rate = 2.0
            //audioPlayer.numberOfLoops = 2
        }catch{
            print(error)
        }
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print("finish")
    }

import UIKit
import AVFoundation

class ViewController: UIViewController {

    private var player: AudioPlayerComposition!
    @IBOutlet weak var power: Visualizer!

    override func viewDidLoad() {
        super.viewDidLoad()


        // Get URL to resouce, create audioPlayer

        let audioPlayer = AVAudioPlayer();
        player = AudioPlayer(player: audioPlayer)
        //player.play()
import Foundation
import AVFoundation

class AudioPlayer: NSObject, AVAudioPlayerDelegate {

    private var player: AVAudioPlayer

    init(player: AVAudioPlayer, view: Visualizer) {
        self.player = player                
        super.init()
        self.loadFile("test", soundType: "mp3")
    }

    func loadFile(_ soundName: String, soundType: String){
        let sound = Bundle.main.path(forResource: soundName, ofType: soundType)
        do {
            self.player = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
            self.player.prepareToPlay()
            self.player.play()
        }catch{
            print(error)
        }
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print ("Finish")
    }
soundManager.swift

class ViewController: UIViewController, AVAudioPlayerDelegate {


    override func viewDidLoad() {
        super.viewDidLoad()


        let soundM = soundManager()
        soundM.loadFile("glass_ping", soundType: "mp3")
        soundM.playNow()
import Foundation
import AVFoundation

var audioPlayer = AVAudioPlayer();

class soundManager: NSObject, AVAudioPlayerDelegate {

    override init()
    {
        super.init();
        print("hallo")
    }

    func playNow(){
        audioPlayer.play()
    }

    func loadFile(_ soundName: String, soundType: String){
        let sound = Bundle.main.path(forResource: soundName, ofType: soundType)

        do{
            audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
            audioPlayer.delegate = self
            audioPlayer.prepareToPlay()
            audioPlayer.rate = 2.0
            //audioPlayer.numberOfLoops = 2
        }catch{
            print(error)
        }
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print("finish")
    }

import UIKit
import AVFoundation

class ViewController: UIViewController {

    private var player: AudioPlayerComposition!
    @IBOutlet weak var power: Visualizer!

    override func viewDidLoad() {
        super.viewDidLoad()


        // Get URL to resouce, create audioPlayer

        let audioPlayer = AVAudioPlayer();
        player = AudioPlayer(player: audioPlayer)
        //player.play()
import Foundation
import AVFoundation

class AudioPlayer: NSObject, AVAudioPlayerDelegate {

    private var player: AVAudioPlayer

    init(player: AVAudioPlayer, view: Visualizer) {
        self.player = player                
        super.init()
        self.loadFile("test", soundType: "mp3")
    }

    func loadFile(_ soundName: String, soundType: String){
        let sound = Bundle.main.path(forResource: soundName, ofType: soundType)
        do {
            self.player = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
            self.player.prepareToPlay()
            self.player.play()
        }catch{
            print(error)
        }
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print ("Finish")
    }
有什么想法吗


谢谢

我发现了一个非常奇怪的解决方案,我不知道它为什么有效:

UIViewController.swift

class ViewController: UIViewController, AVAudioPlayerDelegate {


    override func viewDidLoad() {
        super.viewDidLoad()


        let soundM = soundManager()
        soundM.loadFile("glass_ping", soundType: "mp3")
        soundM.playNow()
import Foundation
import AVFoundation

var audioPlayer = AVAudioPlayer();

class soundManager: NSObject, AVAudioPlayerDelegate {

    override init()
    {
        super.init();
        print("hallo")
    }

    func playNow(){
        audioPlayer.play()
    }

    func loadFile(_ soundName: String, soundType: String){
        let sound = Bundle.main.path(forResource: soundName, ofType: soundType)

        do{
            audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
            audioPlayer.delegate = self
            audioPlayer.prepareToPlay()
            audioPlayer.rate = 2.0
            //audioPlayer.numberOfLoops = 2
        }catch{
            print(error)
        }
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print("finish")
    }

import UIKit
import AVFoundation

class ViewController: UIViewController {

    private var player: AudioPlayerComposition!
    @IBOutlet weak var power: Visualizer!

    override func viewDidLoad() {
        super.viewDidLoad()


        // Get URL to resouce, create audioPlayer

        let audioPlayer = AVAudioPlayer();
        player = AudioPlayer(player: audioPlayer)
        //player.play()
import Foundation
import AVFoundation

class AudioPlayer: NSObject, AVAudioPlayerDelegate {

    private var player: AVAudioPlayer

    init(player: AVAudioPlayer, view: Visualizer) {
        self.player = player                
        super.init()
        self.loadFile("test", soundType: "mp3")
    }

    func loadFile(_ soundName: String, soundType: String){
        let sound = Bundle.main.path(forResource: soundName, ofType: soundType)
        do {
            self.player = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
            self.player.prepareToPlay()
            self.player.play()
        }catch{
            print(error)
        }
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print ("Finish")
    }
AudioPlayer.swift

class ViewController: UIViewController, AVAudioPlayerDelegate {


    override func viewDidLoad() {
        super.viewDidLoad()


        let soundM = soundManager()
        soundM.loadFile("glass_ping", soundType: "mp3")
        soundM.playNow()
import Foundation
import AVFoundation

var audioPlayer = AVAudioPlayer();

class soundManager: NSObject, AVAudioPlayerDelegate {

    override init()
    {
        super.init();
        print("hallo")
    }

    func playNow(){
        audioPlayer.play()
    }

    func loadFile(_ soundName: String, soundType: String){
        let sound = Bundle.main.path(forResource: soundName, ofType: soundType)

        do{
            audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
            audioPlayer.delegate = self
            audioPlayer.prepareToPlay()
            audioPlayer.rate = 2.0
            //audioPlayer.numberOfLoops = 2
        }catch{
            print(error)
        }
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print("finish")
    }

import UIKit
import AVFoundation

class ViewController: UIViewController {

    private var player: AudioPlayerComposition!
    @IBOutlet weak var power: Visualizer!

    override func viewDidLoad() {
        super.viewDidLoad()


        // Get URL to resouce, create audioPlayer

        let audioPlayer = AVAudioPlayer();
        player = AudioPlayer(player: audioPlayer)
        //player.play()
import Foundation
import AVFoundation

class AudioPlayer: NSObject, AVAudioPlayerDelegate {

    private var player: AVAudioPlayer

    init(player: AVAudioPlayer, view: Visualizer) {
        self.player = player                
        super.init()
        self.loadFile("test", soundType: "mp3")
    }

    func loadFile(_ soundName: String, soundType: String){
        let sound = Bundle.main.path(forResource: soundName, ofType: soundType)
        do {
            self.player = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
            self.player.prepareToPlay()
            self.player.play()
        }catch{
            print(error)
        }
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print ("Finish")
    }

这真的很有效。但正如我所提到的,我不知道为什么会这样?

我发现了一个非常奇怪的解决方案,我不知道它为什么会起作用:

UIViewController.swift

class ViewController: UIViewController, AVAudioPlayerDelegate {


    override func viewDidLoad() {
        super.viewDidLoad()


        let soundM = soundManager()
        soundM.loadFile("glass_ping", soundType: "mp3")
        soundM.playNow()
import Foundation
import AVFoundation

var audioPlayer = AVAudioPlayer();

class soundManager: NSObject, AVAudioPlayerDelegate {

    override init()
    {
        super.init();
        print("hallo")
    }

    func playNow(){
        audioPlayer.play()
    }

    func loadFile(_ soundName: String, soundType: String){
        let sound = Bundle.main.path(forResource: soundName, ofType: soundType)

        do{
            audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
            audioPlayer.delegate = self
            audioPlayer.prepareToPlay()
            audioPlayer.rate = 2.0
            //audioPlayer.numberOfLoops = 2
        }catch{
            print(error)
        }
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print("finish")
    }

import UIKit
import AVFoundation

class ViewController: UIViewController {

    private var player: AudioPlayerComposition!
    @IBOutlet weak var power: Visualizer!

    override func viewDidLoad() {
        super.viewDidLoad()


        // Get URL to resouce, create audioPlayer

        let audioPlayer = AVAudioPlayer();
        player = AudioPlayer(player: audioPlayer)
        //player.play()
import Foundation
import AVFoundation

class AudioPlayer: NSObject, AVAudioPlayerDelegate {

    private var player: AVAudioPlayer

    init(player: AVAudioPlayer, view: Visualizer) {
        self.player = player                
        super.init()
        self.loadFile("test", soundType: "mp3")
    }

    func loadFile(_ soundName: String, soundType: String){
        let sound = Bundle.main.path(forResource: soundName, ofType: soundType)
        do {
            self.player = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
            self.player.prepareToPlay()
            self.player.play()
        }catch{
            print(error)
        }
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print ("Finish")
    }
AudioPlayer.swift

class ViewController: UIViewController, AVAudioPlayerDelegate {


    override func viewDidLoad() {
        super.viewDidLoad()


        let soundM = soundManager()
        soundM.loadFile("glass_ping", soundType: "mp3")
        soundM.playNow()
import Foundation
import AVFoundation

var audioPlayer = AVAudioPlayer();

class soundManager: NSObject, AVAudioPlayerDelegate {

    override init()
    {
        super.init();
        print("hallo")
    }

    func playNow(){
        audioPlayer.play()
    }

    func loadFile(_ soundName: String, soundType: String){
        let sound = Bundle.main.path(forResource: soundName, ofType: soundType)

        do{
            audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
            audioPlayer.delegate = self
            audioPlayer.prepareToPlay()
            audioPlayer.rate = 2.0
            //audioPlayer.numberOfLoops = 2
        }catch{
            print(error)
        }
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print("finish")
    }

import UIKit
import AVFoundation

class ViewController: UIViewController {

    private var player: AudioPlayerComposition!
    @IBOutlet weak var power: Visualizer!

    override func viewDidLoad() {
        super.viewDidLoad()


        // Get URL to resouce, create audioPlayer

        let audioPlayer = AVAudioPlayer();
        player = AudioPlayer(player: audioPlayer)
        //player.play()
import Foundation
import AVFoundation

class AudioPlayer: NSObject, AVAudioPlayerDelegate {

    private var player: AVAudioPlayer

    init(player: AVAudioPlayer, view: Visualizer) {
        self.player = player                
        super.init()
        self.loadFile("test", soundType: "mp3")
    }

    func loadFile(_ soundName: String, soundType: String){
        let sound = Bundle.main.path(forResource: soundName, ofType: soundType)
        do {
            self.player = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
            self.player.prepareToPlay()
            self.player.play()
        }catch{
            print(error)
        }
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print ("Finish")
    }

这真的很有效。但正如我所提到的,我不知道为什么?

我会验证
声音
不是
nil
这已经被回答了很多次了。让你的目标保持全球化谢谢大家。声音不是零。exc_bad_access出现在我设置委托的行中。没有K4747Z您确实遇到了问题。这不一样。异常在设置委托:audioPlay.delegate=self后运行。我将验证
sound
不是
nil
这已被多次回答。让你的目标保持全球化谢谢大家。声音不是零。exc_bad_access出现在我设置委托的行中。没有K4747Z您确实遇到了问题。这不一样。设置委托:audioPlay.delegate=self后,将运行异常。