日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:ossaudiodev—-訪問兼容OSS的音頻設備

ossaudiodev —- 訪問兼容OSS的音頻設備

從版本 3.11 開始標記為過時,將在版本 3.13 中移除。: ossaudiodev 模塊已被棄用(請參閱 PEP 594 了解詳情)。

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站建設、網(wǎng)站制作四川移動機房托管的網(wǎng)絡公司,有著豐富的建站經(jīng)驗和案例。


該模塊允許您訪問 OSS(開放式音響系統(tǒng))音頻接口。 OSS 可用于廣泛的開源和商業(yè) Unices,并且是 Linux 和最新版本的 FreeBSD 的標準音頻接口。

在 3.3 版更改: 此模塊中過去會引發(fā) IOError 的操作現(xiàn)在將引發(fā) OSError。

參見

開放之聲系統(tǒng)程序員指南

OSS C API 的官方文檔

該模塊定義了大量由OSS設備驅動提供的常量; 請參閱```` Linux 或 FreeBSD 上的列表。

ossaudiodev 定義了下列變量和函數(shù):

exception ossaudiodev.OSSAudioError

此異常會針對特定錯誤被引發(fā)。 其參數(shù)為一個描述錯誤信息的字符串。

(如果 ossaudiodev 從系統(tǒng)調用例如 open(), write()ioctl() 接收到錯誤,它將引發(fā) OSError。 由 ossaudiodev 直接檢測到的錯誤將引發(fā) OSSAudioError。)

(為了向下兼容,此異常類也可通過 ossaudiodev.error 訪問。)

ossaudiodev.open(mode)

ossaudiodev.open(device, mode)

打開一個音頻設備并返回 OSS 音頻設備對象。 此對象支持許多文件類方法,例如 read(), write()fileno() (不過傳統(tǒng)的 Unix 讀/寫語義與 OSS 音頻設備的存在一些細微的差異)。 它還支持一些音頻專屬的方法;完整的方法列表見下文。

device 是要使用的音頻設備文件名。 如果未指定,則此模塊會先在環(huán)境變量 AUDIODEV 中查找要使用的設備。 如果未找到,它將回退為 /dev/dsp。

mode 可以為 'r' 表示只讀(錄音)訪問,'w' 表示只寫(回放)訪問以及 'rw' 表示同時讀寫。 由于許多聲卡在同一時間只允許單個進程打開錄音機或播放器,因此好的做法是只根據(jù)活動的需要打開設備。 并且,有些聲卡是半雙工的:它們可以被打開用于讀取或寫入,但不能同時讀寫。

請注意這里特殊的調用語法: first 參數(shù)是可選的,而第二個參數(shù)則是必需的。 這是出于歷史原因要與 ossaudiodev 所替代的 linuxaudiodev 模塊保持兼容。

ossaudiodev.openmixer([device])

打開一個混音設備并返回 OSS 混音設備對象。 device 是要使用的混音設備文件名。 如果未指定,則此模塊會先在環(huán)境變量 MIXERDEV 中查找要使用的設備。 如果未找到,它將回退為 /dev/mixer。

音頻設備對象

在你寫入或讀取音頻設備之前,你必須按照正確的順序調用三個方法:

  1. setfmt() 設置輸出格式

  2. channels() 設置聲道數(shù)量

  3. speed() 設置采樣率

或者,你也可以使用 setparameters() 方法一次性地設置全部三個音頻參數(shù)。 這更為便捷,但可能不會在所有場景下都一樣靈活。

open() 所返回的音頻設備對象定義了下列方法和(只讀)屬性:

oss_audio_device.close()

顯式地關閉音頻設備。 當你完成寫入或讀取音頻設備后,你應當顯式地關閉它。 已關閉的設備不可被再次使用。

oss_audio_device.fileno()

返回與設備相關聯(lián)的文件描述符。

oss_audio_device.read(size)

從音頻輸入設備讀取 size 個字節(jié)并返回為 python 字節(jié)串。 與大多數(shù) Unix 設備驅動不同,處于阻塞模式(默認)的 OSS 音頻設備將阻塞 read() 直到所請求大小的數(shù)據(jù)全部可用。

oss_audio_device.write(data)

將一個 bytes-like object data 寫入音頻設備并返回寫入的字節(jié)數(shù)。 如果音頻設備處于阻塞模式(默認),則總是會寫入完整數(shù)據(jù)(這還是不同于通常的 Unix 設備語義)。 如果設備處于非阻塞模式,則可能會有部分數(shù)據(jù)未被寫入 —- 參見 writeall()。

在 3.5 版更改: 現(xiàn)在接受可寫的 字節(jié)類對象。

oss_audio_device.writeall(data)

將一個 bytes-like object data 寫入音頻設備:等待直到音頻設備能夠接收數(shù)據(jù),將根據(jù)其所能接收的數(shù)據(jù)量盡可能多地寫入,并重復操作直至 data 被完全寫入。 如果設備處于阻塞模式(默認),則其效果與 write() 相同;writeall() 僅適用于非阻塞模式。 它沒有返回值,因為寫入的數(shù)據(jù)量總是等于所提供的數(shù)據(jù)量。

在 3.5 版更改: 現(xiàn)在接受可寫的 字節(jié)類對象。

在 3.2 版更改: 音頻設備對象還支持上下文管理協(xié)議,就是說它們可以在 with 語句中使用。

下列方法各自映射一個 ioctl() 系統(tǒng)調用。 對應關系很明顯:例如,setfmt() 對應 SNDCTL_DSP_SETFMT ioctl,而 sync() 對應 SNDCTL_DSP_SYNC (這在查閱 OSS 文檔時很有用)。 如果下層的 ioctl() 失敗,它們將引發(fā) OSError。

oss_audio_device.nonblock()

將設備轉為非阻塞模式。 一旦處于非阻塞模式,將無法將其轉回阻塞模式。

oss_audio_device.getfmts()

返回聲卡所支持的音頻輸出格式的位掩碼。 OSS 支持的一部分格式如下:

格式

描述

AFMT_MU_LAW

一種對數(shù)編碼格式(被 Sun .au 文件和 /dev/audio 所使用)

AFMT_A_LAW

一種對數(shù)編碼格式

AFMT_IMA_ADPCM

一種 4:1 壓縮格式,由 Interactive Multimedia Association 定義

AFMT_U8

無符號的 8 位音頻

AFMT_S16_LE

有符號的 16 位音頻,采用小端字節(jié)序(如 Intel 處理器所用的)

AFMT_S16_BE

有符號的 16 位音頻,采用大端字節(jié)序(如 68k, PowerPC, Sparc 所用的)

AFMT_S8

有符號的 8 位音頻

AFMT_U16_LE

無符號的 16 位小端字節(jié)序音頻

AFMT_U16_BE

無符號的 16 位大端字節(jié)序音頻

請參閱 OSS 文檔獲取音頻格式的完整列表,還要注意大多數(shù)設備都只支持這些列表的一個子集。 某些較舊的設備僅支持 AFMT_U8;目前最為常用的格式是 AFMT_S16_LE。

oss_audio_device.setfmt(format)

嘗試將當前音頻格式設為 format —- 請參閱 getfmts() 獲取格式列表。 返回為設備設置的音頻格式,這可能并非所請求的格式。 也可被用來返回當前音頻格式 —- 這可以通過傳入特殊的 “音頻格式” AFMT_QUERY 來實現(xiàn)。

oss_audio_device.channels(nchannels)

將輸出聲道數(shù)設為 nchannels。 值為 1 表示單聲道,2 表示立體聲。 某些設備可能擁有 2 個以上的聲道,并且某些高端設備還可能不支持單聲道。 返回為設備設置的聲道數(shù)。

oss_audio_device.speed(samplerate)

嘗試將音頻采樣率設為每秒 samplerate 次采樣。 返回實際設置的采樣率。 大多數(shù)設備都不支持任意的采樣率。 常見的采樣率為:

采樣率

描述

8000

/dev/audio 的默認采樣率

11025

語音錄音

22050

44100

CD品質的音頻(16位采樣和2通道)

96000

DVD品質的音頻(24位采樣)

oss_audio_device.sync()

等待直到音頻設備播放完其緩沖區(qū)中的所有字節(jié)。 (這會在設備被關閉時隱式地發(fā)生。) OSS 建議關閉再重新打開設備而不是使用 sync()。

oss_audio_device.reset()

立即停止播放或錄制并使設備返回可接受命令的狀態(tài)。 OSS 文檔建議在調用 reset() 之后關閉并重新打開設備。

oss_audio_device.post()

告知設備在輸出中可能有暫停,使得設備可以更智能地處理暫停。 你可以在播放一個定點音效之后、等待用戶輸入之前或執(zhí)行磁盤 I/O 之前使用此方法。

下列便捷方法合并了多個 ioctl,或是合并了一個 ioctl 與某些簡單的運算。

oss_audio_device.setparameters(format, nchannels, samplerate[, strict=False])

在一次方法調用中設置關鍵的音頻采樣參數(shù) —- 采樣格式、聲道數(shù)和采樣率。 format, nchannelssamplerate 應當與在 setfmt(), channels() 和 speed() 方法中所指定的一致。 如果 strict 為真值,則 setparameters() 會檢查每個參數(shù)是否確實被設置為所請求的值,如果不是則會引發(fā) OSSAudioError。 返回一個元組 (format, nchannels, samplerate) 指明由設備驅動實際設置的參數(shù)值 (即與 setfmt(), channels() 和 speed() 的返回值相同)。

例如,:

 
 
 
 
  1. (fmt, channels, rate) = dsp.setparameters(fmt, channels, rate)

等價于

 
 
 
 
  1. fmt = dsp.setfmt(fmt)
  2. channels = dsp.channels(channels)
  3. rate = dsp.rate(rate)

oss_audio_device.bufsize()

返回硬件緩沖區(qū)的大小,以采樣數(shù)表示。

oss_audio_device.obufcount()

返回硬件緩沖區(qū)中待播放的采樣數(shù)。

oss_audio_device.obuffree()

返回可以被加入硬件緩沖區(qū)隊列以非阻塞模式播放的采樣數(shù)。

音頻設備對象還支持幾個只讀屬性:

oss_audio_device.closed

指明設備是否已被關閉的布爾值。

oss_audio_device.name

包含設備文件名稱的字符串。

oss_audio_device.mode

文件的 I/O 模式,可以為 "r", "rw""w"。

混音器設備對象

混音器對象提供了兩個文件類方法:

oss_mixer_device.close()

此方法會關閉打開的混音器設備文件。 在文件被關閉后任何繼續(xù)使用混音器的嘗試都將引發(fā) OSError。

oss_mixer_device.fileno()

返回打開的混音器設備文件的文件處理句柄號。

在 3.2 版更改: 混音器設備還支持上下文管理協(xié)議。

其余方法都是混音專屬的:

oss_mixer_device.controls()

此方法返回一個表示可用的混音控件的位掩碼 (“控件” 是專用的可混合 “聲道”,例如 SOUND_MIXER_PCMSOUND_MIXER_SYNTH)。 該掩碼會指定所有可用混音控件的一個子集 —- 它們是在模塊層級上定義的 SOUND_MIXER_* 常量。 舉例來說,要確定當前混音器對象是否支持 PCM 混音器,就使用以下 Python 代碼:

 
 
 
 
  1. mixer=ossaudiodev.openmixer()
  2. if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM):
  3. # PCM is supported
  4. ... code ...

對于大多數(shù)目的來說,SOUND_MIXER_VOLUME (主音量) 和 SOUND_MIXER_PCM 控件應該足夠了 —- 但使用混音器的代碼應當在選擇混音器控件時保持靈活。 例如在 Gravis Ultrasound 上,SOUND_MIXER_VOLUME 是不存在的。

oss_mixer_device.stereocontrols()

返回一個表示立體聲混音控件的位掩碼。 如果設置了比特位,則對應的控件就是立體聲的;如果未設置,則控件為單聲道或者不被混音器所支持(請配合 controls() 使用以確定是哪種情況)。

請查看 controls() 函數(shù)的代碼示例了解如何從位掩碼獲取數(shù)據(jù)。

oss_mixer_device.reccontrols()

返回一個指明可被用于錄音的混音器控件的位掩碼。 請查看 controls() 的代碼示例了解如何讀取位掩碼。

oss_mixer_device.get(control)

返回給定混音控件的音量。 返回的音量是一個 2 元組 (left_volume,right_volume)。 音量被表示為從 0 (靜音) 到 100 (最大音量) 的數(shù)字。 如果控件是單聲道的,仍然會返回一個 2 元組,但兩個音量必定相同。

如果指定了無效的控件則會引發(fā) OSSAudioError,或者如果指定了不受支持的控件則會引發(fā) OSError。

oss_mixer_device.set(control, (left, right))

將給定混音控件的音量設為 (left,right)。 leftright 必須為整數(shù)并在 0 (靜音) 至 100 (最大音量) 之間。 當執(zhí)行成功的,新的音量將以 2 元組形式返回。 請注意這可能不完全等于所指定的音量,因為某些聲卡的混音器有精度限制。

如果指定了無效的混音控件,或者指定的音量超出限制則會引發(fā) OSSAudioError。

oss_mixer_device.get_recsrc()

此方法返回一個表示當前被用作錄音源的的控件的位掩碼。

oss_mixer_device.set_recsrc(bitmask)

調用此函數(shù)來指定一個錄音源。 如果成功則返回一個指明新錄音源的位掩碼;如果指定了無效的源則會引發(fā) OSError。 如果要將當前錄音源設為麥克風輸入:

 
 
 
 
  1. mixer.setrecsrc (1 << ossaudiodev.SOUND_MIXER_MIC)

文章名稱:創(chuàng)新互聯(lián)Python教程:ossaudiodev—-訪問兼容OSS的音頻設備
瀏覽地址:http://www.dlmjj.cn/article/coejjop.html