0

我一直在 cocos-2dx 中制作一个项目,但需要创建一个 .mm 来从 iOS 库中选择音乐在后台播放。我通过播放 .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);
4

1 回答 1

0

它过滤到调用 AVAudioPlayer 的initWithContentsOfURL:方法,并且应该与 iPod 媒体项 url 一起使用。但是,AVAudioPlayer 仅在 iOS6 中获得了对 iPod URL 的支持。您可能需要设置断点以确保您的 iPod URL 路径CDAudioManager's load正确地传递给该方法。

如果要针对 iOS6 之前的设备,则必须编写自己的包装器并使用 AVPlayer 或 AVQueuePlayer。

https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS6.html#//apple_ref/doc/uid/TP40011812-SW1

于 2015-07-03T00:16:10.820 回答