-
Notifications
You must be signed in to change notification settings - Fork 0
/
AudioFile.py
72 lines (54 loc) · 1.62 KB
/
AudioFile.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
"""
AudioFile class and all it's helper functions
"""
import logging
from os import walk
from random import choice
from vlc import MediaPlayer
AUDIO_DIR = "audio"
logger = logging.getLogger(__name__)
class AudioFile():
"""
Class for the audiofile.
Provides all methods to interact with the audio:
play, check answer, ...
"""
def __init__(self):
self._filename = _read_file()
self._audio = MediaPlayer(AUDIO_DIR + "/" + self.filename)
self.play()
def play(self):
"""play the audio of the file"""
self._audio.stop()
self._audio.play()
logger.info('playing ' + self.filename)
def check_answer(self, answer):
"""
Check if the provided answer is correct.
The format should be sound + tone and no seperator between syllables
ie shang4hai3
"""
return answer == self._filename.split("__")[0].replace("_", "")
def get_pinyin(self):
return get_pinyin(self.filename)
def get_id(self):
return get_id(self.filename)
def get_extension(self):
return get_extension(self.extension)
def __del__(self):
self._audio.release()
@property
def filename(self):
return self._filename
def get_pinyin(filename):
return filename.split("__")[0]
def get_id(filename):
return filename.split("__")[1].rsplit(".", 1)[0]
def get_extension(filename):
return filename.split("__")[1].rsplit(".", 1)[1]
def _read_file():
"""
return a random filename from the audio directory
"""
_, _, filenames = next(walk(AUDIO_DIR))
return choice(filenames)