2011-12-13 31 views
3

這是一個跟進我已經在這裏問How can I play a single tone or custom wave with Delphi?Delphi和離散信號:獲得固定體積的信號與固定沉默

爲了使長話短說另外一個問題,我用MMSYSTEM的waveOutWrite()來創建一個離散信號,但它似乎沒有按照我的預期工作,或者我沒有得到它。

我寫了兩個離散信號到緩衝器具有固定的空間,這樣Samples[i] := round(vol*sin(2*Pi*AFreq*t));

當容量是1000用於將信號而「空間」是一些0體積信號。

這是什麼樣子,而我期望的東西,希望像| ... | enter image description here

我得到的信號的東西都錯了嗎?還是說我沒有正確使用WinAPI?我希望每個固定信號看起來相同的圖形

PS:我使用Windows'立體聲混音,所以沒有干擾 PPS:下面是轉換二進制到信號

function CreateBinaryTone(BinaryString: String): TWaveformSamples; 
var 
    I: Integer; 
    omega, 
    dt: double; 
    vol: double; 
begin 
    omega := 2*Pi*AFreq; 
    dt := 1/Format.nSamplesPerSec; 

    SetLength(Samples, Length(BinaryString)); 

    for I := 1 to Length(BinaryString) do 
    begin 
    { Discrete Time } 
    Vol := StrToInt(BinaryString[I]) * 1000; 
    Samples[I] := vol * sin(omega * dt * I); 
    end; 

    Result := Samples; 
end; 
+1

請出示你的代碼中,'罪裏面的值()'表達應與'i'變化得到具有相同幅度的純頻率。 –

+0

將問題添加到問題中,謝謝。 – MitziMeow

+0

我剛剛測試了[Andreas示例](http://stackoverflow.com/questions/7742377/how-can-i-generate-continuous-tones-of-varying-frequencies),你在上一個問題中提到過。它工作正常,你有沒有測試過他的代碼? –

回答

2

代碼段您的位時間需要比載波頻率(正弦)的時間長得多,並且採樣率也需要超過載波頻率的2倍。所以你的示例生成循環可能需要更長的時間。

+0

從表面上看,時間更長。 –

+0

我的採樣率是2倍,但是你是什麼意思?時間1000被傳送? – MitziMeow

+0

另外,我只使用了一個0/1000安培波,因此,我認爲,我沒有載波,或者這只是說我的「載波」總是在0? – MitziMeow