繁体   English   中英

流式传输wav文件

[英]streaming wav files

我有一个通过套接字发送数据的服务器,数据是一个wav'文件'。 我可以轻松地将数据写入磁盘,然后在WMP中播放,但我不知道如何在从套接字读取数据时播放它。 可能吗?

奖金问题:如果流是mp3或其他格式,我该怎么做?

这适用于本机C ++中的Windows。

因为您已经说过WMP,我假设这个问题适用于尝试在Windows机器上播放wav文件。 如果没有,这个答案是不相关的。

你想做的不是微不足道的。 这是一个很好的文章在这里的代码项目,它描述了Windows音频模式。 它介绍了如何设置音频设备以及如何将数据流式传输到设备中进行播放。 您“只需”提供来自套接字的数据作为回放缓冲区的数据。 但这就是所有棘手工作的地方。 你必须确定

  • 您有足够的数据来开始播放
  • 当您的套接字缺乏数据并且没有任何内容可以发送到回放缓冲区时处理这种情况
  • 您可以以足够的速度从套接字读取数据,以保持播放缓冲区满

这是一项有趣的练习。 但是很棘手。

马克是对的,这是一个棘手的问题。 如果使用DirectSound而不是waveOut,可能不那么棘手。 这是一篇关于从磁盘流式传输波形文件的文章 :来自网络的流媒体基本上是相同的过程。 确保在开始之前从网络收集足够的数据 - 您需要的不仅仅是文章提到的2个缓冲区。

FMOD甚至不那么棘手。 来自FAQ

增强的Internet功能

  • 互联网音频流。 包括自定义互联网流媒体代码,允许无缝SHOUTcast,Icecast和http流媒体支持。
  • 下载功能。 FMOD的模块化文件系统的副作用支持网络文件,甚至静态样本也可以从互联网上加载。

文件格式支持 :FMOD目前支持多种音频文件格式。 部分清单

  • MP3 - (MPEG I / II第3层,包括VBR支持)
  • OGG - (Ogg Vorbis格式)
  • WAV - (Microsoft Wave文件,包括压缩的wavs。PCM,MP3和IMA ADPCM压缩的wav

马克是对的,这是一个棘手的问题。 waveOutXXXX API很古老(它早于Windows 95),并且需要比您想象的更容易出错的编码。 与C#相比,您可以更轻松地在C ++中与API进行交互。 只要确保这是你真正想做的事情。

如果您的流是WAV文件数据以外的某种格式(如MP3或WMA),则必须执行将数据解码为WAV格式并使用waveOutXXXX API播放的附加步骤。 找到一个好的组件进行MP3解码比你想象的要复杂 - 我认为这与Fraunhofer授权情况有关(如果你以任何方式使用MP3代码,你应该支付它们)。

除非你想要学习经验,否则我会找到一个现成的产品来做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM