Usb
從一台設備創建多個設備?
特別是拿一個USB設備,通常只允許一個程序打開它進行讀取,然後複製/複製/複製它,以便多個程序可以打開並讀取輸入。這些方面的東西:
# Duplicate two streams from microphone arecord -D [mic] | tee /dev/[#1] > /dev/[#2] & # Set up process 1 apply-live-effects -filter lo-pass < /dev/[#1] > output1.raw & # Set up process 2 apply-live-effects -filter hi-pass < /dev/[#2] > output2.raw &
擁有
/dev/[#1]
並/dev/[#2]
成為打開閱讀的設備。我想我也許可以使用這些/dev/loop#
設備。我試著玩這些,但沒有運氣。
沒有複製設備的一般概念。即使僅限於僅輸入設備的情況,它仍然會在不同時間返回不同的值。如果兩個程序在不同的時間訪問同一個設備(即使是幾微秒的問題),它們可能會得到完全不同的數據。
循環設備允許訪問塊設備。塊設備的行為有所不同:如果您從同一位置讀取兩次而中間沒有寫入,您將獲得相同的數據。這不適用於其他類型的設備,因此沒有用於字元設備的循環設備的概念。
您正在考慮一種返回流的特定設備——您假設程序讀取的數據僅取決於它何時開始和停止讀取。核心在那裡幫不了你,它對這種特殊情況沒有特別的支持。
您可以做的是從設備讀取一次,然後在使用者空間中複製數據。您為什麼要嘗試將數據回饋到設備中?你已經明白了,所以閱讀它。您需要將 的輸出傳遞
tee
給多個程序,因此請使用命名管道或程序替換。mkfifo low high apply-live-effects -filter lo-pass <low >output1.raw apply-live-effects -filter ho-pass <high >output2.raw arecord -D [mic] | tee low >high
或者
arecord -D [mic] | tee >(apply-live-effects -filter lo-pass >output1.raw) >(apply-live-effects -filter hi-pass >output2.raw)
請注意,如果過濾器太慢,
tee
可能無法以arecord
應有的速度讀取輸出,這可能導致arecord
無法以應有的速度從設備讀取,從而導致丟幀。這可以通過multitee解決,它盡量不阻塞。arecord -D [mic] | multitee 0-3,4 3> >(apply-live-effects -filter lo-pass >output1.raw) 4> >(apply-live-effects -filter hi-pass >output2.raw)