我尝试在给定的持续时间内生成给定频率的正弦波,然后将其写入.wav文件。我使用了numpy的sin函数和scipy的wavfile函数。我得到的声音绝对不是正弦波。
import numpy as np
from scipy.io import wavfile
fs = 44100
f = int(raw_input("Enter fundamental frequency: "))
t = float(raw_input("Enter duration of signal (in seconds): "))
samples = np.arange(t * fs)
signal = np.sin(2 * np.pi * f * samples)
signal *= 32767
signal = np.int16(signal)
wavfile.write(str(raw_input("Name your audio: ")), fs, signal)
任何帮助将不胜感激。我是否对正弦波或其他东西做了一些根本不正确的假设?
答案 0 :(得分:3)
更改
samples = np.arange(t * fs)
到
samples = np.linspace(0, t, int(fs*t), endpoint=False)
(这假定fs*t
产生整数值。)
或者,正如Paul Panzer在评论中所说,
samples = np.arange(t * fs) / fs
您的samples
只是整数0,1,2,... fs*t
的序列。相反,您需要样本的实际时间值(以秒为单位)。
答案 1 :(得分:0)
您正在混合样本值和长度!尝试:
samples = np.linspace(0, t, t * fs)
另一个细节:您不需要str
周围的raw_input
。