Riproduzione di un file wav utilizzando NAudio, la riproduzione si ferma dopo 1 sec

StackOverflow https://stackoverflow.com/questions/4391409

  •  10-10-2019
  •  | 
  •  

Domanda

Sto utilizzando il lib NAudio in C # e vuole giocare un semplice file. Il problema è, la riproduzione si arresta dopo 1 secondo. Non riesco a capire il motivo per cui lo fa.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NAudio.Wave;

namespace NAudioTest
{
    class Program
    {
        static IWavePlayer waveout;
        static WaveStream outputStream;
        static string filename = null;

        static void Main(string[] args)
        {
            waveout = new WaveOut();

            filename = "C:\\1.wav";

            outputStream = CreateInputStream(filename);

            try
            {
                waveout.Init(outputStream);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error while loading output");
                Console.WriteLine("Details: " + ex.Message);
                Console.ReadLine();
                return;
            }

            Console.WriteLine("Press [Enter] to start playback");
            Console.ReadLine();

            waveout.Play(); //this stops after 1 sec. should it play until i hit enter cause of the next line?

            Console.WriteLine("Press [Enter] to abort");
            Console.ReadLine();
            waveout.Dispose();
            Console.ReadLine();
        }


        static WaveStream CreateInputStream(string name)
        {
            WaveChannel32 inputStream;
            if (name.EndsWith(".wav"))
            {
                WaveStream readerStream = new WaveFileReader(name);
                if (readerStream.WaveFormat.Encoding != WaveFormatEncoding.Pcm)
                {
                    readerStream = WaveFormatConversionStream.CreatePcmStream(readerStream);
                    readerStream = new BlockAlignReductionStream(readerStream);
                }

                if (readerStream.WaveFormat.BitsPerSample != 16)
                {
                    var format = new WaveFormat(readerStream.WaveFormat.SampleRate, 16, readerStream.WaveFormat.Channels);
                    readerStream = new WaveFormatConversionStream(format, readerStream);
                }
                inputStream = new WaveChannel32(readerStream);
            }
            else
            {
                throw new InvalidOperationException("Invalid extension");
            }
            return inputStream;
        }
    }
}
È stato utile?

Soluzione

È necessario assicurarsi che si sta utilizzando callback funzione se si sta tentando di riprodurre l'audio da una console app, dal momento che il valore predefinito per WaveOut è quello di utilizzare i callback finestra.

new WaveOut(WaveCallbackInfo.FunctionCallback())

Aggiornamento: Con le versioni più recenti di NAudio ora consiglia di evitare le richiamate funzioni, in quanto possono causare situazioni di stallo con alcuni driver. Invece, WaveOutEvent che utilizza callback di evento e un filo di fondo è il meccanismo preferito:

new WaveOutEvent()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top