2013-06-26 41 views
6

Tôi đang cố gắng triển khai một hệ thống có thể tạo ra một bản nhạc cho bản nhạc piano và khi nó được phát, nghĩa là, nó phải là bản sao thời gian thực chứ không phải bản ghi âm cái.Bản nhạc thời gian thực

Cho đến nay tôi đã thử nghiệm trên wav file, sử dụng FFt on MATLAB, nhưng khi nói đến thời gian thực, hệ thống cần phải được thực sự-thật nhanh.

Mọi góp ý về loại của phương pháp tôi có thể sử dụng, loại của hội đồng quản trị (tôi đã nghĩ đến việc sử dụng Arduino). Tôi có thể sử dụng, bởi vì tôi muốn chuyển trực tiếp số MATLAB code của mình thay vì chuyển đổi nó thành C.

+1

1 dự án thú vị, tôi đã không làm việc với phiên mã âm nhạc, nhưng theo ý kiến ​​của tôi bạn sẽ cần phải ghi lại các mảnh trong những mảnh nhỏ và bảng điểm họ. –

+0

Tôi đoán rằng cách tiếp cận này sẽ chỉ phù hợp với việc ghi lại các ghi chú độc lập. Các hợp âm sao chép có lẽ sẽ không mang lại kết quả tốt. Bàn phím midi sẽ dễ dàng hơn nhiều. –

+0

Dự án rất thú vị. Bạn có thể cho chúng tôi biết việc triển khai dựa trên fft hiện tại của bạn hoạt động nhanh như thế nào không? Tôi nghĩ rằng fft được cho là O (n log (n)), mà đã rất nhanh. – Oli

Trả lời

1

Bất kỳ đề xuất nào về cách tiếp cận tôi có thể sử dụng, loại bảng (Tôi đã nghĩ đến việc sử dụng Arduino)). Tôi có thể sử dụng, bởi vì tôi muốn trực tiếp chuyển mã MATLAB của tôi chứ không phải là chuyển đổi nó để C.

Bạn có thể có cách tiếp cận khác nhau để dự án của bạn mà tôi có thể nghĩ đến:

  1. Đầu tiên là một số cây đàn piano có một thiết bị điện tử có thể xuất các ghi chú đã chơi thông qua một giao diện midi, với vận tốc và vị trí. Đó là giải pháp chính xác và nhanh nhất để theo dõi các ghi chú đã chơi, mặc dù không có nhiều DIY. Về phía máy tính, bạn sẽ chỉ cần một giao diện midi (có thể dễ dàng thực hiện bằng cách sử dụng một Arduino) và có một phần mềm chuyển đổi ghi chú MIDI thành một điểm số;
  2. Sau đó, bạn có thể bắt chước hành vi đó, bằng cách nối bàn phím của piano với các cảm biến có thể đo vận tốc và ghi chú nào đã được phát. Có nhiều chiến lược bạn có thể sử dụng (từ việc sử dụng laser trên cơ học, công tắc áp suất ...), tất cả phụ thuộc vào đầu tư bạn sẵn sàng thực hiện; Có một arduino (như mega hoặc do) có thể là một giải pháp tốt.
  3. Nhưng khi bạn đang nói về FFT, tôi cho rằng bạn muốn ghi lại âm thanh do đàn piano tạo ra và phát hiện các phím. Ở đó bạn đã đạt được kiến ​​thức nghệ thuật về nghiên cứu âm nhạc, vấn đề bạn gặp phải là multiple f0 detection inpolyphonic music, mặc dù có strategies specific to piano, đó vẫn là một lĩnh vực nghiên cứu rất tích cực.
  4. Giả sử bạn chỉ thực hiện phát hiện đơn âm cho phiên âm. Vấn đề sẽ là Analogical-Digital-Converter bao gồm trong Arduino chỉ hút, nó có một định nghĩa của 10bit đó là cách quá thấp để phát hiện bất cứ điều gì hữu ích. Với Arduino DUE, bạn có thể có một chút định nghĩa hơn vì nó có tính năng 16-bit 12-bit 1Msps ADC. Mà vẫn không nhiều cho một phiên mã tốt. Vì vậy, bạn sẽ phải tạo ra sử dụng một ADC bên ngoài như Linear LTC2383-16 đó là 16bit 1Msps và có một giao diện SPI, tối thiểu để bắt đầu chơi. Đằng sau đó bạn sẽ cần phải tìm đúng micro và tạo ra các thiết bị điện tử tốt giữa ADC và micro (mà tôi không biết nhiều).
  5. Cuối cùng, sẽ không dễ dàng hơn khi sử dụng một máy tính nhỏ (như Beaglebone hoặc RaspberryPI 5), cắm thẻ USB/âm thanh USB thực sự tốt và sử dụng bảng đó để nối qua bản sao? Bạn cũng có thể chạy phần mềm của bạn trên một máy chủ đám mây (như google appengine hoặc AWS) có đủ bộ xử lý để làm cho Matlab của bạn chạy một cách vui vẻ.

Vì vậy, để tạo thời gian thực và phiên âm nhạc nhúng, giải pháp tốt nhất là giải pháp đầu tiên (hoặc thứ hai nếu bạn thực sự muốn sử dụng DIY). Nếu bạn thực sự muốn đi qua các giao diện "không khí", tôi nghĩ rằng giải pháp tốt là thứ năm.

Và cuối cùng, về mã, tôi khuyên bạn nên chuyển đổi mã của bạn từ Matlab sang Python (nếu bạn không muốn viết mã C/C++), nó sẽ chạy nhanh hơn đáng kể. Vì vậy, bạn có thể tìm ra Matlab tệ như thế nào, khi tôi đang làm việc cho IRCAM, tôi đã viết một công cụ chuyển đổi mã nguồn Matlab thành mã nguồn C++, và khi kết quả biên dịch nhanh hơn 40 lần.

HTH

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