このコードは非常に単純な単一のビューにありますSwiftアプリケーションのViewController
:
var audioPlayer = AVAudioPlayer()
@IBAction func playMyFile(sender: AnyObject) {
let fileString = NSBundle.mainBundle().pathForResource("audioFile", ofType: "m4a")
let url = NSURL(fileURLWithPath: fileString)
var error : NSError?
audioPlayer = AVAudioPlayer(contentsOfURL: url, error: &error)
audioPlayer.delegate = self
audioPlayer.prepareToPlay()
if (audioPlayer.isEqual(nil)) {
println("There was an error: (er)")
} else {
audioPlayer.play()
NSLog("working")
}
私が追加しました import AVFoundation
およびaudioPlayer
はグローバル変数です。コードを実行すると、「動作中」と出力されるため、エラーは発生しませんが、音は鳴りません。デバイスはサイレントではありません。
コードに非常に多くの問題があるため、ソクラテス式メソッドが機能しなくなります。それを捨ててあなたに見せることはおそらく最も簡単でしょう:
var player : AVAudioPlayer! = nil // will be Optional, must supply initializer
@IBAction func playMyFile(sender: AnyObject?) {
let path = NSBundle.mainBundle().pathForResource("audioFile", ofType:"m4a")
let fileURL = NSURL(fileURLWithPath: path)
player = AVAudioPlayer(contentsOfURL: fileURL, error: nil)
player.prepareToPlay()
player.delegate = self
player.play()
}
私はわざわざエラーチェックをしていませんが、問題があるとクラッシュするという利点があります。
関連する場合と関連しない場合がある最後のポイント:すべてのm4a
ファイルは再生可能です。たとえば、高度に圧縮されたファイルは、サイレントに失敗する可能性があります(しゃれを意図したもの)。
AvPlayerはクラスメンバーであり、指定された関数に含まれていないことが重要です。そうでない場合、スコープ外になります... :)
これが私のSwiftプロジェクトからの作業スニペットです。 "audiofile"をファイル名に置き換えてください。
var audioPlayer = AVAudioPlayer()
let audioPath = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("audiofile", ofType: "mp3"))
audioPlayer = AVAudioPlayer(contentsOfURL: audioPath, error: nil)
audioPlayer.delegate = self
audioPlayer.prepareToPlay()
audioPlayer.play()
完全に機能するSwiftオーディオプレーヤーアプリケーションのソースコードはここからダウンロードできます https://github.com/bpolat/Music-Player
何らかの理由(おそらくバグ)Xcodeは、.m4aおよび.mp3形式の特定の音楽ファイルを再生できません。再生するには、すべてを.wavファイルに変更することをお勧めします。
//top of your class
var audioPlayer = AVAudioPlayer
//where you want to play your sound
let Sound = NSURL(fileURLWithPath: Bundle.main.path(forResource: "sound", ofType: "wav")!)
do {
audioPlayer = try AVAudioPlayer(contentsOf: Sound as URL)
audioPlayer.prepareToPlay()
} catch {
print("Problem in getting File")
}
audioPlayer.play()
Swift Try catchを使用したコーディングでは、この問題が解決され、以下のコードでオーディオが再生されます。
var playerVal = AVAudioPlayer()
@IBAction func btnPlayAction(sender: AnyObject) {
let fileURL: NSURL = NSURL(string: url)!
let soundData = NSData(contentsOfURL: fileURL)
do {
playerVal = try AVAudioPlayer(data: soundData!)
}
catch {
print("Something bad happened. Try catching specific errors to narrow things down",error)
}
playerVal.delegate = self
playerVal.prepareToPlay()
playerVal.play()
}
Swift 3.0:
import UIKit
import AVFoundation
class ViewController: UIViewController
{
var audioplayer = AVAudioPlayer()
@IBAction func Play(_ sender: Any)
{
audioplayer.play()
}
@IBAction func Pause(_ sender: Any)
{
if audioplayer.isPlaying
{
audioplayer.pause()
}
else
{
}
}
@IBAction func Restart(_ sender: Any)
{
if audioplayer.isPlaying
{
audioplayer.currentTime = 0
audioplayer.play()
}
else
{
audioplayer.play()
}
}
override func viewDidLoad()
{
super.viewDidLoad()
do
{
audioplayer = try AVAudioPlayer(contentsOf:URL.init(fileURLWithPath:Bundle.main.path(forResource:"bahubali", ofType: "mp3")!))
audioplayer.prepareToPlay()
var audioSession = AVAudioSession.sharedInstance()
do
{
try audioSession.setCategory(AVAudioSessionCategoryPlayback)
}
catch
{
}
}
catch
{
print (error)
}
}
}
私は自分のアプリで以下のコードを使用しましたが、それは機能します。お役に立てば幸いです。
var audioPlayer: AVAudioPlayer!
if var filePath = NSBundle.mainBundle().pathForResource("audioFile", ofType:"mp3"){
var filePathUrl = NSURL.fileURLWithPath(filePath)
audioPlayer = AVAudioPlayer(contentsOfURL: filePathUrl, error: nil)
audioPlayer.play()
}else {
println("Path for audio file not found")
}
var audioPlayer = AVAudioPlayer()
var alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("KiepRongBuon", ofType: "mp3")!)
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)
var error:NSError?
audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error)
audioPlayer.prepareToPlay()
audioPlayer.play()
@mattの回答に基づいていますが、元の回答では完全に満足できなかったため、少し詳しく説明しました。
import AVFoundation
class YourController: UIViewController {
private var player : AVAudioPlayer?
override func viewDidLoad() {
super.viewDidLoad()
prepareAudioPlayer()
}
@IBAction func playAudio() {
player?.play()
}
}
extension YourController: AVAudioPlayerDelegate {}
private extension YourController {
func prepareAudioPlayer() {
guard let path = Bundle.main.path(forResource: "you-audio", ofType:"mp3") else {
return
}
let fileURL = URL(fileURLWithPath: path)
do {
player = try AVAudioPlayer(contentsOf: fileURL)
} catch let ex {
print(ex.localizedDescription)
}
player?.prepareToPlay()
player?.delegate = self
}
}
var audio: AVAudioPlayer = AVAudioPlayer()
@IBAction func playaudio(sender: AnyObject) //method for playing audio
{
var audioPath = NSString(string: NSBundle.mainBundle().pathForResource("bus", ofType: "mp3")!)
var error: NSError? = nil
//instantiate the player
audio = AVAudioPlayer(contentsOfURL: NSURL(string: audioPath as String), error: &error)
audio.prepareToPlay()
audio.play()
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
そして、AVFoundationFrameworkをインポートすることを忘れないでください。