- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
谁能帮我把从设备媒体库中选择的歌曲转换成 NSData?我需要一个接受媒体项并返回该特定媒体项的 NSData 的函数。
提前致谢
最佳答案
您可以使用此代码
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);
关于iphone - 来自 MPMediaItem 的 NSData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18824983/
我尝试编写 Activator 操作来更改当前歌曲评级。 我现在可以读取 MPMediaItemPropertyRating 属性并获得评级。 但是我们如何从应用程序中更改它呢? 最佳答案 您可以更改
在我的应用程序中,我让用户从库中选择一首歌曲,然后我收到该歌曲作为 MPMediaItem,我试图弄清楚如何在应用程序上的单独音频播放器中播放 MediaItem,以便用户可以控制有关播放的各种事情。
我想知道如何访问 MPMediaItem 原始数据。 有什么想法吗? 最佳答案 您可以通过以下方式获取媒体项的数据: -(void)mediaItemToData { // Implement
我正在尝试获取用户 iPhone 库中所有视频项目的列表,并让它们首先按专辑名称排序,然后按轨道编号排序(我的想法是这会将所有电视节目和播客放在一起以正确的节目/剧集顺序)。问题是,我想不出一种方法来
我正在从 iPod 库中导入项目,并希望为每个导入的 MPMediaItem 生成一个唯一的文件名。我希望文件名唯一地代表一个 MPMediaItem,这样如果用户再次导入它,我就不会在本地库中有两个
我有一个使用自定义单元格的 UITableView,该单元格填充有 MPMediaItems 和按钮(以及其他内容)。我正在尝试使用特定单元格的 MPMediaItem 执行操作,关于点击哪个按钮,而
那里有很多帖子展示了如何获取 MPMediaIteme 的估计文件大小。这种使用 AVAssetExportSession 的方法给出的文件大小与实际大小非常不同,例如 3M 的文件显示为 10M。由
有什么方法可以从作为资源捆绑在主包中的原始 mp3 文件中获取 MPMediaItem 的引用? 提前致谢。 最佳答案 不,MPMediaItem是 iPod 库中的一个文件。文档中有明确说明: A
我正在尝试检索我的 iPod 库中歌曲的轨道编号。 基本上我查询了所有专辑如下: NSArray *albums = [MPMediaQuery albumsQuery].collections; 检
我目前正在开发一款应用程序,可以显示您在音乐播放器中收听的艺术家、轨道和专辑封面。除了当我播放一首没有艺术作品的歌曲时,我希望能够显示我自己的默认图像(而不是显示空白屏幕)之外,一切都很顺利。 下面是
在我的应用程序中,我正在检查当前播放的歌曲是否是专辑的一部分。我能够做到这一点,但我发现如果专辑是汇编的一部分,我的代码将无法按预期工作。 我想要做的是,如果当前播放的歌曲是专辑的一部分,则启用按钮,
我想制作一个 iOS 应用程序,允许用户随时随地更新音乐文件的元数据,从而简化组织用户 iTunes 库的过程。 您是否能够编辑 iPhone 上默认音乐库中存储的文件的元数据,或者访问该文件受到沙箱
我正在寻找一种更快的方法来从我的 iOS 音乐库中获取不属于专辑的所有歌曲。 我基本上知道我可以遍历所有轨道并检查专辑标题。但我一直在寻找更好的方法,也许使用这样的谓词...... [[MPMedia
我正在使用 Apple Music API 的 recent played endpoint返回最近播放的媒体 Assets 列表。 然后我使用其中之一并在 MPMusicPlayerControll
我正在尝试执行此代码以获取用户可以在其手机上拥有的所有音乐播放列表。 var queryPlaylists = MPMediaQuery.playlistsQuery() print(
MPMediaPickerController 返回一个 MPMediaItem 如果返回本地 url,则可以播放声音。 如果音乐没有下载到本地,则assetURL为空。 如何在本地下载 MPMedi
在结合了几个 SO 问题(如 this one)的答案后,我已经设法使用 AVAssetReader 从 MPMediaItem 获取原始数据。和 this one和一个不错的blog post .我
我正在寻找一种通过 MediaPlayer 库获取艺术家图片的方法。 我在 the Apple's Doc 中搜索过,但没有什么。属性“Artwork”指的是专辑的封面。 知道我是否以及如何获得它吗?
希望玩MPMediaItemcollection使用 MPMusicPlayerController . musicPlayer = [MPMusicPlayerController applicat
我知道这个问题已经在这里以完全相同的方式提出了cannot subscript a value of type [MPMediaItem] ,但我没有让他的解决方案发挥作用。 cell.textLab
我是一名优秀的程序员,十分优秀!