【问题标题】:Console application to play wav file [closed]控制台应用程序播放 wav 文件 [关闭]
【发布时间】:2014-04-23 18:23:17
【问题描述】:

我想分享有关如何创建控制台 C# 应用程序以使用 NAudio 库播放 wav 音频文件的信息。我目前唯一的问题是音频文件播放完毕后 - 成功终止应用程序需要大约 1 秒。这可能是因为 NAudio lib 需要一些时间来从音频数据中释放内存。希望对某人有所帮助。

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

namespace WaveTestNew
{
    class Program
    {
        static public WaveOut waveOut = new WaveOut();
        static public WaveFileReader reader = null;

        public static void printDevices()
        {
            Console.WriteLine("\nAvailable devices id:");

            for (int i = 0; i < WaveOut.DeviceCount; i++)
            {
                WaveOutCapabilities WOC = WaveOut.GetCapabilities(i);
                Console.WriteLine(i + " = " + WOC.ProductName);
            }
        }

        static void Main(string[] args)
        {

            if (args.Length < 2)
            {
                Console.WriteLine("Input parameters: <file_name> <device_id>");
                Console.WriteLine(@"Example:\n >>wavplay.exe c:\temp\test.wav 1");

                printDevices();
                Environment.Exit(1);
            }

            int iDeviceID = int.Parse(args[1]);
            if (iDeviceID >= WaveOut.DeviceCount)
            {
                Console.WriteLine("ERROR - unknown device_id: " + iDeviceID);
                printDevices();
                Environment.Exit(2);
            }

            String fileName = args[0];
            if (!fileName.ToLower().EndsWith(".wav"))
            {
                Console.WriteLine("ERROR: Not supported media file format");
                Environment.Exit(3);
            }

            waveOut.DeviceNumber = iDeviceID; // for default device
            reader = new WaveFileReader(fileName);
            waveOut.PlaybackStopped += waveOut_PlaybackStopped;
            waveOut.Init(reader);
            Console.WriteLine(DateTime.Now + ":Playback start");
            waveOut.Play();

            while (waveOut.PlaybackState != PlaybackState.Stopped)
            {
                Thread.Sleep(100);
            }
            Console.WriteLine(DateTime.Now + ":Playback stop");
            return;
        }

        private static void waveOut_PlaybackStopped(object sender, StoppedEventArgs e)
        {

            reader.Dispose();
            waveOut.Dispose();
        }
    }
}

【问题讨论】:

  • 试试看this SO question是否有帮助。
  • 我很困惑,这是一个问题还是您想“为他人共享代码”?
  • 可以澄清一点说,Volo 在同一个帖子中发布了这个问题并回答了这个问题,然后发布了一个答案,这实际上更像是一个评论,它被标记了,随后因为它而被删除.是的,这并没有真正澄清它。 :)
  • 抱歉让这里的人感到困惑。我通过浏览许多网站来寻找这个解决方案,并且有很多不同的实现方式,当我尝试时,有些功能不能很好地工作。我的解决方案展示了它如何与控制台应用程序一起使用。另外我要感谢在我的帖子上回复并在他们的计算机上尝试过的人。

标签: c# console-application wav playback naudio


【解决方案1】:

我刚刚尝试了您的代码示例,它立即返回,您遇到的问题可能与您的硬件配置有关。

如果你可以使用其他设备,试试看它是否与你当前使用的设备有关。

您也可以尝试其他库,例如 BASS.NET

【讨论】:

  • 感谢您试用 Aybe,我已在其他操作系统上尝试过,但处理完成后我没有看到明显的等待。
猜你喜欢
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
相关资源
最近更新 更多