从 iPhone 中的音乐文件中获取 NSData

2024-01-09

我已从我的 iPhone 设备中检索了所有音乐和视频。我现在困于将这些保存到我的应用程序中,我无法从文件中获取原始数据。任何人都可以帮我找到解决方案吗?这是我用来获取音乐文件的代码。

MPMediaQuery *deviceiPod = [[MPMediaQuery alloc] init];
NSArray *itemsFromGenericQuery = [deviceiPod items];
for (MPMediaItem *media in itemsFromGenericQuery){
 //i get the media item here.
}

如何将其转换为 NSData ? 这就是我试图获取数据的方法

audioURL = [media valueForProperty:MPMediaItemPropertyAssetURL];//here i get the asset url
NSData *soundData = [NSData dataWithContentsOfURL:audioURL];

使用这个对我来说毫无用处。我没有得到数据LocalAssestURL。对此有任何解决方案。提前致谢


这不是一项简单的任务 - Apple 的 SDK 通常无法为简单任务提供简单的 API。以下是我在一项调整中使用的代码,以便从资产中获取原始 PCM 数据。您需要将 AVFoundation 和 CoreMedia 框架添加到您的项目中才能使其正常工作:

#import <AVFoundation/AVFoundation.h>
#import <CoreMedia/CoreMedia.h>

MPMediaItem *item = // obtain the media item
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

// Get raw PCM data from the track
NSURL *assetURL = [item valueForProperty:MPMediaItemPropertyAssetURL];
NSMutableData *data = [[NSMutableData alloc] init];

const uint32_t sampleRate = 16000; // 16k sample/sec
const uint16_t bitDepth = 16; // 16 bit/sample/channel
const uint16_t channels = 2; // 2 channel/sample (stereo)

NSDictionary *opts = [NSDictionary dictionary];
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:assetURL options:opts];
AVAssetReader *reader = [[AVAssetReader alloc] initWithAsset:asset error:NULL];
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithInt:kAudioFormatLinearPCM], AVFormatIDKey,
    [NSNumber numberWithFloat:(float)sampleRate], AVSampleRateKey,
    [NSNumber numberWithInt:bitDepth], AVLinearPCMBitDepthKey,
    [NSNumber numberWithBool:NO], AVLinearPCMIsNonInterleaved,
    [NSNumber numberWithBool:NO], AVLinearPCMIsFloatKey,
    [NSNumber numberWithBool:NO], AVLinearPCMIsBigEndianKey, nil];

AVAssetReaderTrackOutput *output = [[AVAssetReaderTrackOutput alloc] initWithTrack:[[asset tracks] objectAtIndex:0] outputSettings:settings];
[asset release];
[reader addOutput:output];
[reader startReading];

// read the samples from the asset and append them subsequently
while ([reader status] != AVAssetReaderStatusCompleted) {
    CMSampleBufferRef buffer = [output copyNextSampleBuffer];
    if (buffer == NULL) continue;

    CMBlockBufferRef blockBuffer = CMSampleBufferGetDataBuffer(buffer);
    size_t size = CMBlockBufferGetDataLength(blockBuffer);
    uint8_t *outBytes = malloc(size);
    CMBlockBufferCopyDataBytes(blockBuffer, 0, size, outBytes);
    CMSampleBufferInvalidate(buffer);
    CFRelease(buffer);
    [data appendBytes:outBytes length:size];
    free(outBytes);
}

[output release];
[reader release];
[pool release];

Here data将包含曲目的原始 PCM 数据;你可以使用某种编码来压缩它,例如我使用FLAC编解码器库。

See the 原始源代码在这里 https://github.com/H2CO3/PodMail/blob/master/PMViewController.m.

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

从 iPhone 中的音乐文件中获取 NSData 的相关文章

  • 特定时间的 iPhone 本地通知

    我想每周晚上 10 点 无论哪个国家 地区 发出通知 我需要使用时区吗 目前 我使用下面的代码每周触发通知 但如何在晚上 10 点准确触发通知 NSDate date NSDate date NSDate myNewDate date da
  • 如何将 UIPopoverPresentationController 的高度设置为与 UITableView 相同

    我在我的应用程序上使用 UIPopoverPresentationController 在我的 iPhone 上显示弹出窗口 使用 UIModalPresentationNone 我希望尺寸随着 UITableView 的高度而动态变化 但
  • iPhone SDK - orkut API

    我曾使用 gData 库从 iPhone 中的 Google 联系人中检索联系人信息 同样 我将与 Orkut 合作 有没有像 gData 这样适用于 Orkut 的库 如果是这样 请给我链接 提前致谢 对于 orkut 我们有 orkut
  • Cocos2D复杂动画[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 Cocos2D 将我的游戏从 Flash 移植到 iOS 我现在有一个工作版本 我很高兴我
  • 方向改变时重新定位控件

    我知道自动布局可用于在方向改变时使尺寸和位置保持一致 当方向改变时 是否可以完全改变布局 例如 请查看下面的纵向模式下简单登录屏幕的线框 现在 如果我旋转设备 我想完全重新定位控件 这种事情可以用自动布局来完成吗 如果没有 我该怎么办 谢谢
  • rightBarButtonItem 信息按钮,右侧没有空格

    我有一个UIViewController设置为在其右侧显示一个信息按钮UINavigationItem像这样 UIButton infoButton UIButton buttonWithType UIButtonTypeInfoLight
  • NSString stringWithContentsOfFile 失败,错误代码似乎错误

    我正在尝试将文件加载到字符串中 这是我正在使用的代码 NSError error nil NSString fullPath NSBundle mainBundle pathForResource filename ofType html
  • 如何开始复杂级别的跨平台移动应用开发? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在iOS中处理1到3个手指的滑动手势

    我使用以下代码来处理代码中的 1 根手指滑动 UISwipeGestureRecognizer swipe UISwipeGestureRecognizer alloc initWithTarget self action selector
  • iPhone 上的双精度与浮动

    我刚刚听说 iPhone 本身无法进行双倍操作 从而使它们比常规浮动慢得多 这是真的 证据 我对这个问题很感兴趣 因为我的程序需要高精度计算 而且我将不得不在速度上妥协 iPhone 可以在硬件中执行单精度和双精度算术 在 1176 原始
  • 错误域=kAFAssistantErrorDomain 代码=209“(空)”

    我面临着一个问题SFSpeechRecognizer 启动应用程序几秒钟后 我开始收到错误消息 错误域 kAFAssistantErrorDomain 代码 209 空 和 错误 域 kAFAssistantErrorDomain 代码 2
  • Objective-C UILabel 作为超链接

    我正在尝试做一个UILabel一个链接UIWebView 我怎样才能做一个UILabel作为超链接 您可以使用 UITapGestureRecognizer 它将实现与您想要的类似的功能 UILabel myLabel UILabel al
  • 如何在 UIScrollView 中启用缩放

    如何启用缩放功能UIScrollView 答案是here https developer apple com documentation uikit uiscrollview 滚动视图还可以处理内容的缩放和平移 当用户做出捏合或张开手势时
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S
  • 我可以通过 SDK 访问 iPhone 上的可视语音邮件文件吗?

    我想访问存储在 iPhone 上的可视语音邮件文件 有没有办法通过SDK访问这些文件 有人有处理这些文件的经验吗 我假设它们是从网络下载并存储在 iPhone 本地的文件 不 iPhone 上的每个应用程序都是独立的 因此您无法访问任何其他
  • 如何使用 MonoTouch c# 以编程方式获取联系人?

    如何获取 iPhone 中的联系人 我需要从 iPhone 联系人中获取所有属性 如何使用MonoTouch以编程方式实现 ABAddressBook iPhoneAddressBook new ABAddressBook ABPerson
  • 使用 HTTP NSURL 创建 AVAsset

    我正在尝试合并两个NSURLs包含视频参考 其中一个 URL 指向 AWS 上的视频 另一个 URL 指向本地存储的视频 我的导出代码有效 因为我已经尝试使用两个本地视频 但每当我尝试合并 HTTP url 和本地 url 时 我都会收到此
  • 从 iPhone 传输视频

    我可以从 iPhone 的相机中获取单独的帧 我需要的是一种将它们与声音打包以便流式传输到服务器的方法 收到文件后发送它们并不是什么大问题 我遇到问题的是流媒体文件的生成 我一直在尝试让 FFMpeg 工作 但运气不佳 有人对我如何实现这一
  • Xcode 在我的 iPhone 应用程序上运行 codesign 后如何运行脚本?

    我编写了一个脚本 它执行一些步骤来将我的构建打包为临时发行版 我的第一个猜测是在我的 Ad Hoc 目标中使用运行脚本阶段 但看起来协同设计被固定在构建 iPhone 应用程序链的最后位置 有人知道如何在构建过程的最后一刻运行我的脚本 Up
  • 测试 NSMutableArray 是否包含字符串对象

    我有一个NSMutableArray其中包含一些NSString对象 如何测试数组是否包含特定的字符串文字 I tried array containsObject teststring 但这行不通 你所做的应该很好 例如 NSArray

随机推荐

  • 使用 SemanticResultKey 时出现 TargetInitationException

    我想建立我的语法来接受多个数字 当我重复数字 例如说 二十一 时 它有一个错误 所以我不断减少代码来找出问题所在 我为语法生成器编写了以下代码 string numberString one Choices numberChoices ne
  • Orchard 根据过滤的下拉选择创建投影或搜索

    我认为 我有一个简单的功能 我试图将其添加到我的 Orchard 1 6 站点 但我找不到任何有关如何执行此操作的教程或说明 我有一个名为 Office 的自定义类型 每个办公室都有一个名为 State 的自定义字段 指示办公室所在的州 实
  • 当块后代时关注 ListView 中的 EditText (Android)

    我有一个定制的ListView 每行都有一个EditText Buttons TextView 为了使 ListView 项目可点击 我保留了android descendantFocusability blocksDescendants
  • 如果字典键不可用,则返回默认值

    我需要一种方法来获取字典值 如果其键存在 或者简单地返回None 如果没有 然而 Python 提出了一个KeyError如果您搜索不存在的键 则会出现异常 我知道我可以检查密钥 但我正在寻找更明确的内容 有没有办法直接返回None如果密钥
  • 如何在 OSX 上从命令行打开 Visual Studio Code?

    The docs https code visualstudio com docs codebasics launching vscode提到一个名为的可执行文件code 但我不确定在哪里可以找到它 以便我可以将其放在我的路径上 我从 VS
  • div 边框半径问题(在 Firefox 和 Opera 上)

    正如你所看到的 有两张图片 首先 在 chrome 上 右侧有 Be en 和 Yorumlar 按钮 边框看起来非常好 但第二张照片显示 firefox和opera有边框半径的问题 我尝试做边框宽度 薄 边框 1px实心等 但它看起来一样
  • EC.element_to_be_clickable 和 EC.presence_of_element_ located 之间单击()元素的区别

    我在间歇性单击某个元素时遇到 TimeoutExceptions 我尝试过显式等待和 time sleep 它工作了一段时间 我一次又一次地遇到例外 我想了解这是否是由预期条件引起的 WebDriverWait self driver 40
  • 简单饼图:错误百分比未居中?

    我有一个 symfony 项目 我使用 bootstrap 作为样式 并且我想使用 Easy Pie Chart 作为仪表板页面 所以 在 base html twig 中 block stylesheets endblock block
  • 将任意 GUID 编码为可读 ASCII (33-127) 的最有效方法是什么?

    GUID 的标准字符串表示形式大约需要 36 个字符 这非常好 但也非常浪费 我想知道如何使用 33 127 范围内的所有 ASCII 字符以最短的方式对其进行编码 简单的实现会产生 22 个字符 只是因为128 bits 6 bits产量
  • 来自旋转 JSON 的 D3 多系列折线图

    这里有一个很好的多系列折线图示例http bl ocks org mbostock 3884955 http bl ocks org mbostock 3884955如果 tsv 数据被布置出来 我确信它会看起来像这样 date 20111
  • .NET 进程可以分配的最大内存

    垃圾收集器可以为 NET 进程分配的最大内存是多少 当我编译到 x64 时 Process GetCurrentProcess MaxWorkingSet 返回大约 1 4GB 但是当我编译到 AnyCPU x64 时 返回相同的数字 对于
  • 无法通过 shell 在 CentOS 7 上安装 phpMyAdmin

    yum y install phpmyadmin 出现错误 Error Package phpMyAdmin 4 4 15 10 2 el7 noarch epel Requires php zip Available php common
  • 是否可以在 WPF ItemsControl 中模拟边框折叠(ala CSS)?

    我正在 WPF 中设置项目的样式ListBox 并希望在每个项目周围放置边框 和BorderThickness设置为 1 例如 相邻项目之间的上下边框都会被绘制 因此看起来比侧边框 更厚 如下所示 生成这些的项目模板ListBoxItems
  • ZeroMQ:重新绑定套接字时地址使用错误

    将 ZeroMQ 套接字绑定到端点并关闭套接字后 将另一个套接字绑定到同一端点需要多次尝试 之前的调用zmq bind直到成功失败并出现错误 地址正在使用 EADDRINUSE 下面的代码演示了这个问题 include
  • 是否有一个好的数据结构可以执行查找、并集和解并操作?

    我正在寻找一种可以相当有效地支持并集 查找和解并的数据结构 一切至少 O log n 或更好 因为标准的不相交集结构不支持解并 作为背景 我正在用 MCTS 编写 Go AI http en wikipedia org wiki Monte
  • SSL 和 SocketChannel

    理想情况下 我只需要一个简单的SSLSocketChannel 我已经有一个可以通过普通方式读取和写入消息的组件SocketChannel 但对于其中一些连接 我必须通过网络使用 SSL 然而 这些连接上的操作是相同的 有谁知道免费的SSL
  • 如何在VBA中清空数组?

    我正在开发一个与 COM 服务器交换对象的 Excel VBA 插件 如下所示 get an array of objects Dim Ents As ISomething ComObject GetEntities Ents send a
  • log4j 记录两次

    我正在使用 log4j 来记录错误和其他系统信息 但来自在信息级别记录两次的信息 public static void main final String args throws Exception LOGGER info program
  • Java弹跳球

    我正在尝试编写一个Java应用程序 它在屏幕上绘制多个从框架边缘弹起的球 我能成功抽出一个球 然而 当我添加第二个球时 它会覆盖我绘制的初始球 代码是 import java awt import javax swing import ja
  • 从 iPhone 中的音乐文件中获取 NSData

    我已从我的 iPhone 设备中检索了所有音乐和视频 我现在困于将这些保存到我的应用程序中 我无法从文件中获取原始数据 任何人都可以帮我找到解决方案吗 这是我用来获取音乐文件的代码 MPMediaQuery deviceiPod MPMed