2011年5月5日 星期四

好久沒有買廠機--Music Fidelity V-Link Asynchronous USB to SPDIF converter


網兄 Paul 在〈令人喜出望外的 BeagleBoard Digital Stream 系統〉的留言裡介紹了 Music Fidelity 的新產品 V-Link,一款廉價而且無須驅動程式的非同步 USB to SPDIF 轉換器(Asynchronous USB to SPIDF converter)。

時值 2011 年,現在 Asynchronous USB Audio 裝置已不稀奇,但絕大多數的產品只支援 Windows 和 Mac OS,而我用的 BeagleBoard 運行 Linux 系統,就沒有太多非同步的選擇了。Music Fidelity 原廠網頁上並未提到 V-Link 支援 Linux,但 Head-fi 上有個 V-Link 的討論串,當中有網兄提到 V-Link 可以在 Linux 上運行。此外看到 V-Link 空空如也,簡潔異常的內部照片,讓我由衷讚嘆,當即妥託代買自美國 Amazon 購入 V-Link。



下訂後約莫一週,就順利收到了 Music Fidelity V-Link。其實我本來對 Music Fidelity 並沒有太深刻的印象,他們的系統聽過不少次,但都沒有記憶點,完全料想不到有天會買該廠產品。V-Link 屬於 V 系列,走小型、廉價路線,包裝相當「務實」,與其說是音響產品,其實更像滑鼠、耳麥等 3C 用品。




尺寸比想像中稍大一點,拿在手上比想像中輕一點,外觀處理不差。看到背面寫著產地是台灣,不禁喟然。台灣出產的東西,怎麼常常要繞地球一週才能回到台灣人手上呢?

在等待 V-Link 到來的那些天裡,已經事先重架好我的 BeagleBoard digital stream 系統。一收到 V-Link 就立刻接上系統試用。插上來自 BeagleBoard 的 USB 線,電源燈順利亮起;送出音樂訊號,信號鎖定燈也順利亮起。撥開前級的音量控制,音樂流瀉了出來,但卻伴隨著一連串或大或小,斷斷續續的爆聲,凌駕於音樂之上。

於是開始除錯。先把 V-Link 接到我的 Windows 系統上,用 Foobar2000 撥放相同的音樂檔。這次就順利了。在 Windows 上,V-Link 工作一切正常,沒有任何雜音,而且聲音還挺不錯。音質清麗透明,暫態靈敏,走向與我之前聽過的 USB 訊源不太一樣。在 Windows 上,V-Link 遠勝我的 PCM2706 based 轉換器,但稍不及 PCM2706 搭配 BeagleBoard 的聲音。所以我又把 V-Link 接回 BeagleBoard,繼續研究。

在 Ubuntu 下試了些指令,看起來 V-Link 都滿正常的,系統有順利抓到裝置,播放時也有得到正確的訊號。又試了不同的播放軟體,但不論是用 mplayer 或 gst-launch,結果都一樣,炒豆聲不絕於耳。想再繼續研究的,不過眼下實在沒空,只好先放著了,偶爾接 Windows 聽一下。上次買廠機是 2007 年的事情,買入 CEC TL51X 轉盤。後來 CEC 轉盤表現大為不如 Shigaclone,已經冷凍了一年。這次難得對廠機心動,結果出師不利,無法順利地連上我的 digital stream 系統。話說 Music Fidelity 的說明書上僅提及支援 Windows 與 Mac OS,事實上 V-Link 與 Windows 搭配表現也很出色,倒是不能怪罪原廠。總而言之,買廠機結果還要自己下功夫除錯,正是 DIYer 的宿命啊!

本來想等到一切搞定,V-Link 正常發聲之後,再寫這篇文章的。無奈最近忙到天荒地老,不知何年何月才能搞定,只好先草草寫篇「開箱文」,提醒一下對 V-Link 有興趣的 Linux 玩家。

70 則留言:

Paul 提到...

WF兄,

真是抱歉, 讓您購買了一個麻煩的機器.... 小弟有極大的罪惡感....

請WF兄下指令 more /proc/asound/version 查看一下Alsa的版本. 如果不是1.0.24, 升級到1.0.24應該有機會修復這個問題. 小弟會盡全力幫忙解決這個問題.

Paul 提到...

WF兄,

能否請您提供aplay -l的輸出資訊?
能否拷貝一個檔案到beagleboard SD卡內, 用指令 aplay -Dhw0,1 song.wav來播放看看是不是仍然有問題?
其中hw0,1指的是aplay -l輸出裡秀出的V-link的device name.

WF 提到...

Paul 兄,您言重了。DIY 原是要有當白老鼠的精神,一直試,試到好,這也是 DIY 的快樂所在。而且有問題還有您這樣的高手相助,信心又大增了!

您果然相當內行,我的 Alsa driver 是前一版 1.0.23,雖然已經將 kernel 升級到 Natty,但這個 kernel (2.6.38-8-omap) 並沒有把 1.0.24 包進去。

昨天試著自己裝 1.0.24,但在 configure 時失敗了,原因是說 Alsa 現在是內建在 kernel 裡,不能從外部編譯安裝。現在還在找解法,希望可以順利升級到 1.0.24。

WF 提到...

Paul 兄,這是 aplay -l 的結果:


**** List of PLAYBACK Hardware Devices ****
card 0: omap3beagle [omap3beagle], device 0: TWL4030 twl4030-hifi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: VLink [Musical Fidelity V-Link], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0


用 aplay 去播放,似乎要用 plughw 來指定才行。小弟用這個指令播放:

aplay -v --device=plughw:1,0 test0.wav

聽起來問題一樣,也有大小爆聲。

WF 提到...

又,Paul 兄,倘若您有興趣,小弟可以把 V-Link 寄給您玩玩看。說不定只是小弟的系統設置有問題,換一個環境就能正常運轉了。

Paul 提到...
網誌管理員已經移除這則留言。
WF 提到...

Paul 兄,

小弟有試過那個 script,亦曾試著自己 compile,但都不成功。

都是在 configure 的過程中,停在這行:

checking for built-in ALSA... yes
configure: error: You have built-in ALSA in your kernel.

是不是說 kernel 已經內建 Alsa driver,即不能用此 script 更新?但 Paul 兄的 kernel 似乎也已經內建舊版 Alsa driver 了,真是不解。

Anyway,小弟會再除錯看看。不論最後如何,下週會寄給您玩看看。

Paul 提到...

WF兄,

小弟找了一些資料, 大概知道為什麼您的系統會有錯誤訊息了.

根據一些網頁上的資料, 如果alsa是直接編譯進kernel, 而不是編譯成module的話, 就無法另行升級alsa. 因此小弟猜測, 您的kernel當初在編譯的時候, alsa相關的選項是選擇為"Y"而非"m". Y = 直接放進kernel. m = 編譯為模組.

因此您可以重新編譯kernel, 將alsa相關的選項設定為m. 這個新kernel就可以使用script升級了. 但是話說回來, 就算是升級了也不一定能夠解決問題. 就怕花了一堆時間重新編譯kernel和alsa, 情況也沒改變..

如果兄可以順利解決問題, 就不用把v-link寄給小弟了. 相信諸位網兄都期待您能分享這台機器的心得..

WF 提到...

Paul 兄,

小弟剛用 Ubuntu 11.04 的 Live CD 啟動我的筆記型電腦,再用 aplay 去測試,結果順利出聲了,沒有爆音,聲音還挺不錯喔!

Live CD 上的 alsa 版本也是 1.0.23,所以看來不是 driver 的問題,要往別的方向 debug 了……

Paul 提到...

WF兄,

如果是這樣, 那就要看看interrupt是否有衝突. 能否請您秀出/proc/interrupts的內容呢?

ps. 請兄不用麻煩把v-link寄給小弟了.. 因為小弟這邊也沒有beagleboard可以測試..

pps. 麻煩WF兄把上面小弟留言中的email殺掉. 感恩 :)

WF 提到...

Paul 兄,已經將那篇留言刪除了(不過那篇留言有些寶貴的資訊,可惜了。)

這是 cat /proc/interrupt 的結果:


CPU0
7: 0 INTC TWL4030-PIH
11: 0 INTC prcm
12: 95644 INTC DMA
25: 3 INTC OMAP DSS
56: 478 INTC omap_i2c
61: 0 INTC omap_i2c
72: 0 INTC serial idle
73: 0 INTC serial idle
74: 0 INTC serial idle
77: 1160179 INTC ehci_hcd:usb1
80: 0 INTC serial idle
83: 144304 INTC mmc0
95: 6067366 INTC gp timer
167: 0 GPIO user
376: 0 twl4030 twl4030_pwrbutton
378: 0 twl4030 twl4030_usb
379: 0 twl4030 rtc0
384: 0 twl4030 mmc0
Err: 0


看起來 IRQ 應該是 77 那個?


另外有確認過 ALSA 的 buffer size,BeagleBoard 的設定和我的 laptop 是一樣的。

現在最擔心的是,不知道會不會是 async mode USB 有許多額外的 sync 資訊,而 BeagleBoard 的 USB Controller 或運算架構不夠力,撐不住這麼多 USB IO traffic,所以有些 bit 來不及正確寫入 buffer 裡?

Paul 提到...

WF兄,

看起來並沒有中斷衝突.
您說aplay 如果使用hw:1,0會無法播放, 必須使用plughw:1,0才行. 能不能請您試試把plughw:1,0改成iec958?
另外能不能請您貼出使用hw:1,0的錯誤訊息呢?

plughw:1,0這個裝置會做resampling的動作, 所以非bit-perfect. 用plughw在小弟針對數位播放最佳化的電腦上播放也會出現大小爆音, 而使用iec958和hw:1,0皆正常.

希望這個資訊可以有所幫助.

Paul 提到...

WF兄,

突然想到一點..
beagleboard有好幾個USB插孔, 能不能麻煩您交換測試將v-link接到不同的插孔試試. 如果可以, 最好是同時避免其他的USB裝置(鍵盤滑鼠)也插在usb上. 也就是說, beagleboard上面只插v-link, 其他都不插, 然後用網路遠端控制播放.

WF 提到...

Paul 兄,

真是麻煩您了,感謝您熱心的幫忙,隔空抓藥,小弟在此向您致謝。

當 device 改為 iec958 或 hw 時,相同的 message 都是:

Playing WAVE 'test0.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
aplay: set_params:1059: Sample format non available
Available formats:
- S24_3LE


這是不是說,V-Link 只吃 24bit 格式,所以在送出前必須先 resample 呢?

WF 提到...

又,小弟使用 Beagleboard 的方式是,透過 ssh 去操控。所以四個 USB port 只接了 V-Link 而已。我也曾試著插不同的 port,但結果都相同。

但我記得 Beagleboard xM 上的 Ethernet 介面,似乎也是走 usb(等於是內建一個 usb Ethernet 網卡)。曾試過把網路線拔掉來聽,但結果也一樣。或許要把這個 Ethernet port 整個 disable 掉?

不過,沒有網路,就沒有辦法用 UPnP 播放了。

Paul 提到...

WF兄,

您太客氣了. 小弟也希望您的V-link能早日與BeagleBoard和睦相處.

看您的/proc/interrupts的內容, 每個USB hosts皆獨佔一個IRQ, 理論上應該不會有問題才對. 當然還是有可能有例外, 不過如果一定要拔掉網路線才能工作就太不方便了.

看來V-link只支援24bit. 如果播放16bit就必須填上8bit的0才行. 說起來其實也是bit-perfect, 只不過得經過格式轉換. Alsa本身的格式轉換有一些問題(dmix), 大家都避dmix唯恐不及. 有一個方法就是使用jack2來取代, 而且可以手動調整buffer大小. 請WF兄參考下面連結來設定jack plugin
http://alsa.opensrc.org/Jack_(plugin)
http://www.alsa-project.org/main/index.php/Asoundrc#JACK_plugin
http://jackaudio.org/

WF 提到...

Paul 兄,感謝您耐心的指教。小弟昨天把 kernel 搞爛了(在 Ubuntu 下作 apt-get dist-upgrade 常常爛,怪),容小弟重灌好 BeagleBoard 再來試 jack2。

Paul 提到...

WF兄,

在您試jack/jack2之前,請您先試試將alsa的buffer加大看看能不能解決問題. 請在您的home directory建立一個.asoundrc檔案. 內容可以參考以下的設定:

pcm.dsp0 {
type plug
slave.pcm "dmixer"
}
pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hw:1,0"
format S24_3LE
period_time 0
period_size 1024
buffer_size 8192
rate 44100
}
bindings {
0 0
1 1
}
}
ctl.mixer0 {
type hw
card 1
device 0
}

其中period_size和buffer_size可以做調整, 看看加大到非常大是不是能夠解決問題. 播放時請用
aplay -v --device=dsp0 test.wav

如果加大period_size和buffer_size可以解決問題, 這樣就比較有方向了..

WF 提到...

Paul 兄,您真是太熱心了,非常感謝您。

小弟已經重灌好 Ubuntu 11.04,並試著照您的配方修改(不過是改全域的 /etc/asound.conf),用不同的 period_size,爆音的大小聲和疏密,確實有所不同,不過試了幾種數值,或大或小,都還是沒能試出完全沒有爆音的情況。

不知道是不是 BeagleBoard IO 速度不夠快,未能及時填好 buffer。又,有時在 aplay 播放中,會出現 underrun 的訊息,但開大 buffer size 仍然未能解決此問題。

實在是相當苦惱啊,真希望能讓 BeagleBoard 與 V-Link 合作無間,好好唱歌。V-Link 在 Linux 下,表現不錯,我覺得更勝於 Windows。

Linhof 提到...

buffer size 開8192 似乎大了一點,我有過經驗太大反而會有爆音,調整到略大於1024就好反而好,不過還是有,在我的系統裡面,那一整個usb bus 一定不能有其他東西,不然就會爆音,給你參考,不過我的不是V-Link,或許也不足以參考

Paul 提到...

WF兄,

如果是這樣, 那應該大致上有個方向了. 基本上小弟相信BeagleBoard-xm上面那顆1GHz的CPU對44.1KHz/16bit的信號處理應該是易如反掌才對. 還請兄繼續嘗試.

請問WF兄您有執行Xorg嗎? 如果可以的話, 越少軟體執行越好, 包含Xorg在內, 不需要的全不要執行. 另外, 請用swapoff -a 把所有的swap關掉. 接下來請試試看下面的方法:

用 ps -e 先找出跟usb audio相關的process (應該只有一個), 還有找出ksoftirqd的process. 記下它們的PID. 然後下指令chrt -f -p 98 {PID of ksoftirqd} 和 chrt -f -p 95 (PID of usb audio). 然後再試試看會不會有爆音 (各種buffer size也請試試看).

如果還不行, 就要從kernel下手了.. 不知道OMAP版的kernel有沒有BFS patch可以用.

WF 提到...

Linhof 兄、Paul 兄,

小弟試過不同的 buffer size,但都還是有爆音,不然就是聽不出音樂的雜音。又,Alsa 在預設下,三個參數分別是:

buffer_size : 22050
period_size : 5513
period_time : 125011

都已經滿大的了 @@
(在我的 Laptop 上也是同樣的參數,但沒爆音)。

又,BeagleBoard 有一個缺點是,內建的 Ethernet 卡,其實是 usb 網路卡。也就是說,板上其中一個 usb port 是供網路卡使用。不知道這是不是爆音的來源。我把網路線拔掉,爆音依舊,或許要把網路卡整個 disable 掉試試。不過沒有網路的話,BeagleBoard 等於廢了,總不能每次都把檔案 copy 到 SD Card 上再撥。

WF 提到...

Paul 兄,

小弟試著把 gdm 整個移除了,也有調過 priority(pulseaudio 和 ksoftirgd),再調整 buffer size 等參數,爆音的大小聲與頻率確有不同,有時甚至變成極小聲的雜音(但音樂訊號也幾不可聞),但目前還是沒能解決這個問題。

昨天試著改裝 real-time kernel,不過裝起來之後不太正常,希望成功裝好 real-time kernel 之後會有用。

Paul 兄,不曉得還有沒有什麼方向可以讓小弟再試試看呢?感謝您。

Any way,目前的結論是 V-Link 在 x86 上,可以與 Linux 共存,表現良好。但在 ARM 等嵌入式系統上到底如何,還要再研究和觀察。

Paul 提到...

WF兄,

看來如果不動硬體, 就真的只能從kernel下手了. 但這也是比較進階的步驟, 要花的心思和時間就多很多了. RT kernel是個選擇, 希望能夠解決問題. 如果還是沒辦法解決, 就要從自行編譯kernel下手了, 這一下去就是一個花時間心血的大坑...

有另外一個選擇WF兄您也許可以參考一下. 先把網路卡disable, 然後再試著從SD卡播放看看確定是不是真的可以解決問題. 如果可以解決問題, 就可以用這個選擇, 只不過又得要再破費了:
http://goods.ruten.com.tw/item/show?21012013296399

如果兄不介意, 小弟這陣子忙完後, 可以跟您商借Beagleboard + V-link 一個禮拜嗎? 看看小弟有沒有辦法在一個禮拜之內讓它們快樂的唱歌..

WF 提到...

Paul 兄,

小弟原不敢勞動您出手,您之前說忙到連自己的 DIY project 都沒有空做了,還勞您費神幫小弟解決,實在是不好意思。不過小弟倒是很樂意借您 V-Link 試用試聽,雖然我想您的 Eeebox 要接 V-Link 問題應該不大。

小弟會再繼續試試看 disable Ethernet 與 RT kernel。真的很感謝您的推薦和幫忙。

這段時間玩下來,我覺得系統還挺有趣的,比想像中有趣(可能是和音響扯上關係,而激起意料之外的熱情)。我打算去聽個課,看能不能比較正統的「入門」一下。

Paul 提到...

WF兄,

剛剛在搜尋beagleboard相關資訊的時候, 看到了一行字: "The beagle is not powerful enough to power most USB devices" 小弟覺得這可能是問題的關鍵....

不知道V-link的耗電是多少? 小弟猜應該至少5W以上. 想必beagleboard沒辦法提供足夠的電力. WF兄您可以試試看先接上一個插電的USB Hub再接到V-link, 也許就水到渠成..

Paul 提到...

WF兄,

小弟修正一下剛剛貼的部份內容.
根據資料, USB 1.0/2.0可輸出的最大瓦數為2.5W. 因此V-link的耗電一定在2.5W以下. 不過, 小弟覺得還是可以試試看接有供電的USB HUB試試看..

Paul 提到...

WF兄,

抱歉小弟狂洗版... 剛剛又搜尋了一些beagleboard的周邊配置, 發現外接一個有獨立供電的USB 2.0 HUB幾乎是必需品. 小弟認為, beagleboard 和您的筆電接上V-link的最大差異點應該就在此了.. 筆電的USB供電充足, 但是beagleboard則否..

現在小弟充滿期待, 希望王子和公主從此過著幸福美滿的生活..

WF 提到...

Paul 兄,

V-Link 吃的電流大約是 170mA 之間(說明書上寫的)。小弟的 LCD 上有 Hub port,我記得是自有電源的。剛剛試著用 LCD 當作 USB Hub,串接 BeagleBoard 與 V-Link,結果仍然相同。

明天小弟再去買個有確定有電源的 USB Hub 來試試。感謝您在百忙之中還幫小弟找資料 :)

Paul 提到...

WF兄,

看了您的初步測試... 心裡馬上涼了半截..

請您在接上USB HUB之後, 先用預設
aplay -v --device=plughw:1,0 test.wav
來測試. 如果還不行, 再用dsp0來調整buffer..

WF 提到...

Paul 兄,

終於有好消息了!

小弟今天去買了外部供電的 USB Hub 再來重試,一開始用 aplay default 的設定,還是有雜音,但雜音小很多,輸出音樂也清晰許多。然後再按您的建議,調大 buffer size 與 period size,把 buffer size 調到 160,000,把 period size 調到 10,000 之後,雜音幾乎完全消失,只有偶爾出現小小的爆音,但已經在小弟可以忍受的範圍之內。

而且聲音真的很好喔!現在 USB Hub 只是用隨貨附上的 adapter,但聲音相當清晰敏銳,解析度高,勝過了 PCM2706 based 的 converter。

所以看來這個 case 有雙重的問題,一是 V-Link 吃的電超過 BeagleBoard 所能供應的。二是 BeagleBoard 速度不夠快,要調大 buffer size。

既然有了方向,接下來小弟會幫 USB Hub 做一個 5V 的線性穩壓,再進一步用 ADUM4160 作個 isolator。

不過有機會還是要再調整一下 Beagleboard 的 kernel,USB 的 latency 這麼高總不是辦法。

總而言之,一切都要感謝 Paul 兄!您真是小弟的貴人。

Paul 提到...

WF兄,

真是讓人振奮的消息. 感謝您的分享.
不過, 偶爾的小爆音, 對聽音樂來說還是很大的問題. 下一步就如您所說, 要改進kernel了. 不知道您對自行編譯kernel是否有興趣嘗試. 自行編譯的kernel可以對自己的系統做最佳化, 還可以進一步調整聲音的走向. 根據小弟的經驗, 不同的kernel參數, 對聲音的影響可以如同換系統一樣.

如果您要嘗試編譯核心, 請一定要試BFS patch. 以下有檔案連結:
http://pf.natalenko.name/
不知道beagleboard的CPU能不能支援跑10000Hz的kernel. 一般kernel的default設定是300Hz, RT kernel是1000Hz. 10000Hz是BFS patch才支援的, 可以將系統的即時性反應提昇非常多, 對音質的影響也非常的巨大.

小弟猜測, BFS patch加上1000Hz以上的kernel設定, 應該可以將buffer size設定很小還不會有爆音. 只希望OMAP撐得住..

WF 提到...

Paul 兄,您說得是。小弟應該要正視 kernel 的問題,努力面對才是。之前朋友幫我 compile 一個 kernel,但裝到 BeagleBoard 卻不太正常,看起來也不是那麼簡單的事,小弟會再試試看的。除了 BFS patch,順便把 1.0.24 的 ALSA driver 包進新的 kernel。

又,BeagleBoard 我覺得應該滿不夠力的,板上的 CPU 其實是 1GHz 的,但最後 BeagleBoard 因故將其降到 800MHz。硬操的話不知道會怎樣……

也許也可以從 USB 的 controller 那邊下手改善,不過這好像難度更高。

Paul 提到...

WF兄,

小弟記得Beagleboard有幾款daughter board有內建USB controller? 一時忘了詳細的內容. 如果有獨立的USB controller可以跟網路卡分開, 那麼也許會有幫助. 只是不知道那些daughter board的價位如何...

Paul 提到...

WF兄,

小弟突然想到一點..
USB HUB裡面其實含有控制晶片和clock. Async mode透過這層還剩下多少功力, 小弟很是懷疑. 小弟建議您直接查USB腳位定義, 再買個如下連結的轉接座來加工:
http://goods.ruten.com.tw/item/show?21104206765194
直接對v-link供電. 小弟猜測, 情況應該會更理想.

Richard 提到...

Paul兄,

這裡說加了hub聲音更好?
http://www.andaudio.com/phpbb3/viewtopic.php?f=10&t=87098

Paul 提到...

Richard兄,

那連結裡也有人說MS media player比foobar好聽. 只能說, 喜歡就好... :)

WF 提到...

Paul 兄、Richard 兄,

如果 PC 裡的 USB Bus 電源品質太差的話,加上 USB Hub,有獨立而專屬的電源,就算是從 adapter 來,應該還是會有點幫助。andaudio 上的網兄聽到雜音,也有可能和小弟的情況類似:USB Bus 的輸出不夠力。

但如果電源已經高度優化,中間經過一層 Hub,又變成了多隻香爐多隻鬼。

Paul 兄,小弟本來是打算直接用 ADUM4160 來做 usb isolator,在 device 端就用專屬的 5V 穩壓供應 V-Link。如此就不必使用 USB Hub 了。

Paul 提到...

WF兄,

對喔.. 您上文就有提到.. 小弟眼睛脫窗...
ps. 之前有查到, beagleboard的USB輸出能力是100mA, 明顯無法餵飽V-link.

Paul 提到...

WF兄,

目前小弟能查到詳細資料的async USB audio device, 都是high-speed USB (480Mbps). 不知道V-link是在什麼模式下運作. ADUM4160只能支援full-speed 和 low-speed... 這是個要解決的問題...

WF 提到...

Paul 兄,

感謝您提醒,小弟看到 full-speed 就開心了,原來還有 high-speed 這種模式啊……

幸好尚未衝動去亂買貴貴的 ADUM 套件

雞塊 提到...

WF兄您好
我最近在想,如果把PC端的音樂用網路串流的方式(類似聽網路廣播那種方式)串流PCM音樂資料並暫存到撥放裝置上,在外部CLOCK觸發後在傳輸給I2S的IC做解碼,這樣可不可以同時解決很多問題?

不好意思有點跟這串離題,但是不知道該在哪邊留言,還請您多包涵。

WF 提到...

雞塊兄,您別客氣,您在這兒寫下寶貴的 idea,小弟是很榮幸的。

就小弟的理解,您的構想分成兩部份。一是類似 UPnP 的網路串流,透過網路,非同步地把音訊轉到播放裝置上。

其次是類似過去某些 CD-Player/DAC 系統的作法,把 DAC 上的 master clock 同步到 transport 上,取代從 SPDIF 裡透過 PLL 所還原,jitter 較高的 clock?

雞塊的想法,是不是想把這兩種方案合併在一起?

我想到的是像 Linn DS 這種一體機,音訊從 UPnP 傳來,在機內直接轉成類比訊號,少了 SPIDF 這道過程。或是如 BeagleBoard,倘若可以直接拉出 I2S,送給 DAC,那也是類似的效果。

不知小弟有沒有正確理解雞塊兄的意思。

Leon 提到...

WF兄您好

因為不是挺確定Upnp訊號是否是傳送已經解碼好的訊號,所以先假設Upnp是傳送已經解碼好的音樂訊號。

播放裝置從外部接收到Upnp訊號,將訊號存入記憶體內,再經由訊號判斷出訊號使用的Clock,選擇外部精準Clock,在透過外部Clock觸發輸出至I2S解碼晶片。而這樣做是為了隔離遠方不乾淨的Jitter,由裝置端精準的Clock觸發撥放儲存起來的音樂訊號理應是影響最小的。

不過小弟不太清楚Linn一體機的工作方式,因為如果Linn一體機是吃有壓縮過的串流音訊的話,那會將撥放裝置限制為"撥放音樂裝置",而小弟是構想將播放音樂這端挪至個人電腦/伺服器去,撥放裝置單純作為非同步音效卡的功能而已。

另,前幾天於網路上爬到有老外用單晶片+DAC自製UAB音效卡,測試效果還滿棒的,設計與韌體都有公開,給您參考一下:)

作品:
http://sites.google.com/site/lofturj/sdr_widget

晶片韌體:
http://code.google.com/p/sdr-widget/

Leon 提到...

WF兄您好

因為不是挺確定Upnp訊號是否是傳送已經解碼好的訊號,所以先假設Upnp是傳送已經解碼好的音樂訊號。

播放裝置從外部接收到Upnp訊號,將訊號存入記憶體內,再經由訊號判斷出訊號使用的Clock,選擇外部精準Clock,在透過外部Clock觸發輸出至I2S解碼晶片。而這樣做是為了隔離遠方不乾淨的Jitter,由裝置端精準的Clock觸發撥放儲存起來的音樂訊號理應是影響最小的。

不過小弟不太清楚Linn一體機的工作方式,因為如果Linn一體機是吃有壓縮過的串流音訊的話,那會將撥放裝置限制為"撥放音樂裝置",而小弟是構想將播放音樂這端挪至個人電腦/伺服器去,撥放裝置單純作為非同步音效卡的功能而已。

另,前幾天於網路上爬到有老外用單晶片+DAC自製UAB音效卡,測試效果還滿棒的,設計與韌體都有公開,給您參考一下:)

作品:
http://sites.google.com/site/lofturj/sdr_widget

晶片韌體:
http://code.google.com/p/sdr-widget/

雞塊 提到...

WF兄您好

因為不是挺確定Upnp訊號是否是傳送已經解碼好的訊號,所以先假設Upnp是傳送已經解碼好的音樂訊號。

播放裝置從外部接收到Upnp訊號,將訊號存入記憶體內,再經由訊號判斷出訊號使用的Clock,選擇外部精準Clock,在透過外部Clock觸發輸出至I2S解碼晶片。而這樣做是為了隔離遠方不乾淨的Jitter,由裝置端精準的Clock觸發撥放儲存起來的音樂訊號理應是影響最小的。

不過小弟不太清楚Linn一體機的工作方式,因為如果Linn一體機是吃有壓縮過的串流音訊的話,那會將撥放裝置限制為"撥放音樂裝置",而小弟是構想將播放音樂這端挪至個人電腦/伺服器去,撥放裝置單純作為非同步音效卡的功能而已。

另,前幾天於網路上爬到有老外用單晶片+DAC自製UAB音效卡,測試效果還滿棒的,設計與韌體都有公開,給您參考一下:)

作品:
http://sites.google.com/site/lofturj/sdr_widget

晶片韌體:
http://code.google.com/p/sdr-widget/

P.S. 這個Blogspot挺奇怪的,PO文章上來都沒有更新出來,如有多PO麻煩您幫忙刪一下

WF 提到...

雞塊兄,

很不好意思,Blogger 系統偵測廣告留言的功能實在令人失望,凡是留言中帶有連結,就很容易被誤判為廣告,偏偏又無法關閉此一功能。讓您以為文章消失了,真是相當失禮,小弟與您致歉。

小弟現在會定期到後台檢察有沒有誤判的留言,再將之還原,不過一切都是人工處理,因此回覆地稍遲。

UPnP 一般的作法是,從 Server 端取得未解壓縮的音樂資料,然後在播放器之處解碼輸出。像 Linn DS 系列,就有支援 flac、mp3 等格式。

而您的購想,看起來定位是在 DAC,只是 master clock 在 DAC 端產生,再同步到 transport 端。過去有些廠機和 DIY project 採用類似的法作,不過是同步到 CD-Transport,而您是想同步到 PC 上?

這樣感覺也是可以行的。不過電腦上的 clock 似乎比較複雜,對走線與 layout 的要求更高。將 master clock 外置於 DAC 上,再送回電腦主機,不知道實作上會有哪些挑戰。

Linn DS 的作法我覺得還滿聰明的,用 UPnP 把資料與 renderer 分開,又在 renderer 一體機裡做 DAC,如此 DAC 的 master clock 與 renderer 的 clock 就是一致的,跳過了 SPDIF PLL 的編碼與還原。

雞塊 提到...

WF兄

小弟的構想並沒有將時脈訊號再同步回PC端,只是很單純的接收沒有帶時脈訊號(或者有帶)的無壓縮音樂資料,再無視資料的時脈訊號,藉由外部CLOCK將接收到的資料至DAC解碼。

WF 提到...

雞塊兄,

有些 UPnP server,可以事先在 server 端把訊號解壓好,送出無壓縮的 WAV 給 renderer。如果 renderer 是一體型的(內建 DAC),那或許就與您的理想類似的。

也就是裝一個會先解壓縮的 UPnP server,再配合 Linn DS 之類的播放器。不知道是否接近您的構想?

Leon 提到...

WF兄

小弟本來是想簡單的用Foobar2000解碼後,用外掛軟體連結podcast廣播程式就可以做到簡單的網路串流,只是事情與我想的不同,因為外掛軟體是以網路廣播為出發點,故會使用ogg編碼傳送音樂訊號,而這樣就會需要接收端做解碼的動作,這樣就有點遜了。

不過經您指點後,原來有這招,來去試看看 :)

Leon 提到...

WF兄

是的,基本的構想就如您所描述的,把所有繁雜瑣事通通丟給Server端處理,Render端只要專心撥放音樂訊號。

匿名 提到...

Music Fidelity V-Link Asynchronous USB to SPDIF converter

什麼鬼玩意,真是看到鬼,七月都沒到居然見鬼了。

什麼東西能讓我一劈頭這樣不客氣,就是這玩意。Music Fidelity V-Link Asynchronous USB to SPDIF converter 一個月前我看了這一篇跑去跟美國代購定了這東西,結果等了兩個禮拜,跟我說美國AMAZON居然取消訂單,連代購都說這情況很少見。

之後跑去掏寶網跟香港的店家定了一模一樣的這玩意,這次等了兩個禮拜,前天跟我說因為代理缺貨所以目前無法出貨。

Music Fidelity V-Link Asynchronous USB to SPDIF converter 目前無法買到,最近想買的人可以死心了

台灣吃飽太閒去改M2tech Hiface的人旁邊路過留

WF 提到...

之前曾問過台灣 Music Fidelity 的代理商方純,他們說八九月應該會引進 V-Link,屆時可以直接在國內購買。

WF 提到...

雞塊兄,

小弟之前試著在 BeagleBoard 上比較同一個 rip,用 flac 格式與 wave 格式的聲音。

小弟覺得兩者差異極微,甚至不能確切地分辨二者。再看系統負載,解 flac 的 loading 其實也非常輕。或許是我的 digital stream 播放系統未臻理想,鑑別力不夠高,但我想是否在 renderer 上解壓,應該不至於造成關鍵性的差異。

Leon 提到...

WF兄:

小弟目前的想法是以先做出一套簡單容易的系統為主,MCU打算使用ARM的低階Cortex M系列的MCU,自己寫韌體來驅動,因為MCU的時脈只有到50Mhz,所以應該是沒有甚麼餘力可以處理到flac解碼。

如果做起來效果也很好,那我想下一階段目標換個DSP的MCU或者高速的ARM就可以加入許多格式的支援。

匿名 提到...

http://img.photobucket.com/albums/v605/gameguytw/SOUND/V-link/Vlink_13.jpg

V-link配合usb隔離器使用一切正常

台灣修改M2tech Hiface的人旁邊路過留

Ludwig 提到...

老頭子,雖然是學資訊的,但是這類的事還是要請教你。

我家裡有一部電腦是工作兼資料儲存用的,近日我將CD存成APE,剛好,我的CD player壞了,我有一點想不再買CD player,想用一部EeePC或是一部支援無線的方式的DVD player,把主機硬碟裡的資料無線傳過去,再撥出來。

請問,哪一種好呢?EeePC or DVD player 該裝什麼軟體?

WF 提到...

老師,

我最近非常喜歡 Apple 的 solution。買一個不到3000塊的 Apple Airport Express,換電源、換 clock、換數位輸出,就有一台支援 Wifi Airplay 的 digital stream source 了。

軟硬體的整合很好,iTunes 可以抓 CD 音軌,CD 的音軌資料庫也很齊全,也可以搖控(例如用 iPhone 或 iPad 當搖控器,叫 Airport Express 去播放存在 Desktop 裡的音樂)。iTunes 也有 Windows 版,所以大多數的電腦都能用這套 solution。

而且重點是,Airport Express 架構很單純,吃電又小,要改機很容易,有很大的升級空間。這是 EeePc 或用 Arm等系統很難比得上的,而且是一顆才 3000,連價格都有絕對的優勢。就算一開始都不改,直接用類比輸出或 SPDIF 輸出就能聽了,超方便,出國旅行還可以當隨身的小型 Wifi AP......

目前唯一的缺點應該是不支援高解析度的檔案,不過只是用來聽 44.1KHz/16bit 的 CD,這也不成問題。

上次 Ytsejam 兄帶他修改的 Airport Express 來借我試聽,真的挺不錯。La Rosita 等廠商也把這個 solution 修改到很好的境界,可見 Apple Airport Express 本身有很好的潛力。我覺得這是目前最超值最便宜的 digital stream 方案,請老師參考。

Ludwig 提到...

那麼我需要買一部Apple的硬體嗎? 一般PC可以用嗎?

WF 提到...

不須要 Apple 的 Mac 或 iDevices,只要用一般 PC 裝 iTunes 就可以開始用了!

Ytsejam 提到...

老師:

抱歉,插個話,純屬熱心提醒一下

若您喜歡 Airport Express 的 solution,千萬要買 802.11n 的版本,別買到 802.11g 的舊版,因為舊版的是 270x 的 DAC chip,clocking 不穩定,而且會過熱,新版音質要好上許多,而且沒有過熱的問題

但不加以修改的話,聲音只能說過的去,
音場、定位都很模糊
至於修改部份,線性電源是必改的
至於 clock ,基本上不用動,
要更講究一點,就把數位輸出再加以修改

控制部份,在 PC 上選曲畢竟有點麻煩,
預算夠的話,建議買一台 iPad ,
用上面的 Remote 程式控制您 PC 上的 iTunes
然後把 Audio stream 送到 Airport Express 上 (AirPlay),
要節省預算的話,可以改用 iPod Touch

唯一比較麻煩的是,iTunes 不支援 APE 或 FLAC ,要轉成 Apple Lossless 格式

另外把音樂放在 PC 上還有一個問題 ...... 硬碟容量可能會不夠大
這也有 solution,添購一台支援 iSCSI 的 NAS,
把 iTunes 的資料庫都放到 iSCSI 的 LUN 上
以後擴充儲存空間,就只要擴充 NAS 就可以了,
而且 NAS 大部份會有硬碟的容錯機制,比較不用擔心檔案資料因硬體損壞而遺失
如此就算 PC 故障,只要換台 PC 重新安裝 iTunes ,
再把 iSCSI 的 LUN mount 回來,所有音樂檔案就可以繼續使用

至於要用有線還是無線?
我的建議是用有線的 Ethernet 來連接 Airport Express
無線雖然看起來好像把機器完全隔離了
但是,畢竟 WiFi 是 2.4/5GHz 的射頻,
難保不會引入雜訊到系統中,建議還是走 UTP Cable,至少相對傳輸穩定

Ludwig 提到...

感謝兩位,因為數位檔案不會是我的主力訊源,所以只要不太差就可以了。

我的家裡因為沒網路線,所以無線傳輸大概是必須的,是否我的PC只要有無線網卡就可以跟AirPort Express連接呢?我想應該不必上網際網路吧!

目前我先用PC裡的硬碟,再外接一個來備份,這些都是現成的,反正要把CD弄進去,要一點時間,NAS就之後再買。

我猜Airport Express應該有內建DAC,不過您還是建議我外接 DAC嗎? 如此,我需要修改AirPort Express哪一些地方呢?

我目前還沒有iPAD,就暫時麻煩一點,走到電腦前換曲子就好。

Ytsejam 提到...

老師:

雖然 Airport Express 本身就是個 WiFi Access Point,但是猜想您的 PC 本身應該就具備有網路卡,而且會接到 IP 分享器上的 Switch/Hub,所以還是要把 Airport Express 用網路線接到 Switch/Hub 上,這樣 PC 就不必再另外購買 WiFi 網卡。

若您本身已經有 IP 分享器,AE 本身可以設定為 Bridge mode,這樣家中就同時多了一個無線網路可用,但注意無線網路安全性請設定為 WPA2 Personal,並設定密碼,以免被鄰居盜用、濫用。

麻煩您提供一下目前家中的網路連接狀況,以及設備,
我直接幫您想想怎麼接比較快。

不修改的狀況下,AE 有內建 DAC ,若要外接 DAC,要用光纖,規格如下

http://goods.ruten.com.tw/item/show?21107125591420

使用內建 DAC ,外接擴大機時,直接用 3.5mm stereo phone jack 轉 RCA x 2 即可

Ludwig 提到...

這兩天忙翻了。

我的環境很簡單。我用3G網卡,用Dlink DAP1350,讓家裡的電腦都可以收到,電腦就用無線網卡連上1350。因此沒有用IP分享器。

目前,我是把一台老舊的EeePC放在音響旁邊,外接一台USB硬碟,再把訊號接到Sound Blaster的USB DAC來聽。原則上也沒什麼不好,空間也不是占很大,只是在想,把東西移到我工作的桌子旁,我比較好做事而已,但是這樣就必須用無線材可以接到音響那邊。

Ludwig 提到...

對了,SB 是Digital Music SX,老實說,剛換上他時,覺得跟快掛點的Pioneer DVD比,聲音實在不習慣,雖說聽久了,耳朵也被run-in了,所以也不是太抱怨,但是,像這樣廉價的東西,有改進空間嗎?

另外,都是wav格式,為何iTune跟Mediaplayer聽起來很不一樣呢?也許很多人覺得Apple比較照顧audio,可是我覺得Media Player比較有味道。

最近,我覺得越來越不相信自己的聽力。

Ytsejam 提到...

老師:

DLink DAP1350 其實就是一部 IP 分享器兼WiFi Access Point.

您若要用 Airport Express 的話,可以有兩種方法

1. 用AE 取代 DAP1350

2. 把 AE 設定為 WiFi client ,加入 DAP1350 既有的 WiFi 網路中

匿名 提到...

我旁邊路過的

目前在這網站與首都音響的網頁都有這消息

國外網站
http://www.ultrahighendreview.com/m2tech-hiface-two-usb-to-spdif-converter/

特點
1. Mac/Linux 都不需要driver,Windows需要另外安裝 driver。

2. Linux 相容

3. 在Windows 下終於可以與ASIO 相容了

地球第一個拆開與修改M2tech hiface TWO 全鋰電池化 使用超優TCXO、脈衝變壓器 純銀導線 純銀WBT次世代同軸接頭的人旁邊路過留(我之前改的M2tech hiface是舊版的)

WF 提到...

小弟最近沒在玩 USB Audio,近期也沒有計劃,不過還是很感謝路過兄的資訊。希望隔一兩年之後 USB Audio 這邊有更成熟的發展,到時再來接收各方先賢的成果 XD

Unknown 提到...

BeagleBoard 要做為數位音樂的核心,必須透過I2S,但還需要做好訊號隔離,才能避免干擾音的出現,目前在DIY中有三種解決方案 https://hifiduino.wordpress.com/2015/03/02/bbb-dac-developments/

Unknown 提到...

還有,若要讓BeagleBoard的聲音訊號透過I2S傳出,還必須改變定址,也就是必須使用 Botic Linux driver http://bbb.ieero.com/

BeagleBoard能成為一個很棒的音樂伺服器完全是靠miero寫出Botic Linux driver,改變了聲音訊號的輸出方式,硬體玩家才有辦法自己再處理訊號

LinkWithin

Related Posts Plugin for WordPress, Blogger...