我的应用程序显示了一个MPMediaPickerController.我想保存MediaItem并在启动时重新开始播放.我认为这是可行的MPMediaQuery.看来,我应该使用MPMediaItemPropertyPersistentID但我不知道如何查询它.有什么想法吗?
假设我有一个具有以下播放列表结构的 iOS 音乐库:
A Folder
|
---> A Playlist
|
---> Song A
Run Code Online (Sandbox Code Playgroud)
我运行以下代码:
import MediaPlayer
let playlists = MPMediaQuery.playlists().collections! as! [MPMediaPlaylist]
for playlist in playlists {
let firstItemName = playlist.items.first?.title ?? "none"
print("playlist: \(playlist.name!), first item: \"\(firstItemName)\"")
}
Run Code Online (Sandbox Code Playgroud)
我得到这个控制台输出:
播放列表:播放列表,第一项:“歌曲 A”
播放列表:A 文件夹,第一项:“歌曲 A”
我已经查看了所有 MediaPlayer 框架文档,但找不到任何方法来通过 API 发现播放列表和文件夹之间的父/子关系(或者甚至告诉集合包含其他集合)。我只想在用户浏览 A 文件夹后才显示 A 播放列表,而不是将它们显示为兄弟姐妹(或者甚至可能完全过滤掉 A 文件夹。
此外,文件夹和播放列表在运行时都具有相同的类:MPConcreteMediaPlaylist.
我是一个新的 Flutter 学习者。我正在尝试使用相同的代码库编写移动和网络应用程序。我想知道我应该在哪里使用MediaQuery.of(context).size以及在哪里LayouBuilder( BoxConstraints constraints)?
还想知道在一个大型应用程序中仅使用其中一个是否有效,或者它们是相互补充的?
编辑:我也喜欢更多地了解这些方法的行为
用户放大/缩小屏幕
用户更改移动应用程序上的屏幕方向或桌面计算机上的网络浏览器大小
这两种情况哪种方法更适合呢?
mpmediaquery responsive-design flutter flutter-layoutbuilder
我正在使用以下代码循环播放iPhone音乐库中的所有歌曲:
NSArray * songs = [[NSArray alloc] initWithArray:[[MPMediaQuery songsQuery] collections]];
for (MPMediaItemCollection * item in songs){
NSString * persistentID = [[[item representativeItem] valueForProperty:MPMediaItemPropertyPersistentID] stringValue];
// Do something with it.
}
[songs release];
Run Code Online (Sandbox Code Playgroud)
很基本的东西.
我将PersistentID作为一个NSString因为我需要将其写入XML文件(通过网络传输到另一个设备).因此,我不能把它留作一个NSNumber.
然后另一个设备将通过再次发送PersistentID来要求iPhone播放曲目.
此时,iPhone有一个NSString应该播放的轨道的PersistentID.
再次循环播放每首歌曲并比较PersistentID直到我找到我想要的曲目将会很简洁,所以我试图用MPMediaPropertyPredicateiPhone来搜索我.
我正在使用以下代码进行搜索:
MPMediaPropertyPredicate * predicate = [MPMediaPropertyPredicate predicateWithValue:persistentID forProperty:MPMediaItemPropertyPersistentID];
MPMediaQuery * songsQuery = [[MPMediaQuery alloc] init];
[songsQuery addFilterPredicate:predicate];
if ([[songsQuery items] count]){
MPMediaItem * item = [[songsQuery items] objectAtIndex:0];
// Play item.
}
[songsQuery release];
Run Code Online (Sandbox Code Playgroud)
哪里 …
我目前正在尝试使用AVPlayer从手机本地iPod库播放音乐,而不是使用应用程序控制器播放MPMusicPlayerController.
我可以使用和MPMediaQuery从本地iPod lib中选择一个曲目,但是当我尝试使用AVMutableAudioMixInputParameters在较低级别启动音频时,它似乎根本不会降低音量.
我使用AVPlayer而不是MPMusicPlayerController的原因是我在后台同时播放其他音频而MPMusicPlayerController无法播放,因为使用AVPlayer的现有音频文件正在占用硬件.我目前的代码是:
// just blindly select all music for now.
MPMediaQuery *everything = [[MPMediaQuery alloc] init];
NSArray *itemsFromGenericQuery = [everything items];
MPMediaItem *song;
NSMutableArray *array = [[NSMutableArray alloc] init];
for (song in itemsFromGenericQuery)
{
[array addObject:song];
}
Run Code Online (Sandbox Code Playgroud)
所以此时数组是我的lib中的一个轨道数组.
现在抓住一个并使用AVPlayer播放它:
// grab the first song off the array
MPMediaItem *song = [array objectAtIndex:0];
NSURL *assetURL = [song valueForProperty:MPMediaItemPropertyAssetURL];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:assetURL options:nil];
NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack *track = [audioTracks objectAtIndex:0];
NSMutableArray *allAudioParams = [NSMutableArray array]; …Run Code Online (Sandbox Code Playgroud) 我正在开发一个iphone 4应用程序,它根据不同的标准过滤本地媒体库.我已经能够按歌曲名称,艺术家和流派进行过滤.现在我需要添加一个评级过滤机制.我想的是"评级> = N星"(N:0..5)
我用来过滤的代码是:
allMedia = [MPMediaQuery songsQuery];
MPMediaPropertyPredicate *mpp1 = [MPMediaPropertyPredicate predicateWithValue:@"2" forProperty:MPMediaItemPropertyRating comparisonType:MPMediaPredicateComparisonEqualTo];
[allMedia addFilterPredicate:mpp1];
Run Code Online (Sandbox Code Playgroud)
但是MPMediaPropertyPredicate不允许通过MPMediaItemPropertyRating进行过滤(实际上它适用于艺术家和歌曲标题).
2011-05-12 11:37:39.060 Radio3[1525:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'MPMediaPropertyPredicate cannot filter using the rating property.'
Run Code Online (Sandbox Code Playgroud)
我通过MPMediaItemPropertyRating谷歌,但似乎我应该找到一种替代方法来按轨道评级过滤.
有人可以给我一个提示吗?
谢谢
更新:这是我的代码来解决这个问题:
allMedia = [MPMediaQuery songsQuery];
//MPMediaPropertyPredicate *mpp1 = [MPMediaPropertyPredicate predicateWithValue:@"2" forProperty:MPMediaItemPropertyRating comparisonType:MPMediaPredicateComparisonEqualTo];
//MPMediaPropertyPredicate *mpp2 = [MPMediaPropertyPredicate predicateWithValue:@"Pop" forProperty:MPMediaItemPropertyGenre comparisonType:MPMediaPredicateComparisonContains];
//[allMedia addFilterPredicate:mpp1];
//[allMedia addFilterPredicate:mpp2];
//[myPlayer setQueueWithQuery:allMedia];
NSArray *itemsFromGenericQuery = [allMedia items];
NSMutableArray *mArray = [[NSMutableArray alloc] init];
int i = …Run Code Online (Sandbox Code Playgroud) In my app, I want to reproduce a view which looks exactly like the "Videos" native iPad app (it displays Movies and iTunes U videos located on the iPad).
I don't know how to access those elements on the iPad (Movies and iTunes U).
I've played with everything mentionned in the Apple documentation "IPod Library Access Programming Guide":
I thought I was close with MPMediaItem and MPMediaQuery, as two of the Flags seemed promising:
MPMediaTypeMovie …
这是我的问题=)
MPMediaQuery *artistQuery = [MPMediaQuery artistsQuery];
NSArray *songsByArtist = [artistQuery collections];
Run Code Online (Sandbox Code Playgroud)
如何在songsByArtist中获取MPMediaItemCollections的每位艺术家的专辑数量?
例如:
披头士乐队的3张专辑
AC/DC 6专辑
谢谢 !!
我想获取歌曲在特定时间段内的收听次数。使用MPMediaItemPropertyLastPlayedDate我只能获取最后一次播放歌曲的日期,因此如果我每天多次播放歌曲,则只有最后一次才算数。基本上,我想要做的是获取用户在特定时期(例如最近 2 天)的收听历史记录。此外,MPMediaItemPropertyPlayCount我还可以获得总体的总播放次数。
有任何想法吗?
谢谢。
MPMedia API 中的有趣错误
我的音乐应用程序中存在一个持续存在的错误,我现在终于找到了它(现在我正在快速重写它)。它有几个方面。(使用系统音乐播放器)
好吧,真是愚蠢又令人气愤。
现在回答我的问题:
对于无法知道云项目是否在设备上(通过 iTunes)的情况,我无能为力。但是,我/应该/能够过滤掉某个项目是否具有 assetURL,这保证了它是本地的且可用。
let filter:MPMediaPropertyPredicate = MPMediaPropertyPredicate(value: "ipod", forProperty: MPMediaItemPropertyAssetURL, comparisonType: MPMediaPredicateComparison.Contains)
Run Code Online (Sandbox Code Playgroud)
这将返回 0 个项目。有谁知道过滤此属性的方法?在这里这样做似乎是最干净的,并且应该让查询返回 items 和 itemSections。我的所有表都是从查询中填充的,我认为没有一种方法可以手动重建表。
URL 的格式如下:ipod-library://item/item.m4a?id=5314739480586915369
现在,我怀疑在填充表视图等时可以添加捕获,但感觉真的很混乱。
这是 ios 9.2.1、Swift 2、Xcode 7.2.1
我还没有擦手机并重新复制歌曲。如果 assetURL 不存在,则从音乐应用程序手动下载它们是项目获取 assetURL 的唯一方法。
mpmediaquery ×10
ios ×5
iphone ×4
mpmediaitem ×3
avplayer ×2
objective-c ×2
swift ×2
cocoa-touch ×1
flutter ×1
ipad ×1
volume ×1