0

SystemSound が提供しない AVAudioPlayer が提供するボリューム コントロールに、AVAudioPlayer を使用し、SystemSound を使用しないとします。

AVAudioPlayer では、一度に開くことができるプレーヤーの数に制限があるようです。サンプル プロジェクトのコードで、200 個の AVAudioPlayer のリストを作成すると、List が正常に機能することがわかります。しかし、その数を 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 またはメディア ファイルの変更....

4

1 に答える 1

0

私は問題を解決しました。タイプ NSURL を使用してオーディオ ファイルから読み取る代わりに、タイプ NSData を使用します。AVAudioPlayer.FromUrl 関数でインポートする代わりに、AVAudioPlayer.FromData を使用します。これには、約 245 人のプレーヤーの制限があります。テストとして、NSData で最大 6000 個の AVAudioPlayers を試してみましたが、問題なく動作しました。

于 2013-02-11T13:39:12.730 に答える