gpt4 book ai didi

haskell - 使用 Haskell 播放 wav 文件

转载 作者:行者123 更新时间:2023-12-02 08:21:36 25 4
gpt4 key购买 nike

是否有一种简单、直接的方法可以使用某些库从 Haskell 播放 WAV 文件,并且可能可以一次播放许多声音?

我知道 OpenAL,但我不是在编写一些高级音频合成程序,我只是想播放一些声音来进行一些小游戏。理想情况下,API 可能类似于:

readWavFile :: FilePath -> IO Wave
playWave :: Wave -> IO ()
playWaveNonBlocking :: Wave -> IO ()

几乎只是启动 mplayer 或其他东西。或者尝试将 wav 直接传输到/dev/snd/或类似的东西。

最佳答案

这是如何使用 SDL 在多个 channel 上同时播放多个声音。我认为这回答了问题标准。 WAV 文件,简单,Haskell,多 channel 。

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)

关于haskell - 使用 Haskell 播放 wav 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14005592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com