【问题标题】:Play More Than One Sound Files in Livecode在 Livecode 中播放多个声音文件
【发布时间】:2015-01-23 14:59:38
【问题描述】:

我想创建一个有音效的游戏。当我开始游戏时,背景音乐应该一直播放到游戏结束。当我点击游戏中的某些东西(例如按钮)时,应该会播放音效,但背景音乐会停止。

如何在播放物体音效的同时让背景音乐连续播放?

我已经有了这些脚本...

卡片脚本...

on openCard
   play "backgroundmusic.wav" looping
end openCard

按钮(或任何对象)...

on mouseup
   play "sound.wav"
end mouseup

如何同时播放这些声音?


更新:我发现一个游戏已上传到 Game Jam。这场比赛排名第一。当我玩游戏的时候,声音很棒,它有背景音乐和音效。但是这个游戏的主人并没有为了研究它而上传livecode堆栈文件。游戏名称为Space Shooter Game。这个游戏的声音是我所期望的。


注意: 正如我从答案中发现的那样,使用 player 对象是可行的。但这需要我的 PC 中没有安装的 QuickTime。我还希望声音能够在移动设备中播放。

【问题讨论】:

    标签: audio livecode


    【解决方案1】:

    就目前而言,soundChannel 属性在 LiveCode 中没有任何作用,仅用于与 Hypercard 兼容。

    目前在桌面上有两种方法可以制作多声道声音:1) 作为一个声道播放导入的声音,并使用一个播放器对象作为第二个声道,或者 2) 使用两个播放器对象。

    通常,一个不错的选择是将简短的声音作为音效导入仅播放一次的堆栈,并将播放器对象保留为背景音乐。导入的声音通常以最短的延迟播放,但是,您不能同时播放多个导入的声音——在播放第一个声音时尝试播放第二个声音将停止第一个声音以播放第二个声音。如果您有播放异步音效的需求,此选项将不起作用;您必须使用播放选项的组合。

    可以使用多个播放器,但请注意,在加载声音(将声音的文件路径分配给播放器)和播放的过程中可能会有一些延迟。

    另外请注意,如果不是不可能的话,要真正无缝地播放曲目是很困难的——LiveCode 有时会受到某些系统事件的影响,这些事件会导致循环之间出现轻微的暂停。不久前,Trevor Devore 对他的增强型 QuickTime 外部进行了添加,以实现真正的无缝音频循环。然而,随着 Apple 摆脱 QuickTime,这个选项还能用多久还不得而知。

    随着 RunRev 团队对引擎的改进,我们可能会看到媒体播放和管理方面的改进,希望早日而不是晚。

    【讨论】:

    • 我尝试了 player 对象,但我的声音没有播放(在 hliljegren 的回答中也有评论)。即使我等待声音加载很长时间,我也不知道是什么问题。
    • 您使用的是哪个版本的 LiveCode?在最新版本(v. 6.7.1 和 7.0.1)中,出现了阻止 start player 命令工作的错误。已针对即将发布的 6.7.2 和 7.0.2 报告并修复了此错误。如果您不想使用预发布版本,可以使用解决方法set the playRate of player "myplayer" to 1
    【解决方案2】:

    LiveCode forums 中,他们建议使用卡片上的玩家对象并告诉他们玩。


    在 HyperCard 中,您可以为此设置 soundChannel 属性。您是否检查过 LiveCode 文档是否支持该功能? play 命令和 the sound 属性的文档也可能有所帮助。也许那些包含提示。 FWIW,在 HC 中

    set the soundChannel to 1
    play "BackgroundMusic"
    set the soundChannel to 2
    play "SoundEffect"
    

    会同时播放音效和背景音乐。也许这就是它在 LiveCode 中的工作方式?

    【讨论】:

    • 不起作用,点击按钮后背景音乐仍然停止(音效)。另外,我没有使用 HyperCard。
    • 抱歉,我不怎么使用 LiveCode,但由于它是 HyperCard 的克隆,它通常只建议在 HC 中执行的任何操作 :-) 我猜他们在这里决定做他们的自己的东西。
    • 添加了我通过谷歌搜索livecode play simultaneous audio找到的建议。
    【解决方案3】:

    多媒体功能正在经历一场变革。以前一切都是围绕 QuickTime(几乎所有东西)构建的,您需要为每个并发声音添加播放器控件。目前,随着 Apple 放弃 QuickTime,整个基础发生了变化,但假设您为桌面开发,您应该仍然(再次)能够添加播放器对象然后使用:

    start player "name of player"
    

    你也可以通过

    动态创建播放器对象
    create player "my player""
    

    然后使用

    set the filename of player "my player to "/path/to/your/audio/file"
    

    在凝视你的声音之前。只要你有不同的播放器来播放不同的声音,他们就应该同时播放。

    【讨论】:

    • 我尝试添加player 对象,但现在背景音乐不再播放。我认为这是因为该播放器或其他东西不支持我的文件。我正在使用.wav 文件作为背景音乐。
    • 你在哪个平台上?新的播放器对象应该使用每个平台上的本地播放器。所以我看不出哇应该是个问题。但是,如果旧播放器的采样率很奇怪,我就有问题了。
    【解决方案4】:
    on openCard
      put specialFolderPath("engine") & "/soundfx/backgroundmusic.wav" into tSound
      mobilePlaySoundOnChannel tSound, "Background", "looping"
    end openCard
    
    on mouseup
       play "sound.wav"
    end mouseup
    

    【讨论】:

    • 请不要在没有任何进一步解释的情况下发布代码。此外,使用代码块来正确格式化您的代码。
    猜你喜欢
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多