【发布时间】:2018-05-23 23:19:28
【问题描述】:
我正在尝试创建一个小程序,该程序将读取我在文本文件中编写的音符并将其作为钢琴音乐播放。
我正在使用 pygame 并使用混音器播放 .aiff 声音文件。一切正常,只是它不会播放超过 8 个音符。有人对这个有了解吗?我尝试过使用不同的文件和音符,它总是在第 8 个音符之后停止,但它会完整地播放那个音符。
以下是部分代码:
lines = f.readlines()
while lines[x] != '':
line = lines[x]
readingframe = line[b:b+4]
for t in times:
if t in readingframe:
c = line.index(t,b)
note = line[b:c]
sound = mixer.Sound('C:/Python27/piano/' + note +'.aiff')
sound.play()
time.sleep(timeCorrespondence[t])
b = c+1
这是我用来测试的样本音乐之一(加拿大):
a4hc5qc5if4hg4qa4qbb4qc5qdb5qg4wz
之所以使用“z”是因为我设置的阅读框是 4,有些片段以一个只有三个字母 (abc) 的白键结尾,其中 a 是音符,b 表示位置,c 表示长度。
【问题讨论】:
-
在您的问题中包含一些代码可以帮助人们更好地理解问题。 (stackoverflow.com/help/how-to-ask)
-
好的,抱歉。将立即编辑
-
好的,首先看起来您的框架捕获了 4 个字符 (
line[b:b+4]),而不是您描述的 3 个。 -
例如,'ab4q' 是作为四分音符演奏的第四个八度音阶的降 A,而 a4q 是作为四分音符演奏的第四个八度音阶的 A。所以有时我需要它来读取 4 个字符,有时是 3 个字符。通过使用 4 的阅读框,它将捕获这两种情况,并且由于音符的持续时间始终彼此相距至少 3 个字符,因此阅读框永远不会捕获超过一个持续时间。
-
现在很清楚了,您的代码每行只读取
n注释,其中n是times的大小。 (for t in times)