2016-10-09 33 views
1

我有一個程序循環遍歷一個for循環,並將正弦波保存爲wav文件以創建鍵盤的一系列音調。循環從-int到+ int,並在每次迭代中保存這些WAV文件。唯一的問題是,當它到達x = 2左右時,文件順序會混亂。我不知道爲什麼會發生這種情況,或者如何解決這個問題。以錯誤的順序保存WAV文件

out_int = 0 

for x in xrange(-43, 47, 1): 
    CFreq = CFreq * 2**(x/12.)         
    out_int += 1 

    . 
    . 
    . 
     wavdata = np.zeros(len(data), np.int16) 
     wavdata[:] = data/max(data) * 2**15 

     wavfile = wave.open("WavFiles/Modes_%02d_.wav" % (out_int), "wb") 

Theres很多數據進入這些文件的,這就是爲什麼我猜測它需要更長的時間來產生一些筆記和保存之前的樣品前將其保存。 每個樣品的輸出頻率是正確的,但它們發出聲音。

無論如何要確保代碼先寫入並保存每個文件,然後再進入下一個文件?我嘗試改變循環的順序,從正值變爲負值,但是負值迭代中的樣本被搞亂了。

回答

0

沒有足夠的代碼進行復制,但是,下面是使用枚舉的示例,它將按順序放置後續的xrange元素。也許這將有助於保持你的wave文件的順序。

for i, x in enumerate(xrange(-43, 47, 1)):  
    file_name = "file{0}-{1}.wav".format(i, x) 
    print file_name 

輸出:

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 
>>> ================================ RESTART ================================ 
>>> 
file0--43.wav 
file1--42.wav 
file2--41.wav 
file3--40.wav 
| 
| 
file86-43.wav 
file87-44.wav 
file88-45.wav 
file89-46.wav 
+0

我意識到,我的文件播放器是不是在玩正確的文件,以及訂單被罰款! –