2

440Hzから600Hzのトーンでオーディオファイルを書き込もうとしています。ファイルは440hzで開始し、各周波数を(昇順で)1秒間再生し、600hzで終了する必要があります。私はpythonのwaveモジュールを思いついたが、音のないファイルになってしまうので、ここで何か間違ったことをしている。(誰かがより良い提案をしている場合、それがPythonであるかどうかは本当に気にしません。私はLinuxを使用しており、そのプラットフォームで動作するものはすべて問題なく動作します。上記の仕様でオーディオファイルを作成する必要があります。どうも!)

frequencies = range(440,600)
data_size = len(frequencies)
fname = "WaveTest.wav"
frate = 11025.0  # framerate as a float
amp = 64000.0     # multiplier for amplitude

sine_list_x = []
for f in frequencies:
    for x in range(data_size):
        sine_list_x.append(math.sin(2*math.pi*f*(x/frate)))

wav_file = wave.open(fname, "w")

nchannels = 1
sampwidth = 2
framerate = int(frate)
nframes = data_size
comptype = "NONE"
compname = "not compressed"

wav_file.setparams((nchannels, sampwidth, framerate, nframes,
    comptype, compname))

for s in sine_list_x:
    # write the audio frames to file
    wav_file.writeframes(struct.pack('h', int(s*amp/2)))

wav_file.close()
4

2 に答える 2

1

このようなものが機能するはずです。うまくいけば、それはあなたが継続するための少なくとも良い出発点です。

import numpy as N
import wave

towrite = ''
for freq in xrange(440,600):
     duration = 1
     samplerate = 44100
     samples = duration*samplerate
     period = samplerate / float(freq) # in sample points
     omega = N.pi * 2 / period

     xaxis = N.arange(samples,dtype = N.float)
     ydata = 16384 * N.sin(xaxis*omega)

     signal = N.resize(ydata, (samples,))

     towrite += ''.join([wave.struct.pack('h',s) for s in signal])

 f = wave.open('freqs.wav', 'wb')
 f.setparams((1,2,44100, 44100*4, 'NONE', 'noncompressed'))
 f.writeframes(towrite)
 f.close()

参照

于 2013-03-12T23:19:52.093 に答える
1

Windowsプレートフォームでは問題なく動作するようです:

440Hzでの信号の開始

600Hzでの信号の終わり

サンプリングは尊重され、周波​​数は適切です(440〜600 Hz)。ただし、コードでは、周波数は1秒間ではなく、len(frequencies)/ frate-thofsecondに留まります。すべての周波数に対して1秒を使用する場合は、data_sizeをfrateと等しくする必要があります。

import math
import wave
import struct

frequencies = range(440,600)
duration = 1 #in second
fname = "WaveTest.wav"
frate = 11025.0  # framerate as a float
amp = 64000.0     # multiplier for amplitude

sine_list_x = []
for f in frequencies:
    for x in range(duration*frate)  :
        sine_list_x.append(math.sin(2*math.pi*f*(x/frate)))

wav_file = wave.open(fname, "w")

nchannels = 1
sampwidth = 2
framerate = int(frate)
nframes = data_size
comptype = "NONE"
compname = "not compressed"

wav_file.setparams((nchannels, sampwidth, framerate, nframes,
    comptype, compname))

for s in sine_list_x:
    # write the audio frames to file
    wav_file.writeframes(struct.pack('h', int(s*amp/2)))

wav_file.close()
于 2013-03-12T23:32:37.040 に答える