axfer-transfer - başvuru kılavuzu, seçenekler, komut örnekleri


İSİM

axfer-transfer - ses cihazları ve düğümler için ses veri çerçevesinin aktarıcısı.

ÖZET

axfer transfer direction [ common-options ] [ backend-options ] [ filepath ]

axfer transfer direction [ common-options ] [ backend-options ] -I | --separate-channels filepath ...

direction = capture | playback

common-options = ( read OPTIONS section )

backend-options = ( read OPTIONS section )

filepaths = ( read OPTIONS section )

TANIM

axfer'in transfer alt komutu, desteklenen arka uçlarda bulunan cihazlar için ses veri çerçevelerinin iletimini gerçekleştirir. Bu program esasen Linux ses alt sistemi (ALSA) tarafından desteklenen ses cihazlarını işlemek için alsa-lib API'lerini (libasound arka ucu) kullanmak üzere tasarlanmıştır.

SEÇENEKLER

Yön

capture

Yakalama iletimi için çalışır.

playback

Oynatma aktarımı için çalışır.

Dosya yolu

Dosya yolu, kök dizinden tam yol değilse, çalışma zamanının geçerli çalışma dizinine göre bir yol olarak işlenir.

Dosya yolu belirtilmezse veya '-' olarak verilmezse standart girdi veya çıktı kullanılır.

Kayıttan yürütme iletimi için, verilen filepath kapsayıcı biçimi otomatik olarak algılanır ve örnek biçim, kanallar, oran, süre parametreleri için meta veriler kullanılır. Hiçbir şey algılanmazsa, verilen dosya yolunun içeriği ham veri olarak işlenir. Bu durumda parametreler seçenek olarak belirtilmelidir.

-I | ile birden fazla dosya yoluna izin verilir | --ayrı kanallar seçeneği. Bu durumda, standart giriş ve çıkış mevcut değildir. Aşağıda listelenen yollar dışında aynı dosya yoluna izin verilmez: - /dev/null - /dev/zero - /dev/full - /dev/random - /dev/urandom

Ortak seçenekler

-h, --help

Yardım mesajlarını yazdırın ve çalışma süresini tamamlayın.

-q, --quiet

Sessiz mod. Mesajları gizle (ses değil :))

-v, --verbose

Ayrıntılı mod. Çalışma zamanı, komut satırında verilen bu seçeneğin sayısına göre ek bilgileri döker.

-d, --duration=#

# saniye sonra araya girin. Sıfır değeri sonsuz anlamına gelir. Varsayılan değer sıfırdır, dolayısıyla bu seçenek atlanırsa, iletim işlemi öldürülene kadar devam eder. Ya -d ya da -s seçeneği özel olarak mevcuttur.

-s, --samples=#

# sayıda veri çerçevesinin iletiminden sonra kesinti. Sıfır değeri sonsuz anlamına gelir. Varsayılan değer sıfırdır, dolayısıyla bu seçenek atlanırsa, iletim işlemi öldürülene kadar devam eder. Ya -d ya da -s seçeneği özel olarak mevcuttur.

-f, --format=FORMAT

Ses örneğinin biçimini belirtin. Bu, yakalama aktarımı veya ham ses verileri içeren dosyalarla oynatma aktarımı için gereklidir.

Kullanılabilir örnek format aşağıda listelenmiştir: - [S8|U8|S16|U16|S32|U32][_LE|_BE] - [S24|U24][_LE|_BE] - FLOAT[_LE|_BE] - FLOAT64[_LE|_BE ] - IEC958_SUBFRAME[_LE|_BE] - MU_LAW - A_LAW - [S20|U20][_LE|_BE] - [S24|U24][_3LE|_3BE] - [S20|U20][_3LE|_3BE] - [S18|U18 ][_3LE|_3BE] - DSD_U8 - DSD_[U16|U32][_LE|_BE]

Endian-ness atlanırsa, host endian-ness kullanılır.

Bazı özel formatlar mevcuttur: - cd (16 bit küçük endian, 44100, stereo) [= -f S16_LE -c 2 -r 44100] - cdr (16 bit büyük endian, 44100, stereo) [= -f S16_BE -c 2 -f 44100] - dat (16 bit küçük endian, 48000, stereo) [= -f S16_LE -c 2 -r 48000]

Atlanırsa, varsayılan olarak U8 kullanılır. Mevcut mevcut formatlar, her iletim arka ucu tarafından kısıtlanır.

Kullanılamayan örnek format aşağıda listelenmiştir. Bu biçim, bayt birimine hizalanmamış veri çerçevesi boyutuna sahiptir.

- IMA_ADPCM - MPEG - GSM - ÖZEL - G723_24 - G723_24_1B - G723_40 - G723_40_1B

-c, --channels=#

Çerçeve başına ses verisi örneklerinin sayısını belirtin. Bu, yakalama aktarımı veya ham ses verileri içeren dosyalarla oynatma aktarımı için gereklidir. Değer, 1 ile 256 arasında olmalıdır. Atlanırsa, varsayılan olarak 1 kullanılır.

-r, --rate=#

Saniyedeki ses veri çerçevesi sayısını belirtin. Bu, yakalama aktarımı veya ham ses verileri içeren dosyalarla oynatma aktarımı için gereklidir. Değer 1000'den küçük ise kHz birimi ile yorumlanır. Değer, 2000 ile 192000 arasında olmalıdır. Atlanırsa, varsayılan olarak 8000 kullanılır.

-t, --file-type=TYPE

Dosya türünü belirtin. Bu, yakalama iletimi için gereklidir. Kullanılabilir türler aşağıda listelenmiştir: - wav: Microsoft/IBM RIFF/Wave biçimi - au, sparc: Sparc AU biçimi - voc: Creative Tech. ses formatı - ham: ham veri

Hiçbir şey belirtilmediğinde, yakalama iletimi için türe filepath sonekine göre karar verilir ve geri dönüş için raw türü kullanılır.

-I, --separate-channels

Birkaç dosya işlenecekse bu seçeneği belirtin. Yakalama iletimi için, bir dosya yolu filepath olarak verilirse, '-[.suffix]' formülünde bir filepath listesi oluşturulur. Kapsayıcının ham biçimi kullanıldığında son ek atlanır.

--dump-hw-params

Donanım parametrelerini boşaltın ve arka uç destekliyorsa çalışma süresini tamamlayın.

--xfer-backend=BACKEND

Aşağıdaki listeden iletimin arka ucunu seçin. Varsayılan değer libasound'dur.
- libasound - libffado (derlenmişse isteğe bağlıdır)

libasound için arka uç seçenekleri

-D, --device=NODE

Bu seçenek, libasound yapılandırma alanında PCM düğümünü seçmek için kullanılır. Kullanılabilir düğümler, list alt komutunun pcm işlemine göre listelenir.

-N, --nonblock

Bu seçenekle PCM alt akışı, engellemesiz modda açılır. Ses veri çerçevesi PCM alt akışının arabelleğinde mevcut olmadığında, G/Ç işlemi bloke etme işlemi olmadan hemen geri döner. Bu seçenek, yoğun CPU zamanı tüketimini önlemek için dolaylı olarak --waiter-type seçeneğini kullanır.

-M, --mmap

Bu seçenekle, seçilen düğüm bu işlemi destekliyorsa, ses veri çerçevesi doğrudan PCM alt akışının arabelleğinde işlenir. Seçenek olmadan, PCM alt akışının arabelleği için ses veri çerçevesini kopyalamak üzere geçici arabellekler kullanılır. Bu seçenek, yoğun CPU zamanı tüketimini önlemek için dolaylı olarak --waiter-type seçeneğini kullanır.

-F, --period-size=#

Bu seçenek, PCM alt akışının period_size donanım parametresine verilen değeri yapılandırır. Parametre, PCM alt akışının arabelleğindeki dönem başına ses veri çerçevesi sayısını gösterir. Gerçek sayıya, seçilen PCM düğümünden zincirlenmiş PCM eklentisinin her bir uygulaması ile çekirdek içi sürücü veya PCM G/Ç eklentileri arasındaki etkileşimin bir sonucu olarak karar verilir.

İdeal olarak, değerle aynı miktarda ses veri çerçevesi bir G/Ç işleminde işlenmelidir. Aslında, PCM eklentilerinin, çekirdek içi sürücünün, PCM G/Ç eklentilerinin ve zamanlama modelinin uygulanmasına bağlı olarak değildir. 'irq' programlama modelindeki 'hw' PCM eklentisi için değer, donanım kesintisi aralıklarına karar vermek için kullanılır, bu nedenle, bir G/Ç işlemi için değerle aynı miktarda ses veri çerçevesinin mevcut olması beklenir.

--period-time=#

Bu seçenek, PCM alt akışının period_time donanım parametresine verilen değeri yapılandırır. Bu seçenek --period-size seçeneğine benzer, ancak birimi mikro saniyedir.

-B, --buffer-size=#

Bu seçenek, PCM alt akışının buffer_size donanım parametresine verilen değeri yapılandırır. Parametre, PCM alt akışının arabelleğindeki ses veri çerçevesi sayısını gösterir. Gerçek sayıya, seçilen PCM düğümünden zincirlenmiş PCM eklentisinin her bir uygulaması ile çekirdek içi sürücü veya PCM G/Ç eklentileri arasındaki etkileşimin bir sonucu olarak karar verilir.

İdeal olarak, bu, periyot başına ses veri çerçevesi sayısının katlarıdır, dolayısıyla periyodun boyutudur. Aslında, PCM eklentilerinin, çekirdek içi sürücünün ve PCM G/Ç eklentilerinin uygulanmasına bağlı olarak değildir.

--buffer-time=#

Bu seçenek, PCM alt akışının buffer_time donanım parametresine verilen değeri yapılandırır. Bu seçenek, --buffer-size seçeneğine benzer, ancak birimi mikro saniyedir.

--waiter-type=TYPE

Bu seçenek, olay bildirimi için garson tipini belirtir. Şu anda dört tip mevcuttur; default , select , anket ve epoll . varsayılan türüyle 'snd_pcm_wait()' kullanılır. select türü ile 'select(2)' sistem çağrısı kullanılır. anket türü ile 'anket(2)' sistem çağrısı kullanılır. epoll türü ile Linux'a özgü 'epoll(7)' sistem çağrısı kullanılır.

Bu seçenek, --nonblock veya --mmap seçeneklerinden birine veya --sched-model< timer değerine karşılık gelmelidir. seçeneği. Ne bu seçenek ne de --test-nowait aynı anda mevcut değildir.

--sched-model=MODEL

Bu seçenek, bu programın süreci için çizelgeleme modelini seçer. irq veya timer'den biri kullanılabilir. Ayrıntılı olarak lütfen 'PLANLAMA MODELİ' bölümünü okuyunuz.

Hiçbir şey belirtilmediğinde irq modeli kullanılır.

-A, --avail-min=#

Bu seçenek, PCM alt akışının avail-min yazılım parametresine verilen değeri yapılandırır. Engelleme modunda, değer, G/Ç işlemi tarafından bloke edilen işlemi uyandırmak için PCM alt akışının arabelleğindeki mevcut ses veri çerçevelerinin sayısının eşiği olarak kullanılır. Engellemesiz modda, mevcut ses veri çerçevesi sayısı eşiğe ulaşana kadar herhangi bir G/Ç işlemi -EAGAIN döndürür.

Bu seçeneğin, --sched-model seçeneğinin --mmap veya timer değerinin kullanılmadığı durumlarda etkisi vardır.

-R, --start-delay=#

Bu seçenek, PCM alt akışının start_threshold yazılım parametresine verilen değeri yapılandırır. Değer, PCM alt akışını otomatik olarak başlatmak için eşik olarak kullanılır. Şu anda, bu seçeneğin, --sched-model seçeneğinin --mmap veya timer değerinin kullanılmadığı durumlarda bir etkisi vardır.

Oynatma iletimi için, bu programın yazdığı PCM alt akışının arabelleğinde birikmiş ses veri çerçevesi sayısı eşiğe ulaştığında, PCM alt akışı, PCM'ye açık bir snd_pcm_start() çağrısı olmadan otomatik olarak başlar alt akış.

Yakalama aktarımı için bu seçenek işe yaramaz. Birikmiş ses veri çerçevesi sayısı, PCM alt akışına açık bir snd_pcm_start() çağrısı olmadan artırılmaz.

Bu seçeneğin, --sched-model seçeneğinin --mmap veya timer değerinin kullanılmadığı durumlarda etkisi vardır.

-T, --stop-delay=#

Bu seçenek, PCM alt akışının stop_threshold yazılım parametresine verilen değeri yapılandırır. Değer, PCM alt akışını otomatik olarak durdurmak için eşik olarak kullanılır. Şu anda, bu seçeneğin, --sched-model seçeneğinin --mmap veya timer değerinin kullanılmadığı durumlarda bir etkisi vardır.

Yakalama iletimi için, bir sürücünün veya alsa-lib PCM eklentilerinin yazdığı PCM alt akışının tamponunda biriken ses veri çerçevesi sayısı eşiğe ulaştığında, PCM alt akışı, açık bir snd_pcm_stop() çağrısı olmadan otomatik olarak durur. PCM alt akışına. Bu programın ses veri çerçevelerini bir süre okumadan bırakması durumudur.

Oynatma iletimi için, bir sürücünün veya alsa-lib PCM eklentilerinin okuduğu PCM alt akışının arabelleğindeki mevcut ses veri çerçevesi sayısı eşiğe ulaştığında, PCM alt akışı, açık bir snd_pcm_stop() çağrısı olmadan otomatik olarak durur PCM alt akışına. Bu programın ses veri çerçevelerini bir süre yazmadan bırakması durumudur.

Bu seçeneğin, --sched-model seçeneğinin --mmap veya timer değerinin kullanılmadığı durumlarda etkisi vardır.

--disable-resample

Bu seçenek, alsa-lib'deki 'plug' eklentisi için, ses veri çerçevesi için örnekleme hızının dönüştürülmesini bastırma etkisine sahiptir.

--disable-channels

Bu seçenek, alsa-lib'deki 'plug' eklentisinin, ses veri çerçevesi için kanalların dönüştürülmesini engelleme etkisine sahiptir.

--disable-format

Bu seçenek, alsa-lib'deki 'plug' eklentisinin, ses veri çerçevesi için örnek formatın dönüştürülmesini engelleme etkisine sahiptir.

--disable-softvol

Bu seçenek, alsa-lib'deki 'softvol' eklentisinin, ek kontrol öğesi aracılığıyla ses veri çerçevesi için örneklerin dönüştürülmesini engelleme etkisine sahiptir.

--fatal-errors

Bu seçenek, PCM alt akışının çalıştırıldığı XRUN durumundan kurtarma işlemini bastırır, ardından bu programın işlemi her zamanki gibi tamamlanır.

--test-nowait

Bu seçenek, G/Ç olay bildirimi için herhangi bir garsonu devre dışı bırakır. Herhangi bir ses verisi çerçevesi mevcut olana kadar G/Ç işlemleri yinelenir. Seçenek, CPU zamanı tüketiminde ağır yük getirir.

libffado için arka uç seçenekleri

Bu arka uç, configure betiği libffado paylaşılan nesnesinde ffado_streaming_init() sembolünü algıladığında otomatik olarak kullanılabilir.

-p, --port=#

Bu seçenek, iletişim için hangi 1394 OHCI denetleyicisinin kullanılacağına karar vermek için verilen değeri kullanır. Linux sisteminde iki adet 1394 OHCI denetleyicisi olduğunda, 0 veya 1 kullanılabilir. Ne bu seçenek ne de -g aynı anda mevcut değildir. Hiçbir şey belirtilmezse libffado, Linux sisteminde bulunan 1394 OHCI denetleyicisinin tamamı tarafından yönetilen IEEE 1394 veri yolu üzerindeki birimlerle iletişim kurmayı gerçekleştirir.

-n, --node=#

Bu seçenek, iletişim için hangi birimin kullanılacağına karar vermek için verilen değeri kullanır. Bu seçenek, belirtilen birim ile iletişim kurmak için hangi 1394 OHCI denetleyicisinin kullanıldığını belirtmek için -p seçeneğini gerektirir.

-g, --guid=HEXADECIMAL

Bu seçenek, iletişim kurulacak hedef birime karar vermek için verilen değeri kullanır. Değerin önüne '0x' eklenmeli ve onaltılık değişmez harflerden (0-9, a-f, A-F) oluşmalıdır. Ne bu seçenek ne de -p aynı anda mevcut değildir. Hiçbir şey belirtilmezse libffado, Linux sisteminde bulunan 1394 OHCI denetleyicisinin tamamı tarafından yönetilen IEEE 1394 veri yolu üzerindeki birimlerle iletişim kurmayı gerçekleştirir.

--frames-per-period=#

Bu seçenek, bir okuma/yazma işleminde ses veri çerçevesi sayısına karar vermek için verilen değeri kullanır. Kullanılabilir ses veri çerçevesi sayısı verilen değeri geçene kadar işlem engellenir. Varsayılan olarak 512 ses veri çerçevesi kullanılır.

--periods-per-buffer=#

Bu seçenek, bu program ile libffado arasındaki ara ara belleğin boyutuna karar vermek için verilen değeri kullanır. Varsayılan olarak, arabellek başına 2 dönem kullanılır.

--slave

Bu seçenek, bu programın bağımlı modda çalışmasına izin verir. Bu modda libffado, Linux sisteminin çalıştığı 1394 OHCI denetleyicisinin yapılandırma ROM'una birim dizini ekler. Birim dizini, aynı veri yolundaki diğer düğüm tarafından bulunabilir. Düğüm üzerinde çalışan Linux sistemi, ses veri çerçeveli eşzamanlı paketi birime aktarabilir. Bu program paketi alabilir ve ses veri çerçevesinin çoğullamasını çözebilir.

--snoop

Bu seçenek, bu programın snoop modunda çalışmasına izin verir. Bu modda libffado, cihazın eşzamanlı paketi aktardığı eşzamanlı kanalları dinler. Eşzamanlı iletişim aynı veri yolu üzerindeki herhangi bir birim tarafından başlatıldığında, paketler bu program tarafından işlenebilir.

--sched-priority=#

Bu seçenek, zamanlama ilkesini yapılandırmak ve eşzamanlı iletişimle ilgili iş parçacıkları için önceliği olarak verilen değeri yapılandırmak üzere bir ffado_streaming_init() çağrısında pthread_setschedparam()'yi yürütür. Verilen değer, işlemin RLIMIT_RTPRIO parametresi içinde olmalıdır. Ayrıntılar için lütfen getrlimit(2)'i okuyun.

POSIX SİNYALLERİ

İletim sırasında SIGINT ve SIGTERM, işlenen dosyaları ve PCM alt akışını kapatarak çalışma süresini tamamlar.

SIGTSTP, PCM alt akışını askıya alacak ve SIGCONT devam ettirecek. Hiçbir XRUN beklenmiyor. Libffado arka ucuyla askıya alma/devam ettirme desteklenmez ve çalışma zamanı hemen iptal edilir.

Diğer sinyaller varsayılan davranışları gerçekleştirir.

ÖRNEKLER

$ axfer transfer playback -d 1 something

Yukarıdaki, ses veri çerçevesini 1 saniye boyunca oynatmak için 'bir şey' dosyasına aktaracaktır. Örnek biçim, Microsoft/IBM RIFF/Wave, Sparc AU, Creative Tech'ten biriyle uyumlu olduğu sürece 'bir şeyi' ayrıştırmanın bir sonucu olarak otomatik olarak algılanır. ses biçimleri. Hiçbir şey algılanmadıysa, -r , -c ve -f verilmeli veya -f verilmelidir özel format ile.

$ axfer transfer playback -r 22050 -c 1 -f S16_LE -t raw something

Yukarıdaki, ses veri çerçevesini 'bir şey' dosyasında, örnek format bilgisi içermeyen, 22050 Hz'lik örnek format olarak, mono, oynatma için imzalı 16 bit küçük endian PCM olarak aktaracaktır. İletim, klavyeden SIGINT veya kill(1) tarafından SIGTERM yakalanana kadar devam eder.

$ axfer transfer capture -d 10 -f cd something.wav

Yukarıdaki, ses veri çerçevesini 'something.wav' dosyasına 44.1 kHz, 2 kanal, imzalı 16 bit küçük endian PCM, 10 saniye boyunca örnek format olarak aktaracaktır. Dosya biçimi, verilen filepath sonekine göre Microsoft/IBM RIFF/Wave şeklindedir.

$ axfer transfer capture -s 1024 -r 48000 -c 2 -f S32_BE -I -t au channels

Yukarıdaki, ses veri çerçevesini 48.0 kHz, 2 kanal, imzalı 32 bit big endian PCM örnek formatı olarak 1.024 veri çerçevesi için 'channels-1.au' ve 'channels-2.au' adlı dosyalara aktaracaktır.

PLANLAMA MODELİ

ALSA PCM çekirdeği tasarımında, PCM alt akışının çalışma zamanı iki modu destekler; dönem-uyanma ve dönemsiz-uyanma. Bu iki mod, farklı programlama modelleri içindir.

IRQ tabanlı zamanlama modeli

Varsayılan olarak, uyanma süresi modu kullanılır. Bu modda, çekirdek içi sürücüler, ses veri çerçevesinin iletimi için periyodik bildirimler oluşturmak üzere donanımı çalıştırmalıdır. Bildirim aralığı, gerçek zamana karşı bir arabellek dönemiyle aynı miktarda ses verisi çerçevesine eşdeğerdir.

Bildirime atanan bir işleyicide, ALSA PCM çekirdeğinin bir yardımcı işlevi, donanım iletiminin başına bir konumu güncellemek ve ardından aşırı çalışma/yedek çalıştırmayı (XRUN) yargılamak ve engellenen süreçleri uyandırmak için uygulama operasyon başkanının konumuyla karşılaştırmak için çağrılır.

Bu amaçla, Inter-IC sesi gibi seri ses yolu için denetleyicinin donanımsal IRQ'su tipik olarak kullanılır. Bu durumda, kontrolör seri ses veri yolundaki iletime göre IRQ üretir. IRQ'ya atanan işleyicide, ayrılmış ana bilgisayar belleği ile aygıt belleği arasında doğrudan ortam erişimi (DMA) iletimi talep edilir.

Hedef donanım bu tür bir mekanizmayı desteklemiyorsa, periyodik bildirim herhangi bir zamanlayıcı tarafından taklit edilmelidir; Örneğin. hrtimer, çekirdek zamanlayıcısı. Alsa-lib'de PCM eklenti SDK'sı tarafından oluşturulan harici PCM eklentileri de yukarıdaki davranışı taklit etmelidir.

Bu modda, PCM uygulamaları tipik G/Ç işlemleri yöntemine göre programlanır. PCM alt akışının arabelleğindeki ses veri çerçevesini okumak/yazmak için engelleme sistem çağrılarını yürütürler veya herhangi bir ses veri çerçevesi kullanılabilir olana kadar beklemek için sistem çağrılarını bloke ederler. axfer'de buna IRQ tabanlı zamanlama modeli denir ve varsayılan bir davranıştır. Kullanıcılar, irq değeriyle --sched-model seçeneğini kullanarak bu modu açıkça yapılandırabilir.

Zamanlayıcı tabanlı programlama modeli

no-no-wakeup modu, PCM alt akışının isteğe bağlı bir çalışma zamanı modudur. Mod, donanımın belirli bir özelliğini ve çekirdek içi sürücü ve PCM uygulamalarının desteğini varsayar. Bu modda, çekirdek içi sürücüler, ses veri çerçevesinin iletimi için periyodik bildirimler oluşturmak üzere donanımı çalıştırmaz. Donanım, sürücülerin periyodik olarak çalıştırılması olmadan ses veri çerçevesinin iletimine otomatik olarak devam etmelidir; Örneğin. otomatik tetiklenen DMA iletimine göre, kayıtlı tanımlayıcılardan oluşan bir zincir.

Bu modda, engellenen işlemleri hiçbir şey uyandırmaz, bu nedenle PCM uygulamaları herhangi bir engelleme işlemi olmadan programlanmalıdır. Bu nedenle, PCM uygulamaları, mevcut uygulamaların düzensizliğini önlemek için donanım parametresini PCM alt akışının çalışma zamanına açıkça yapılandırdığında bu mod etkinleştirilir. Ek olarak, hiçbir şey ses veri çerçevesinin iletimi için zamanlamayı korumaz, bu nedenle PCM uygulamaları, zaman aşımı için PCM alt akışının arabelleğinde ses veri çerçevesini kuyruğa almak için herhangi bir zamanlayıcıyı gönüllü olarak işlemelidir. Ayrıca, sürücü yerine PCM uygulaması, donanım iletiminin başına bir konumu güncellemek ve XRUN'u kontrol etmek için ALSA PCM çekirdeğinin bir yardımcı işlevini çağırmalıdır.

axfer'de buna zamanlayıcı tabanlı zamanlama modeli denir ve donanım/sürücü no-period-wakeup çalışma süresine yardımcı olduğu sürece kullanılabilir. Kullanıcılar, timer değeri ile --sched-model seçeneğini kullanarak bu modu açıkça ayarlamalıdır.

Zamanlama modelinde, PCM uygulamalarının PCM arabelleğindeki kullanılabilir alanı zaman aşımına göre, tipik olarak CPU sağlayarak ve yeniden programlamayı bekleyerek ilgilenmesi gerekir. Verim için, işlenecek tercih edilen PCM çerçevesi miktarı için zaman aşımı hesaplanır. Bu, ses sunucuları gibi bir tür uygulama için uygundur. sunucunun bir G/Ç iş parçacığı zaman aşımını beklediğinde, diğer iş parçacıkları sunucu istemcileri için ses verisi çerçevelerini işleyebilir. Ayrıca, geri sarma/iletme kullanımıyla uygulamalar, büyük boyutlu PCM arabellekleri kullansalar bile iletim konumu ile işleme konumu arasında düşük gecikme süresi elde edebilir.

Avantajlar ve sorunlar

İdeal olarak, zamanlayıcı tabanlı çizelgeleme modelinin, IRQ tabanlı çizelgeleme modeline göre bazı avantajları vardır. İlk başta, PCM alt akışı için herhangi bir kesme bağlamı çalışmaz. PCM alt akışı yalnızca herhangi bir işlem bağlamında işlenir. IRQ ve süreç bağlamları arasındaki yarış koşullarına dikkat etmeye gerek yok. Bu, bazı sürücü ve uygulama geliştiricileri için bazı endişeleri azaltır. İkincil olarak, kesme bağlamında işleyiciler için CPU zamanı kullanılmaz. CPU zamanı diğer görevler için ayrılabilir. Bu, Zaman Paylaşım Sisteminin bir noktasında iyidir. Üçüncüsü, donanım kesintiler oluşturacak şekilde yapılandırılmamıştır. Bu, muhtemelen genel güç tüketimini azaltma noktasında iyidir.

Her iki programlama modelinde de donanım, sürücülerin, ses seri veri yolu için ayrılmış bellek ile aygıt belleği arasında aktarılan ses veri çerçevesi sayısını okumasına izin vermelidir. Bununla birlikte, zamanlayıcı tabanlı çizelgeleme modelinde, değerin ince ayrıntı düzeyi ve doğruluğu önemlidir. Aslında donanım, küçük bir grup ses verisi çerçevesi veya bayt için ayrılmış bellek ile aygıt belleği arasında iletim gerçekleştirir. PCM uygulamalarının görünümünde, her G/Ç işlemi için doğru zaman aşımına karar vermek için akım iletimindeki ayrıntı düzeyi gerekir. Linux çekirdeği v4.21'den itibaren, çekirdek/kullanıcı alanı arasındaki ALSA PCM arabiriminin bunu raporlama özelliği yoktur.

APLAY'E UYUMLULUK

axfer'in transfer alt komutu, aplay(1) ile uyumluluğu korumak için tasarlanmıştır. Ancak aşağıdaki seçeneklerden bazıları teknik nedenlerden dolayı uyumlu değildir.

-I, --separate-channels

Bu seçenek, yalnızca her kanala karşılık gelen ses veri çerçevelerini depolayacak dosyalar için desteklenir. aplay(1) uygulamasında, bu seçeneğin, bir hedef cihaz destekliyorsa, serpiştirilmemiş düzene hizalanmış PCM arabelleğini kullanmak için ek bir etkisi vardır. 2018 itibariyle, aralıksız sıradaki PCM arabelleği, ses cihazları tarafından neredeyse hiç kullanılmamaktadır.

-A, --avail-min=#

Bu seçenek, bir ses veri çerçevesi biriminde engellenen işlemi uyandırmak için eşiği belirtir. aplay(1) uygulamasına karşı, bu seçeneğin --mmap seçeneğinin yanı sıra --sched-model seçeneğinin timer etkisi yoktur.

-R, --start-delay=#

Bu seçenek, bir ses veri çerçevesi biriminde hazırlanmış PCM alt akışını başlatma eşiğini belirtir. aplay(1) uygulamasına karşı, bu seçeneğin --mmap seçeneğinin yanı sıra --sched-model seçeneğinin timer etkisi yoktur.

-T, --stop-delay=#

Bu seçenek, bir ses veri çerçevesi biriminde PCM alt akışını çalıştırmayı durdurma eşiğini belirtir. aplay(1) uygulamasına karşı, bu seçeneğin --mmap seçeneğinin yanı sıra --sched-model seçeneğinin timer etkisi yoktur.

--max-file-time=#

Bu seçenek desteklenmiyor. aplay(1) uygulamasında, seçeneğin, dosyaları ikinci birime göre verilen değerle aynı sayıda veri çerçevesine veya kullanılan dosya formatı tarafından desteklenen maksimum veri çerçevesi sayısına kadar kaydetme etkisi vardır. Limite ulaşıldığında kullanılan dosya kapatılır, ardından yeni dosya açılır ve ses veri çerçeveleri yazılır. Ancak bu seçenek, dosyaların fazladan işlenmesini gerektirir ve axfer'in ana döngüsünün karmaşıklığını artırır.

--use-strftime=FORMAT

Bu seçenek desteklenmiyor. aplay(1) uygulamasında, seçenek, strftime(3) tarafından desteklenen formatların yanı sıra bazı ekstra formatların da mevcut olduğu verilen formata göre dosya yolları oluşturmak için yakalama iletimi için bir etkiye sahiptir. Ancak bu seçenek, dosya yolları için fazladan dize işleme gerektirir ve C dilinde yazılmışsa can sıkıcıdır.

--process-id-file=FILEPATH

Bu seçenek desteklenmiyor. aplay(1) uygulamasında, seçeneğin verilen değer için bir dosya oluşturma ve ona işlem kimliğini yazma etkisi vardır. Bu dosya, kullanıcıların işlem kimliğini almasına ve herhangi bir POSIX sinyalini oynatma işlemine göndermesine olanak tanır. Bununla birlikte, bu fikir, aynı dosyayla birden fazla oynatma işlemi çalıştığında dosya kilitleme konusunda bazı sıkıntılara sahiptir.

-V, --vumeter=TYPE

Bu seçenek şu anda desteklenmiyor. aplay(1) uygulamasında, bu seçeneğin stdout'u bazı terminal kontrol karakterleriyle işgal etme ve mono ve stereo kanallar için vumeter'ı görüntüleme etkisi vardır. Ancak, bazı sorunlar yatıyor; bu özellik sadece PCM formatındaki ses veri çerçeveleri içindir, bu özellik iptalden sonra uçbirim bozukluğu getirir, boru hattı için stdout mevcut değildir.

-i, --interactive

Bu seçenek şu anda desteklenmiyor. aplay(1) uygulamasında, bu seçeneğin, tuş girişi için stdin'i işgal etme ve basılan enter tuşuna göre PCM alt akışını askıya alma/devam ettirme etkisi vardır. Ancak bu özellik, ana döngüde ek bir giriş işleme gerektirir ve PCM alt akışını sürdürmek için rahatsız edici bir çalışma bırakır.

-m, --chmap=CH1,CH2,...

ALSA PCM çekirdeği ve kontrol çekirdeği bu özelliği desteklemez, bu nedenle kullanıcı alanında yeniden eşleme yapılmalıdır. Bu, özellikle mmap işlemi için ses veri çerçevelerini hizalamak için ek yük getirir. Ayrıca, alsa-lib v1.1.8'den itibaren, bazı eklentiler bu özelliği beklendiği gibi desteklememektedir, bu nedenle bu seçenek şeffaf bir işlem eksikliğidir. Şu anda bu seçenek, kullanıcıların kafasını karıştırmamak için henüz desteklenmiyor.

SIGTSTP, SIGCONT

Bu, PCM alt akışını askıya alma/devam ettirme işlemini gerçekleştirir. aplay(1) uygulamasında, bu işlemler XRUN durumunu alt akışa getirir ve askıya alma/devam ettirme yukarıdaki etkileşimli modda yapılır. Bazı geliştiriciler, sinyali XRUN'dan kurtarma testi için kullanır. Şu anda, test için hiçbir alternatif desteklenmemektedir.

SIGUSR1

Bu desteklenmiyor. aplay(1) uygulamasında, bu sinyal, ses veri çerçevesini depolamak için mevcut bir dosyayı kapatmak ve işlemeye devam etmek üzere yeni bir dosya açmak için bir işleyiciye atanır. Ancak, --max-file-time seçeneğinin yanı sıra, bu seçenek axfer'in ana döngüsünün karmaşıklığını artırmalıdır.

TASARIM

modüler yapı

Bu program üç modülden oluşmaktadır; xfer , mapper ve container . Her modülün, gerçek uygulamayı etkinleştirmek için bir soyutlama katmanı vardır.

           --------     ----------     -------------
device <-> | xfer | <-> | mapper | <-> | container | <-> file
           --------     ----------     -------------
            libasound    single         wav
            libffado     multiple       au
                                        voc
                                        raw

xfer modülü, cihazlara ve düğümlere gerçek iletimi gerçekleştirir. Modülün birkaç iletim arka ucu olabilir. Varsayılan arka uç olarak, alsa-lib API'leri aracılığıyla iletimi gerçekleştirmek için libasound arka ucu kullanılır. Modül, her arka ucun kendi komut satırı seçeneklerini ayrıştırmasına izin verir.

container modülü, dosya/multimedya kapsayıcısı veya ham veri akışı için tanımlayıcı yoluyla ses verisi çerçevesini okuma/yazma gerçekleştirir. Modül, multimedya kapsayıcısı türünü otomatik olarak algılar ve veri başlığının meta verilerindeki parametreleri ayrıştırır. Şu anda üç tür multimedya kapsayıcısı desteklenmektedir; Microsoft/IBM RIFF/Wave ( wav ), Sparc AU ( au ) ve Yaratıcı Teknoloji sesi ( voc ). Ek olarak, ham ses verileri ( raw ) için özel bir kapsayıcı hazırlanır.

mapper modülü, ses veri çerçevesinin iletimi için arabellek düzenini ve hizalamayı yönetir. Modülün iki uygulaması vardır; tek ve çoklu . single arka ucu, arabelleği oluşturmak için bir kapsayıcı kullanır. çoklu arka uç, onu oluşturmak için birkaç kapsayıcı kullanır.

Ses veri çerçevesini kopyalamaya özen gösterin

xfer modülü ile mapper modülü arasında, ses veri çerçevelerini içeren ara belleğe bir işaretçi geçirilir. Bu arabellek, serpiştirilmiş ve serpiştirilmemiş düzen için iki şekle sahiptir. İlki için işaretçi bir arabelleğe işaret eder. İkincisi için işaretçi, her öğenin bir arabelleğe işaret ettiği bir diziye işaret eder. mapper modülü ile container modülü arasında, ham tip de dahil olmak üzere desteklenen medya kapları ses verisi çerçevelerini aralıklı sırayla sakladığından, bir arabelleğe bir işaretçi iletilir.

Ses veri çerçevesini modüller arasında geçirirken axfer, bir arabellek arasında başka bir arabelleğe kopyalamayı mümkün olduğunca önlemek için programlanmıştır. Örneğin, aşağıdaki bazı senaryolarda modüller arasında kopyalama gerçekleşmez.

- xfer(mmap/interleaved), mapper(tek), container(herhangi biri) - xfer(mmap/interleaved olmayan), mapper(çoklu), container(herhangi biri)

Ünite testi

mapper ve container modüllerinin her biri için birim testi mevcuttur. Testleri çalıştırmak için aşağıdaki komutu yürütün:

$ make test

Her test, dosyaya yazmayı ve dosyaya okumayı birçok kez yineler ve tamamlanması uzun zaman alır. Lütfen herhangi bir CI ortamında çalışıyorsa yürütme süresine dikkat edin.

AYRICA BAKINIZ

axfer(1), axfer-list(1), alsamixer(1), amixer(1)

YAZAR

Takashi Sakamoto