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 在 Swift 中播放远程 mp3 文件