Swift:从 url 检索音频文件标记列表?

2023-12-31

我只想获取音频文件中的标记列表。我认为这将是一项简单的常见任务,不会太困难。但是,我几乎找不到任何示例代码或文档,所以我最终得到了以下结果:

private func getMarkers(_ url: CFURL) -> AudioFileMarkerList {

  var file: AudioFileID?
  var size: UInt32 = 0
  var markers = AudioFileMarkerList()

  AudioFileOpenURL(url, .readPermission, kAudioFileWAVEType, &file)
  AudioFileGetPropertyInfo(file!, kAudioFilePropertyMarkerList, &size, nil)
  AudioFileGetProperty(file!, kAudioFilePropertyMarkerList, &size, &markers)

  return markers
}

不幸的是,这不起作用:error: memory read failed for 0x0.

我就是想不出问题所在。我检查了网址和大小(两者都是有效的),但它总是无法检索标记。任何对此的帮助都会很棒!

EDIT:这种方法可行,但所有数据都是完全错误的,我无法理解单个音频文件如何具有多个 AudioFileMarkerLists 标记:

private func getMarkers(_ url: CFURL) -> [AudioFileMarkerList] {

  var file: AudioFileID?
  var size: UInt32 = 0

  AudioFileOpenURL(url, .readPermission, kAudioFileWAVEType, &file)
  AudioFileGetPropertyInfo(file!, kAudioFilePropertyMarkerList, &size, nil)

  let length = NumBytesToNumAudioFileMarkers(Int(size))
  var markers = [AudioFileMarkerList](repeating: AudioFileMarkerList(), count: length)
  AudioFileGetProperty(file!, kAudioFilePropertyMarkerList, &size, &markers)
  return markers
}

EDIT 2:根据到目前为止我看到的大多数答案,这应该可行,但它返回一个空数组:

private func getMarkers(_ url: CFURL) -> [AudioFileMarkerList] {

  var file: AudioFileID?
  var size: UInt32 = 0

  AudioFileOpenURL(url, .readPermission, kAudioFileWAVEType, &file)
  AudioFileGetPropertyInfo(file!, kAudioFilePropertyMarkerList, &size, nil)
  let length = NumBytesToNumAudioFileMarkers(Int(size))

  var markers = [AudioFileMarkerList]()
  markers.reserveCapacity(length)
  AudioFileGetProperty(file!, kAudioFilePropertyMarkerList, &size, &markers)

  return markers

}

EDIT 3:我从 Ryan 的代码中删除了一堆错误检查和有用的内容,供任何想要快速尝试找到问题的人使用:

private func getMarkers(_ url: CFURL) -> [AudioFileMarker]? {

    var file: AudioFileID?
    var size: UInt32 = 0
    var markers: [AudioFileMarker] = []

    AudioFileOpenURL(url, .readPermission, kAudioFileWAVEType, &file)

    AudioFileGetPropertyInfo(file!, kAudioFilePropertyMarkerList, &size, nil)

    let length = NumBytesToNumAudioFileMarkers(Int(size))

    let data = UnsafeMutablePointer<AudioFileMarkerList>.allocate(capacity: length)

    AudioFileGetProperty(file!, kAudioFilePropertyMarkerList, &size, data)

    markers.append(data.pointee.mMarkers)

    data.deallocate(capacity: length)

    return markers
}

我只是希望苹果一开始就测试了 AudioFileMarkerList。

EDIT 4:感谢 Rhythmic Fistman 和 Ryan Francesconi 的帮助解决了!最后结果:

private func getMarkers(_ url: CFURL) -> [AudioFileMarker]? {

  var file: AudioFileID?
  var size: UInt32 = 0
  var markerList: [AudioFileMarker] = []

  AudioFileOpenURL(url, .readPermission, kAudioFileWAVEType, &file)

  AudioFileGetPropertyInfo(file!, kAudioFilePropertyMarkerList, &size, nil)

  let length = NumBytesToNumAudioFileMarkers(Int(size))

  let data = UnsafeMutablePointer<AudioFileMarkerList>.allocate(capacity: length)

  AudioFileGetProperty(file!, kAudioFilePropertyMarkerList, &size, data)

  let markers = UnsafeBufferPointer<AudioFileMarker>(start: &data.pointee.mMarkers, count: length)
  for marker in markers {
    markerList.append(marker)
  }

  data.deallocate(capacity: length)

  return markerList
}

看起来你需要使用UnsafeBufferPointer访问可变长度数组(例如mMarkers)。所以而不是

out.append(markerList.mMarkers)

只添加第一个元素,执行此操作

let markersBuffer = UnsafeBufferPointer<AudioFileMarker>(start: &data.pointee.mMarkers,
                                               count: Int(data.pointee.mNumberMarkers))

for marker in markersBuffer {
    markers.append(marker)
}

仿照这个答案 https://stackoverflow.com/a/27061639/22147

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

Swift:从 url 检索音频文件标记列表? 的相关文章

  • 根据 Swift 中的列表选择在 ViewController 之间传递值

    我试图将 listView 选择的选定索引号从一个 ViewController 传递到另一个 ViewController 但遇到了 tableView didSelectRowAtIndexPath 委托运行时间稍晚于prepareFo
  • iOS 上 Safari 中的 shift 键

    有没有办法在javascript中判断手机键盘上是否按下了shift键 并将其与大写锁定 按两次shift键 区分开来 一些事实 首先 让我们看一下有关 iOS 键盘的一些事实 我假设您已经知道了 当您进入键盘模式时 shift键始终处于激
  • iOS后台获取时间限制崩溃

    我已经设置了背景获取 使用大纲NSScreencast 第 92 集 http nsscreencast com episodes 92 background fetch BOOL application UIApplication app
  • Flutter-iOS 当应用程序更新/重新编译时存储的图像丢失

    嗨 请原谅我的英语 也是 flutter iOS 的新手 我在 iOS 上有一个关于 flutter 的应用程序 用户可以从他们的相机和图库中拍摄照片和视频 我正在使用 image picker 包 这没有问题 然后我将其保存在在其应用程序
  • Swift try inside Objective-C 块

    我需要创建一个函数foo它接受一个抛出闭包作为参数 我可以使用 Swift 或 ObjC 来实现它 但我需要能够从两者中调用它 像这样 Swift func bar throws func foo block throws gt void
  • supportedInterfaceOrientations 方法不会重写其超类中的任何方法

    在 UIViewController 中 这段代码 public override func supportedInterfaceOrientations gt UIInterfaceOrientationMask if let mainC
  • iOS 何时清理本地应用程序 ./tmp 目录?

    iOS什么时候清理本地应用程序 tmp目录 请注意 这不是一个骗局这个问题 https stackoverflow com questions 3593900 iphone storage in tmp directory 我问的是应用程序
  • 在 macOS 上使用 Swift 3 从剪贴板读取

    我是 Swift 的初学者 我想弄清楚如何在 macOS Swift 3 上读取已复制到剪贴板的内容 我搜索了很多 但似乎找不到任何有效的东西 我从网上尝试过的一些事情 var pasteboardItems NSPasteboardIte
  • 在 Xcode 中查找未使用的文件

    我最近开始开发一个新应用程序 它基本上是我以前制作的应用程序的副本 但做了一些更改 为了制作这个新应用程序 我复制了旧应用程序并删除了一些不需要的内容 我想知道 有没有办法知道 Xcode 中正在使用哪些类文件 或者有什么关于如何查找未使用
  • 上下文菜单未在 SwiftUI 中更新

    我正在尝试设置 SwiftUI contextMenu带有一个切换按钮Bool价值 上下文菜单的按钮文本应该在以下情况下更改 Bool切换 但上下文菜单不会更新 有没有办法强制更新上下文菜单 描述问题的示例代码 import SwiftUI
  • Bootstrap 响应式表格在 iOS 设备上无法垂直滚动

    这就是我所拥有的 div class table responsive table class table style background transparent table div 我正在使用以下 bootstrap css 文件 ht
  • 依赖于不同队列上的另一个操作的 NSOperation 无法启动

    我有操作的依赖图 并且使用多个队列来组织各种操作流 例如 peopleQueue sitesQueue sessionQueue sessionQueue loginOp fetchUpdatedAccountOp peopleQueue
  • UIScrollView 与 UITabBarController 切断

    我有一个 UIScrollView 我将其放置在视图中 界面生成器文档 xib m h 但是 UIScrollView 的下半部分被剪切 并且由于我有一个 UITabBarController 而没有显示其下半部分 我在 appdelega
  • UITableViewCell 内嵌套 UIStackView 内的 UILabel 有时会被截断

    我的一个表设置中有一个表视图单元格 其中包含以下视图层次结构 外部水平 stackview 固定到单元格内容视图的尾部 前部 底部和顶部边缘 右侧标签固定到其父 stackViewHackView 的尾部 前部 底部和顶部边缘 在我的控制器
  • Swift 中通过可选绑定进行安全(边界检查)数组查找?

    如果我在 Swift 中有一个数组 并尝试访问超出范围的索引 则会出现一个不足为奇的运行时错误 var str Apple Banana Coconut str 0 Apple str 3 EXC BAD INSTRUCTION 但是 我会
  • 使用未声明的类型“对象”

    这太奇怪了 通常我可以理解未声明的类 但这是声称 Object 类本身未声明 NSObject 可以工作 但我的项目设置方式我需要它是一个纯 Swift 对象 我的类标题如下所示 import UIKit import Foundation
  • 将 NSFetchedResultsController 添加到项目后出现问题

    我设置 CoreData 时没有NSFetchedResultsController一切都保存得很好 切换到之后NSFetchedResultsController 我在尝试保存图像时遇到奇怪的错误 这是我用来保存图像的代码 void sa
  • iOS 搜索栏不显示结果

    更新 这实际上有效 我的自定义单元格的样式尚未出现 因此单元格看起来是空白的 那我怎样才能得到searchResultsTableView使用我的自定义单元格 我在表格视图中实现了搜索栏 当我调试时搜索 过滤所有工作 但是当我在搜索栏中输入
  • 如何在 SwiftUI 中延迟动画?

    我想为两个文本字段设置动画 第二个字段有延迟 但它不起作用 没有延迟 它们同时从位置 100 动画到 0 这是代码 State private var offset CGFloat 100 State private var offset2
  • 如何制作像 Facebook 应用程序一样的登录屏幕?

    如何制作像 Facebook 应用程序一样带有 电子邮件 和 密码 文本字段的登录屏幕 Facebook登入 http extdesenv com wp content uploads 2012 05 facebook login ios

随机推荐

  • stdClass 对象和 foreach 循环

    我正在使用以下代码通过 Soap 从网站获取数据 client new SoapClient http some url here class SMSParam public CellNumber public AccountKey pub
  • 如何在 JFreeChart 中将点转换为线?

    我在将 JFreeChart 生成的点转换为线时遇到问题 首先 有一些资料确实帮助我达到了这一点 使用 JfreeChart 动态向 XYSeries 添加点 https stackoverflow com questions 720574
  • Tomcat gzip while chunked 问题

    我的一项数据源服务遇到了一些问题 正如 HTTP 响应标头中所述 它在 Apache Coyote 1 1 上运行 服务器给出带有 Transfer Encoding chunked 的响应 这里是示例响应 HTTP 1 1 200 OK
  • 为什么 Ajax 脚本无法在 IIS 7.5 Win 2008 R2 服务器上运行?

    我有一个 Web 应用程序在我的开发服务器上的 VS 2013 上运行良好 但是一旦我将其发布到 IIS 7 5 2008 R2 服务器上 位于我的自定义脚本文件中的 Ajax 脚本就不再工作了 尽管其他 JQuery 脚本不调用 Ajax
  • Monotouch/WCF:如何在不使用 svcutil 的情况下使用 wcf 服务

    由于monotouch编译为本机代码 因此它有一些限制 例如不允许动态调用 但我在 net中有很多类 我使用 ChannelFactory 动态来调用 wcf 服务 new ChannelFactory myBinding myEndpoi
  • 如何以编程方式拦截 GC 以将信息打印到我的日志中

    我知道您可以使用 verbosegc 将有关 GC 的信息打印到 sysout 但我不希望这样做 我想在 GC 触发时进行拦截 并将有关它的信息打印到我的自定义记录器 也许将最后一次 GC 时间戳保存在内部变量上 等等 这里还有希望吗 您无
  • 单击地图时关闭信息框

    我正在使用 Google Maps V3 API 的 Infobox 插件 http google maps utility library v3 googlecode com svn trunk infobox docs referenc
  • Visual Studio 2013,TFS 非常慢

    当我最初安装 VS Ultimate 2013 时 一切都很好 但在上个月左右的时间里 它一直很糟糕 我的 Visual Studio 2013 安装中的源代码管理浏览非常慢 只需单击一个节点 显示该节点内容的操作就需要 20 多秒 团队中
  • 从sql plus中的字符串中删除最后一个字符

    我试图从 sql plus 的列输出中删除最后一个字符 列条目的长度不固定 例如 XYZA 应输出为 XYZ 我尝试过使用substr 功能 但似乎不起作用 SUBSTR ooo CO NAME 1 LENGTH ooo CO NAME 1
  • 如何使用 sed 命令在模式字符串之前添加字符串?

    我想使用 sed 修改名为 baz 的文件 当我搜索模式 foo 时 foo 不在行首或行尾 我想在 foo 之前附加 bar 我该如何使用 sed 来做到这一点 Input file named baz blah foo blahblah
  • 在 flutter 中通过 Function(T) 传递泛型类型

    我正在尝试创建一个通用的消费者小部件 以方便其子视图模型 因此我有两个功能 一个在 ViewModel 初始化之后有一个函数 T 另一个用于将模型传递给它的子 Widget 通用类中是 ChangeNotifier 的子级 在我想在两个函数
  • 带有 ActionBarSherlock 的本机 ActionBar selectableItemBackground

    我尝试更改操作栏中所选项目的背景 我使用 ActionBarSherlock 来与旧版 Android 版本兼容 当应用程序在带有 ICS 的设备上运行时 我为我的 Activity 设置了特定主题 这是我目前的风格
  • 变换所有子视图

    我在滚动视图中有一个 UIView 其中包含大约 100 个子视图 子视图看起来都一样 并且是同一类的实例 我有一个要应用于每个子视图的转换 但每次 ZoomScale 改变时 变换都需要改变 将变换应用于所有视图的最佳方法是什么 目前我正
  • 更改 IOS Xamarin Forms 中的开关颜色

    如何在切换 IOS Xamarin Forms 时更改切换按钮的颜色 自定义渲染将仅设置颜色一次 Xamarin 表单切换按钮在 IOS 上的默认颜色 https stackoverflow com questions 38993959 x
  • 如何限制bash中函数中使用的线程/子进程的数量

    我的问题是如何更改此代码 使其仅使用 4 个线程 子进程 TESTS a b c d e for f in TESTS do t RANDOM 5 1 sleep t echo f t done wait 有趣的问题 我尝试使用 xargs
  • 使用 JSON 字符串填充表布局

    我的 Web 服务返回一个 JSON 字符串 如下所示 checkrecord rollno abc2 percentage 40 attended 12 missed 34 Table1 上面的字符串代表我的数据集 我已将字符串转换为 J
  • Fluent NHibernate 集合每个子类表

    我在 Fluent NHibernate 中的继承方面遇到问题 我之前已经设法让 Table Per Subclass 工作 但我无法让基类的集合工作 它正在寻找一个我没有的基类表 这是我的架构 User Id Name Email Use
  • VB.NET - 迭代容器对象中的控件

    我有一个带有 清除 按钮的表单 当用户单击 清除 时 我想清除表单上所有可见元素的值 对于日期控件 我想将它们重置为当前日期 我的所有控件都包含在面板上 现在 我正在使用以下代码执行此操作 有没有比手动检查每种控件类型更简单的方法 这种方法
  • Kubernetes 中被逐出的 Pod 会发生什么?

    我刚刚看到我的一些 pod 被 kubernetes 驱逐 他们会发生什么 就这样闲逛 还是我必须手动删除它们 我使用的一个快速解决方法是在事件发生后手动删除所有被逐出的 Pod 您可以使用此命令 kubectl get pods all
  • Swift:从 url 检索音频文件标记列表?

    我只想获取音频文件中的标记列表 我认为这将是一项简单的常见任务 不会太困难 但是 我几乎找不到任何示例代码或文档 所以我最终得到了以下结果 private func getMarkers url CFURL gt AudioFileMark