Python: чтение файлов GuitarPro (.gp5) - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок в написании вопросов здесь, поэтому, пожалуйста, не стесняйтесь указывать, как я могу улучшить качество будущих вопросов!

Редактировать: в код добавлено больше кода, как было задано в комментариях

Я пытаюсь прочитать файлы GuitarPro в python.Эти файлы в основном содержат ноты для песен, но содержат больше информации, чем, например, файлы MIDI.

Я хочу разобрать ноты и продолжительность нот, например, в структуру списка.Кроме того, я надеюсь, что из файлов GuitarPro могут быть проанализированы и другие эффекты, такие как изгибы, слайды, молотки и т. Д.

Я пытался использовать библиотеку PyGuitarPro , но получаюзастрял:

import guitarpro
import os

# 'wet_sand.gp5' is the guitar pro file
parsed_song = guitarpro.parse('wet_sand.gp5')
song = guitarpro.gp5.GP5File(parsed_song,encoding='UTF-8')
song.readSong()

Я получаю следующую ошибку из ReadSong() ( документация здесь ):

Traceback (most recent call last):

  File "<ipython-input-15-e1663229852d>", line 8, in <module>
    song.readSong()

  File "C:\Python27\lib\site-packages\guitarpro\gp5.py", line 62, in readSong
    song.version = self.readVersion()

  File "C:\Python27\lib\site-packages\guitarpro\iobase.py", line 114, in readVersion
    self.version = self.readByteSizeString(30)

  File "C:\Python27\lib\site-packages\guitarpro\iobase.py", line 97, in readByteSizeString
    return self.readString(size, self.readByte())

  File "C:\Python27\lib\site-packages\guitarpro\iobase.py", line 47, in readByte
    return (self.read(*args, default=default) if count == 1 else

  File "C:\Python27\lib\site-packages\guitarpro\iobase.py", line 35, in read
    data = self.data.read(count)

AttributeError: 'Song' object has no attribute 'read'

1 Ответ

0 голосов
/ 24 ноября 2018

Глядя на предоставленные примеры, например this one.Я не думаю, что вам нужна эта часть.

song = guitarpro.gp5.GP5File (parsed_song, encoding = 'UTF-8')

Следующее должно бытьдостаточно, так как синтаксический анализ уже вызывает readSong здесь .

song = guitarpro.parse ('wet_sand.gp5')

Наконец, это выглядит какформат файла автоматически определяется синтаксическим анализом здесь .

В качестве примера вы можете сделать что-то вроде этого.

import guitarpro
song = guitarpro.parse('test.gp5')

for track in song.tracks:
    for measure in track.measures:
        for voice in measure.voices:
            for beat in voice.beats:
                for note in beat.notes:
                    print(note.durationPercent)
                    print(note.effect)
...