成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用ossaudiodev播放音頻

Winer / 3644人閱讀

摘要:其中用于音質(zhì)的音頻而用于音質(zhì)的音頻。如果改用個的音頻文件則可以正常聽到其聲音了。

原文地址:http://blog.52sox.com/use-oss...

在Python的標(biāo)準(zhǔn)庫的多媒體設(shè)備中有1個關(guān)于兼容oss音頻設(shè)備的ossaudiodev模塊,這個模塊是在Python2.3的時候引入的。通過這個模塊允許你訪問OSS(Open Sound System)音頻接口。
在Linux中,音頻系統(tǒng)主要有2個,分別為OSS和ALSA,其中后者已經(jīng)取代了OSS的位置作為默認(rèn)的音頻系統(tǒng)。
下面我們在debian的wheezy版本下來查看下這個模塊的使用,相比之前已經(jīng)使用過了pyaudio這樣的模塊,會覺得對音頻的操作是蠻簡單的。
在此之前,我們需要安裝oss包,當(dāng)前最新的版本為4,我們可以通過下載deb或直接通過debian的包管理工具進(jìn)行安裝:

cat@debian:~$ sudo aptitude install oss4-base oss4-source oss4-dev

這里我們安裝了oss的基礎(chǔ)包、源碼包以及開發(fā)包。安裝完成后,我們需要重啟機(jī)器以便設(shè)備能被識別出來。
我們導(dǎo)入該模塊:

>>> import ossaudiodev

接下來,我們通過該模塊的open方法打開1個音頻設(shè)備,這個方法返回1個OSS音頻設(shè)備對象。它支持類文件方法,比如read,write和fileno。
其中open方法有2種操作的方式:

ossaudiodev.open(mode)
ossaudiodev.open(device, mode)

在這里,device是使用的音頻設(shè)備的名稱。如果沒有指定,這個模塊將查看環(huán)境變量AUDIODEV來選擇使用的設(shè)備。如果沒有找到,則將回滾到/dev/dsp,對于Sun系統(tǒng)則為/dev/audio。
而選擇的模式mode,可以為只讀(錄音)、只寫(回放)以及rw。許多聲卡只允許1個進(jìn)程1次進(jìn)行記錄或播放操作。
需要注意的是這里的調(diào)用語法與平常的不同,其第1個參數(shù)是可選的,而第2個參數(shù)是必填的。這是為了兼容舊的linuxaudiodev模塊。
這里我們選擇第1種寫法,我們使用w的方式進(jìn)行操作:

>>> dsp = ossaudiodev.open("w")

在該模塊中還有1個openmixer方法用于打開1個混合設(shè)備,并返回1個OSS混合設(shè)備對象。我們可以指定使用混合設(shè)備的文件名,如果沒有指定它將查找環(huán)境變量MIXERDEV,如果沒有找到則回滾到/dev/mixer。
接下來,我們進(jìn)行音頻設(shè)備的操作。在你從1個音頻設(shè)備進(jìn)行寫入或讀取操作之前,你必須按照正常的順序調(diào)用下面3個方法:

setfmt,設(shè)置輸出的格式

channels,設(shè)置通道的數(shù)字

speed,設(shè)置樣本的速率

另外,你可以使用setparameters方法一次性設(shè)置上面3個參數(shù)。

>>> dsp.setparameters(ossaudiodev.AFMT_U16_LE,2,44100)

上述寫法等價(jià)于:

>>> fmt = dsp.setfmt(ossaudiodev.AFMT_U16_LE)
>>> channels = dsp.channels(2)
>>> rate = dsp.rate(44100)

其中關(guān)于音頻設(shè)置的格式,我們可以通過音頻設(shè)備對象的getfmts方法進(jìn)行查詢,主要格式有AFMT_U8、AFMT_S16_LEAFMT_U16_LE等9種格式。其中今天大多數(shù)設(shè)備的常用格式是AFMT_S16_LE
關(guān)于設(shè)置的通道,主要有2種選擇,其中1代表耳機(jī)的聲音,而2代表立體聲。一些設(shè)備可能大于2個通道,而一些高端設(shè)備可能不支持耳機(jī)。
而設(shè)置的樣本速率的單位是每秒多少赫茲。大多數(shù)音頻設(shè)備不知道負(fù)數(shù)的樣本速率,常用的主要有5種,分別為8000,11025,22050,44100,96000。其中44100用于CD音質(zhì)的音頻,而96000用于DVD音質(zhì)的音頻。
接下來,我們需要打開1個音頻文件,然后將其寫入到音頻設(shè)備中將其輸出,這里我們通過write方法進(jìn)行操作,這個方法寫入python的字符串?dāng)?shù)據(jù)到音頻設(shè)備并返回寫入的字節(jié)數(shù):

>>> data = open("out.mp3", "rb").read()
>>> dsp.write(data)

在這個過程中,我們使用了1個mp3splt軟件包用于分割mp3文件,下面我們將源mp3文件切分其2分鐘到2分15秒這段,然后通過-o選項(xiàng)輸出為out.mp3文件。

cat@yafeile-pc:~$ sudo pacman -S mp3splt
cat@yafeile-pc:~$ mp3splt windows.mp3 2.00 2.15 -o out
mp3splt 2.6.2 (09/11/14) - using libmp3splt 0.9.2
    Matteo Trotta 
    Alexandru Munteanu 
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!
 warning: output format ambiguous (@t or @n missing)
 Processing file "windows.mp3" ...
 info: file matches the plugin "mp3 (libmad)"
 info: found Xing or Info header. Switching to frame mode... 
 info: MPEG 1 Layer 3 - 44100 Hz - Joint Stereo - FRAME MODE - Total time: 4m.32s
 info: starting normal split
   File "out.mp3" created                    
 Processed 5169 frames - Sync errors: 0   
 file split

我們調(diào)用音頻對象的write的方法時出現(xiàn)了1個如下的錯誤:

[Error 5] Input/Output Error

之所以會出現(xiàn)這個問題,預(yù)計(jì)是設(shè)備無法進(jìn)行解碼。在這里我們需要安裝另外1個包gstreamer0.10-plugins-bad:

cat@debian:~$ sudo aptitude install gstreamer0.10-plugins-bad

但是再次進(jìn)行上述的操作,我們只能聽到沙沙的聲音。
實(shí)際上,在我們安裝好oss系統(tǒng)后,系統(tǒng)有一些命令可以查看其一些信息,比如ossinfo顯示oss的相關(guān)信息:

cat@debian:~$ ossinfo 
Version info: OSS 4.2 (b 2006/201212190848) (0x00040100) GPL
Platform: Linux/i686 3.2.0-4-486 #1 Debian 3.2.57-3 (debian)

Number of audio devices:    1
Number of audio engines:    6
Number of MIDI devices:        0
Number of mixer devices:    1
...

通過這個命令我們可以查看系統(tǒng)的設(shè)備信息。還有一個osstest命令用于測試oss系統(tǒng)是否正常工作:

cat@debian:~$ osstest
Sound subsystem and version: OSS 4.2 (b 2006/201212190848) (0x00040100)
Platform: Linux/i686 3.2.0-4-486 #1 Debian 3.2.57-3

*** Scanning sound adapter #-1 ***
/dev/oss/oss_ich0/pcm0 (audio engine 0): Intel ICH (2415)
- Performing audio playback test... 
   OK  OK  OK  
   
*** All tests completed OK ***

在這個過程中,會進(jìn)行設(shè)備左右聲音的測試。
另外,還有1個ossplay的命令用于播放音頻文件,但是該命令默認(rèn)支持wav,而對于mp3不怎么支持,比如我們播放上面那個文件:

cat@debian:/vagrant$ ossplay out.mp3 
out.mp3: Unrecognized audio file type.

可以看到,ossplay不認(rèn)識這個音頻文件類型,從而導(dǎo)致沙沙的聲音。如果改用1個wav的音頻文件則可以正常聽到其聲音了。

參考文章:

http://www.opensound.com/down...
http://www.ubuntugeek.com/how...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/37951.html

相關(guān)文章

  • 微信小程序音頻IOS無法播放問題總結(jié)

    摘要:問題微信小程序,將文字轉(zhuǎn)換為語音后,使用音頻進(jìn)行播放。在安卓手機(jī)下可以正常播放,在下不行。需要對接口的文本字符串參數(shù)進(jìn)行編碼比如哈哈哈哈哈哈哈哈哈沒有做編碼,直接上文本的,也會出現(xiàn)安卓行不行的情況。 【問題】 微信小程序,將文字轉(zhuǎn)換為語音后,使用音頻進(jìn)行播放。在安卓手機(jī)下可以正常播放,在IOS下不行。 【環(huán)境】 微信小程序庫版本2.3.0百度語音合成服務(wù) 【解決方法】 正確代碼: //...

    Soarkey 評論0 收藏0
  • Vue+ElementUI: 手把手教你做一個audio組件

    摘要:不顯示下載不顯示靜音不顯示音量條不顯示進(jìn)度條只能播放一個不要快進(jìn)按鈕例如父組件這樣回雪月花青春一點(diǎn)點(diǎn)語法大多數(shù)時候,我們希望頁面上播放一個音頻時,其他音頻可以暫停??梢园岩粋€類數(shù)組轉(zhuǎn)化成數(shù)組,這個是我常用的。 showImg(https://segmentfault.com/img/remote/1460000016177005?w=619&h=343); 目的 本項(xiàng)目的目的是教你如...

    U2FsdGVkX1x 評論0 收藏0
  • BREW 應(yīng)用中的音頻播放

    摘要:以下就是用這種方法時應(yīng)用所作的處理判斷要播放的音樂播放當(dāng)前音樂在音樂播放完后繼續(xù)播放在應(yīng)用程序中斷時作的操作是恢復(fù)時的操作是判斷要播放的音樂循環(huán)播放另一種辦法就是調(diào)用回調(diào)函數(shù)如或。 BREW中支持的音頻格式主要分為兩類:基于MIDI的文件格式和特殊編碼的音頻文件格式?;贛IDI的文...

    lsxiao 評論0 收藏0
  • 基于apicloud原生模塊實(shí)現(xiàn)的凌亂的單點(diǎn)音頻播放凌亂功能總結(jié)

    摘要:個人網(wǎng)站最近剛寫了一個手機(jī)在線播放的電影站緣由公司項(xiàng)目使用開發(fā)混合式,用到了官方提供的原生音頻播放模塊來做單點(diǎn)音頻播放功能。首頁和播放頁始終進(jìn)行暫停事件監(jiān)聽。 關(guān)于作者 程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是永不停息的追求。 個人網(wǎng)站:https://www.linganmi...

    shery 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<