目录
几个相关的类
WaveFormat
public class WaveFormat
{
/// <summary>format type</summary>
protected WaveFormatEncoding waveFormatTag;
/// <summary>number of channels</summary>
protected short channels;
/// <summary>sample rate</summary>
protected int sampleRate;
/// <summary>for buffer estimation</summary>
protected int averageBytesPerSecond;
/// <summary>block size of data</summary>
protected short blockAlign;
/// <summary>number of bits per sample of mono data</summary>
protected short bitsPerSample;
/// <summary>number of following bytes</summary>
protected short extraSize;
//省略属性及函数描述
}
这个类非常关键,在waveInOpen和waveOutOpen函数中都需要用到这个类。
这个类对应的C++结构为WAVEFORMATEX,定义如下。
C++
typedef struct {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX;
| 参数 | C++数据类型 | Net数据类型 | 说明 |
|---|---|---|---|
| waveFormatTag | WORD | ushort | 格式类型,例如pcm格式、adpcm等 |
| channels | WORD | sort | 通道数量,例如单声道,双声道,多声道 |
| sampleRate | DWORD | int | 采样率,例如8000,16000,44100等。 |
| averageBytesPerSecond | DWORD | int | 平均数据传输率,每秒的字节数 |
| blockAlign | WORD | short | 数据块的大小,特定声音格式下的最小数据单元的大小(字节数),程序每次处理的数据必须是这个大小的倍数。 |
| bitsPerSample | WORD | short | 没采样的位数,这个参数和格式有关,8位、16位、20位或者24位等等。 |
| extraSize | WORD | short | 额外信息的字节数,和格式类型有关。 |
更详细的参数说明,参考WAVEFORMATEX structure
IWavePlayer接口
这个接口,定义了播放相关的类要实现的功能,包括初始化(Init)、打开(Open)、关闭(Close)和暂停(Pause),还包括两个属性(Volume和PlaybackState)和一个播放停止事件(PlaybackStopped)。从下图可以看出,WaveOut、WaveOutEvent都实现本接口。

IWavePosition接口
这个接口只有一个只读属性(WaveFormat OutputWaveFormat)和一个函数(long Get

本文深入剖析了NAudio库中WaveOutEvent类的播放过程,包括声音文件的准备、播放类初始化、播放过程分析及播放结束处理。通过详细解读WaveFormat、IWavePlayer等关键类与接口的作用,揭示了NAudio在.NET平台下高效播放音频文件的内部机制。
2798

被折叠的 条评论
为什么被折叠?



