1

我正在尝试同时播放多个声音。然而,有时声音只是停止播放或根本不播放。

我有一个事件处理程序,它在应该播放声音效果时接收事件:

void HandlePlaySound (object sender, EventArgs e)
    {
        this.InvokeOnMainThread (()=>{
            ...
             [set url to path]  
            ...
            MonoTouch.AVFoundation.AVAudioPlayer player = MonoTouch.AVFoundation.AVAudioPlayer.FromUrl(url);
            player.Play();
        });
    }

这在大多数情况下都可以正常工作,但是当同时触发两个声音时,似乎其中一个会被杀死或两者都被杀死。我一定在这里做错了什么。

有没有更正确的方式在 iPhone 应用程序中播放声音。每个声音都应该播放到最后,并且可能同时播放多个声音。

4

1 回答 1

2

如果我猜的话,我会说有时,GC 会进入并处理超出范围的玩家,从而导致您的随机停止行为。我找到了一个稳定的解决方案,首先确定您希望能够同时播放多少个音频流然后执行这些规则:

    // I'd like a maximum of 5 simultaneous audio streams
    Queue<AVAudioPlayer> players = new Queue<AVAudioPlayer>(5);

    void PlayAudio (string fileName)
    {
        NSUrl url = NSUrl.FromFilename(fileName);
        AVAudioPlayer player = AVAudioPlayer.FromUrl(url);

        if (players.Count == 5) {
            players.Dequeue().Dispose();
        }
        players.Enqueue(player);
        player.Play();
    }

    // In my example, I'll select files from my Sounds folder (containing a couple of .wav, a couple of .mp3 and an .aif)
    string[] files;
    int fileIndex = 0;

    string GetNextFileName ()
    {
        if (files == null)
            files = Directory.GetFiles("Sounds");

        if (fileIndex == files.Length)
            fileIndex = 0;
        return files[fileIndex++];
    }

    partial void OnPlayButtonTapped (NSObject sender)
    {
        string fileName = GetNextFileName();
        PlayAudio(fileName);
    }    
于 2013-04-14T19:35:37.953 回答