NAudio用法详解(6)播放过程流程分析

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

几个相关的类

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值