def main(): wfile = WavFile() for sig_cons in [ SinSignal, TriangleSignal, SawtoothSignal, GlottalSignal, ParabolicSignal, SquareSignal ]: print sig_cons sig = sig_cons(440) wave = sig.make_wave(1) wave.apodize() wfile.write(wave) wfile.close() return signal = GlottalSignal(440) signal.plot() pyplot.show() return wave = note(69, 1, SquareSignal) write_wave(wave) return wfile = WavFile() for m in range(60, 0, -1): wfile.write(note(m, 0.25)) wfile.close() return wave1 = note(69, 1) wave2 = chord([69, 72, 76], 1) wave = wave1 | wave2 wfile = WavFile() wfile.write(wave) wfile.close() return sig1 = CosSignal(freq=440) sig2 = CosSignal(freq=523.25) sig3 = CosSignal(freq=660) sig4 = CosSignal(freq=880) sig5 = CosSignal(freq=987) sig = sig1 + sig2 + sig3 + sig4 #wave = Wave(sig, duration=0.02) #wave.plot() wave = sig.make_wave(duration=1) #wave.normalize() wfile = WavFile(wave) wfile.write() wfile.close()
def chord(midi_nums, duration, sig_cons=CosSignal): """Make a chord with the given duration. midi_nums: sequence of int MIDI note numbers duration: float seconds """ freqs = [midi_to_freq(num) for num in midi_nums] signal = sum(sig_cons(freq) for freq in freqs) wave = signal.make_wave(duration) wave.apodize() return wave
def main(): wfile = WavFile() for sig_cons in [SinSignal, TriangleSignal, SawtoothSignal, GlottalSignal, ParabolicSignal, SquareSignal]: print sig_cons sig = sig_cons(440) wave = sig.make_wave(1) wave.apodize() wfile.write(wave) wfile.close() return signal = GlottalSignal(440) signal.plot() pyplot.show() return wave = note(69, 1, SquareSignal) write_wave(wave) return wfile = WavFile() for m in range(60, 0, -1): wfile.write(note(m, 0.25)) wfile.close() return wave1 = note(69, 1) wave2 = chord([69, 72, 76], 1) wave = wave1 | wave2 wfile = WavFile() wfile.write(wave) wfile.close() return sig1 = CosSignal(freq=440) sig2 = CosSignal(freq=523.25) sig3 = CosSignal(freq=660) sig4 = CosSignal(freq=880) sig5 = CosSignal(freq=987) sig = sig1 + sig2 + sig3 + sig4 #wave = Wave(sig, duration=0.02) #wave.plot() wave = sig.make_wave(duration=1) #wave.normalize() wfile = WavFile(wave) wfile.write() wfile.close()
def note(midi_num, duration, sig_cons=CosSignal): """Make a MIDI note with the given duration. midi_num: int MIDI note number duration: float seconds sig_cons: Signal constructor function """ freq = midi_to_freq(midi_num) print midi_num, freq signal = sig_cons(freq) wave = signal.make_wave(duration) wave.apodize() return wave
def gen_wav(): #cos_sig = thinkdsp.CosSignal(freq=440, amp=1.0, offset=0) sin_sig = thinkdsp.SinSignal(freq=880, amp=0.5, offset=0) #mix = cos_sig + sin_sig; mix = sin_sig wave = mix.make_wave(duration=10, start=0, framerate=2000000) wave.normalize() # 归一化 wave.apodize() # 渐入渐出 #wave.plot() #plt.show() segment = wave.segment(start=0, duration=2/440) segment.plot() plt.show() # 频谱 spectrum = wave.make_spectrum() spectrum.plot() plt.show() wave.write(filename=sys.argv[1])
PI2 = 2 * np.pi class SawtoothChirp(Chirp): def evaluate(self, ts): freqs = np.linspace(self.start, self.end, len(ts)) dts = np.diff(ts, prepend=0) dphis = PI2 * freqs * dts phases = np.cumsum(dphis) cycles = phases / PI2 frac, _ = np.modf(cycles) ys = normalize(unbias(frac), self.amp) return ys signal = SawtoothChirp(start=220, end=880) wave = signal.make_wave(duration=0.1, framerate=4000) wave.apodize() wave.write(filename="output3-2.wav") plt.subplot(1, 2, 1) plt.title("SawtoothChirp") wave.plot() sp = wave.make_spectrum(256) plt.subplot(1, 2, 2) sp.plot() plt.xlabel("时间") plt.ylabel("频率") plt.title("频谱") plt.show()