Thẻ âm thanh Python github

Cam kết này không thuộc về bất kỳ nhánh nào trên kho lưu trữ này và có thể thuộc về một nhánh bên ngoài kho lưu trữ

Bạn không thể thực hiện hành động đó vào lúc này

Bạn đã đăng nhập bằng tab hoặc cửa sổ khác. Tải lại để làm mới phiên của bạn. Bạn đã đăng xuất trong một tab hoặc cửa sổ khác. Tải lại để làm mới phiên của bạn

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh Git chấp nhận cả tên thẻ và tên nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi không mong muốn. Bạn có chắc chắn muốn tạo nhánh này không?

Cam kết này không thuộc về bất kỳ nhánh nào trên kho lưu trữ này và có thể thuộc về một nhánh bên ngoài kho lưu trữ

Bạn không thể thực hiện hành động đó vào lúc này

Bạn đã đăng nhập bằng tab hoặc cửa sổ khác. Tải lại để làm mới phiên của bạn. Bạn đã đăng xuất trong một tab hoặc cửa sổ khác. Tải lại để làm mới phiên của bạn

PySoundCard sử dụng thư viện C portaudio để giao tiếp với card âm thanh. Sau nhiều năm nghiên cứu vấn đề này, tôi đã đi đến kết luận rằng đây không phải là cách tốt nhất để thực hiện mọi việc trong Python. Thay vào đó, chúng ta nên giao tiếp trực tiếp với thư viện âm thanh gốc, thay vì đi qua thư viện C trung gian

Vì vậy, trọng tâm của tôi bây giờ là một mô-đun python mới hơn có tên là SoundCard, nó chỉ làm được điều đó. Cách tiếp cận này dễ sử dụng hơn nhiều, không có phụ thuộc nhị phân, hoạt động tốt hơn và không phụ thuộc vào thư viện bên ngoài

Thay vào đó, nếu bạn muốn phiên bản giao diện portaudio được bảo trì tốt hơn cho Python, vui lòng xem SoundDevice

PySoundCard

PySoundCard là một thư viện âm thanh dựa trên PortAudio, CFFI và NumPy

PySoundCard có thể phát và ghi dữ liệu âm thanh. Các thiết bị âm thanh được hỗ trợ thông qua PortAudio, đây là thư viện I/O âm thanh mã nguồn mở, đa nền tảng, miễn phí chạy trên các nền tảng bao gồm Windows, OS X và Unix [OSS/ALSA]. Nó được truy cập thông qua CFFI, là một giao diện chức năng nước ngoài cho Python gọi mã C. CFFI được hỗ trợ cho CPython 2. 6+, 3. x và PyPy 2. 0+. PySoundCard biểu thị dữ liệu âm thanh dưới dạng mảng NumPy

PySoundCard được lấy cảm hứng từ PyAudio. Điểm khác biệt chính của nó là nó sử dụng CFFI thay vì tiện ích mở rộng CPython và cố gắng triển khai giao diện Pythonic hơn. Đặc tính hiệu suất của nó rất giống nhau

PySoundCard được cấp phép BSD.
[c] 2013, Bastian Bechtold

Cài đặt

PySoundCard hiện có sẵn dưới dạng bánh xe pip nhị phân bao gồm PortAudio. Do đó,

import sys
import numpy as np
from scipy.io.wavfile import read as wavread
from pysoundcard import Stream

"""Play an audio file."""

fs, wave = wavread[sys.argv[1]]
wave = np.array[wave, dtype=np.float32]
wave /= 2**15 # normalize -max_int16..max_int16 to -1..1

blocksize = 16
s = Stream[samplerate=fs, blocksize=blocksize]
s.start[]
s.write[wave]
s.stop[]
0 chỉ nên hoạt động trên Windows và OS X. Trên Linux, trước tiên bạn vẫn phải cài đặt PortAudio thông qua trình quản lý gói của mình

Về phía Python, bạn cần có CFFI và Numpy để sử dụng PySoundCard. Ngoài ra, Bạn cần cài đặt thư viện PortAudio trên máy tính. Trên Unix, sử dụng trình quản lý gói của bạn để cài đặt PortAudio. Sau đó, chỉ cần cài đặt PySoundCard bằng pip hoặc

import sys
import numpy as np
from scipy.io.wavfile import read as wavread
from pysoundcard import Stream

"""Play an audio file."""

fs, wave = wavread[sys.argv[1]]
wave = np.array[wave, dtype=np.float32]
wave /= 2**15 # normalize -max_int16..max_int16 to -1..1

blocksize = 16
s = Stream[samplerate=fs, blocksize=blocksize]
s.start[]
s.write[wave]
s.stop[]
1

Nếu bạn đang chạy Windows, tôi khuyên bạn nên sử dụng [Anaconda][] hoặc một số bản phân phối tương tự. Điều này sẽ thiết lập cho bạn tất cả các mô-đun bạn cần cho PySoundCard

Nếu bạn muốn sử dụng trình cài đặt Windows, bạn cũng cần cài đặt Numpy, CFFI và phần phụ thuộc của nó, PyCParser. Một nơi tốt để có được những thứ này là Các tệp nhị phân Windows không chính thức cho Python. Sau khi cài đặt chúng, bạn có thể tải xuống trình cài đặt Windows cho PySoundCard

PySoundCard-0. 5. 0. win-amd64-py2. 7
PySoundCard-0. 5. 0. win-amd64-py3. 3
PySoundCard-0. 5. 0. win32-py2. 7
PySoundCard-0. 5. 0. win32-py3. 3

Cách sử dụng

Khối xây dựng cơ bản của đầu vào/đầu ra âm thanh trong PySoundCard là các luồng. Luồng đại diện cho card âm thanh, cho cả phát lại và ghi âm. Mỗi luồng có tốc độ mẫu, kích thước khối, thiết bị đầu vào và/hoặc thiết bị đầu ra

Một luồng có thể là song công hoàn toàn [cả đầu vào và đầu ra] hoặc bán song công [đầu vào hoặc đầu ra]. Điều này được xác định bằng cách chỉ định một hoặc hai thiết bị cho luồng. Cả hai thiết bị phải là một phần của cùng một API âm thanh

Có hai chế độ hoạt động cho các luồng. chế độ đọc/ghi và gọi lại

Chế độ Đọc/Ghi

Ở chế độ đọc/ghi, hai phương thức được sử dụng để phát/ghi âm thanh. Để phát lại, bạn

import sys
import numpy as np
from scipy.io.wavfile import read as wavread
from pysoundcard import Stream

"""Play an audio file."""

fs, wave = wavread[sys.argv[1]]
wave = np.array[wave, dtype=np.float32]
wave /= 2**15 # normalize -max_int16..max_int16 to -1..1

blocksize = 16
s = Stream[samplerate=fs, blocksize=blocksize]
s.start[]
s.write[wave]
s.stop[]
2 tới một luồng. Để ghi âm, bạn
import sys
import numpy as np
from scipy.io.wavfile import read as wavread
from pysoundcard import Stream

"""Play an audio file."""

fs, wave = wavread[sys.argv[1]]
wave = np.array[wave, dtype=np.float32]
wave /= 2**15 # normalize -max_int16..max_int16 to -1..1

blocksize = 16
s = Stream[samplerate=fs, blocksize=blocksize]
s.start[]
s.write[wave]
s.stop[]
3 từ một luồng. Bạn có thể đọc/ghi tối đa một khối dữ liệu âm thanh vào một luồng mà không cần phải đợi luồng đó phát

Đây là một ví dụ về chương trình ghi một khối âm thanh và phát lại ngay lập tức

from pysoundcard import Stream

"""Loop back five seconds of audio data."""

fs = 44100
blocksize = 16
s = Stream[samplerate=fs, blocksize=blocksize]
s.start[]
for n in range[int[fs*5/blocksize]]:
    s.write[s.read[blocksize]]
s.stop[]

Đây là một ví dụ khác đọc tệp sóng và phát lại tệp đó

import sys
import numpy as np
from scipy.io.wavfile import read as wavread
from pysoundcard import Stream

"""Play an audio file."""

fs, wave = wavread[sys.argv[1]]
wave = np.array[wave, dtype=np.float32]
wave /= 2**15 # normalize -max_int16..max_int16 to -1..1

blocksize = 16
s = Stream[samplerate=fs, blocksize=blocksize]
s.start[]
s.write[wave]
s.stop[]

Chế độ gọi lại

Trong chế độ gọi lại, chức năng gọi lại được xác định, chức năng này sẽ được gọi không đồng bộ bất cứ khi nào có sẵn một khối dữ liệu âm thanh mới để đọc hoặc ghi. Hàm gọi lại sau đó phải cung cấp/tiêu thụ một khối dữ liệu âm thanh

Đây là một ví dụ tương đương với ví dụ loopback trước đó. Như bạn có thể thấy, luồng điều khiển tiếp tục bình thường sau

import sys
import numpy as np
from scipy.io.wavfile import read as wavread
from pysoundcard import Stream

"""Play an audio file."""

fs, wave = wavread[sys.argv[1]]
wave = np.array[wave, dtype=np.float32]
wave /= 2**15 # normalize -max_int16..max_int16 to -1..1

blocksize = 16
s = Stream[samplerate=fs, blocksize=blocksize]
s.start[]
s.write[wave]
s.stop[]
0 trong khi cuộc gọi lại đang chạy trong một luồng khác. Điều này rất hữu ích cho các bộ tổng hợp hoặc hiệu ứng âm thanh giống như bộ lọc

from pysoundcard import Stream, continue_flag
import time

"""Loop back five seconds of audio data."""

def callback[in_data, out_data, time_info, status]:
    out_data[:] = in_data
    return continue_flag

s = Stream[samplerate=44100, blocksize=16, callback=callback]
s.start[]
time.sleep[5]
s.stop[]

Chữ ký gọi lại đã thay đổi kể từ lần phát hành cuối cùng trên PyPi. Chúng tôi hiện đang làm việc trên một bản phát hành mới với chữ ký trên. Nếu bạn đang chạy PySoundCard từ PyPi [v0. 5. 0], hãy sử dụng mã này để thay thế

def callback[in_data, time_info, status]:
    return [out_data, continue_flag]

Khi nào nên sử dụng Chế độ đọc/ghi hoặc Chế độ gọi lại

Nói chung, chế độ gọi lại là cách sử dụng PySoundCard linh hoạt và mạnh mẽ hơn. Tuy nhiên, nó phức tạp hơn và kém hiệu quả hơn. Nhiều ứng dụng sẽ yêu cầu chế độ gọi lại vì luồng của nó. Ngoài ra, rất đơn giản để viết các hiệu ứng âm thanh giống như bộ lọc ở chế độ gọi lại vì đầu vào và đầu ra âm thanh có sẵn

Tuy nhiên, nhiều tác vụ đơn giản, chẳng hạn như phát hoặc ghi một đoạn dữ liệu âm thanh được thực hiện dễ dàng hơn bằng cách sử dụng chế độ đọc/ghi. Ngoài ra, đọc/ghi chạy nhanh hơn một chút và có thể tạo/tiêu thụ dữ liệu thô nếu được yêu cầu

Nếu không có dữ liệu nào được đọc/ghi trong khi ở chế độ Đọc/Ghi, các bản ghi sẽ bị loại bỏ và chế độ im lặng sẽ được phát. Trong chế độ gọi lại, lỗi không cung cấp dữ liệu âm thanh trong cuộc gọi lại. Sử dụng

import sys
import numpy as np
from scipy.io.wavfile import read as wavread
from pysoundcard import Stream

"""Play an audio file."""

fs, wave = wavread[sys.argv[1]]
wave = np.array[wave, dtype=np.float32]
wave /= 2**15 # normalize -max_int16..max_int16 to -1..1

blocksize = 16
s = Stream[samplerate=fs, blocksize=blocksize]
s.start[]
s.write[wave]
s.stop[]
1 nếu bạn muốn chơi im lặng

Trình quản lý bối cảnh

Ngoài các phương thức

import sys
import numpy as np
from scipy.io.wavfile import read as wavread
from pysoundcard import Stream

"""Play an audio file."""

fs, wave = wavread[sys.argv[1]]
wave = np.array[wave, dtype=np.float32]
wave /= 2**15 # normalize -max_int16..max_int16 to -1..1

blocksize = 16
s = Stream[samplerate=fs, blocksize=blocksize]
s.start[]
s.write[wave]
s.stop[]
2 và
import sys
import numpy as np
from scipy.io.wavfile import read as wavread
from pysoundcard import Stream

"""Play an audio file."""

fs, wave = wavread[sys.argv[1]]
wave = np.array[wave, dtype=np.float32]
wave /= 2**15 # normalize -max_int16..max_int16 to -1..1

blocksize = 16
s = Stream[samplerate=fs, blocksize=blocksize]
s.start[]
s.write[wave]
s.stop[]
3, còn có một trình quản lý bối cảnh giúp mọi việc trở nên thuận tiện hơn trong các trường hợp đơn giản

________số 8

Chữ ký gọi lại đã thay đổi kể từ lần phát hành cuối cùng trên PyPi. Chúng tôi hiện đang làm việc trên một bản phát hành mới với chữ ký trên. Nếu bạn đang chạy PySoundCard từ PyPi [v0. 5. 0], hãy sử dụng mã này để thay thế

def callback[in_data, time_info, status]:
    return [out_data, continue_flag]

Hiệu suất

PySoundCard sử dụng thư viện CFFI trong nội bộ. Hiệu suất là một mục tiêu lớn cho dự án. Trên máy tính Apple gần đây, kích thước khối của hai hoặc bốn mẫu sẽ không có vấn đề gì ở tốc độ lấy mẫu là 44100 hoặc 48000 Hz

Tuy nhiên, hiệu suất bị ảnh hưởng mạnh bởi API đang sử dụng. Ngoài ra, một số tổ hợp thiết bị âm thanh có thể gặp sự cố ngay cả khi chúng là một phần của cùng một API. Nói chung, hãy cố gắng chỉ mở các luồng song công hoàn toàn trên các thiết bị đầu vào/đầu ra của cùng một card âm thanh vật lý để có hiệu suất tối đa

Tên

Đợi đã, không phải cái này được gọi là PyAudio-CFFI và PySoundIO vừa rồi sao? . Tuy nhiên, nó nhanh chóng phát triển thành một thứ gì đó khác biệt, đảm bảo một cái tên khác. Tuy nhiên, PySoundIO hóa ra lại là một cái tên mà tôi dường như không thể nhớ được, đó là một dấu hiệu xấu. Vì vậy, tôi đã đổi tên nó thành PySoundCard. Ngoài ra, PySoundCard có âm thanh tương tự như PySoundFile mà tôi đã phát triển cùng lúc và cách sử dụng khá giống nhau

Chủ Đề