簡體   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