Directshow 音频捕获过滤器每秒仅生成 1 个样本
Directshow audio capture filter generates only 1 sample per second
我正在使用 Directshow 制作一个小型实时音频-视频应用程序。我使用 SampleGrabber 从 Audio Capture 过滤器中获取样本。 SampleGrabber 的回调每秒调用一次,每个样本的大小为 88200 字节。我打印了 WAVEFORMATEX:
WAVE_FORMAT_PCM: 真
n 频道:2
nSamplesPerSec:44100
nAvgBytesPerSec:176400
nBlockAlign: 4
wBitsPerSample: 16
cbSize: 0
所以我有两个问题:
Directshow方面的'sample'和录音方面的'sample'有区别吗?因为据我所知,每秒有 44100 个样本(每个样本占用 16 位),而 directshow 的 SampleGrabber 每秒仅抓取 1 个样本(每个样本占用 88200 字节)。看起来很多样本被聚合并放入 'buffer' ?
如果将大量音频样本放入缓冲区,则缓冲区的大小应为每秒 176400 字节。为什么每个缓冲区只有 88200 字节?是否只使用了 1 个通道?
Directshow“样本”是一个术语,用于表示包含数据的缓冲区:
然后
... size should be 176400 bytes per sec. Why it is only 88200 bytes per buffer?
不应该。您看到捕获过滤器的默认行为是生成 500 毫秒的缓冲区。您可以使用 IAMBufferNegotiation
interface (related questions 并搜索其他) 来覆盖此行为。
我正在使用 Directshow 制作一个小型实时音频-视频应用程序。我使用 SampleGrabber 从 Audio Capture 过滤器中获取样本。 SampleGrabber 的回调每秒调用一次,每个样本的大小为 88200 字节。我打印了 WAVEFORMATEX:
WAVE_FORMAT_PCM: 真
n 频道:2
nSamplesPerSec:44100
nAvgBytesPerSec:176400
nBlockAlign: 4
wBitsPerSample: 16
cbSize: 0
所以我有两个问题:
Directshow方面的'sample'和录音方面的'sample'有区别吗?因为据我所知,每秒有 44100 个样本(每个样本占用 16 位),而 directshow 的 SampleGrabber 每秒仅抓取 1 个样本(每个样本占用 88200 字节)。看起来很多样本被聚合并放入 'buffer' ?
如果将大量音频样本放入缓冲区,则缓冲区的大小应为每秒 176400 字节。为什么每个缓冲区只有 88200 字节?是否只使用了 1 个通道?
Directshow“样本”是一个术语,用于表示包含数据的缓冲区:
然后
... size should be 176400 bytes per sec. Why it is only 88200 bytes per buffer?
不应该。您看到捕获过滤器的默认行为是生成 500 毫秒的缓冲区。您可以使用 IAMBufferNegotiation
interface (related questions 并搜索其他) 来覆盖此行为。