有没有一种简单、直接的方法可以使用某些库从 Haskell 播放 WAV 文件,并且可能使我可以一次播放许多声音?
我知道 OpenAL,但我不是在编写一些高级音频合成程序,我只是想播放一些声音来进行一些小游戏。理想情况下,API 可能类似于:
readWavFile :: FilePath -> IO Wave
playWave :: Wave -> IO ()
playWaveNonBlocking :: Wave -> IO ()
I'm this接近仅仅启动 mplayer 或其他东西。或者尝试将 wav 直接传输到 /dev/snd/ 或类似的东西。
这是使用 SDL 同时在多个通道上播放多个声音的方法。我认为这回答了问题标准。 WAV 文件,简单,Haskell,多通道。
import Control.Monad
import Control.Monad.Fix
import Graphics.UI.SDL as SDL
import Graphics.UI.SDL.Mixer as Mix
main = do
SDL.init [SDL.InitAudio]
result <- openAudio audioRate audioFormat audioChannels audioBuffers
classicJungle <- Mix.loadWAV "/home/chris/Samples/ClassicJungle/A4.wav"
realTech <- Mix.loadWAV "/home/chris/Samples/RealTech/A4.wav"
ch1 <- Mix.playChannel anyChannel classicJungle 0
SDL.delay 1000
ch2 <- Mix.playChannel anyChannel realTech 0
fix $ \loop -> do
SDL.delay 50
stillPlaying <- numChannelsPlaying
when (stillPlaying /= 0) loop
Mix.closeAudio
SDL.quit
where audioRate = 22050
audioFormat = Mix.AudioS16LSB
audioChannels = 2
audioBuffers = 4096
anyChannel = (-1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)