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