一次打开大量的AVAudioPlayers?

问题描述 投票:0回答:1

让我们假设我想使用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或更改媒体文件....

c# xamarin.ios avaudioplayer audio-player
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.