摘要:其中用于音質(zhì)的音頻而用于音質(zhì)的音頻。如果改用個(gè)的音頻文件則可以正常聽(tīng)到其聲音了。
原文地址:http://blog.52sox.com/use-oss...
在Python的標(biāo)準(zhǔn)庫(kù)的多媒體設(shè)備中有1個(gè)關(guān)于兼容oss音頻設(shè)備的ossaudiodev模塊,這個(gè)模塊是在Python2.3的時(shí)候引入的。通過(guò)這個(gè)模塊允許你訪問(wèn)OSS(Open Sound System)音頻接口。
在Linux中,音頻系統(tǒng)主要有2個(gè),分別為OSS和ALSA,其中后者已經(jīng)取代了OSS的位置作為默認(rèn)的音頻系統(tǒng)。
下面我們?cè)赿ebian的wheezy版本下來(lái)查看下這個(gè)模塊的使用,相比之前已經(jīng)使用過(guò)了pyaudio這樣的模塊,會(huì)覺(jué)得對(duì)音頻的操作是蠻簡(jiǎn)單的。
在此之前,我們需要安裝oss包,當(dāng)前最新的版本為4,我們可以通過(guò)下載deb或直接通過(guò)debian的包管理工具進(jìn)行安裝:
cat@debian:~$ sudo aptitude install oss4-base oss4-source oss4-dev
這里我們安裝了oss的基礎(chǔ)包、源碼包以及開(kāi)發(fā)包。安裝完成后,我們需要重啟機(jī)器以便設(shè)備能被識(shí)別出來(lái)。
我們導(dǎo)入該模塊:
>>> import ossaudiodev
接下來(lái),我們通過(guò)該模塊的open方法打開(kāi)1個(gè)音頻設(shè)備,這個(gè)方法返回1個(gè)OSS音頻設(shè)備對(duì)象。它支持類文件方法,比如read,write和fileno。
其中open方法有2種操作的方式:
ossaudiodev.open(mode) ossaudiodev.open(device, mode)
在這里,device是使用的音頻設(shè)備的名稱。如果沒(méi)有指定,這個(gè)模塊將查看環(huán)境變量AUDIODEV來(lái)選擇使用的設(shè)備。如果沒(méi)有找到,則將回滾到/dev/dsp,對(duì)于Sun系統(tǒng)則為/dev/audio。
而選擇的模式mode,可以為只讀(錄音)、只寫(xiě)(回放)以及rw。許多聲卡只允許1個(gè)進(jìn)程1次進(jìn)行記錄或播放操作。
需要注意的是這里的調(diào)用語(yǔ)法與平常的不同,其第1個(gè)參數(shù)是可選的,而第2個(gè)參數(shù)是必填的。這是為了兼容舊的linuxaudiodev模塊。
這里我們選擇第1種寫(xiě)法,我們使用w的方式進(jìn)行操作:
>>> dsp = ossaudiodev.open("w")
在該模塊中還有1個(gè)openmixer方法用于打開(kāi)1個(gè)混合設(shè)備,并返回1個(gè)OSS混合設(shè)備對(duì)象。我們可以指定使用混合設(shè)備的文件名,如果沒(méi)有指定它將查找環(huán)境變量MIXERDEV,如果沒(méi)有找到則回滾到/dev/mixer。
接下來(lái),我們進(jìn)行音頻設(shè)備的操作。在你從1個(gè)音頻設(shè)備進(jìn)行寫(xiě)入或讀取操作之前,你必須按照正常的順序調(diào)用下面3個(gè)方法:
setfmt,設(shè)置輸出的格式
channels,設(shè)置通道的數(shù)字
speed,設(shè)置樣本的速率
另外,你可以使用setparameters方法一次性設(shè)置上面3個(gè)參數(shù)。
>>> dsp.setparameters(ossaudiodev.AFMT_U16_LE,2,44100)
上述寫(xiě)法等價(jià)于:
>>> fmt = dsp.setfmt(ossaudiodev.AFMT_U16_LE) >>> channels = dsp.channels(2) >>> rate = dsp.rate(44100)
其中關(guān)于音頻設(shè)置的格式,我們可以通過(guò)音頻設(shè)備對(duì)象的getfmts方法進(jìn)行查詢,主要格式有AFMT_U8、AFMT_S16_LE、AFMT_U16_LE等9種格式。其中今天大多數(shù)設(shè)備的常用格式是AFMT_S16_LE。
關(guān)于設(shè)置的通道,主要有2種選擇,其中1代表耳機(jī)的聲音,而2代表立體聲。一些設(shè)備可能大于2個(gè)通道,而一些高端設(shè)備可能不支持耳機(jī)。
而設(shè)置的樣本速率的單位是每秒多少赫茲。大多數(shù)音頻設(shè)備不知道負(fù)數(shù)的樣本速率,常用的主要有5種,分別為8000,11025,22050,44100,96000。其中44100用于CD音質(zhì)的音頻,而96000用于DVD音質(zhì)的音頻。
接下來(lái),我們需要打開(kāi)1個(gè)音頻文件,然后將其寫(xiě)入到音頻設(shè)備中將其輸出,這里我們通過(guò)write方法進(jìn)行操作,這個(gè)方法寫(xiě)入python的字符串?dāng)?shù)據(jù)到音頻設(shè)備并返回寫(xiě)入的字節(jié)數(shù):
>>> data = open("out.mp3", "rb").read() >>> dsp.write(data)
在這個(gè)過(guò)程中,我們使用了1個(gè)mp3splt軟件包用于分割mp3文件,下面我們將源mp3文件切分其2分鐘到2分15秒這段,然后通過(guò)-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 TrottaAlexandru 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)用音頻對(duì)象的write的方法時(shí)出現(xiàn)了1個(gè)如下的錯(cuò)誤:
[Error 5] Input/Output Error
之所以會(huì)出現(xiàn)這個(gè)問(wèn)題,預(yù)計(jì)是設(shè)備無(wú)法進(jìn)行解碼。在這里我們需要安裝另外1個(gè)包gstreamer0.10-plugins-bad:
cat@debian:~$ sudo aptitude install gstreamer0.10-plugins-bad
但是再次進(jìn)行上述的操作,我們只能聽(tīng)到沙沙的聲音。
實(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 ...
通過(guò)這個(gè)命令我們可以查看系統(tǒng)的設(shè)備信息。還有一個(gè)osstest命令用于測(cè)試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 ***
在這個(gè)過(guò)程中,會(huì)進(jìn)行設(shè)備左右聲音的測(cè)試。
另外,還有1個(gè)ossplay的命令用于播放音頻文件,但是該命令默認(rèn)支持wav,而對(duì)于mp3不怎么支持,比如我們播放上面那個(gè)文件:
cat@debian:/vagrant$ ossplay out.mp3 out.mp3: Unrecognized audio file type.
可以看到,ossplay不認(rèn)識(shí)這個(gè)音頻文件類型,從而導(dǎo)致沙沙的聲音。如果改用1個(gè)wav的音頻文件則可以正常聽(tīng)到其聲音了。
參考文章:
http://www.opensound.com/down...
http://www.ubuntugeek.com/how...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/37951.html
摘要:?jiǎn)栴}微信小程序,將文字轉(zhuǎn)換為語(yǔ)音后,使用音頻進(jìn)行播放。在安卓手機(jī)下可以正常播放,在下不行。需要對(duì)接口的文本字符串參數(shù)進(jìn)行編碼比如哈哈哈哈哈哈哈哈哈沒(méi)有做編碼,直接上文本的,也會(huì)出現(xiàn)安卓行不行的情況。 【問(wèn)題】 微信小程序,將文字轉(zhuǎn)換為語(yǔ)音后,使用音頻進(jìn)行播放。在安卓手機(jī)下可以正常播放,在IOS下不行。 【環(huán)境】 微信小程序庫(kù)版本2.3.0百度語(yǔ)音合成服務(wù) 【解決方法】 正確代碼: //...
摘要:不顯示下載不顯示靜音不顯示音量條不顯示進(jìn)度條只能播放一個(gè)不要快進(jìn)按鈕例如父組件這樣回雪月花青春一點(diǎn)點(diǎn)語(yǔ)法大多數(shù)時(shí)候,我們希望頁(yè)面上播放一個(gè)音頻時(shí),其他音頻可以暫停。可以把一個(gè)類數(shù)組轉(zhuǎn)化成數(shù)組,這個(gè)是我常用的。 showImg(https://segmentfault.com/img/remote/1460000016177005?w=619&h=343); 目的 本項(xiàng)目的目的是教你如...
摘要:以下就是用這種方法時(shí)應(yīng)用所作的處理判斷要播放的音樂(lè)播放當(dāng)前音樂(lè)在音樂(lè)播放完后繼續(xù)播放在應(yīng)用程序中斷時(shí)作的操作是恢復(fù)時(shí)的操作是判斷要播放的音樂(lè)循環(huán)播放另一種辦法就是調(diào)用回調(diào)函數(shù)如或。 BREW中支持的音頻格式主要分為兩類:基于MIDI的文件格式和特殊編碼的音頻文件格式。基于MIDI的文...
摘要:個(gè)人網(wǎng)站最近剛寫(xiě)了一個(gè)手機(jī)在線播放的電影站緣由公司項(xiàng)目使用開(kāi)發(fā)混合式,用到了官方提供的原生音頻播放模塊來(lái)做單點(diǎn)音頻播放功能。首頁(yè)和播放頁(yè)始終進(jìn)行暫停事件監(jiān)聽(tīng)。 關(guān)于作者 程序開(kāi)發(fā)人員,不拘泥于語(yǔ)言與技術(shù),目前主要從事PHP和前端開(kāi)發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開(kāi)發(fā)。合適和夠用是永不停息的追求。 個(gè)人網(wǎng)站:https://www.linganmi...
閱讀 1353·2023-04-25 23:47
閱讀 929·2021-11-23 09:51
閱讀 4483·2021-09-26 10:17
閱讀 3729·2021-09-10 11:19
閱讀 3268·2021-09-06 15:10
閱讀 3557·2019-08-30 12:49
閱讀 2437·2019-08-29 13:20
閱讀 1743·2019-08-28 18:14