2012-02-20 18 views
12

(Lời nói đầu: Đây là câu hỏi liên quan đến âm thanh đầu tiên của tôi trên Stack Overflow, vì vậy tôi sẽ cố gắng nói điều này tốt nhất có thể.)Sử dụng AVFoundation/CoreMedia/Other Frameworks để phát hiện Beats/Onsets

Tôi đang tạo một ứng dụng cho phép người dùng lặp nhạc. Tại thời điểm nguyên mẫu của chúng tôi cho phép các "dấu vòng lặp" (được thực hiện như UISliders) để chụp ở mỗi giây, xác định đầu và cuối của một vòng lặp. Rõ ràng, khi lặp lại âm nhạc, giây là một cách rất thô lỗ để xử lý điều này, vì vậy tôi muốn sử dụng nhịp đập thay vào đó.

Tôi không muốn làm bất cứ điều gì khác hơn là đánh dấu nhịp đập cho UISliders snap vào:

  • Thức ăn phương pháp loadMusic của chúng tôi một tập tin âm thanh.
  • Chạy qua thư viện để phát hiện nhịp đập hoặc khoảng cách giữa chúng (có thể).
  • Nạp giá trị đó vào phương thức setNumberOfTickMarks: của thanh trượt.
  • Lợi nhuận!

Thật không may, hầu hết các kết quả tôi đã chạy qua Google và SO đã mang lại nhiều thư viện phát hiện nhịp tiên tiến hơn giống như thư viện sẽ sử dụng. Quá mức cần thiết trong trường hợp của tôi.

Đây có phải là thứ mà CoreMedia, AVFoundation hoặc AudioToolbox có thể xử lý không? Nếu không, có thư viện nào khác có thể xử lý việc này không? Nghiên cứu của tôi về tài liệu của Apple chỉ mang lại kết quả có liên quan ... cho các tệp MIDI. Nhưng phần mềm của Apple có các tính năng như thế này, chẳng hạn như iMovie's snap-to-beats functionality.

Bất kỳ hướng dẫn, mã hoặc tóm tắt nào sẽ vô cùng hữu ích vào thời điểm này.

EDIT: Sau khi thực hiện một chút đào bới xung quanh, có vẻ như các thuật ngữ chính xác cho những gì tôi đang tìm kiếm bắt đầu phát hiện là.

+1

Vâng, bạn cần phải có quyền truy cập vào các dữ liệu pcm tinh khiết.Chọn bất kỳ audio lib nào cung cấp và áp dụng algortihms hiện có cho dữ liệu –

+0

Bạn đã thấy câu hỏi này? Nó dường như có liên kết đến một số giải pháp khá tốt. http://stackoverflow.com/questions/657073/how-to-detect-bpm-of-the-song-by-programming –

Trả lời

4

Thuật toán Phát hiện khởi động có nhiều hương vị từ việc xem tín hiệu âm nhạc thô đến sử dụng kỹ thuật miền tần số.

nếu bạn muốn một cách nhanh chóng và dễ dàng thạch để xác định nơi nhịp đập là:

  1. Chop lên tín hiệu âm nhạc thành các đoạn nhỏ (20-50ms khối)

  2. Tính tổng trung bình bình phương của tín hiệu : Sum(Xn ^2)/N (nơi N là số mẫu mỗi 20-50ms)

Nếu bạn muốn các kỹ thuật phức tạp hơn nhìn vào:

http://bingweb.binghamton.edu/~ahess2/Onset_Detection_Nov302011.pdf

hoặc để điều trị hardcore của nó:

http://www.elec.qmul.ac.uk/people/juan/Documents/Bello-TSAP-2005.pdf

Các vấn đề liên quan