используя DynamicSoundEffectInstance заполняет буфер - PullRequest
1 голос
/ 24 февраля 2012

Я использую DynamicSoundEffectInstance в проекте Xbox 360.

Проблема в том, что количество буфера растет очень быстро, пока оно не достигнет 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

...