Pergunta

Ao usar Naudio Para reproduzir um Mp3 Arquivo [No console], não consigo descobrir como parar a reprodução. Quando eu chamo o waveout.stop (), o código apenas para de executar e Waveout.dispose () nunca é chamado.

Tem algo a ver com o retorno de chamada da função? Se for, como faço para consertar isso?

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;
}
Foi útil?

Solução

Você está dizendo que o código está pendurado na chamada para o waveoutreset? Nesse caso, esse é um problema conhecido com retornos de chamada de função e certos drivers de áudio (o Soundmax parece particularmente suscetível a isso). Eu verifiquei uma possível correção para o código -fonte Naudio há alguns meses, para que você possa tentar criar o código mais recente e ver se isso corrige o problema.

Outras dicas

Meu primeiro palpite aqui é que, como você não tem console.read () ou uma chamada semelhante, seu código está executando tão rápido que você não vê as linhas de gravação finais.

Se Naudio implementarem idisposáveis, eu recomendaria usar uma instrução usando o .NET lide com isso para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top