使用 naudio 播放 .wav 文件,播放在 1 秒后停止
Posted
技术标签:
【中文标题】使用 naudio 播放 .wav 文件,播放在 1 秒后停止【英文标题】:Playing a .wav file using naudio, playback stops after 1 sec 【发布时间】:2010-12-08 19:24:07 【问题描述】:我在 C# 中使用 naudio 库并想播放一个简单的文件。问题是,播放在 1 秒后停止。我不知道为什么会这样。
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;
【问题讨论】:
"Press [Enter] to abort"
开始播放时你看到了吗?
可以使用System.Media.SoundPlayer
,除非您使用演示应用程序来验证更大应用程序的代码。
对不起,代码中的一段调试代码是我测试过的,我更正了。 @mark,是的,我在播放 1 秒时看到了它。
【参考方案1】:
如果您尝试从控制台应用播放音频,则需要确保使用函数回调,因为 WaveOut 的默认设置是使用窗口回调。
new WaveOut(WaveCallbackInfo.FunctionCallback())
更新:对于较新版本的 NAudio,我现在建议您避免使用函数回调,因为它们可能会导致某些驱动程序出现死锁。相反,使用事件回调和后台线程的WaveOutEvent
是首选机制:
new WaveOutEvent()
【讨论】:
以上是关于使用 naudio 播放 .wav 文件,播放在 1 秒后停止的主要内容,如果未能解决你的问题,请参考以下文章
使用 NAudio 转换为 WAV 后使用 SoundPlayer 播放 MP3
在播放 mp3 或 wav 时结合 NAudio Pan 和 JSNet SuperPitch