使用 XNA 裁剪音频

Posted

技术标签:

【中文标题】使用 XNA 裁剪音频【英文标题】:Cropping audio with XNA 【发布时间】:2010-07-03 21:08:23 【问题描述】:

我是 XNA 的新手,正在尝试允许用户编辑他们加载的音频文件。在 XNA 中,是否可以选择时间范围(例如 0:00 - 0:10)和'将那部分裁剪为一个单独的实体?我想,本质上,它只是将数据复制到一个新文件中。这可以使用 XNA Audio 库来完成吗?如果可以,我应该查看哪些方法? 谢谢

【问题讨论】:

【参考方案1】:

如果您可以等待 XNA 4,则可以对声音缓冲区进行低级别访问,您可以随意裁剪它。谷歌搜索“C# wav 文件”会显示大量链接,这些链接将向您展示如何操作内存中的数据。

在此处下载 XNA 4.0 测试版:

http://creators.xna.com/en-US/launchcenter

这是一个解释如何使用新 API 的链接:

https://blogs.msdn.com/b/ashtat/archive/2010/06/03/soundeffect-creation-in-xna-game-studio-4.aspx

【讨论】:

【参考方案2】:

我看不出有什么方法可以按照您所说的去做,但在寻找的过程中,我确实遇到了这个有用的Audio Overview 和这个tutorial on using Microsoft's Cross-platform Audio Creation Tool (XACT)。由于您是 XNA 的新手,我希望这些链接能提供一些帮助。

问题似乎是期望音频是预先创建的,而不是根据您的需要在游戏中创建的。当然,不乏外部audio editors,如Audacity、Aviary、waveosaur和Adobe SoundBooth来帮助在游戏外进行编辑。或者,您可以使用 XNA / XACT 库的播放功能通过将用户的时间范围选择存储为变量并稍后仅播放音频的相应部分来“模拟”裁剪。

我希望其中的一些在某些方面有所帮助。

-gMale

【讨论】:

您好,感谢您的回复。加载的音频将来自用户自己,因此我无法在应用程序之外对其进行编辑。我使用什么方法将“裁剪”的音频保存到新文件中?【参考方案3】:

据我所知,XNA 不包含任何将音乐或提示对象简单地写入文件的方法。

如果您希望用户在您的 XNA 游戏中编辑音频并将其保存为仍然可用的音频文件,您必须找到正确的文件格式并直接写入。但是,如果您只是想让他们操纵音频以在您的游戏中使用,我相信您还有另一种选择。

您可以序列化对象(以便在游戏之间保存您的状态)。您可以存储表示您对音频的操作的值(例如,开始和结束时间),并将它们与提示一起序列化。我必须承认,我从未尝试过序列化音频提示,但您可以尝试将数据推送到 XNA 内容管道,强制它在运行时为您创建 XNB 文件。

【讨论】:

谢谢。我应该查看哪些方法和类来设置信息,例如当前选择的时间?据我所知,我只能得到 PlayPosition。是否有任何其他 .NET 类可以帮助我写入 WMA 文件(例如 Silverlight)?

以上是关于使用 XNA 裁剪音频的主要内容,如果未能解决你的问题,请参考以下文章

阻止音频文件重复 XNA

使用 ffmpeg 裁剪音频文件

当另一个声音使用 XNA/XACT 结束时,如何立即播放一个声音?

SeeMusic音频编辑 ( 进入音频编辑页面 | 音频延迟设置 )

使用 C# 增加或减少音频文件的音高

如何在 windows phone 7 上使用压缩音频进行 SoundEffects?