[英]How to cache files with Perl while playing sound files using vlc?
我想在Perl中手動緩存文件,因此在播放聲音時幾乎沒有延遲。
我用Perl編寫了一個程序,該程序通過對VLC進行系統調用來播放音頻文件。 執行它時,我注意到音頻開始播放之前有延遲。 延遲通常在大約1.0到1.5秒之間。 但是,當我創建一個循環連續執行相同的VLC調用多次時,延遲僅約為0.2-0.3秒。 我認為這是因為聲音文件是Linux緩存的。 我在CPAN上找到Cache :: Cache ,但是我不知道它是如何工作的。 我對不使用模塊的解決方案感興趣。 如果這不可能,我想知道如何正確使用Cache :: Cache。
(我知道對執行速度使用對VLC的系統調用是個壞主意)
use Time::HiRes;
use warnings;
use strict;
while (1) {
my $start = Time::HiRes::time();
system('vlc -Irc ./media/audio/noise.wav vlc://quit');
my $end = Time::HiRes::time();
my $duration = $end - $start;
print "duration = $duration\n";
<STDIN>;
}
它不像只是在perl中“緩存”文件那樣簡單。 vlc或任何需要解釋數據內容的程序(在您的情況下為.wav文件)。 您要么堅持調用外部程序,只給它一個文件來執行,要么需要在perl(可能還有Perl XS Modules )中實現整個堆棧。 整個堆棧的意思是:1.將數據(.wav文件)保存在內存中(在perl運行時內部)。 2.在Perl中解釋數據。
第二部分是棘手的地方,您可能需要編寫很多代碼和/或使用3rd Party模塊才能到達所需的地方。
因此,如果您只是想使其快速運行,請堅持使用系統調用。 您也可以研究Nama ,它可以為您提供所需的東西。
從您的問題看來,您似乎主要是在獲取.wav文件的運行時。 如果只是獲取有關文件的信息而不是播放聲音,則Audio :: Wav可能是適合您的模塊。
Perl內部緩存對您沒有幫助。
paplay
從包pulseaudio-utils
,或gst123
,或mpg123
與mpg123-pulse
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.