Spaces:
Runtime error
Runtime error
Commit
·
7b727e4
1
Parent(s):
9af4f2c
Upload convert_wavs.py
Browse files- convert_wavs.py +75 -0
convert_wavs.py
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
|
3 |
+
"""
|
4 |
+
A utility script used for converting audio samples to be
|
5 |
+
suitable for feature extraction
|
6 |
+
"""
|
7 |
+
|
8 |
+
import os
|
9 |
+
|
10 |
+
def convert_audio(audio_path, target_path, remove=False):
|
11 |
+
"""This function sets the audio `audio_path` to:
|
12 |
+
- 16000Hz Sampling rate
|
13 |
+
- one audio channel ( mono )
|
14 |
+
Params:
|
15 |
+
audio_path (str): the path of audio wav file you want to convert
|
16 |
+
target_path (str): target path to save your new converted wav file
|
17 |
+
remove (bool): whether to remove the old file after converting
|
18 |
+
Note that this function requires ffmpeg installed in your system."""
|
19 |
+
|
20 |
+
v = os.system(f"ffmpeg -i {audio_path} -ac 1 -ar 16000 {target_path}")
|
21 |
+
# os.system(f"ffmpeg -i {audio_path} -ac 1 {target_path}")
|
22 |
+
if remove:
|
23 |
+
os.remove(audio_path)
|
24 |
+
return v
|
25 |
+
|
26 |
+
|
27 |
+
def convert_audios(path, target_path, remove=False):
|
28 |
+
"""Converts a path of wav files to:
|
29 |
+
- 16000Hz Sampling rate
|
30 |
+
- one audio channel ( mono )
|
31 |
+
and then put them into a new folder called `target_path`
|
32 |
+
Params:
|
33 |
+
audio_path (str): the path of audio wav file you want to convert
|
34 |
+
target_path (str): target path to save your new converted wav file
|
35 |
+
remove (bool): whether to remove the old file after converting
|
36 |
+
Note that this function requires ffmpeg installed in your system."""
|
37 |
+
|
38 |
+
for dirpath, dirnames, filenames in os.walk(path):
|
39 |
+
for dirname in dirnames:
|
40 |
+
dirname = os.path.join(dirpath, dirname)
|
41 |
+
target_dir = dirname.replace(path, target_path)
|
42 |
+
if not os.path.isdir(target_dir):
|
43 |
+
os.mkdir(target_dir)
|
44 |
+
|
45 |
+
for dirpath, _, filenames in os.walk(path):
|
46 |
+
for filename in filenames:
|
47 |
+
file = os.path.join(dirpath, filename)
|
48 |
+
if file.endswith(".wav"):
|
49 |
+
# it is a wav file
|
50 |
+
target_file = file.replace(path, target_path)
|
51 |
+
convert_audio(file, target_file, remove=remove)
|
52 |
+
|
53 |
+
|
54 |
+
if __name__ == "__main__":
|
55 |
+
import argparse
|
56 |
+
parser = argparse.ArgumentParser(description="""Convert ( compress ) wav files to 16MHz and mono audio channel ( 1 channel )
|
57 |
+
This utility helps for compressing wav files for training and testing""")
|
58 |
+
parser.add_argument("audio_path", help="Folder that contains wav files you want to convert")
|
59 |
+
parser.add_argument("target_path", help="Folder to save new wav files")
|
60 |
+
parser.add_argument("-r", "--remove", type=bool, help="Whether to remove the old wav file after converting", default=False)
|
61 |
+
|
62 |
+
args = parser.parse_args()
|
63 |
+
audio_path = args.audio_path
|
64 |
+
target_path = args.target_path
|
65 |
+
|
66 |
+
if os.path.isdir(audio_path):
|
67 |
+
if not os.path.isdir(target_path):
|
68 |
+
os.makedirs(target_path)
|
69 |
+
convert_audios(audio_path, target_path, remove=args.remove)
|
70 |
+
elif os.path.isfile(audio_path) and audio_path.endswith(".wav"):
|
71 |
+
if not target_path.endswith(".wav"):
|
72 |
+
target_path += ".wav"
|
73 |
+
convert_audio(audio_path, target_path, remove=args.remove)
|
74 |
+
else:
|
75 |
+
raise TypeError("The audio_path file you specified isn't appropriate for this operation")
|