无法播放创建的mp3文件,但可以播放现有文件

时间:2018-04-09 20:07:30

标签: c# audio naudio

我正在尝试播放包含我的流的书面内容的文件。这真的很奇怪,因为如果我只是进去手动播放它,但是无论何时我尝试使用该程序播放它,都没有来自剪辑的声音。 (文件中有内容)。我下载了一个仅用于测试的音乐文件,并将该名称与" fileName"交换。字符串变量,并与程序一起正常播放文件。

public void PlayAudio(object sender, GenericEventArgs<Stream> args)
{
        string fileName = $"{ Guid.NewGuid() }.mp3";
        using (var file = File.OpenWrite(Path.Combine(Directory.GetCurrentDirectory(), fileName)))
        {
            args.EventData.CopyTo(file);
            file.Flush();
        }

        WaveOut waveOut = new WaveOut();
        Mp3FileReader reader = new Mp3FileReader(fileName); // If i change "fileName" to my music test file, the program can play it fine. But whenever i switch to the created file name from the Stream. It doesnt play it :O
        waveOut.Init(reader);
        waveOut.Play();
}

我需要使用NAudio,因为这将在.net核心上运行。所以我不能仅仅使用SoundPlayer来获取一般信息。

项目背景。在我需要.net核心之前,我只是运行这个完美运行的代码。直接从api播放音频。但是,现在我无法使用它,因为.net核心不支持system.media。母鸡为什么我想出我需要将数据加载到文件中,mp3或wav对我来说不合适,然后用里面的内容播放该文件。

        public void PlayAudio(object sender, GenericEventArgs<Stream> args)
    {
        SoundPlayer player = new SoundPlayer(args.EventData);
        player.PlaySync();
        args.EventData.Dispose();
    }

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题。我真的不知道我做了什么。因为我确信我之前尝试过这个。我确实重新启动了电脑等,但你现在有效..

        public void PlayAudio(object sender, GenericEventArgs<Stream> args)
    {
        string fileName = $"{ Guid.NewGuid() }.wav";
        using (var file = File.OpenWrite(Path.Combine(Directory.GetCurrentDirectory(), fileName)))
        {
            args.EventData.CopyTo(file);
            file.Flush();
            Console.WriteLine(fileName);
        }

        WaveOut waveOut = new WaveOut();
        WaveFileReader reader = new WaveFileReader(fileName);
        waveOut.Init(reader);
        waveOut.Play();

    }