2016-04-19 52 views
1

我有一個TResourceStream包含一個簡單的WAV聲音。如何在Delphi中播放來自資源的mp3內容?

我寫這句話到resource.res文件: sound WAV "res\notify.wav"

我有以下的方法,與WAV作品:

Res := TResourceStream.Create(HInstance, 'sound', 'WAV'); 
Res.Position := 0; 
SndPlaySound(res.Memory, SND_MEMORY or SND_ASYNC); 
Res.free; 

我轉換成WAV和MP3做了以下幾件事:

resource.res文件:sound MP3 "res\notify.MP3"

改變了打法方法第一行:

Res := TResourceStream.Create(HInstance, 'sound', 'MP3'); 

但沒有任何反應。它不會拋出任何異常,聽不到任何聲音。

如何播放MP3就像WAV文件一樣簡單?

+0

另請參見[如何在delphi中播放內存中的mp3文件?](http://stackoverflow.com/q/6235673/62576) –

回答

2

The SndPlaySound API僅支持波形音頻。它不是一個通用的多媒體API,因此不支持(直接也不容易)支持MP3播放。

要通過此API播放音頻,首先需要將MP3解碼爲API所需的波形格式。

我要指出,這似乎是有可能得到SndPlaySound API通過附加WAV頭的數據來播放MP3數據,但需要在頭關於音頻的詳細信息和過程一個決定性的非平凡的練習,它幾乎肯定比使用更適合於任務的API更困難

你的方法似乎是正確的獲取包含MP3數據和與內存中有許多可用於播放MP3音頻的選項。

BASS Audio Library就是這樣一種選擇,雖然這是一個商業圖書館,並不是特別便宜。然而,它正是你所需要的。

然而,有很多的選擇,一些更便宜,有些甚至是免費的,也可能做這項工作,雖然如果它們不被廣泛使用或得到支持,您可能會發現獲得這些幫助更困難。

即便如此,您也許希望查看torry.net目錄中列出的一些備選方案。具體在目錄的Components \ Effects and Multimedia部分。