Mô-đun Sounddevice trong Python là gì?

def __repr__(tự). idev = _get_device_id(mặc định. thiết bị ['đầu vào'], 'đầu vào') odev = _get_device_id (mặc định. thiết bị['đầu ra'], 'đầu ra') chữ số = len(str(_lib. Pa_GetDeviceCount() - 1)) hostapi_names = [hostapi['name'] for hostapi in query_hostapis()] text = '\n'. tham gia ( u'{mark} {idx. {đào}} {tên}, {ha} ({vào} vào, {ra} ra)'. định dạng( mark=(' ', '>', '<', '*')[(idx == idev) + 2 * (idx == odev)], idx=idx, dig=digits, name=info[

Mô-đun này cho phép bạn truy cập giao diện âm thanh OSS (Open Sound System). OSS có sẵn cho nhiều loại Unices nguồn mở và thương mại, đồng thời là giao diện âm thanh tiêu chuẩn cho Linux và các phiên bản FreeBSD gần đây

Đã thay đổi trong phiên bản 3. 3. Các hoạt động trong mô-đun này hiện tăng lên ở nơi đã được nâng lên.

Xem thêm

Hướng dẫn lập trình viên hệ thống âm thanh mở

tài liệu chính thức cho OSS C API

Mô-đun xác định một số lượng lớn các hằng số được cung cấp bởi trình điều khiển thiết bị OSS;

xác định các biến và chức năng sau

ngoại lệ ossaudiodev. OSSAudioLỗi

Ngoại lệ này được đưa ra trên một số lỗi nhất định. Đối số là một chuỗi mô tả những gì đã sai

(Nếu nhận được lỗi từ một cuộc gọi hệ thống, chẳng hạn như

fmt = dsp.setfmt(fmt)
channels = dsp.channels(channels)
rate = dsp.rate(rate)
1,
fmt = dsp.setfmt(fmt)
channels = dsp.channels(channels)
rate = dsp.rate(rate)
2 hoặc
fmt = dsp.setfmt(fmt)
channels = dsp.channels(channels)
rate = dsp.rate(rate)
3, nó sẽ tăng. Lỗi được phát hiện trực tiếp bởi kết quả trong. )

(Để có khả năng tương thích ngược, lớp ngoại lệ cũng có sẵn là

fmt = dsp.setfmt(fmt)
channels = dsp.channels(channels)
rate = dsp.rate(rate)
7. )

ossaudiodev. mở(chế độ)ossaudiodev. mở(thiết bị , chế độ)

Mở thiết bị âm thanh và trả về đối tượng thiết bị âm thanh OSS. Đối tượng này hỗ trợ nhiều phương thức giống như tệp, chẳng hạn như

fmt = dsp.setfmt(fmt)
channels = dsp.channels(channels)
rate = dsp.rate(rate)
8,
fmt = dsp.setfmt(fmt)
channels = dsp.channels(channels)
rate = dsp.rate(rate)
2 và
mixer=ossaudiodev.openmixer()
if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM):
    # PCM is supported
    ... code ...
0 (mặc dù có sự khác biệt tinh tế giữa ngữ nghĩa đọc/ghi Unix thông thường và ngữ nghĩa của các thiết bị âm thanh OSS). Nó cũng hỗ trợ một số phương pháp dành riêng cho âm thanh;

thiết bị là tên tệp thiết bị âm thanh để sử dụng. Nếu nó không được chỉ định, trước tiên mô-đun này sẽ tìm trong biến môi trường

mixer=ossaudiodev.openmixer()
if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM):
    # PCM is supported
    ... code ...
1 để biết thiết bị sử dụng. Nếu không tìm thấy, nó sẽ rơi trở lại
mixer=ossaudiodev.openmixer()
if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM):
    # PCM is supported
    ... code ...
2

chế độ là một trong số

mixer=ossaudiodev.openmixer()
if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM):
    # PCM is supported
    ... code ...
3 đối với quyền truy cập chỉ đọc (bản ghi),
mixer=ossaudiodev.openmixer()
if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM):
    # PCM is supported
    ... code ...
4 đối với quyền truy cập chỉ ghi (phát lại) và
mixer=ossaudiodev.openmixer()
if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM):
    # PCM is supported
    ... code ...
5 đối với cả hai. Vì nhiều card âm thanh chỉ cho phép một quá trình mở máy ghi âm hoặc trình phát tại một thời điểm, nên chỉ nên mở thiết bị cho hoạt động cần thiết. Hơn nữa, một số card âm thanh là bán song công. chúng có thể được mở để đọc hoặc viết, nhưng không phải cả hai cùng một lúc

Lưu ý cú pháp gọi bất thường. đối số đầu tiên là tùy chọn và đối số thứ hai là bắt buộc. Đây là một tạo tác lịch sử để tương thích với mô-đun

mixer=ossaudiodev.openmixer()
if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM):
    # PCM is supported
    ... code ...
6 cũ hơn thay thế

ossaudiodev. openmixer([thiết bị])

Mở thiết bị trộn và trả về đối tượng thiết bị trộn OSS. thiết bị là tên tệp thiết bị trộn để sử dụng. Nếu nó không được chỉ định, trước tiên mô-đun này sẽ tìm trong biến môi trường

mixer=ossaudiodev.openmixer()
if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM):
    # PCM is supported
    ... code ...
8 để biết thiết bị sử dụng. Nếu không tìm thấy, nó sẽ rơi trở lại
mixer=ossaudiodev.openmixer()
if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM):
    # PCM is supported
    ... code ...
9

Đối tượng thiết bị âm thanh

Trước khi bạn có thể ghi hoặc đọc từ thiết bị âm thanh, bạn phải gọi ba phương thức theo đúng thứ tự

  1. mixer.setrecsrc (1 << ossaudiodev.SOUND_MIXER_MIC)
    
    0 để đặt định dạng đầu ra

  2. mixer.setrecsrc (1 << ossaudiodev.SOUND_MIXER_MIC)
    
    1 để đặt số lượng kênh

  3. mixer.setrecsrc (1 << ossaudiodev.SOUND_MIXER_MIC)
    
    2 để đặt tỷ lệ mẫu

Ngoài ra, bạn có thể sử dụng phương pháp

mixer.setrecsrc (1 << ossaudiodev.SOUND_MIXER_MIC)
3 để đặt cả ba tham số âm thanh cùng một lúc. Điều này thuận tiện hơn, nhưng có thể không linh hoạt trong mọi trường hợp

Các đối tượng thiết bị âm thanh được trả về bằng cách xác định các phương thức và thuộc tính (chỉ đọc) sau đây

oss_audio_device. đóng()

Đóng hoàn toàn thiết bị âm thanh. Khi bạn viết hoặc đọc xong từ thiết bị âm thanh, bạn nên đóng thiết bị đó một cách rõ ràng. Không thể sử dụng lại thiết bị đã đóng

oss_audio_device. fileno()

Trả lại bộ mô tả tệp được liên kết với thiết bị

oss_audio_device. đọc(kích thước)

Đọc byte kích thước từ đầu vào âm thanh và trả về chúng dưới dạng chuỗi Python. Không giống như hầu hết các trình điều khiển thiết bị Unix, các thiết bị âm thanh OSS ở chế độ chặn (mặc định) sẽ chặn cho đến khi có toàn bộ lượng dữ liệu được yêu cầu

oss_audio_device. ghi(dữ liệu)

Ghi dữ liệu vào thiết bị âm thanh và trả lại số byte đã ghi. Nếu thiết bị âm thanh ở chế độ chặn (mặc định), toàn bộ dữ liệu luôn được ghi (một lần nữa, điều này khác với ngữ nghĩa của thiết bị Unix thông thường). Nếu thiết bị ở chế độ không chặn, một số dữ liệu có thể không được ghi—xem

Đã thay đổi trong phiên bản 3. 5. Có thể ghi hiện được chấp nhận.

oss_audio_device. ghi tất cả(dữ liệu)

Ghi dữ liệu vào thiết bị âm thanh. đợi cho đến khi thiết bị âm thanh có thể chấp nhận dữ liệu, ghi nhiều dữ liệu nhất có thể và lặp lại cho đến khi dữ liệu được ghi hoàn toàn. Nếu thiết bị đang ở chế độ chặn (mặc định), điều này có tác dụng tương tự như ; . Không có giá trị trả về, vì lượng dữ liệu được ghi luôn bằng lượng dữ liệu được cung cấp

Đã thay đổi trong phiên bản 3. 5. Có thể ghi hiện được chấp nhận.

Đã thay đổi trong phiên bản 3. 2. Đối tượng thiết bị âm thanh cũng hỗ trợ giao thức quản lý bối cảnh, tôi. e. chúng có thể được sử dụng trong một tuyên bố.

Các phương pháp sau đây mỗi ánh xạ tới chính xác một cuộc gọi hệ thống

fmt = dsp.setfmt(fmt)
channels = dsp.channels(channels)
rate = dsp.rate(rate)
3. Sự tương ứng là rõ ràng. ví dụ:
mixer.setrecsrc (1 << ossaudiodev.SOUND_MIXER_MIC)
0 tương ứng với ioctl ossaudiodev2 và ossaudiodev3 tương ứng với ossaudiodev4 (điều này có thể hữu ích khi tham khảo tài liệu OSS). Nếu
fmt = dsp.setfmt(fmt)
channels = dsp.channels(channels)
rate = dsp.rate(rate)
3 cơ bản không thành công, tất cả chúng đều tăng

oss_audio_device. không chặn()

Đặt thiết bị ở chế độ không chặn. Khi ở chế độ không chặn, không có cách nào để đưa nó trở lại chế độ chặn

oss_audio_device. getfmts()

Trả lại bitmask của các định dạng đầu ra âm thanh được soundcard hỗ trợ. Một số định dạng được PMNM hỗ trợ là

Sự sắp xếp

Sự miêu tả

ossaudiodev7

mã hóa logarit (được sử dụng bởi các tệp Sun ossaudiodev8 và ossaudiodev9)

ossaudiodev0

mã hóa logarit

ossaudiodev1

một 4. 1 định dạng nén được xác định bởi Hiệp hội đa phương tiện tương tác

ossaudiodev2

Âm thanh không dấu, 8-bit

ossaudiodev3

Đã ký, âm thanh 16 bit, thứ tự byte cuối nhỏ (như được sử dụng bởi bộ xử lý Intel)

ossaudiodev4

Đã ký, âm thanh 16 bit, thứ tự byte cuối lớn (được sử dụng bởi 68k, PowerPC, Sparc)

ossaudiodev5

Đã ký, âm thanh 8 bit

ossaudiodev6

Âm thanh nhỏ cuối 16-bit, không dấu

ossaudiodev7

Âm thanh big-endian 16-bit chưa được ký tên

Tham khảo tài liệu OSS để biết danh sách đầy đủ các định dạng âm thanh và lưu ý rằng hầu hết các thiết bị chỉ hỗ trợ một tập hợp con các định dạng này. Một số thiết bị cũ hơn chỉ hỗ trợ ossaudiodev2;

oss_audio_device. setfmt(định dạng)

Cố gắng đặt định dạng âm thanh hiện tại thành định dạng—xem danh sách. Trả về định dạng âm thanh mà thiết bị đã được đặt thành, có thể không phải là định dạng được yêu cầu. Cũng có thể được sử dụng để trả về định dạng âm thanh hiện tại—thực hiện việc này bằng cách chuyển "định dạng âm thanh" của OSError1

oss_audio_device. kênh(kênh)

Đặt số lượng kênh đầu ra thành nchannels. Giá trị 1 biểu thị âm thanh đơn âm, 2 âm thanh nổi. Một số thiết bị có thể có nhiều hơn 2 kênh và một số thiết bị cao cấp có thể không hỗ trợ đơn âm. Trả về số lượng kênh mà thiết bị đã được đặt thành

oss_audio_device. tốc độ(lấy mẫu)

Cố gắng đặt tốc độ lấy mẫu âm thanh thành lấy mẫu mỗi giây. Trả về tỷ lệ thực sự được đặt. Hầu hết các thiết bị âm thanh không hỗ trợ tốc độ lấy mẫu tùy ý. Tỷ lệ phổ biến là

Tỷ lệ

Sự miêu tả

8000

tỷ lệ mặc định cho ossaudiodev9

11025

ghi âm lời nói

22050

44100

Âm thanh chất lượng CD (ở 16 bit/mẫu và 2 kênh)

96000

Âm thanh chất lượng DVD (ở 24 bit/mẫu)

oss_audio_device. đồng bộ hóa()

Đợi cho đến khi thiết bị âm thanh phát từng byte trong bộ đệm của nó. (Điều này hoàn toàn xảy ra khi đóng thiết bị. ) Tài liệu PMNM khuyến nghị đóng và mở lại thiết bị hơn là sử dụng

oss_audio_device. đặt lại()

Dừng phát hoặc ghi ngay lập tức và đưa thiết bị về trạng thái có thể chấp nhận lệnh. Tài liệu PMNM khuyến nghị đóng và mở lại thiết bị sau khi gọi

oss_audio_device. bài đăng()

Cho người lái xe biết rằng đầu ra có khả năng bị tạm dừng, giúp thiết bị có thể xử lý việc tạm dừng một cách thông minh hơn. Bạn có thể sử dụng điều này sau khi phát hiệu ứng âm thanh tại chỗ, trước khi đợi người dùng nhập hoặc trước khi thực hiện I/O đĩa

Các phương thức tiện lợi sau đây kết hợp một số ioctl hoặc một ioctl và một số phép tính đơn giản

oss_audio_device. đặt tham số(định dạng , nkênh, samplerate[, strict=False])

Đặt các tham số lấy mẫu âm thanh chính—định dạng mẫu, số kênh và tốc độ lấy mẫu—trong một cuộc gọi phương thức. định dạng, nchannels và samplerate phải được chỉ định trong , và phương thức. Nếu nghiêm ngặt là đúng, hãy kiểm tra xem từng tham số có thực sự được đặt thành giá trị được yêu cầu hay không và tăng nếu không. Trả về một bộ (định dạng, nchannel, tốc độ lấy mẫu) cho biết các giá trị tham số thực sự được đặt bởi trình điều khiển thiết bị (i. e. , giống như giá trị trả về của , , và )

Ví dụ,

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

tương đương với

fmt = dsp.setfmt(fmt)
channels = dsp.channels(channels)
rate = dsp.rate(rate)

oss_audio_device. kích thước buf()

Trả về kích thước của bộ đệm phần cứng, trong các mẫu

oss_audio_device. số lượng tắc nghẽn()

Trả về số lượng mẫu trong bộ đệm phần cứng chưa được phát

oss_audio_device. tự do()

Trả về số lượng mẫu có thể được xếp vào hàng đợi vào bộ đệm phần cứng để phát mà không bị chặn

Các đối tượng thiết bị âm thanh cũng hỗ trợ một số thuộc tính chỉ đọc

oss_audio_device. đã đóng

Boolean cho biết thiết bị đã được đóng chưa

oss_audio_device. tên

Chuỗi chứa tên của tệp thiết bị

oss_audio_device. chế độ

Chế độ I/O cho tệp, hoặc là IOError3, IOError4 hoặc là IOError5

Đối tượng thiết bị trộn

Đối tượng bộ trộn cung cấp hai phương thức giống như tệp

oss_mixer_device. đóng()

Phương pháp này đóng tệp thiết bị trộn đang mở. Bất kỳ nỗ lực nào khác để sử dụng bộ trộn sau khi đóng tệp này sẽ làm tăng

oss_mixer_device. fileno()

Trả về số xử lý tệp của tệp thiết bị trộn đang mở

Đã thay đổi trong phiên bản 3. 2. Đối tượng bộ trộn cũng hỗ trợ giao thức quản lý bối cảnh.

Các phương pháp còn lại dành riêng cho trộn âm thanh

oss_mixer_device. điều khiển()

Phương thức này trả về một bitmask chỉ định các điều khiển bộ trộn có sẵn (“Điều khiển” là một “kênh” có thể trộn cụ thể, chẳng hạn như IOError7 hoặc IOError8). Mặt nạ bit này biểu thị một tập hợp con của tất cả các điều khiển bộ trộn có sẵn—các hằng số IOError9 được xác định ở cấp độ mô-đun. Ví dụ, để xác định xem đối tượng bộ trộn hiện tại có hỗ trợ bộ trộn PCM hay không, hãy sử dụng mã Python sau

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

Đối với hầu hết các mục đích, điều khiển 0 (âm lượng chính) và IOError7 là đủ—nhưng mã sử dụng bộ trộn phải linh hoạt khi chọn điều khiển bộ trộn. Ví dụ, trên Siêu âm Gravis, 0 không tồn tại

oss_mixer_device. điều khiển âm thanh nổi()

Trả về một bitmask cho biết điều khiển bộ trộn âm thanh nổi. Nếu một bit được đặt, điều khiển tương ứng là âm thanh nổi;

Xem ví dụ mã cho chức năng để biết ví dụ về nhận dữ liệu từ bitmask

oss_mixer_device. kiểm soát lại()

Trả về một bitmask chỉ định các điều khiển bộ trộn có thể được sử dụng để ghi. Xem ví dụ về mã để biết ví dụ về cách đọc từ bitmask

oss_mixer_device. nhận(kiểm soát)

Trả về âm lượng của điều khiển bộ trộn đã cho. Tập được trả về là 2-tuple 6. Âm lượng được chỉ định dưới dạng các số từ 0 (im lặng) đến 100 (âm lượng đầy đủ). Nếu điều khiển là đơn âm, bộ 2 vẫn được trả về, nhưng cả hai âm lượng đều giống nhau

Tăng nếu một điều khiển không hợp lệ được chỉ định hoặc nếu một điều khiển không được hỗ trợ được chỉ định

oss_mixer_device. đặt(kiểm soát , (, right))

Đặt âm lượng cho điều khiển bộ trộn nhất định thành 9. ossaudiodev0 và ossaudiodev1 phải là số nguyên và nằm trong khoảng từ 0 (im lặng) đến 100 (âm lượng đầy đủ). Khi thành công, âm lượng mới được trả về dưới dạng 2-tuple. Lưu ý rằng âm lượng này có thể không hoàn toàn giống với âm lượng được chỉ định do độ phân giải hạn chế của một số bộ trộn âm thanh

Tăng nếu điều khiển bộ trộn không hợp lệ được chỉ định hoặc nếu âm lượng được chỉ định nằm ngoài phạm vi

oss_mixer_device. get_recsrc()

Phương thức này trả về một bitmask cho biết (các) điều khiển nào hiện đang được sử dụng làm nguồn ghi

oss_mixer_device. set_recsrc(bitmask)

Gọi hàm này để chỉ định nguồn ghi. Trả về một bitmask cho biết nguồn ghi mới (hoặc các nguồn) nếu thành công; . Để đặt nguồn ghi âm hiện tại thành đầu vào micrô

Làm cách nào để nhập Sounddevice bằng Python?

Cài đặt .
cài đặt conda -c conda-forge python-sounddevice
python3 -m pip cài đặt thiết bị âm thanh
python3 -m pip gỡ cài đặt sounddevice

Làm cách nào để ghi lại âm thanh trong Python?

Chúng tôi có thể sử dụng mô-đun sounddevice của python để ghi và phát âm thanh. Mô-đun này cùng với mô-đun wavio hoặc scipy cung cấp cách lưu âm thanh đã ghi