首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >播放mp3/wav声音出现异常

播放mp3/wav声音出现异常
EN

Stack Overflow用户
提问于 2018-05-25 21:32:51
回答 2查看 303关注 0票数 4

当使用AVAudioPlayer播放音频时,无论是mp3还是wav,在所有iPads和iPhone 4S上都会出现异常,只有iOS 9会出现异常。这种情况在其他设备上不会发生。

例外的原因是

代码语言:javascript
复制
com.apple.coreaudio.AQClient (18): breakpoint 2.2

从…

代码语言:javascript
复制
libc++abi.dylib`__cxa_throw:

我正在使用用户断点来捕获它。$arg1不包含任何内容

这就是我初始化AVAudioPlayer的方式

代码语言:javascript
复制
guard let path = Bundle.main.path(forResource: file, ofType: type) else { return nil }
guard let url = URL(string: path) else { return nil }

try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, with: .mixWithOthers)
try? AVAudioSession.sharedInstance().setActive(true)

return try? AVAudioPlayer(contentsOf: url)

我正在播放来自异步全局调度队列的声音,播放声音的方法包含

代码语言:javascript
复制
self.sound?.prepareToPlay()
self.sound?.play()

最初的文件是wav文件,所以我将其转换为mp3文件,这是没有帮助的。我还使用了一个完全不同的声音,它产生了相同的异常。

该异常本身不会使模拟器崩溃,尽管Rollbar使用以下stracktrace报告SIGSEGV错误:

libAVFAudio.dylib in 0x27c1c000

使用的音频类:

代码语言:javascript
复制
import AVFoundation
import Foundation

class Audiotools {
    var sound: AVAudioPlayer?

    let dispatchQueue = DispatchQueue(label: "audio")

    static var shared: Audiotools = {
        let manager = Audiotools()
        return manager
    }()

    init() {
        self.sound = configurePlayer(withFile: Files.sound.name, type: Files.sound.extension)
    }

    func configurePlayer(withFile file: String, type: String) -> AVAudioPlayer? {
        guard let path = Bundle.main.path(forResource: file, ofType: type) else { return nil }
        guard let url = URL(string: path) else { return nil }

        try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, with: .mixWithOthers)
        try? AVAudioSession.sharedInstance().setActive(true)

        return try? AVAudioPlayer(contentsOf: url)
    }

    func playSound() {
        self.dispatchQueue.async {
            self.sound?.prepareToPlay()
            self.sound?.play()
        }
    }
}

其他滚动条报告:

代码语言:javascript
复制
SIGSEGV: Application terminated
libsystem_platform.dylib in _platform_memmove
AudioToolbox in Cached_DataSource::ReadFromHeaderCache(long long, unsigned int, void*, unsigned int*)
AudioToolbox in Cached_DataSource::ReadBytes(unsigned short, long long, unsigned int, void*, unsigned int*)
AudioToolbox in AudioFileObject::ReadBytes(unsigned char, long long, unsigned int*, void*)
AudioToolbox in AudioFileObject::ReadPacketDataVBR(unsigned char, unsigned int*, AudioStreamPacketDescription*, long long, unsigned int*, void*)
AudioToolbox in AudioFileReadPacketData
AVFAudio in AVAudioPlayerCpp::AQOutputCallbackCore(OpaqueAudioQueue*, AudioQueueBuffer*)
AVFAudio in AVAudioPlayerCpp::prepareToPlayQueue()
AVFAudio in AVAudioPlayerCpp::playQueue(AudioTimeStamp const*)
AVFAudio in AVAudioPlayerCpp::play()
AVFAudio in -[AVAudioPlayer play]

还有没有人遇到过这样的问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-06 04:24:01

结果是wav和mp3音频文件都被损坏了。转换为aiff解决了这个问题。

票数 1
EN

Stack Overflow用户

发布于 2018-06-12 14:39:07

请尝试使用AVAudioSessionCategoryPlayback而不是AVAudioSessionCategoryAmbient。

AVAudioSessionCategoryAmbient :将此类别用于背景声音,如雨、汽车发动机噪音等。

与其他音乐混合。

AVAudioSessionCategoryPlayback :此类别用于音乐曲目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50530421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档