草庐IT

ios - 播放 mp3/wav 声音导致异常

coder 2023-09-07 原文

当使用 AVAudioPlayer 播放音频时,无论是 mp3 还是 wav,我在所有 iPad 和 iPhone 4S 上遇到异常,只有 iOS 9。这不会发生在任何其他设备上。

异常产生于

com.apple.coreaudio.AQClient (18): breakpoint 2.2

来自

libc++abi.dylib`__cxa_throw:

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

这就是我初始化 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)

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

self.sound?.prepareToPlay()
self.sound?.play()

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

虽然 Rollbar 报告 SIGSEGV 错误并带有这样的 stracktrace,但异常本身不会使模拟器崩溃:

0x27c1c000 中的 libAVFAudio.dylib

使用的音频类:

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()
        }
    }
}

其他 Rollbar 报告:

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]

有没有人遇到过这种问题?

最佳答案

原来 wav 和 mp3 音频文件都已损坏。转换为 aiff 解决了这个问题。

关于ios - 播放 mp3/wav 声音导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50530421/

有关ios - 播放 mp3/wav 声音导致异常的更多相关文章

  1. ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常 - 2

    我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd

  2. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  3. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  4. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  5. ruby - 在 Ruby 中重新分配常量时抛出异常? - 2

    我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案

  6. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  7. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  8. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

  9. Ruby 守护进程导致 ActiveRecord 记录器 IOError - 2

    我目前正在用Ruby编写一个项目,它使用ActiveRecordgem进行数据库交互,我正在尝试使用ActiveRecord::Base.logger记录所有数据库事件具有以下代码的属性ActiveRecord::Base.logger=Logger.new(File.open('logs/database.log','a'))这适用于迁移等(出于某种原因似乎需要启用日志记录,因为它在禁用时会出现NilClass错误)但是当我尝试运行包含调用ActiveRecord对象的线程守护程序的项目时脚本失败并出现以下错误/System/Library/Frameworks/Ruby.frame

  10. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

随机推荐