使用DynamicSoundEffectInstance填充缓冲区

时间:2012-02-24 10:38:37

标签: c# xna xbox360

我在Xbox 360项目中使用DynamicSoundEffectInstance。

问题是buffercount增长非常快,直到达到64并且应用程序崩溃。 据我所知,它根本不应该增长?

为了测试我已经简化了代码以回到基础。

以下是一些代码(项目中的其余部分未触及模板)

    DynamicSoundEffectInstance soundEffect = new DynamicSoundEffectInstance(22500, AudioChannels.Mono);
    int bufferCount=0;
    byte[] BufferHigh;
    byte[] BufferLow;
    bool alternate = true;

    public Game1()
    {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";
        this.IsFixedTimeStep = true;
        this.TargetElapsedTime = TimeSpan.FromMilliseconds(20);
    }

    protected override void LoadContent()
    {
        spriteBatch = new SpriteBatch(GraphicsDevice);
        bufferCount = soundEffect.GetSampleSizeInBytes(new TimeSpan(0, 0, 0, 0, 20));
        BufferHigh = Enumerable.Repeat<byte>((byte)255, bufferCount).ToArray();
        BufferLow = Enumerable.Repeat<byte>((byte)127, bufferCount).ToArray();
        soundEffect.Play();
    }

    protected override void Update(GameTime gameTime)
    {
        // Allows the game to exit
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            this.Exit();

        if (alternate)
            soundEffect.SubmitBuffer(BufferHigh);
        else
            soundEffect.SubmitBuffer(BufferLow);

        alternate = !alternate;

        Debug.WriteLine("elapsed: " + gameTime.ElapsedGameTime.TotalMilliseconds);  
        Debug.WriteLine("buffercount: " +soundEffect.PendingBufferCount);

        base.Update(gameTime);
    }

代码应在高低之间交替创建咔嗒声。 有什么建议? 相同的代码在Windows Phone上运行良好

0 个答案:

没有答案