SDL-Mixer 音频在启动 Reactive-Banana 输入循环时停止

2024-03-30

我一直在开发一款使用多个音轨的游戏,其音量根据鼠标运动实时调整。我一般使用 SDl-Mixer 来处理音频,使用 Reactive-Banana 来处理游戏。问题是,一开始就开始播放的曲目在输入循环开始时停止播放。原因可能是其他原因,但我想知道 SDL 和 Reactive-Banana 之间是否存在一些我不明白的奇怪交互。一段时间以来,我一直试图解决这个问题,但这可能只是我忽略的一些简单的事情。提前致谢。这是一个简单测试的代码:

import Reactive.Banana
import Graphics.UI.SDL
import Graphics.UI.SDL.Mixer
import Control.Monad

musicdir = "/home/silas/code/haskell/river/audio/"

testNet :: AddHandler (Int,Int,[MouseButton]) -> NetworkDescription t ()
testNet mouseHdlr = do
  eMouse <- fromAddHandler mouseHdlr
  reactimate $ (putStrLn . show) <$> eMouse

main = withInit [InitEverything] $ do
         setVideoMode 100 100 32 [SWSurface]
         openAudio defaultFrequency AudioS16Sys 1 1024
         allocateChannels 1
         chunk <- loadWAV $ musicdir ++ "guitar1" ++ ".ogg"
         playChannel 0 chunk (-1)
         (mouseHdlr, mouseAction) <- newAddHandler
         net <- compile $ testNet mouseHdlr
         actuate net
         forever $ getMouseState >>= mouseAction

编辑:问题似乎不一定在于反应性香蕉。任何类型的“永远”循环都会导致音频停止。


这可能不是你的问题,但当我遇到类似的问题时,垃圾收集器无法判断我仍在使用 SDL 音频块(因为只有 SDL 正在使用它)并从 SDL 下释放 RAM 。为了解决这个问题,你不仅必须确保该项目在 SDL 使用它的整个过程中都在范围内,而且你的 Haskell 代码实际上以某种方式使用它(这样优化器就不会改变它)你)。打电话就像touchForeignPtr对此非常有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SDL-Mixer 音频在启动 Reactive-Banana 输入循环时停止 的相关文章

  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • 终结器线程的范围是什么 - 每个应用程序域或每个进程?

    根据我的所有阅读 应该有一个 GC 线程来调用所有终结器 现在的问题是这个 一个 线程的范围是什么 每个进程或每个应用程序域 因为域的整体目的是在一个进程空间中分离并创建 独立 的不同应用程序 I read here http dn cod
  • 在 Python 中打印守护线程异常

    Python 不会打印守护线程中引发的异常的回溯消息 例如 以下代码创建一个守护线程并在新线程中引发异常 def error raiser raise Exception import threading thread threading
  • Traversable 类型类的用途

    有人可以向我解释一下类型类的目的是什么吗Traversable 类型类定义是 class Functor t Foldable t gt Traversable t gt where So Traversable is a Functor
  • 调用许多网络服务的最佳方式?

    我有 30 家子公司 每家都实施了他们的 Web 服务 使用不同的技术 我需要实现一个Web服务来聚合它们 例如 所有子公司的Web服务都有一个名为的Web方法GetUserPoint int nationalCode 我需要实现我的网络服
  • 这个等待通知线程语义的真正目的是什么?

    我刚刚遇到一些代码 它使用等待通知构造通过其其他成员方法与类中定义的线程进行通信 有趣的是 获取锁后 同步范围内的所有线程都会在同一锁上进行定时等待 请参见下面的代码片段 随后 在非同步作用域中 线程执行其关键函数 即 做一些有用的事情1
  • 从 Invoke 方法获取 RETURN

    我正在尝试从另一个线程上的列表框项目中读取值 我尝试创建一种新方法来运行调用命令 我可以设法将命令发送到列表框 例如通过调用方法添加 但我似乎无法得到响应 我似乎无法获取该项目的值 我尝试了几种方法 一旦我将它从空变为字符串 事情就开始变得
  • Haskell - lambda 表达式

    我试图了解什么是有用的以及如何在 Haskell 中实际使用 lambda 表达式 我不太明白使用 lambda 表达式相对于定义函数的约定方式有何优势 例如 我通常会执行以下操作 let add x y x y 我可以简单地打电话 add
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 我该如何实现这个折叠功能呢?

    给出了两种数据类型 颜色 和 植物 data Color Red Pink White Blue Purple Green Yellow deriving Show Eq data Plant Leaf Blossom Color Stal
  • 关于java中的生产者和消费者模式与阻塞队列方法

    我正在研究有关java中线程的生产者和消费者设计模式 最近我在java 5中进行了探索 并介绍了Java 5中BlockingQueue数据结构的介绍 现在它变得更简单了 因为BlockingQueue通过引入阻塞方法隐式地提供了这种控制p
  • 在 Haskell 中合并两个列表

    无法弄清楚如何合并两个列表通过以下方式在哈斯克尔 INPUT 1 2 3 4 5 11 12 13 14 OUTPUT 1 11 2 12 3 13 4 14 5 我想提出一个更懒的合并版本 merge ys ys merge x xs y
  • 如何通过“cabal build”或“stack build”构建带有图标的项目

    我想构建一个带有图标的可执行文件 通过谷歌搜索 我发现这里的说明 https wiki haskell org Setting an executable icon 但它只能通过编译源文件来工作ghc 如果我想构建一个具有可执行文件的项目c
  • Meteor.setTimeout 和 Meteor.methods 之间的并发

    在我的 Meteor 应用程序中实现回合制多人游戏服务器 客户端通过发布 订阅接收游戏状态 并且可以调用 Meteor 方法sendTurn将回合数据发送到服务器 他们无法直接更新游戏状态集合 var endRound function g
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 如何在不声明新数据的情况下更改类型(String,Int)元组的 Ord 实例?

    我正在尝试对类型列表进行排序 String Int 默认情况下 它按字符串排序 然后按整数排序 如果字符串相等 我希望它是相反的 首先比较整数 然后如果相等则比较字符串 另外 我不想切换到 Int String 我找到了一种通过定义实例来实
  • 管道:多个流消费者

    我编写了一个程序来计算语料库中 NGram 的频率 我已经有一个函数 它消耗一串令牌并生成一个订单的 NGram ngram Monad m gt Int gt Conduit t m t trigrams ngram 3 countFre
  • Haskell Data.Decimal 作为 Aeson 类型

    是否可以解析一个数据 十进制 https hackage haskell org package Decimal 0 4 2 docs Data Decimal html使用 Aeson 包从 JSON 获取 假设我有以下 JSON foo
  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu

随机推荐

  • C++ AMP 目前的状况如何

    我正在使用 C 编写高性能代码 并且一直在使用 CUDA 和 OpenCL 最近还使用我非常喜欢的 C AMP 然而 我有点担心它没有得到发展和扩展 并且会消亡 让我产生这个想法的是 即使是 MS C AMP 博客也已经沉默了大约一年 查看
  • Windows 上 JavaFX 的 Gluon 客户端 Maven 插件无法编译?

    我一直在 Windows 机器上为我的一个项目试验 Gluon 的客户端 Maven 插件 我决定尝试一下他们的 hello world 示例之一 here https github com gluonhq client samples我遵
  • 如何访问变量的原始值

    假设我有这个代码 public static long number public static void main String args String str1 args 0 System out println str1 is str
  • 升级到 Cordova 5.0 + [电子邮件受保护] 后,Ajax 请求失败

    我最近升级到 Cordova 5 0 和 Cordova Android 4 0 从那时起 我的应用程序无法再访问外部资源 我还有
  • 使用 Scala 3 宏重写方法

    我正在尝试使用 Scala 3 宏和 TASTY 重写方法 我想重写任何类型的任何方法 现在我从这个简单的案例开始 我有一个测试基类 class TestClass def func s String base 我想实现这一点 但使用 TA
  • 需要 Django 表单帮助

    我是 django 新手 正在尝试制作一个几乎不需要验证的用户注册表单 除此之外 我还想要一个用户名建议代码 它将告诉用户他尝试注册的用户名是否可用或已在使用中 然后它应该给出一些可供选择的建议 任何可能从事过相同或相似项目的人都可以帮助我
  • 以编程方式将 boxBackgroundMode 设置为 TextInputLayout

    我刚刚迁移自com android support 设计 to com google android material implementation androidx appcompat appcompat 1 1 0 implementa
  • 设计时的 Windows 应用商店应用 ResourceLoader

    我已经开始为 Windows 8 1 创建 Windows 应用商店应用程序 现在遇到了有关本地化的问题 我想在设计时显示 resw 文件中的字符串资源 但每次尝试都失败了 即使它在运行时有效 使用 x Uid 属性时 我仍然必须提供 Te
  • 动态创建 jCheckBox 并添加到 jScrollPane

    编辑 使用下面提供的解决方案 我更改了代码以在 JScrollPane 中包含 JPanel 使用 JButton 我将 JCheckBox 添加到 JScrollPane 内的 JPanel 这是一个已解决的问题 因为 JScrollPa
  • 不兼容的库版本:安装 R 包时 libtk8.6.dylib 需要 ...

    我正在尝试安装 R 包 ggplot2 尽管我收到的错误似乎与该特定包无关 我正在 Mac OSX 10 6 8 上运行 错误消息位于该消息的底部 发生的事情是 我打开 R 并输入install packages ggplot2 键入此内容
  • C++ 中的 std::string 是否有一个内置函数,可以在字符串可以是大写或小写时按字母顺序比较两个字符串?

    我知道对于 C 如果两个单词都完全小写或完全大写 基本比较运算符就可以完成任务 我有一个字符串数组 字母可以从小到大变化 这是我可以使用的字符串类型的一个小示例 丰富的生活CH 新生活WMN MNSTRY 新生命集会 我知道Java中有这个
  • 相同投影矩阵的不同基本矩阵

    我使用两个投影矩阵 P1 和 P2 例如我使用恐龙数据集 http www robots ox ac uk 7Evgg data1 html 并且我需要计算基本矩阵 F 所以我使用两个Matlab函数 彼得 科维西的函数 www csse
  • 如何编译Freetype(2)和Harfbuzz(使用Visual Studio)以使它们协同工作?

    我找到了关于编译与 Harfbuzz 相关的 Freetype 的已知问题的良好文档 http www gregwessels com dev 2017 05 02 freetype harfbuzz html http www gregw
  • 在 Angular 控制器中使用下划线

    如何在 angularjs 控制器中使用下划线库 在这篇文章中 AngularJS limitTo 按最后 2 条记录 https stackoverflow com questions 11943130 angularjs limitto
  • Google Glass 可以使用英语以外的语言进行搜索吗?

    我浏览了网络 没有找到任何有关 Google Glass 是否具有英语以外其他语言的语音识别功能的信息 例如 Google Now 对瑞典语有很好的工作认可 还是我需要自己实现一些第三方识别 如果 Google Glass 团队中的任何人有
  • 如何获取 MIDI 设备的当前状态?

    如何查询 MIDI 设备当前的程序状态 音量等 我试图在 Midi 规格中找到它 但没有成功 我基本上需要从通过 USB midi 连接的数码钢琴获取当前乐器 钢琴等 Java似乎可以做到 http docs oracle com java
  • css斑马条纹背景无图像

    可以使用CSS将斑马条纹作为背景而不使用图像吗 是的 你可以 用类似的东西 ul li background color fff ul li nth child even background color efefef See http r
  • MVVCross:将枚举值作为 Android 的 CommandParameter 传递

    我想将枚举值作为命令参数传递 我的枚举定义为 public enum MyEnum One Two 在我的 axml 中我有 local MvxBind Click MyCommand CommandParameter MyEnum One
  • 在 Vue.js 中隐藏组件

    有没有办法可以控制共享组件在另一个组件中的渲染 我有一个组件 它是一个底部栏 需要在一些具体组件中禁用 不渲染 我正在所有组件都使用的模板中渲染底部栏 编辑 我正在使用 webpack 正如罗伊所说 您可以拥有一个属性来调节组件的渲染 假设
  • SDL-Mixer 音频在启动 Reactive-Banana 输入循环时停止

    我一直在开发一款使用多个音轨的游戏 其音量根据鼠标运动实时调整 我一般使用 SDl Mixer 来处理音频 使用 Reactive Banana 来处理游戏 问题是 一开始就开始播放的曲目在输入循环开始时停止播放 原因可能是其他原因 但我想