Linux 下,類似 SSRC 的軟體轉換取樣頻率設定法

討論MP3、WAV、MIDI、WMA甚至其他數位音訊的播放、製作、轉換等。

版主: DearHoney

回覆文章
Tiberius
神人
文章: 931
註冊時間: 2001-01-03 08:00

Linux 下,類似 SSRC 的軟體轉換取樣頻率設定法

文章 Tiberius »

最近把自己電腦的作業系統換成了 Linux, 也因此想尋求 Linux 下提高撥放音質的作法, 第一步就是尋找類似 SSRC 的解決方案。

可惜這方面的文件資源還不是很充實,折騰了半天才發現,原來 ALSA 本身就有這個功能! :P

作法: 編輯 ~/.asoundrc (本來應該不存在),內容如下:

定義一個名為 mycard 的 pcm 裝置,實體使用第一張音效卡
pcm.mycard {
type hw
card 0
device 0
}

再定義一個名稱為 ssrc (software sample rate converter :P ) 的 mycard 次裝置,會先轉換取樣率之後再把訊號丟給它
pcm.ssrc {
type rate
slave {
pcm mycard
rate 48000
}
}

之後拿原生支援 ALSA 的程式,選擇 ssrc 這個裝置撥放,訊號就會先轉換成 48KHz 再送到音效卡了。以我現在用的 YMF754 來說,改用這個 ssrc device 撥放的話,可以感受到音質有明顯的差異,而且應該是進步 ^^;

使用上以 XMMS 舉例來說,就是使用 ALSA 0.9 output plugin [libALSA.so] 並且 Audio device 選擇 User defined, 填入 ssrc。

在查過相關 mailing list 跟看過原始碼之後,確認 ALSA 裡頭使用的演算法只是簡單的 linear sample interpolation (線性取樣內插),表現應該沒有 Shibatch SRC 來得好 ... 可惜目前似乎還沒有人把 Shibatch SRC porting 到這邊來?

我用 RMAA 5.2 產生測試 Wave 檔,撥放之後從 Mixer 錄回來的測試結果放在這邊: http://mail.cs.nchu.edu.tw/~s9256043/Comparison.htm

P.S. 關於音量控制

alsamixer 音量控制數值的意義,每張卡都有或大或小的差異,如果用的是一般採用 AC'97 CODEC 的卡,可以試著去找找看 AC'97 CODEC 的 datasheet. 以我的卡上的 STAC9708 來說,Master volume 的範圍是 0-31, 開到 31 是無衰減輸出; PCM 的範圍也是 0-31, 但是這個要開 16 才是無衰減無增益輸出!超過 16 的話就有增益了,如果音量怎麼調都會破音 (clipping) 的話,不妨檢查看看這部份的狀況。

Hope this helps. :)
Match
大師
文章: 194
註冊時間: 2002-10-30 02:55

文章 Match »

弟不才,
請問Linux有像Windows一樣的44.1k-48k SRC處理嗎?
在下因為事情關係有使用Linux/Unix/Sun/Mac的系統
很好奇地向您請教,謝謝。
オトコでもいい、ヒニンするから!
Tiberius
神人
文章: 931
註冊時間: 2001-01-03 08:00

文章 Tiberius »

能用 ALSA 驅動的音效卡就能按照我上面那篇的作法搞定 ...
viaviavia
大師
文章: 157
註冊時間: 2003-04-25 02:53
來自: 高雄
聯繫:

文章 viaviavia »

TIB 照你測試的圖形來看,高音部分有不小的衰減哩,754 會有這麼慘啊?
Tiberius
神人
文章: 931
註冊時間: 2001-01-03 08:00

文章 Tiberius »

嗯,這就是我測試的結果 ... 貼這個只是為了比較用不用的差別,至於是甚麼原因造成高音衰減的,恐怕我暫時無法推測了 :P
JamesT
神人
文章: 1347
註冊時間: 2001-01-04 08:00

文章 JamesT »

這個 "software" SRC 的效果似乎還距離 SSRC 很遠哦...
Tiberius
神人
文章: 931
註冊時間: 2001-01-03 08:00

文章 Tiberius »

簡單的線性內插法怎麼有辦法跟 Shibatch SRC 的演算法相比?! XD

所以我正在研究如何把 Shibatch SRC porting 到 Linux 上面 ... 看能不能直接改寫成可以取代 ALSA rate plugin 的形式,或者是插在播放環節之內的哪個點.

不過因為最近閒暇時間不多,應該還要一陣子才能看到結果了。

--
其實現在 WINE 可以直接執行 Foobar2000 0.7.1 透過 waveOut 撥放聲音出來 ...
不考慮到 CPU usage 跟穩定性的話其實可以這麼用,在我的機器上,這樣跑起來只要把 Foobar2000 切到背景,聲音就會斷斷續續的 :Q

個人是比較希望能有 native 的解決方案,所以還是嘗試動手改寫先 ... :)
DearHoney
神人
文章: 6487
註冊時間: 2001-01-03 08:00
聯繫:

文章 DearHoney »

有點不太懂,錄音時是用哪一張音效卡錄回來?總覺得噪音值似乎很棒,連帶影響到其他成績都變好了,但一般 YMF744/754 音效卡應該沒那麼好?
Tiberius
神人
文章: 931
註冊時間: 2001-01-03 08:00

文章 Tiberius »

直接從自己的 AC'97 CODEC Mixer Out 錄回來的。
回覆文章