DMX fire 1024 是否有過SRC?

音效卡的問題在此討論。

版主: DearHoney

回覆文章
whiteshit
神人
文章: 369
註冊時間: 2001-09-16 08:00

DMX fire 1024 是否有過SRC?

文章 whiteshit »

我照下面這個網址http://bennetng.uhome.net/foobar/foobar.html做了測試
發現DMX Fire 1024沒開Resampler就可以達到很好的效果(我認為跟開resampler一樣)
同樣的用Audigy就不行(我兩張音效卡都裝在一台電腦上)
所以我想問一下是否是DMX Fire 1024沒有過SRC還是他的SRC作的比較好..
我有調過Kmix的SRC,並不會影響DMX fire 1024的表現..
audigy就會被影響.
cbreak
大師
文章: 160
註冊時間: 2001-11-30 08:00
聯繫:

Re: DMX fire 1024 是否有過SRC?

文章 cbreak »

whiteshit 寫:我照下面這個網址http://bennetng.uhome.net/foobar/foobar.html做了測試
發現DMX Fire 1024沒開Resampler就可以達到很好的效果(我認為跟開resampler一樣)
同樣的用Audigy就不行(我兩張音效卡都裝在一台電腦上)
所以我想問一下是否是DMX Fire 1024沒有過SRC還是他的SRC作的比較好..
我有調過Kmix的SRC,並不會影響DMX fire 1024的表現..
audigy就會被影響.
我有XFIRE 1024,我在Linux作業系統下曾試過多種驅動程式,包含:
http://www.alsa-project.org/
http://www.opensound.com/
(p.s. Linux核心內建的驅動程式是從上面ALSA程式碼修改過來的,屬ALSA血統)

我試過ALSA 0.9.0rc2,發覺是音質最好的,不管44khz或48khz,
但是ALSA 0.9.0rc3以後(包含rc3)的版本失真就變得很嚴重,
至於那opensound的驅動程式也是失真嚴重,但是"失真的風格"不同!

以上是我在Linux安裝XFIRE 1024驅動程式的經驗,分享一下囉~
應該跟這主題相關。
cbreak
大師
文章: 160
註冊時間: 2001-11-30 08:00
聯繫:

Re: DMX fire 1024 是否有過SRC?

文章 cbreak »

cbreak 寫:我有XFIRE 1024,我在Linux作業系統下曾試過多種驅動程式,包含:
http://www.alsa-project.org/
http://www.opensound.com/
(p.s. Linux核心內建的驅動程式是從上面ALSA程式碼修改過來的,屬ALSA血統)

我試過ALSA 0.9.0rc2,發覺是音質最好的,不管44khz或48khz,
但是ALSA 0.9.0rc3以後(包含rc3)的版本失真就變得很嚴重,
至於那opensound的驅動程式也是失真嚴重,但是"失真的風格"不同!

以上是我在Linux安裝XFIRE 1024驅動程式的經驗,分享一下囉~
應該跟這主題相關。
我看了ALSA Driver驅動程式的source code,我看到以下這段,
可見ALSA對於此卡,是驅動程式本身在做SRC,將所有sample rate
轉成48khz,這點應該沒有錯! 但我奇的是,ALSA rc2跟rc3皆是
使用下述一模一樣的SRC演算法,但為何一個聲音純淨,一個卻是
失真嚴重呢? ALSA rc3只不過是Benny為CS46xx chip加入四聲道
支援而已啊, 難道跟這有關嗎?

/*
* Compute the values used to drive the actual sample rate conversion.
* The following formulas are being computed, using inline assembly
* since we need to use 64 bit arithmetic to compute the values:
*
* phiIncr = floor((Fs,in * 2^26) / Fs,out)
* correctionPerGOF = floor((Fs,in * 2^26 - Fs,out * phiIncr) /
* GOF_PER_SEC)
* ulCorrectionPerSec = Fs,in * 2^26 - Fs,out * phiIncr -M
* GOF_PER_SEC * correctionPerGOF
*
* i.e.
*
* phiIncr:other = dividend:remainder((Fs,in * 2^26) / Fs,out)
* correctionPerGOF:correctionPerSec =
* dividend:remainder(ulOther / GOF_PER_SEC)
*/
tmp1 = rate << 16;
phiIncr = tmp1 / 48000;
tmp1 -= phiIncr * 48000;
tmp1 <<= 10;
phiIncr <<= 10;
tmp2 = tmp1 / 48000;
phiIncr += tmp2;
tmp1 -= tmp2 * 48000;
correctionPerGOF = tmp1 / GOF_PER_SEC;
tmp1 -= correctionPerGOF * GOF_PER_SEC;
correctionPerSec = tmp1;
回覆文章