Lấy mẫu lại Soundfile Python
(Ghi chú. bài đăng này được viết dưới dạng Notebook Jupyter có thể tìm thấy bằng mã Python tại https. //nbviewer. jupyter. org/gist/jthiem/0bb8b2296c8dbd0b83bfab8270a8eb24. ) Show Bây giờ tôi đã viết một gói mà bạn có thể cài đặt bằng pip Một trong những nhiệm vụ cơ bản nhất trong xử lý âm thanh mà bất kỳ ai cũng cần thực hiện là lấy mẫu lại các tệp âm thanh; . 44. 1k? . never sampled in the rate you want. 44.1k? 16k? 8k? Those are the common ones; there are some really odd ones out there. Lấy mẫu lại thực sự khá khó để làm đúng. Bạn cần chọn đúng các bộ lọc khử răng cưa của mình và viết quy trình nội suy/thập phân để không gây ra quá nhiều nhiễu. Đã có sách viết về chủ đề này. Đối với hầu hết các phần, không có cách phổ biến duy nhất để đạt được quyền này, vì bối cảnh quan trọng Để thảo luận chi tiết hơn về chuyển đổi tỷ lệ mẫu, hãy xem "Trang chủ lấy mẫu lại âm thanh kỹ thuật số" có tên thích hợp [https. //ccrma. standford. edu/~jos/mẫu lại/]. Sau đó nhìn vào [http. //src. vô hạn. ca/] để so sánh siêu thông tin về rất nhiều triển khai lấy mẫu lại. Không nghiêm túc đâu, đến đó đi. (Điều đó thôi thúc tôi so sánh các phương pháp bên dưới bằng cách sử dụng phép quét hình sin. ) MATLAB tích hợp sẵn Nhưng tôi không nói về MATLAB, tôi đang nói về Python ở đây và nó không có phương pháp lấy mẫu lại mặc định - trừ khi bạn đang thực hiện bất kỳ loại tính toán số nào, bạn sẽ sử dụng . Để vượt lên chính mình một chút, Có hai lựa chọn thay thế mà tôi muốn chỉ ra đó là "chìa khóa trao tay", nghĩa là bạn chỉ cần chỉ định tỷ lệ lấy mẫu lại của mình và thư viện sẽ thực hiện phần còn lại. Tôi biết một vài cái khác, nhưng tại thời điểm viết bài này, chúng có vẻ không dễ sử dụng (ví dụ:. chỉ thực hiện nội suy/thập phân, nhưng không tính toán bộ lọc. ) Nếu có những thư viện đáng chú ý khác mà tôi nên biết, vui lòng đề cập đến nó trong phần nhận xét về phiên bản blog của sổ ghi chép này [https. // tín hiệu đã xử lý. blogspot. de] Phương án thứ nhất là ______7_______. Sử dụng nó có hai vấn đề. nó dựa trên một thư viện (ngôn ngữ C) bên ngoài có tên là "Mã thỏ bí mật" (SRC như trong "chuyển đổi tỷ lệ mẫu", geddit?) hay còn gọi là libsamplerate [http. //www. siêu mọt sách. com/SRC/]. Bản thân nó không phải là vấn đề, nhưng bạn cần cài đặt nó và bước này không được tự động hóa trong pip và bạn bè (theo như tôi biết tại thời điểm viết). (Vấn đề đối với tôi là tôi cần chạy nó trên một nền tảng mà tôi không thể thực hiện việc này một cách dễ dàng. ) Vấn đề 2. scikit. lấy mẫu lại 0. 3. 3 chỉ là Python 2 và phiên bản Python 3 không chính thức (0. 4. 0-dev, tôi đã sử dụng [https. //github. com/gregorias/samplerate]). Tên còn lại là TL;DR. nếu bạn có thể cài đặt lib bên ngoài, hãy sử dụng scikit. lấy mẫu lại (0. 4. 0-nhà phát triển). Bây giờ để so sánh với hình ảnh đẹp Downsampling một lần quétMột nhiệm vụ phổ biến là chuyển đổi giữa tốc độ lấy mẫu CD là 44. 1 kHz và bội số của 8kHz bắt nguồn từ ngành công nghiệp telekon. Đặc biệt, 48kHz. (Được cho là tỷ lệ 44. 1k được chọn một phần vì rất khó chuyển đổi thành 48 kHz . Vì vậy, hãy lấy mẫu quét ở 48 kHz. (Xem Sổ tay Jupyter để biết mã Python) Quét 100-23900 Hz, được lấy mẫu ở 48 kHzBây giờ hãy chuyển nó thành 44. 1 kHz bằng các thư viện khác nhau và vẽ đồ thị phổ. Số lần quét tương tự được lấy mẫu xuống 44. 1 kHz sử dụng scikit. lấy mẫu lại.
Và đây là resampy . Có một số hiệu ứng phi tuyến vui nhộn, nhưng ở mức rất thấp - đối với các ứng dụng âm thanh nói chung không có gì đáng lo ngại. Ngay cả răng cưa cũng dưới -60 dB. Vì vậy, mặc dù không tốt bằng scikit.resample có thể sử dụng được và chắc chắn là tốt hơn . scipy.signal.resample !Upsampling một xungMột cách để kiểm tra bộ lọc khử răng cưa là lấy mẫu xung. Ở đây, lưu ý một khía cạnh khó chịu của tất cả các thư viện khác nhau này. giao diện hoàn toàn khác nhau giữa tất cả chúng; . Điều này có nghĩa là bạn không thể chỉ chuyển đổi giữa chúng bằng cách sử dụng >>> us2 = scipy_signal. lấy mẫu lại(xung, int(len(xung)*P/Q)) >>> us3 = resampy. lấy mẫu lại (xung, Q, P) >>> in(us1. hình dạng, us2. hình dạng, us3. hình dạng) (1087,) (1088,) (1088,) Đáp ứng tần số của một xung lấy mẫu từ 44. 1 kHz đến 48 kHz 'điên rồ. resample' chắc chắn sử dụng bộ lọc khử răng cưa tốt nhất, với độ dốc lớn, cho phép sử dụng rất ít năng lượng trên Nyquist. 'resampy' là một bộ lọc nhẹ nhàng hơn (có lẽ là bậc thấp hơn?) nhưng khá. 'scipy. tín hiệu. lấy mẫu lại'. tốt, dù sao đi nữa Các phản ứng thúc đẩy trông như thế nào trong miền thời gian? Lấy mẫu xung miền thời gian từ 44. 1 kHz đến 48 kHzCùng một phần của xung, nhưng với các mẫu được chuyển đổi thành dB (bình phương cường độ 10*log10)Không có gì đáng ngạc nhiên, 'resampy' là nhỏ gọn nhất, điều này giải thích cho việc cắt giảm nhẹ nhàng hơn. 'điên rồ. resample' rộng hơn, nhưng có thể chấp nhận được. 'scipy. tín hiệu. lấy mẫu lại' nhô ra như ngón tay cái đau Python Soundfile hỗ trợ những định dạng nào?Mô-đun tệp âm thanh có thể mở tất cả các định dạng tệp mà libsndfile hỗ trợ, chẳng hạn như tệp WAV, FLAC, OGG và MAT (xem Sự cố đã biết bên dưới .
Tốc độ lấy mẫu của WAV trong Python là gì?Soundfile trong Python là gì?PySoundFile là mô-đun Python được sử dụng để đọc và ghi tệp âm thanh , xem tệp âm thanh dưới dạng mảng NumPy bao gồm cao độ và tất cả. Mô-đun này có thể đọc tệp âm thanh tôi. e. nó trích xuất mảng NumPy từ âm thanh (. wav) và cũng có thể viết nó.
soundfile đọc trả về cái gì?always_2d (bool, tùy chọn) – Theo mặc định, việc đọc tệp âm thanh đơn âm sẽ trả về mảng một chiều . Với always_2d=True , dữ liệu âm thanh luôn được trả về dưới dạng mảng hai chiều, ngay cả khi tệp âm thanh chỉ có một kênh. |