0

cocos-2dx でプロジェクトを作成してきましたが、iOS ライブラリから音楽を選択してバックグラウンドで再生するために .mm を作成する必要がありました。.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 のみをサポートしました。CDAudioManager's loadiPod の URL パスがメソッドに正しく渡されるように、ブレークポイントを設定する必要がある場合があります。

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 に答える