2015-05-03 2 views
0

Я пытаюсь создать небольшую программу, которая будет читать заметки, которые я пишу в текстовом файле, и играть в нее как фортепианную музыку.pygame.mixer не может играть более 8 заметок

Я использую 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 

И это одна из музыки образца, который я использовал для тестирования (O Canada):

a4hc5qc5if4hg4qa4qbb4qc5qdb5qg4wz 

«г» используется потому, рамка считывания я установил 4, а некоторые части заканчиваются на белом ключе, который имеет только три буквы (abc), где a - примечание, b обозначает положение, а c обозначает длину.

+0

Включение кода на ваш вопрос может помочь людям лучше понять проблему. (http://stackoverflow.com/help/how-to-ask) – ifm

+0

ОК извините. Будет отредактировать сразу – Tony

+0

ok, сначала это выглядит так, что ваш кадр захватывает 4 символа ('line [b: b + 4]'), а не 3, как вы описали. – ifm

ответ

1

Это немного подправить должны решить вашу проблему:

lines = f.readlines() 

while lines[x] != '': 
    line = lines[x] 
    readingframe = line[b:b+4] 

    while b < len(readingframe): 
     for t in times: 
      if t in readingframe: 
       c = line.index(t,b) 
       note = line[b:c] 
       maxTime = timeCorrespondence[t] * 1000 
       sound = mixer.Sound('C:/Python27/piano/' + note +'.aiff') 
       sound.play(maxtime=maxTime) 
       b = c+1 
       break 

Надеется, что это поможет вам.

+0

Хм, когда я использую ваш код, он воспроизводит только 2 ноты. Мне интересно, почему, но я еще не понял этого. – Tony

+0

@Tony вы можете проверить, читает ли программа все заметки, добавляя 'print note' перед тем, как получить файл aiff. – ifm

+0

yep, это определенно чтение всех заметок прекрасно. Пожалуйста, введите файл name'let все это» c5 BB4 a4 f5 c5 a4 BB4 f5 f5 g5 f5 c5 c5 BB4 BB4 a4 BB4 c5 c5 e4 – Tony

Смежные вопросы