Frage

Bei der Verwendung von NAudio , um die Wiedergabe ein MP3 Datei [in der Konsole], ich kann nicht herausfinden, wie die Wiedergabe zu stoppen. Wenn ich rufe waveout.Stop () nur den Code nicht mehr läuft und waveout.Dispose () aufgerufen wird, nie.

Hat es etwas mit der Callback-Funktion zu tun? Wenn ja, wie kann ich das Problem beheben?

static string MP3 = @"song.mp3";
static WaveOut waveout;
static WaveStream playback;
static void Main(string[] args)
{
    waveout = new WaveOut(WaveCallbackInfo.FunctionCallback());
    playback = OpenMp3Stream(MP3);
    waveout.Init(playback);
    waveout.Play();
    Console.WriteLine("Started");

    Thread.Sleep(2 * 1000);

    Console.WriteLine("Ending");
    if (waveout.PlaybackState != PlaybackState.Stopped)
        waveout.Stop();
    Console.WriteLine("Stopped");
    waveout.Dispose();
    Console.WriteLine("1st dispose");
    playback.Dispose();
    Console.WriteLine("2nd dispose");
}
private static WaveChannel32 OpenMp3Stream(string fileName)
{
    WaveChannel32 inputStream;
    WaveStream mp3Reader = new Mp3FileReader(fileName);
    WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(mp3Reader);
    WaveStream blockAlignedStream = new BlockAlignReductionStream(pcmStream);
    inputStream = new WaveChannel32(blockAlignedStream);
    return inputStream;
}
War es hilfreich?

Lösung

Wollen Sie damit sagen, den Code hängen im Aufruf von waveOutReset? Wenn ja, ist dies ein bekanntes Problem mit der Funktion Rückrufen und bestimmten Audio-Treiber (SoundMAX scheint besonders anfällig für diesen). Ich habe in einer möglichen Lösung für das NAudio Quellcode ein paar Monate, so kann man versuchen, den neuesten Code zu bauen und wenn das behebt das Problem zu sehen.

Andere Tipps

Meine erste Vermutung ist hier, dass, da Sie keine console.read haben () oder ähnlichen Anruf, dass der Code nur so schnell ausgeführt wird, dass Sie nicht die letzten Schreibleitungen sehen.

Wenn NAudio IDisposable implementiert dann würde ich empfehlen eine using-Anweisung verwenden, dies für Sie zu haben .NET zu behandeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top