-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRecordingProcess.py
More file actions
63 lines (60 loc) · 2.45 KB
/
RecordingProcess.py
File metadata and controls
63 lines (60 loc) · 2.45 KB
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
import multiprocessing
from datetime import datetime
import requests
import sys
import shutil
import os
from pydub import AudioSegment
class RecordingProcess(multiprocessing.Process):
def __init__(self, stream_url, queue, id, folder):
super().__init__()
self.stream_url = stream_url
self.state = "closed"
self.queue = queue
self.id = id
self.folder = folder
self.file = self.folder + 'stream' + str(id) + '.mp3'
self.exit = multiprocessing.Event()
def run(self):
r = requests.get(self.stream_url, stream=True)
splittime = (datetime.now() - datetime(1970, 1, 1)).total_seconds()
f = open(self.file, 'wb')
try:
while not self.exit.is_set():
try:
for block in r.iter_content(1024):
#print(((datetime.now() - datetime(1970, 1, 1)).total_seconds() - splittime), file=sys.stderr)
try:
states = self.queue.get()
states[self.id] = self.state
self.queue.put(states)
except:
pass
if self.exit.is_set():
break
if len(block) > 120:
self.state = "recording"
f.write(block)
else:
self.state = "paused"
r = requests.get(self.stream_url, stream=True)
continue
if ((datetime.now() - datetime(1970, 1, 1)).total_seconds() - splittime) > 600:
splittime = (datetime.now() - datetime(1970, 1, 1)).total_seconds()
shutil.copyfile(self.file, (self.folder + 'stream-old' + str(self.id) + '.mp3'))
os.remove(self.file)
f = open(self.file, 'wb')
except:
if not self.exit.is_set():
r = requests.get(self.stream_url, stream=True)
finally:
self.state = "closed"
states = self.queue.get()
states[self.id] = self.state
self.queue.put(states)
f.close()
print("You exited!")
def Shutdown(self):
print("Shutdown initiated")
self.exit.set()
os.remove(self.file)