-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwav_parse.py
More file actions
executable file
·105 lines (90 loc) · 2.76 KB
/
wav_parse.py
File metadata and controls
executable file
·105 lines (90 loc) · 2.76 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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/env python
import struct
class WavFile:
header_format = "4sI4s4sIHHIIHH4sI"
def __init__(self, fname):
with open(fname, "rb") as f:
self.__parse(f)
def __parse(self, fp):
(
self.magic,
self.file_size,
self.file_type_header,
self.format_chunk_marker,
self.len_fmt_data,
self.fmt_type,
self.no_chans,
self.samp_rate,
self.sr_bps_cs_8,
self.bps_cs_8,
self.bps,
self.data_header,
self.file_size_data,
) = struct.unpack(
self.header_format, fp.read(struct.calcsize(self.header_format))
)
self.data = fp.read()
def save(self, fname):
with open(fname, "wb") as f:
f.write(
struct.pack(
self.header_format,
self.magic,
self.file_size,
self.file_type_header,
self.format_chunk_marker,
self.len_fmt_data,
self.fmt_type,
self.no_chans,
self.samp_rate,
self.sr_bps_cs_8,
self.bps_cs_8,
self.bps,
self.data_header,
self.file_size_data,
)
)
f.write(self.data)
def print_header(self):
print(
f"""
WavFile(,
magic: {self.magic},
file_size: {self.file_size},
file_type_header: {self.file_type_header},
format_chunk_marker: {self.format_chunk_marker},
len_fmt_data: {self.len_fmt_data},
fmt_type: {self.fmt_type},
no_chans: {self.no_chans},
samp_rate: {self.samp_rate},
sr_bps_cs_8: {self.sr_bps_cs_8},
bps_cs_8: {self.bps_cs_8},
bps: {self.bps},
data_header: {self.data_header},
file_size_data: {self.file_size_data},
)
"""
)
def main():
br = WavFile("BankRobbing")
valid = WavFile("valid.wav")
br.print_header()
valid.print_header()
br.magic = valid.magic
br.file_size = len(br.data) + struct.calcsize(WavFile.header_format) - 8
br.file_type_header = valid.file_type_header
br.format_chunk_marker = valid.format_chunk_marker
br.len_fmt_data = valid.len_fmt_data
br.fmt_type = 1 #valid.fmt_type
br.no_chans = 1 #valid.no_chans
br.samp_rate = valid.samp_rate
br.sr_bps_cs_8 = valid.sr_bps_cs_8
br.bps_cs_8 = valid.bps_cs_8
br.bps = valid.bps
br.data_header = valid.data_header
br.file_size_data = br.file_size - struct.calcsize(WavFile.header_format)
br.print_header()
valid.print_header()
br.save("fixed.wav")
if __name__ == "__main__":
main()