首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Method PlayAtTime AVAudioPlayerNode IOS Xamarin不起作用

Method PlayAtTime AVAudioPlayerNode IOS Xamarin不起作用
EN

Stack Overflow用户
提问于 2017-05-08 15:42:08
回答 1查看 229关注 0票数 0

我想在特定的时间播放声音,我在AVAudioPlayerNode上使用了PlayAtTime方法,这是我的代码:

代码语言:javascript
复制
 private AVAudioUnitReverb reverb;
 private AVAudioEngine engine;
 private AVAudioFile file;
 private AVAudioPlayerNode audioPlayerNode;

 public void PlayBackgroundMusic(byte[] data, string extention, string filename, double playingAt)
    {
        try
        {
            NSError err;
            engine = new AVAudioEngine();
            audioPlayerNode = new AVAudioPlayerNode();
            engine.AttachNode(audioPlayerNode);

            filename = filename.Replace(@"/", @"%2F").Replace(" ", @"%20");
            NSUrl url = new NSUrl(filename);
            file = new AVAudioFile(url, out err);

            reverb = new AVAudioUnitReverb();
            reverb.LoadFactoryPreset(AVAudioUnitReverbPreset.SmallRoom);

            engine.AttachNode(reverb);

            ConnectAudioNodes(audioPlayerNode, /*timePitch,*/ reverb, engine.OutputNode);

            audioPlayerNode.Stop();                

            engine.StartAndReturnError(out err);
            var hostTime = AVAudioTime.HostTimeForSeconds(playingAt);
            audioPlayerNode.ScheduleFile(file, new AVAudioTime(hostTime), null);
            audioPlayerNode.PlayAtTime(new AVAudioTime(hostTime));                   

            backgroundSong = filename;
        }
        catch (Exception ex)
        {
            MetricsManager.TrackEvent($"AudioService.PlayBackgroundMusic error {ex.Message}");
        }
    }

但是代码不起作用。音频总是从头开始。

EN

回答 1

Stack Overflow用户

发布于 2017-05-09 05:04:26

您的PlayAtTime需要基于您一起延迟和/或同步的音频播放器实例。

AVAudioPlayer.DeviceCurrentTime获取当前时间,并添加您希望在未来启动播放器的秒数(以双精度为基数):

示例:

代码语言:javascript
复制
var player1 = AVAudioPlayer.FromUrl(new NSUrl("FireplaceWoodCrackle.mp3", ""), out NSError nsError);
Debug.WriteLine(nsError?.Description);
if (nsError == null)
    player1.PlayAtTime(player1.DeviceCurrentTime + 10); // play at 10 seconds in the future
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43842270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档