iOS 应用程序的多轨 mp3 播放

2024-01-22

我正在做一个应用程序,涉及以多轨格式(鼓、人声、吉他、钢琴等)播放歌曲。我不需要对每个轨道进行任何花哨的音频处理,我需要做的就是播放、暂停和静音/取消静音每个轨道。

我一直在使用 AVAudioPlayer 的多个实例,但在执行设备测试时,我注意到这些曲目在首次播放时播放时稍微不同步。此外,当我暂停并播放曲目时,它们会继续变得更加不同步。经过一番研究后,我意识到 AVAudioplayer 的延迟太大,不适用于我的应用程序。

在我的应用程序中,我基本上有一个 AVAudioPlayers 的 NSArray,我会循环播放每个播放器或暂停/停止每个播放器,我确信这就是导致它在设备上不同步的原因。

看起来苹果的音频混音器对我来说效果很好,但是当我尝试实现它时,我收到了一个我无法弄清楚的 EXC_BAD_ACCESS 错误。

我知道答案是使用 OpenAL 或音频单元,但当我需要做的只是同时播放 5 个 .mp3 曲目时,似乎没有必要花几周时间来学习这些。有人对如何实现这一目标有任何建议吗?谢谢


感谢 admsyn 的建议,我能够想出一个解决方案。

AVAudioPlayer 有一个 currentTime 属性,它返回曲目的当前时间,也可以设置。

因此,我按照 admsyn 的说明实现了 startSynchronizedPlayback,然后在停止曲目时添加了以下内容:

-(void) stopAll
{
int count = [tracksArr count];
for(int i = 0; i < count; i++)
    {
    trackModel = [tracksArr objectAtIndex:i]
    if(i = 0)
        {
         currentTime = [trackModel currentTime]
        }
    [trackModel stop]
    [trackModel setCurrentTime:currentTime]
    }
{

这段代码基本上循环遍历我的轨道数组,每个轨道都有自己的 AVAudioPlayer,从第一个轨道获取当前时间,然后将所有后续轨道设置为该时间。现在,当我使用 startSynchronizedPlayback 方法时,它们都同步播放,并且暂停、取消暂停也使它们保持同步。希望这对其尝试保持同步的其他人有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 应用程序的多轨 mp3 播放 的相关文章

  • iOS swift 应用程序启动时出现黑屏

    我有个问题 当我启动我的应用程序时 会看到黑屏几秒钟 然后出现启动屏幕 我的启动画面不是默认的 我使用了视图控制器 因为我的启动画面有一个动画 我搜索了一个解决方案 我得到了这个 在我的闪屏加载 iPhone 之前出现黑屏 https st
  • 奇怪的 Facebook ID [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有两个 Facebook 应用程序 它们都正在开发中 其中一个是很久以前创建的 而另一个则是相当新的 自从我升级到新的 iOS Faceb
  • 如何创建一个仅接收一次信号,然后自行取消订阅/释放的 ReactiveCocoa 订阅者?

    我目前正在注册一个属性信号的订阅者 如下所示 RACAble self test subscribeNext id x NSLog signal fired 默认功能是每次 self test 更改时都会触发 但我只想触发一次 然后取消订阅
  • Braintree DropIn + Apple Pay,未出现 Apple Pay 项目

    我成功调用DropIn来自 Braintree SDK 的视图 这BTDropInRequest设置应显示三项 PayPal 信用卡 苹果支付 但由于某种原因在DropIn视图仅呈现两个项目而不是三个 PayPal 信用卡 我做错了什么 准
  • 设置使用 iPhone 相机拍摄的图像的类型

    如果我们使用 iPhone 相机拍摄照片 图像将默认以 JPEG 格式保存 我想以其他格式 例如 PNG 保存捕获的图像 是否可以 当我们从应用程序调用 iPhone 相机时 是否可以通过代码执行此操作 我们可以设置捕获图片后必须保存的图像
  • 替代已弃用的 NSNibLoading 方法(loadNibFile:、loadNibNamed: 等)?

    我发现 NSBundle 中的 NSNibLoading 方法 NSBundle loadNibFile externalNameTable withZone NSBundle loadNibNamed owner NSBundle loa
  • 应用程序在第二次运行 nsnull 计数的循环时崩溃

    我有一个循环 第一次运行正常 但第二次循环时我得到 NSNull count unrecognized selector sent to instance 0x3a094a70 Terminating app due to uncaught
  • CNContact 添加新的联系人问题

    我在通过以下方式添加联系人时遇到问题联系框架 我使用的是装有 iOS 12 1 2 的 iPhone 5s 设备 我添加联系人的代码如下 let saveRequest CNSaveRequest saveRequest add self
  • 使用prefersLargeTitles 和 UITableView 平滑滚动

    我在使用时遇到了滚动问题prefersLargeTitles并添加了UITableView 如果我设置prefersLargeTitles在导航控制器中 其根是UITableViewController一切都很好 导航大标题的滚动方式与我们
  • 如何更改 UISwitch 关闭状态的默认颜色?

    我想更改 UISwitch 中 onTintColor 的颜色以表示关闭状态 切换位于表格视图中 并且以编程方式进行切换 settingsSwitch setBackgroundColor UIColor whiteColor settin
  • 使用 Nib 实现国际化。这真的是个好主意吗?

    在苹果文档中 他们说笔尖只需将笔尖翻译成多种语言即可实现国际化 我现在正在考虑一个更糟糕但现实的场景 你已经制作了一个巨大的用户界面 然后你将其翻译成 25 种语言 所以你会得到 25 个不同的笔尖 您还会在样式和定义 UI 方面获得巨大的
  • 在 Objective C 中使用下划线作为属性名称前缀 [重复]

    这个问题在这里已经有答案了 我以前避免在变量名中使用下划线 这可能是我大学 Java 时代的遗留下来的 因此 当我在 Objective C 中定义属性时 我自然会这样做 In the header interface Whatever N
  • 找不到导航对象。您的组件是否位于导航器屏幕内?

    在我下面的代码中 当我使用 useNavigation 时 它会给出像我的问题一样的错误 如何使用useNavigation 请任何人都可以解决此错误 错误 找不到导航对象 您的组件是否位于导航器屏幕内 我从这里跟踪了代码https rnf
  • 使用 NSSet/NSMutableSet 来过滤对象?

    我已经看到一些有关使用 NSSet NSMutableSet 过滤对象的问题 答案 这些情况使用简单类型的对象 例如NSString or int 以下是用于过滤的代码示例NSString对象 NSSet smallArray NSSet
  • 如何保存 1 个 xcode 项目中的所有构建设置并在其他 xcode 项目上使用它们?

    我使用 xcode 4 5 和 cordova phonegap 来构建我的应用程序 我投入了大量时间来获取适合我的 Xcode 项目的构建设置 并且我想在我正在构建的多个应用程序上重用这些设置 我正在寻找是否有一种快速的方法来导出这些设置
  • 在 UITableviewCell 高度动画的同时动画 CALayer 阴影

    我有一个 UITableView 我正在尝试使用它来展开和折叠beginUpdates and endUpdates方法并在发生时显示阴影 在我的自定义 UITableViewCell 中 我有一个图层 我为其创建阴影layoutSubvi
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁
  • 我可以在 NS_SWIFT_NAME 中使用保留关键字吗?

    我正在尝试使 Objective C 委托协议更漂亮以便在 Swift 中使用 但我在弄清楚如何使用时遇到了一些麻烦NS SWIFT NAME 是否可以使用NS SWIFT NAME指定 Swift 名称中与 Objective C 关键字
  • 应用程序图标未刷新

    我更改了新版本应用程序中的图标图像 并且我在设备中安装了旧版本应用程序 然后我安装了新版本 它在 iOS 5 中运行良好 但在 iOS 6 中 图标没有刷新 它仍然显示旧版本图标 徽标 如果没有安装旧版本应用程序 该设备在 iOS 5 和
  • 跟踪所有 ObjC 方法调用?

    有时 当查看别人的大型 Objective C 程序时 很难知道从哪里开始 在这种情况下 我认为记录对每个非 Apple 方法的每次调用会很有帮助 有没有办法做到这一点 基本上 在某个中心位置进行一项更改 并记录调用的每个方法 最好仅限于非

随机推荐