使用 Haskell 播放 wav 文件

2024-01-09

有没有一种简单、直接的方法可以使用某些库从 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(使用前将#替换为@)

使用 Haskell 播放 wav 文件 的相关文章

随机推荐