Trăn phát hiện nốt nhạc

Trong thuật ngữ âm nhạc, khởi đầu đề cập đến sự bắt đầu của một nốt nhạc hoặc âm thanh khác. Trong bài đăng này, chúng tôi sẽ xem xét cách phát hiện các tập hợp âm nhạc với các thư viện xử lý tín hiệu âm thanh của Python, Aubio và librosa

Hướng dẫn này có liên quan ngay cả khi ứng dụng của bạn không sử dụng Python - ví dụ: bạn đang xây dựng trò chơi trong Unity và C# không có thư viện mạnh mẽ để phát hiện khởi động

Nếu đúng như vậy, bạn có thể xuất dấu thời gian bắt đầu được phát hiện thành tệp văn bản để đọc vào công cụ bạn chọn

Nếu bạn thích hướng dẫn bằng video hơn là một bài viết, thì đây là phiên bản video của hướng dẫn này

Các ứng dụng của Music Onset Detection

Tôi bắt gặp kỹ thuật phát hiện bắt đầu âm nhạc này khi tôi đang xây dựng trò chơi nhịp điệu và muốn có một cách tự động tạo bản đồ nhịp cho bất kỳ bài hát nào

Hãy xem phần cuối của bài viết này để biết trò chơi nhịp điệu mã nguồn mở của tôi và khóa học từng bước của tôi về cách tôi xây dựng nó

Giới thiệu trò chơi nhịp điệu của tôi

Ngoài việc xây dựng một trò chơi nhịp điệu, kỹ thuật này còn có rất nhiều ứng dụng khác

Ví dụ: phát hiện các bộ khởi động thường là bước đầu tiên trong quá trình truy xuất và phân tích thông tin âm nhạc

Một ví dụ khác có thể là chúng tôi đang xây dựng một trò chơi trong đó có những cảnh chiến đấu. Chúng tôi có thể phát hiện các phần khởi động trong BGM và sinh ra kẻ thù ở mỗi lần khởi động. Điều này có thể tạo nhịp độ độc đáo trong trò chơi của chúng tôi

Tôi sẽ trình bày cách phát hiện các bộ phát nhạc bằng hai gói Python khác nhau để xử lý tín hiệu âm thanh, Aubio và librosa. Cả hai gói đều phát hiện các tập hợp khá chính xác. Sự khác biệt nhỏ là librosa hoạt động ở định dạng OGG trong khi Aubio thì không

Cách thiết lập môi trường phát triển

Chúng tôi sẽ cài đặt các gói của chúng tôi trong một môi trường ảo

Trong dòng lệnh ta tạo môi trường ảo tên là

$ . python-aubio-librosa/bin/activate
2 như sau.
$ . python-aubio-librosa/bin/activate
3 là viết tắt của
$ . python-aubio-librosa/bin/activate
4

$ python3 -m venv python-aubio-librosa

Sau đó, chúng tôi kích hoạt môi trường ảo

$ . python-aubio-librosa/bin/activate

Lưu ý rằng nếu bạn cố gắng kích hoạt môi trường bằng lệnh sau, bạn sẽ gặp lỗi

$ ./python-aubio-librosa/bin/activate
-bash: ./python-aubio-librosa/bin/activate: Permission denied

Sau khi môi trường của bạn được kích hoạt, tên của môi trường sẽ hiển thị trong dấu ngoặc đơn

[python-aubio-librosa] $ ...

Chúng tôi có thể kiểm tra xem nếu chúng tôi gọi

$ . python-aubio-librosa/bin/activate
5 hoặc
$ . python-aubio-librosa/bin/activate
6, các chương trình được gọi sẽ là những chương trình trong môi trường ảo của chúng tôi thay vì các chương trình cấp hệ thống

Nếu chúng tôi chưa kích hoạt môi trường của mình, đầu ra sẽ trỏ đến các chương trình cấp hệ thống

$ which python
/usr/bin/python
$ which pip
/usr/local/bin/pip

Khi chúng tôi đã kích hoạt môi trường của mình, đầu ra sẽ trỏ đến môi trường cục bộ

$ . python-aubio-librosa/bin/activate
0

Cách cài đặt và sử dụng Aubio

Chúng tôi sẽ cài đặt Aubio qua

$ . python-aubio-librosa/bin/activate
6

$ . python-aubio-librosa/bin/activate
2

Hàm mà chúng tôi sẽ sử dụng để tạo danh sách dấu thời gian khởi động dưới dạng số dấu phẩy động tính bằng giây như sau. Chức năng này đến từ các tài liệu chính thức của Aubio, vì vậy chúng ta có thể sử dụng nó mà không cần tìm hiểu về các chi tiết cơ bản [như FFT, Biến đổi Fourier nhanh] trong xử lý tín hiệu âm thanh

$ . python-aubio-librosa/bin/activate
3

Sau đó, chúng tôi viết một hàm

$ . python-aubio-librosa/bin/activate
8 lấy đường dẫn đến tệp âm thanh và xuất dấu thời gian bắt đầu thành một tệp, giữ bốn vị trí thập phân đầu tiên trong mỗi dấu phẩy, một dấu phẩy trên mỗi dòng

$ . python-aubio-librosa/bin/activate
5

Hãy gọi tập lệnh từ dòng lệnh. Aubio có thể đưa ra cảnh báo về độ chính xác nhưng thử nghiệm của tôi cho thấy Aubio vẫn khá chính xác

$ . python-aubio-librosa/bin/activate
6

Một tập tin đầu ra ví dụ sẽ giống như dưới đây. Đối với một đoạn nhạc ngắn 15 giây, Aubio đã phát hiện 26 bộ. Đây là những dấu thời gian mà chúng ta có thể sử dụng cho ứng dụng của mình

Một tệp đầu ra ví dụ bao gồm các dấu thời gian bắt đầu

Và đó là nó cho Aubio

Cách cài đặt và sử dụng Librosa

Tương tự như Aubio, chúng tôi sẽ cài đặt librosa cũng thông qua

$ . python-aubio-librosa/bin/activate
6

$ . python-aubio-librosa/bin/activate
0

So với Aubio, các phương pháp thư viện của librosa dễ sử dụng hơn.

$ ./python-aubio-librosa/bin/activate
-bash: ./python-aubio-librosa/bin/activate: Permission denied
0 trả về một mảng NumPy
$ ./python-aubio-librosa/bin/activate
-bash: ./python-aubio-librosa/bin/activate: Permission denied
1 và tốc độ lấy mẫu
$ ./python-aubio-librosa/bin/activate
-bash: ./python-aubio-librosa/bin/activate: Permission denied
2, mà chúng tôi chuyển đến
$ ./python-aubio-librosa/bin/activate
-bash: ./python-aubio-librosa/bin/activate: Permission denied
3 để nhận danh sách các khung bắt đầu

Cuối cùng, chúng tôi chuyển đổi các khung bắt đầu thành dấu thời gian bắt đầu và ghi từng dấu thời gian vào một tệp đầu ra giống như chúng tôi đã làm cho Aubio

$ . python-aubio-librosa/bin/activate
1

Tệp đầu ra sẽ có cùng định dạng như được hiển thị ở trên đối với Aubio

Phần kết luận

Cảm ơn bạn đã đọc và tôi hy vọng bạn đã sẵn sàng áp dụng kỹ thuật phát hiện khởi phát này cho dự án tiếp theo của mình. 🎶

Như một bản tóm tắt về sự khác biệt giữa Aubio và Librosa, cả hai đều phát hiện các bộ khởi động khá chính xác dựa trên thử nghiệm của tôi

Aubio bị hạn chế nhiều hơn về định dạng tệp âm thanh. nó đưa ra cảnh báo về độ chính xác cho các tệp MP3 và không xử lý các tệp OGG

Mặt khác, Librosa có thể xử lý hầu hết các định dạng tệp âm thanh phổ biến. MP3, OGG, FLAC và M4A. Giao diện thư viện của Librosa cũng dễ sử dụng hơn của Aubio, đặc biệt đối với những người trong chúng ta không chuyên về xử lý tín hiệu

Hãy xem các tài nguyên bên dưới nếu bạn muốn tìm hiểu thêm hoặc lấy cảm hứng cho dự án tiếp theo của mình

Tài nguyên

Bạn có thể xem mã được sử dụng trong hướng dẫn này trên GitHub của tôi hoặc xem phiên bản video của hướng dẫn này trên YouTube

Nếu bạn quan tâm đến việc xây dựng trò chơi nhịp điệu, hãy xem mã nguồn mở của tôi được xây dựng bằng Python trên GitHub và khóa học Udemy của tôi, trong đó chúng tôi sẽ xây dựng trò chơi từ đầu

Ren'Py Minigame 101

Tìm hiểu cách xây dựng trò chơi nhỏ trong Ren'Py & Python bằng cách xây dựng Trò chơi nhịp điệu từ đầu

Udemy

Nếu bạn muốn biết khóa học có phù hợp với mình hay không, hãy xem video quảng cáo khóa học của tôi trên YouTube và các bài giảng mẫu miễn phí trên Udemy

Kênh YouTube của tôi cũng có các hướng dẫn dự án thú vị khác như xây dựng Chatbot AI của Discord và một loạt các khóa học phỏng vấn viết mã mà tôi đang phát triển. Hy vọng sẽ gặp bạn ở đó

Phòng thí nghiệm Dev của Lynn

Xin chào, tôi là Lynn. Tôi là Kỹ sư phần mềm và Nhà phát triển trò chơi có sở thích. Tôi đã hoàn thành bằng chung BS/MS về Khoa học Máy tính trong bốn năm tại Đại học Chicago, tốt nghiệp vào năm 2021. Tại kênh của tôi, bạn có thể mong đợi được cập nhật hàng tháng các hướng dẫn thú vị về dự án kỹ thuật, bản trình diễn trò chơi dành cho nhà phát triển của tôi, …

YouTube

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

Lynn Zheng

SWE @ Lực lượng bán hàng. UChicago BS/MS trong CS. Trang web cá nhân. https. //ruolinzheng08. github. io/. YouTube. https. //www. youtube. com/channel/UCZ2MeG5jTIqgzEMiByrIzsw

Nếu bạn đọc đến đây, hãy tweet cho tác giả để cho họ thấy bạn quan tâm. Tweet một lời cảm ơn

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

Chủ Đề