将 MPMediaItem 与 simpleaudioengine 一起使用
Using MPMediaItem with simpleaudioengine
我一直在 cocos-2dx 中制作一个项目,但需要从 iOS 库创建一个 .mm 到 select 音乐以在后台播放。我通过播放 .mm 文件中的音乐让它工作,但由于各种原因,它需要使用 SimpleAudioEngine 在 cocos-2dx 中播放。我已经尝试将 url 的 absoluteString 转换为 NSString,将 id 转换为 const char* 以将其移回 cocos-2dx 文件,但它仍然没有 运行.
这就是它给我的 absoluteString(ipod-library://item/item.m4a?id=456458322781804615)
.cc-
-(void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)collection{
if(collection){
MPMusicPlayerController* appMusicPlayer = [MPMusicPlayerController applicationMusicPlayer];
[appMusicPlayer setQueueWithItemCollection:collection];
[appMusicPlayer play];
MPMusicPlayerController *iPodMusicPlayerController = [MPMusicPlayerController iPodMusicPlayer];
MPMediaItem *nowPlayingItem = [iPodMusicPlayerController nowPlayingItem];
NSURL *url = [nowPlayingItem valueForProperty:MPMediaItemPropertyAssetURL];
NSString *filePath= [url absoluteString];
NSString *filePath2 = [url path];
_songUrl = filePath;
}
-(id)returnsongUrl{
return _songUrl;
}
第二.mm
const char* MediaPicker::songUrl(){
id na1 = [[MediaPickerWrapper sharedIntance] returnsongUrl];
const char *cString = [na1 cStringUsingEncoding:NSASCIIStringEncoding];
return cString;
}
Cocos-2dx文件
CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(media->songUrl());
CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic(media->songUrl(),false);
它过滤到调用 AVAudioPlayer 的 initWithContentsOfURL:
方法并且应该与 iPod 媒体项目 url 一起工作。然而,AVAudioPlayer 仅在 iOS6 中获得了对 iPod URLs 的支持。您可能需要设置一个断点以确保您的 iPod URL 路径正确地传递给 CDAudioManager's load
方法。
如果您想针对 iOS6 之前的设备,您必须编写自己的包装器并使用 AVPlayer 或 AVQueuePlayer。
我一直在 cocos-2dx 中制作一个项目,但需要从 iOS 库创建一个 .mm 到 select 音乐以在后台播放。我通过播放 .mm 文件中的音乐让它工作,但由于各种原因,它需要使用 SimpleAudioEngine 在 cocos-2dx 中播放。我已经尝试将 url 的 absoluteString 转换为 NSString,将 id 转换为 const char* 以将其移回 cocos-2dx 文件,但它仍然没有 运行.
这就是它给我的 absoluteString(ipod-library://item/item.m4a?id=456458322781804615)
.cc-
-(void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)collection{
if(collection){
MPMusicPlayerController* appMusicPlayer = [MPMusicPlayerController applicationMusicPlayer];
[appMusicPlayer setQueueWithItemCollection:collection];
[appMusicPlayer play];
MPMusicPlayerController *iPodMusicPlayerController = [MPMusicPlayerController iPodMusicPlayer];
MPMediaItem *nowPlayingItem = [iPodMusicPlayerController nowPlayingItem];
NSURL *url = [nowPlayingItem valueForProperty:MPMediaItemPropertyAssetURL];
NSString *filePath= [url absoluteString];
NSString *filePath2 = [url path];
_songUrl = filePath;
}
-(id)returnsongUrl{
return _songUrl;
}
第二.mm
const char* MediaPicker::songUrl(){
id na1 = [[MediaPickerWrapper sharedIntance] returnsongUrl];
const char *cString = [na1 cStringUsingEncoding:NSASCIIStringEncoding];
return cString;
}
Cocos-2dx文件
CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(media->songUrl());
CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic(media->songUrl(),false);
它过滤到调用 AVAudioPlayer 的 initWithContentsOfURL:
方法并且应该与 iPod 媒体项目 url 一起工作。然而,AVAudioPlayer 仅在 iOS6 中获得了对 iPod URLs 的支持。您可能需要设置一个断点以确保您的 iPod URL 路径正确地传递给 CDAudioManager's load
方法。
如果您想针对 iOS6 之前的设备,您必须编写自己的包装器并使用 AVPlayer 或 AVQueuePlayer。