2017-12-31 232 views
2

私は、与えられた期間、与えられた周波数の正弦波を生成し、それを.wavファイルに書き込もうとしています。私はnumpyのsin関数とscipyのwavfile関数を使用しています。私は確かに正弦波ではない奇妙な音を得ています。Pythonを使用して正弦波を生成するにはどうすればよいですか?

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) 

助けてください。正弦波か何かについて根本的に間違った仮定をしましたか?

samples = np.linspace(0, t, int(fs*t), endpoint=False) 

+1

'samples = np.arange(t * fs)/ fs'を実行するとどうなりますか? –

答えて

2

変更

samples = np.arange(t * fs) 

(これは整数値でfs*t結果と仮定している。)

あるいは、ポール装甲は

samples = np.arange(t * fs)/fs 
、コメントで示唆したように

samplesは、整数0,1,2、... fs*tのシーケンスに過ぎませんでした。代わりに、サンプルの実際の時間値(秒単位)が必要です。

+0

私はずっと正確だと思います( 'fs * t'が整数でない場合)。 –

+0

ええ、今私は理解する!サンプル変数はサンプルではなく数秒でなければなりません。ありがとうございました! –

0

サンプル値と長さを混合しています。試してみてください:

samples = np.linspace(0, t, t * fs) 

別の詳細:あなたはraw_input周りstrを必要としません。

関連する問題