-
Notifications
You must be signed in to change notification settings - Fork 0
/
Track.py
executable file
·77 lines (61 loc) · 1.82 KB
/
Track.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/usr/bin/python
import audiotools
from CONSTANTS import *
import re
import sys
class Track:
def __init__(self, filepath):
self.Title = ""
self.Artist = ""
self.Data = []
self.Filepath = filepath
self.PopulateMetaData()
#####################################################################
#
# MANUALLY CREATES CLEAN TRACK TITLE
#
# After Metadata extraction failure, fills in track title and
# artist name manually
#
#####################################################################
def ManualMetaData(self):
targetCleanSong = "(" + MUSICDIRECTORY + "/)(.*)(" + MUSICFILESTYPE + ")"
targetGroup = 2
cleanSong = re.match(targetCleanSong, self.Filepath)
self.Title = cleanSong.group(targetGroup )
#####################################################################
#
# GATHERS TRACK DATA
#
# Fills in track metadata using various methods. If metadata is in
# the song file itself, that data is extracted. Otherwise, manual
# methods are used.
#
#####################################################################
def PopulateMetaData(self):
audioFile = audiotools.open(self.Filepath)
metaData = audioFile.get_metadata()
if not metaData:
self.ManualMetaData()
else:
self.Title = metaData.track_name
self.Artist = metaData.artist_name
if PREPROCESS:
self.Data = self.PrepareSongData()
print("Preproccessed " + self.Title)
#####################################################################
#
# LOAD IN SONG DATA
#
# Takes a file path and loads in the song data, preparing it for
# SPI transfer
#
#####################################################################
def PrepareSongData(self):
# Read in file
f = open(self.Filepath, 'rb')
bytes_read = f.read()
f.close()
# Convert read string to int representation
bytes = map(ord, bytes_read)
return bytes