一次打开大量的AVAudioPlayers?

时间:2013-02-11 13:39:13

标签: c# xamarin.ios avaudioplayer audio-player

假设我想使用AVAudioPlayer和NOT SystemSound进行AVAudioPlayer提供的SystemSound不提供的音量控制。

AVAudioPlayer似乎对我可以一次打开的玩家数量有限制。您将在我的示例项目的代码中注意到,当我创建200个AVAudioPlayer列表时,它可以正常工作。但是当我将该数字增加到300时,它会因错误而崩溃。我唯一的结论是,我被允许创造一定数量的球员。是这样的吗?有没有什么方法可以在没有崩溃的情况下创造更多玩家?

    AVAudioPlayer player;
    NSUrl mediaFile;
    List<AVAudioPlayer> playerList;



    DateTime before = DateTime.Now;
    mediaFile = NSUrl.FromFilename("mySoundConvertedToCAF.caf");
    player = AVAudioPlayer.FromUrl(mediaFile);
    player.Delegate = new AVAudioPlayerDelegate();
    Console.WriteLine("total ms = " + DateTime.Now.Subtract (before).TotalMilliseconds);


    playerList = new List<AVAudioPlayer>();


    // For loop 200 times works
    // for ( int i = 0; i < 200; i++ )

    // For loop 300 times does NOT work.  Almost as if somewhere between 200 and 300 AVAudioPlayers is the max amount you can have open at once... Is it because all of them are accessing the same sound file?
    for ( int i = 0; i < 300; i++ )
    {
        playerList.Add (AVAudioPlayer.FromUrl(mediaFile));
        playerList[i].Delegate = new AVAudioPlayerDelegate();
    }

    Console.WriteLine("I made a list of " + playerList.Count() + " AVAudioPlayers!");


    playerList[0].Play();

    Thread.Sleep(500);

    playerList[1].Play();

至于我为什么要这样做,它是针对iOS游戏引擎的工作...我不是一次播放数百种声音但是我希望玩家打开以便在任何时候我都可以玩它们没有加载新的AVAudioPlayer或更改媒体文件....

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。而不是使用类型NSURL从音频文件中读取,使用类型NSData。而不是使用AVAudioPlayer.FromUrl函数导入,而是使用AVAudioPlayer.FromData。这确实有大约245名球员的限制。作为测试,我尝试了多达6000个AVAudioPlayers与NSData,他们工作正常。