-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsine_wave.py
25 lines (20 loc) · 1 KB
/
sine_wave.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
import argparse
import numpy
from scipy.io import wavfile
def generate_sine_wave(frequency: int, duration=1.0, amplitude=1.0, sample_rate=44100) -> float:
num_samples = int(duration * sample_rate)
sampling_times = numpy.linspace(0.0, duration, num_samples, dtype=numpy.float32)
samples = amplitude * numpy.sin(frequency * sampling_times * (2.0 * numpy.pi))
return samples
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument("-f", "--frequency", type=int, required=True)
parser.add_argument("-v", "--volume", type=float, default=1.0)
parser.add_argument("-d", "--duration", type=float, default=1.0)
parser.add_argument("-sr", "--sample-rate", type=int, default=44100)
parser.add_argument("-o", "--output", type=str, default="sine.wav")
args = parser.parse_args()
samples = generate_sine_wave(args.frequency, args.duration, args.volume, args.sample_rate)
wavfile.write(args.output, args.sample_rate, samples)
if __name__ == "__main__":
main()