AVAudioPlayer 不会播放一个 mp3 的音频,但会播放其他的?

Posted

技术标签:

【中文标题】AVAudioPlayer 不会播放一个 mp3 的音频,但会播放其他的?【英文标题】:AVAudioPlayer will not play audio for one mp3 but will for others? 【发布时间】:2017-08-15 15:24:27 【问题描述】:

我所有的其他音频文件都可以通过音频播放器完美播放。大部分文件时长不足 5 秒,而仍在播放的最长文件为 23 秒。出于某种原因,我的 1:15 长文件“sortSong”在被调用时完全静音。

这是我的音频播放器的代码:

import Foundation
import AVFoundation

class AudioPlayer 

    static let sharedInstance = AudioPlayer()

    enum Sound: String 
        case sortSongPlay = "sortSong"
        case centerButtonRelease = "centerButtonRelease"
        case buttonTap = "tapSound"
        static var all: [Sound] 
            return [.centerButtonRelease, .buttonTap, sortSongPlay]
        

        var url: URL 
            return URL.init(fileURLWithPath: Bundle.main.path(forResource: self.rawValue, ofType: "mp3")!)
        
    

    private var soundMap = [String: SystemSoundID]()

    init() 
        for sound in Sound.all 
            let soundUrl = sound.url
            var soundId: SystemSoundID = 0
            AudioservicesCreateSystemSoundID(soundUrl as CFURL, &soundId);
            soundMap[sound.rawValue] = soundId
        
    

    func play(sound: Sound) 
        AudioServicesPlaySystemSound(soundMap[sound.rawValue]!)

    

在我的视图控制器中调用此函数时播放声音。

func successfulSort() 
    AudioPlayer.sharedInstance.play(sound: .sortSongPlay)
    rotateSortImageOne()
    rotateSortImageTwo()

这是调用successfulSort函数的动作

  if inputText == "hello" && seedArray == [1, 4, 1] 
    successfulSort()

如果我只是将大小写 sortSongPlay 更改为 = "shortSortSong"(23 秒版本),它会正常播放。

我所有的声音文件都针对这个项目文件检查了它们的目标成员资格,并且所有文件都有正确的路径。如果我按下播放按钮,音频将在界面生成器中播放。没有编译器错误或警告,应用永远不会崩溃,在应用中调用 sortSong 时根本不会播放音频。

这是一个链接,其中包含我在项目中尝试过的示例。前两个声音在应用程序中无声播放,而较短的声音都可以完美播放。 https://soundcloud.com/spiffystache

是什么导致它静音?

【问题讨论】:

我过去遇到过文件编码问题阻止播放的问题。我重新编码了文件,之后它对我有用。值得一试吗? 几个小时后我回家试试这个。 我刚刚尝试添加 2 个类似长度的音频文件并用它们替换 sortSong 并且两者都不会播放:(。我还尝试了一个更短的音频文件(4 秒)使用相同的编码和那个确实玩过。 您能分享导致问题的示例音频文件吗?我可以用那个文件测试一下。 此页面上的前 2 个声音不起作用。较短的声音都有效。 soundcloud.com/spiffystache 【参考方案1】:

你应该在你的问题上加上一个正确的标题。

您的代码没有使用AVAudioPlayer,而是使用System Sound Services。

文档清楚地说明了它的局限性:

您可以使用系统声音服务播放短片(30 秒或 更短)的声音。

我从未检查过它的限制是否正好是 30 秒,但它与您问题中的描述相符。

考虑使用AVAudioPlayer(如标题)来播放更长的声音。

【讨论】:

以上是关于AVAudioPlayer 不会播放一个 mp3 的音频,但会播放其他的?的主要内容,如果未能解决你的问题,请参考以下文章

AVAudioPlayer 无法播放 MP3 文件

AVAudioPlayer 不播放 mp3?

AVAudioPlayer mp3 文件无法播放

使用 AVAudioPlayer 在 Swift 中播放远程 mp3 文件

无法使用 AVAudioPlayer 播放存储在文档目录中的本地 mp3 文件

我想用 AVAudioPlayer 在我的服务器上播放 mp3 文件