Как остановить поток MP3 в nAudio? - PullRequest
0 голосов
/ 24 июня 2019

Я создаю программу Windows Forms, которая использует nAudio для воспроизведения потока MP3.Если я использую waveOut.Stop ();в этом коде он сохраняет позицию ранее и начинается сзади.Если останавливаться и запускаться достаточно раз, в веб-запросе также есть тайм-аут.

Я попытался изменить положение несколько раз, а также поместил waveOut.Stop ();перерыв;в нескольких местах.

public void PlayMp3FromUrl(string url)
        {
            new Thread(delegate (object o)
            {
                var response = WebRequest.Create(url).GetResponse();
                using (var stream = response.GetResponseStream())
                {
                    byte[] buffer = new byte[65536]; // 64KB chunks
                    int read;
                    while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        var pos = ms.Position;
                        ms.Position = ms.Length;
                        ms.Write(buffer, 0, read);
                        ms.Position = pos;
                        if (status == 1)
                        { // what im waiting for...
                            // yeet
                        }
                    }
                }
            }).Start();

            // Pre-buffering some data to allow NAudio to start playing
            while (ms.Length < 65536 * 10)
            {
                Thread.Sleep(1000);
                if (status == 1)
                { // what im waiting for...
                    // break;
                }
            }
            ms.Position = 0;
            using (WaveStream blockAlignedStream = new BlockAlignReductionStream(WaveFormatConversionStream.CreatePcmStream(new Mp3FileReader(ms))))
            {
                using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
                {
                    waveOut.Init(blockAlignedStream);
                    waveOut.Play();
                    while (waveOut.PlaybackState == PlaybackState.Playing)
                    {
                        System.Threading.Thread.Sleep(100);
                        if (status == 1)
                        {
                            // sad face
                        }
                    }
                }
            }
           // return;
        }

Я ожидаю, что игрок полностью остановится, когда WaveOut.Stop ();называется там, где // грустное лицо, но это не так.Я вызываю PlayMp3FromURL, когда в программе нажимается кнопка, другая кнопка в программе меняет состояние на 1 в течение 100 миллисекунд, а затем меняет его на 3. Я не очень хорош в этом, поэтому мне нужна помощь, чтобы это исправить.Под остановкой я подразумеваю, что поток останавливается полностью и полностью, поэтому при воспроизведении он не просто возобновляется с последнего места или времени ожидания.

...