- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 pygame 播放 .wav 文件,并希望随着游戏中每个级别的进行更改特定 .wav 文件的音高。解释一下,我的游戏是旧版 Oric1 计算机 OricMunch Pacman 游戏的近似副本,其中每个级别都有数百颗药丸需要咀嚼,并且每咀嚼一次药丸都会播放一段短促的声音,其音高为每吃一粒药丸,声音就会略有增加。
现在这是我尝试过的 :
1)我使用pythons波形模块创建了声音文件的多个副本,每个新创建的文件的音高略有增加(通过更改params()中的第三个参数帧率,有时称为采样频率)为每个for 循环的循环。实现这一点后,我可以在循环中创建多个声音对象以添加到列表中,然后在列表中索引以在每个药丸被吃掉时播放声音。
问题是,即使我可以创建数百个文件(使用 wave 模块),当使用 windows 媒体播放器甚至 python winsound 模块播放时,它们可以完美地播放它们自己独特的音高,pygame 似乎并没有解释音高的差异。
现在有趣的是,我下载了的免费试用版。 Power Sound Editor 它有改变音高的选项,所以我只创建了几个 .wav 文件来测试,当在 pygame 中播放时,它们显然以不同的音高播放。
观察 :
通过在我的 for 循环中打印参数,我可以看到帧速率/频率正在按预期变化,因此显然这就是声音通过 windows 媒体播放器和 winsound 按预期播放的原因。
在 pygame 中,我怀疑他们不玩不同音高的原因是因为频率参数是固定的,要么是默认设置,要么是通过使用 pygame.mixer.pre_init,我确实尝试过。
然后我检查了 Power Sound Editor 创建的每个 .wav 文件的参数,并注意到即使音调在改变,频率保持不变,这并不奇怪,因为你必须选择 3 个选项中的一个来保存文件,22050、44100 或 96000Hz
所以现在我想是时候检查音高和频率之间的差异,特别是在声音方面,因为我认为它们是相同的。我发现声波似乎有两个主要方面:1)帧率/频率和 2)基于该频率的多个波的变化幅度。现在我还没有清楚地理解这一点,但意识到 Power Sound Editor 必须通过操纵多个波的变化幅度来改变声音的形状/音高,上面的点 2),而不是通过改 rebase 频,上面的点 1) .
我是 Python、pygame 和编程的初学者,我一直在努力寻找一种简单的方法来改变声音文件,以在不改变帧率/基频的情况下逐渐增加音高。如果我可以导入一个模块来帮助我通过操纵多个波的变化幅度来改变音高(而不是更改通常为 22050 或 44100Hz 的帧率/采样频率),那么它根本不需要花费任何时间如果为了不减慢游戏速度而即时完成。如果潜在模块打开,更改然后保存声音文件,而不是即时更改它们,那么我想它是否很慢并不重要,因为我只会创建声音文件,以便我可以从它们中创建声音对象pygame 玩。
现在,如果在 pygame 中实现不减速的唯一方法是像我已经完成的那样从声音文件创建声音对象,然后播放它们,那么我需要一种方法来操纵声音文件,例如 Power Sound Editor(我再次强调不是通过更改帧率/采样频率(通常为 22050 或 44100)然后保存更改的文件。
我想简而言之,如果我可以神奇地自动化 Power Sound Editor 生成 3 到 400 个声音文件,而不必单击更改音高选项,然后每次都保存,这就像拥有我自己的 Python 方式一样它。
结论 :
假设从声音文件创建声音对象是不降低游戏速度的唯一方法(我怀疑可能是这样),那么我需要以下内容:
相当于 python 波形模块,但它像 Power Sound Editor 那样改变音高,而不是像波形模块那样改 rebase 频。
请有人可以帮助我,如果有办法,请告诉我。
我正在使用 python 3.2.3 和 pygame 1.9.2
另外我只是使用 pythons IDLE,我不熟悉使用其他编辑器。
我也知道 Numpy 和各种声音模块,但绝对不知道如何使用它们。此外,任何潜在的模块都需要使用上述版本的 python 和 pygame。
先感谢您。
加里汤森。
我对 Andbdrew 第一个回答的回复如下:
谢谢您的帮助。
听起来我需要更改波形文件数据而不是波形文件参数。作为引用,这里是我用来创建多个文件的代码:
framerate = 44100 #Original .wav file framerate/sample frequency
for x in range(0, 25):
file = wave.open ('MunchEatPill3Amp.wav')
nFrames = file.getnframes()
wdata = file.readframes(nFrames)
params = file.getparams()
file.close()
n = list(params)
n[0] = 2
n[2] = framerate
framerate += 500
params = tuple(n)
name = 'PillSound' + str(x) + '.wav'
file = wave.open(name, 'wb')
file.setparams(params)
print(params)
file.writeframes(wdata)
file.close()
最佳答案
您应该更改样本中波的频率,而不是更改采样率。似乎 python 正在以相同的采样率(这很好)播放您的所有波形文件,因此您的更改不会反射(reflect)出来。
采样率有点像声音文件的元信息。阅读 http://en.m.wikipedia.org/wiki/Sampling_rate#mw-mf-search .
当您将连续波形转换为离散波形时,它会告诉您样本之间的时间量。尽管您对它的(ab)使用很酷,但通过以相同的采样率在不同的文件中编码不同频率的声音会更好地为您服务。
我查看了 wave 模块的文档( http://docs.python.org/3.3/library/wave.html ),看起来您应该在调用时将不同的数据写入音频文件
Wave_write.writeframes(data)
Wave_write.setparams(tuple)
关于python-3.x - 创建不同音高但仍具有相同基频的 .wav 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13430727/
今天我在一个 Java 应用程序中看到了几种不同的加载文件的方法。 文件:/ 文件:// 文件:/// 这三个 URL 开头有什么区别?使用它们的首选方式是什么? 非常感谢 斯特凡 最佳答案 file
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我有一个 javascript 文件,并且在该方法中有一个“测试”方法,我喜欢调用 C# 函数。 c# 函数与 javascript 文件不在同一文件中。 它位于 .cs 文件中。那么我该如何管理 j
需要检查我使用的文件/目录的权限 //filePath = path of file/directory access denied by user ( in windows ) File fil
我在一个目录中有很多 java 文件,我想在我的 Intellij 项目中使用它。但是我不想每次开始一个新项目时都将 java 文件复制到我的项目中。 我知道我可以在 Visual Studio 和
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我有 3 个组件的 Twig 文件: 文件 1: {# content-here #} 文件 2: {{ title-here }} {# content-here #}
我得到了 mod_ldap.c 和 mod_authnz_ldap.c 文件。我需要使用 Linux 命令的 mod_ldap.so 和 mod_authnz_ldap.so 文件。 最佳答案 从 c
我想使用PIE在我的项目中使用 IE7。 但是我不明白的是,我只能在网络服务器上使用 .htc 文件吗? 我可以在没有网络服务器的情况下通过浏览器加载的本地页面中使用它吗? 我在 PIE 的文档中看到
我在 CI 管道中考虑这一点,我应该首先构建和测试我的应用程序,结果应该是一个 docker 镜像。 我想知道使用构建环境在构建服务器上构建然后运行测试是否更常见。也许为此使用构建脚本。最后只需将 j
using namespace std; struct WebSites { string siteName; int rank; string getSiteName() {
我是 Linux 新手,目前正在尝试使用 ginkgo USB-CAN 接口(interface) 的 API 编程功能。为了使用 C++ 对 API 进行编程,他们提供了库文件,其中包含三个带有 .
我刚学C语言,在实现一个程序时遇到了问题将 test.txt 文件作为程序的输入。 test.txt 文件的内容是: 1 30 30 40 50 60 2 40 30 50 60 60 3 30 20
如何连接两个tcpdump文件,使一个流量在文件中出现一个接一个?具体来说,我想“乘以”一个 tcpdump 文件,这样所有的 session 将一个接一个地按顺序重复几次。 最佳答案 mergeca
我有一个名为 input.MP4 的文件,它已损坏。它来自闭路电视摄像机。我什么都试过了,ffmpeg , VLC 转换,没有运气。但是,我使用了 mediainfo和 exiftool并提取以下信息
我想做什么? 我想提取 ISO 文件并编辑其中的文件,然后将其重新打包回 ISO 文件。 (正如你已经读过的) 我为什么要这样做? 我想开始修改 PSP ISO,为此我必须使用游戏资源、 Assets
给定一个 gzip 文件 Z,如果我将其解压缩为 Z',有什么办法可以重新压缩它以恢复完全相同的 gzip 文件 Z?在粗略阅读了 DEFLATE 格式后,我猜不会,因为任何给定的文件都可能在 DEF
我必须从数据库向我的邮件 ID 发送一封带有附件的邮件。 EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Adventure Works Admin
我有一个大的 M4B 文件和一个 CUE 文件。我想将其拆分为多个 M4B 文件,或将其拆分为多个 MP3 文件(以前首选)。 我想在命令行中执行此操作(OS X,但如果需要可以使用 Linux),而
快速提问。我有一个没有实现文件的类的项目。 然后在 AppDelegate 我有: #import "AppDelegate.h" #import "SomeClass.h" @interface A
我是一名优秀的程序员,十分优秀!