Ios 如何在客户课程中播放声音并识别声音播放的结束
我想在单独的类(而不是viewController类)中播放swift应用程序中的mp3文件,并识别声音的结尾。 我的代码在AppDelegate.swift中发送EXC\u BAD\u访问权限 这是我的代码: UIViewController.swiftIos 如何在客户课程中播放声音并识别声音播放的结束,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
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后,将运行异常。