gpt4 book ai didi

vb.net - 使用 NAudio 流式传输非 PCM 原始音频

转载 作者:行者123 更新时间:2023-12-03 00:10:50 26 4
gpt4 key购买 nike

我很想用 NAudio 来完成这项工作,所以请告诉我是否有办法解决这个问题。我有来自串行设备的流式原始音频,我正在尝试通过 WaveOut 播放。

尝试 1:

'Constants 8000, 1, 8000 * 1, 1, 8
Dim CustomWaveOutFormat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.Pcm, SampleRate, Channels, AverageBPS, BlockAlign, BitsPerSample)
Dim rawStream = New RawSourceWaveStream(VoicePort.BaseStream, CustomWaveOutFormat)

'Run in background
Dim waveOut = New WaveOut(WaveCallbackInfo.FunctionCallback())

'Play stream
waveOut.Init(rawStream)
waveOut.Play()

此代码有效,但有一个小问题 - 实际的音频流不是原始 PCM,它是原始的 MuLaw。它像贝多芬在奶酪刨丝器上演奏的 5th 一样播放压扩。如果我更改 WaveFormatWaveFormatEncoding.MuLaw ,我得到一个错误的格式异常,因为它是原始音频并且没有 RIFF header 。

所以我转而将其转换为 PCM:

尝试 2:
Dim reader = New MuLawWaveStream(VoicePort.BaseStream, SampleRate, Channels)
Dim pcmStream = WaveFormatConversionStream.CreatePcmStream(reader)
Dim waveOutStream = New BlockAlignReductionStream(pcmStream)

waveOut.Init(waveOutStream)

在这里, CreatePcmStream尝试获取流的长度(即使 CanSeek = false)并失败。

尝试 3
waveOutStream = New BufferedWaveProvider(WaveFormat.CreateMuLawFormat(SampleRate, Channels))
*add samples when OnDataReceived()*

它似乎也缺乏标题。

我希望在这一切中我错过了一些小事。该设备仅在使用时流式传输音频,否则不会接收到数据 - 这种情况由 (1) 处理。

最佳答案

为了使尝试 (1) 起作用,您的 RawSourceWaveStream 应该指定数据的真实格式。然后只需使用另一个 WaveFormatConversionStream.CreatePcmStream,将 rawStream 作为输入:

Dim muLawStream = New RawSourceWaveStream(VoicePort.BaseStream, WaveFormat.CreateMuLawFormat(SampleRate, Channels))
Dim pcmStream = WaveFormatConversionStream.CreatePcmStream(muLawStream);

尝试(2)实际上非常接近工作。你只需要让 MuLawStream.Length 返回 0。你不需要它来做你正在做的事情。 BlockAlignReductionStream 也与 mu-law 无关,因为 mu-law block 对齐为 1。

尝试(3)应该有效。不知道你说的没有标题是什么意思?

在 NAudio 中,您正在构建音频数据管道。管道中的每个阶段都可以有不同的格式。您的音频以 Mu-law 开始,然后转换为 PCM,然后可以播放。缓冲的 WaveProvider 用于即使您的设备已停止提供音频数据,您也希望继续播放。

编辑 我应该补充一点,NAudio 中的 IWaveProvider 接口(interface)是一个简化的 WaveStream。它只有一个格式和一个读取方法,适用于长度未知且无法重新定位的情况。

关于vb.net - 使用 NAudio 流式传输非 PCM 原始音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6377597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com