Mục lục:

Bộ chuyển đổi âm thanh sang MIDI trong thời gian thực.: 7 bước
Bộ chuyển đổi âm thanh sang MIDI trong thời gian thực.: 7 bước

Video: Bộ chuyển đổi âm thanh sang MIDI trong thời gian thực.: 7 bước

Video: Bộ chuyển đổi âm thanh sang MIDI trong thời gian thực.: 7 bước
Video: Hướng Dẫn Chuyển Sample Audio Thành MIDI Trong 3 Phút 2024, Tháng bảy
Anonim
Bộ chuyển đổi âm thanh sang MIDI trong thời gian thực
Bộ chuyển đổi âm thanh sang MIDI trong thời gian thực

Namaste mọi người! Đây là một dự án mà tôi đã thực hiện cho một trong các khóa học của tôi (Xử lý tín hiệu kỹ thuật số theo thời gian thực) trong chương trình cử nhân của tôi. Dự án nhằm mục đích tạo ra một hệ thống DSP "lắng nghe" dữ liệu âm thanh và xuất ra các thông điệp MIDI của các ghi chú tương ứng qua UART. Arduino Nano đã được sử dụng cho mục đích này. Tóm lại, bộ điều khiển vi mô thực hiện FFT trên dữ liệu âm thanh đến và thực hiện một số phân tích các đỉnh và gửi thông báo MIDI thích hợp. Tuy nhiên, đừng bận tâm về MOSFET vì chúng dành cho một số dự án khác (sẽ được đưa ra sau trong phần hướng dẫn) và không bắt buộc đối với dự án này. Vì vậy, chúng ta hãy bắt đầu đã !!

Bước 1: Các thành phần cần thiết

Thành phần bắt buộc
Thành phần bắt buộc

Chúng tôi sẽ cần các thành phần sau để xây dựng dự án này mặc dù nhiều thành phần trong số này là chung và có thể được thay thế bằng các thành phần tương đương của chúng. Cũng tham khảo sơ đồ mạch để tìm ra và tìm kiếm các triển khai tốt hơn.

Số lượng thành phần

1. Microphone Electret. 1

2. Điện trở 30 Kilo Ohm. 1

3. Điện trở 150 Kilo Ohm. 1

4. Điện trở 100 ohm. 1

5. Điện trở 2,2 Kilo Ohm. 3

6. Nồi đặt sẵn 10 Kilo Ohm. 1

7. Nồi tông đơ 10 Kilo Ohm. 1

8. Nồi âm thanh nổi 47 Kilo Ohm. 1

9. Điện trở 470 Ohms. 2

10. tụ điện 0,01uF. 2

11. Tụ điện 2,2uF. 3

12. Tụ điện 47uF. 2

13. Tụ điện 1000uF. 1

14. Tụ điện 470uF. 1

15. Bộ điều chỉnh điện áp 7805. 1

16. Dải tiêu đề Nữ và Nam. Mỗi người 1

17. Đầu nối Jack thùng. 1

18. Bộ chuyển đổi DC 12 V 1 Amp. 1

19. Công tắc SPST. (Tùy chọn) 1

20. Ván đục lỗ. 1

Bước 2: Thông số kỹ thuật

Thông số kỹ thuật
Thông số kỹ thuật

Tần suất lấy mẫu: 3840 mẫu / giây

Số lượng mẫu trên mỗi FFT: 256

Độ phân giải tần số: 15Hz

Tốc độ làm mới: Khoảng 15 Hz

Thang âm thấp hơn và cao hơn của các nốt nhạc không được nắm bắt một cách chính xác. Các nốt thấp hơn bị ảnh hưởng bởi độ phân giải tần số thấp khi tần số cao hơn bị ảnh hưởng bởi tốc độ lấy mẫu thấp. Arduino đã hết bộ nhớ nên không có cách nào để có được độ phân giải tốt hơn. Và độ phân giải tốt hơn sẽ đi kèm với chi phí làm giảm tốc độ làm tươi, vì vậy đánh đổi là không thể tránh khỏi. Phiên bản giáo dân của nguyên lý bất định Heisenberg.

Khó khăn cơ bản là khoảng cách theo cấp số nhân giữa các nốt (Như trong hình. Mọi xung động trên trục tần số là một nốt nhạc). Các thuật toán như LFT có thể hữu ích nhưng điều đó hơi nâng cao và hơi phức tạp đối với một thiết bị như arduino Nano.

Bước 3: Sơ đồ mạch

Sơ đồ mạch
Sơ đồ mạch
Sơ đồ mạch
Sơ đồ mạch
Sơ đồ mạch
Sơ đồ mạch
Sơ đồ mạch
Sơ đồ mạch

Lưu ý: Đừng bận tâm bởi ba MOSFET và các đầu nối vít trong hình. Chúng không bắt buộc đối với dự án này. Lưu ý rằng bảng đầu vào micrô có thể tháo rời hoặc người ta gọi nó là Mô-đun. Dưới đây là một mô tả nhỏ về các khối khác nhau.

1) Hai điện trở 470 ohm kết hợp tín hiệu âm thanh nổi thành tín hiệu âm thanh mono. Đảm bảo rằng mặt đất của tín hiệu đi vào đất ảo (vg trong sơ đồ mạch) và không tiếp đất của mạch.

2) Khối tiếp theo là bộ lọc thông thấp sallen-key bậc 2 có nhiệm vụ giới hạn băng tần tín hiệu đầu vào để tránh hiện tượng răng cưa. Vì chúng tôi chỉ làm việc với nguồn cung cấp + 12v nên chúng tôi thiên vị op-amp bằng cách tạo một bộ chia điện áp RC. điều đó đánh lừa op-amp khi nghĩ rằng nguồn cung cấp là nguồn cung cấp 6 0 -6 volt (đường sắt kép) trong đó vg là tham chiếu mặt đất cho op amp.

3) Sau đó, đầu ra là thông thấp được lọc để chặn DC bù 6 volt và kết hợp với DC khoảng 0,55 volt vì ADC sẽ được cấu hình để sử dụng bên trong 1,1 v làm Vref.

Lưu ý: Mạch tiền khuếch đại cho micrô electret không phải là mạch tốt nhất trên internet. Một mạch liên quan đến op-amp sẽ là lựa chọn tốt hơn. Chúng tôi mong muốn đáp ứng tần số càng phẳng càng tốt. Nồi âm thanh nổi 47 kilo ohms được sử dụng để xác định tần số cắt thường bằng một nửa tần số lấy mẫu. Giá trị đặt trước 10 kilo ohm (Nồi nhỏ có đầu màu trắng) được sử dụng để điều chỉnh độ lợi và giá trị Q của bộ lọc. Nồi tông đơ 10 kilo ohm (một cái có núm điều chỉnh bằng kim loại trông giống như một cái vít đầu phẳng nhỏ) được sử dụng để đặt điện áp gần bằng nửa Vref.

Lưu ý: Khi bạn kết nối Nano với P. C. giữ cho công tắc SPST mở nếu không đóng. Đặc biệt lưu ý, nếu không làm như vậy có thể gây hại cho mạch điện / máy tính / bộ điều chỉnh điện áp hoặc bất kỳ sự kết hợp nào của những điều trên

Bước 4: Ứng dụng và IDE cần thiết

Các ứng dụng và IDE cần thiết
Các ứng dụng và IDE cần thiết
Các ứng dụng và IDE cần thiết
Các ứng dụng và IDE cần thiết
Các ứng dụng và IDE cần thiết
Các ứng dụng và IDE cần thiết
Các ứng dụng và IDE cần thiết
Các ứng dụng và IDE cần thiết
  1. Để viết mã Arduino Nano, tôi đã sử dụng AVR studio 5.1 nguyên thủy vì nó có vẻ phù hợp với tôi. Bạn có thể tìm thấy trình cài đặt tại đây.
  2. Để lập trình Arduino Nano, tôi đã sử dụng Xloader. Công cụ trọng lượng nhẹ thực sự dễ sử dụng của nó để ghi các tệp.hex sang Arduinos. Bạn có thể lấy nó ở đây.
  3. Đối với dự án nhỏ tiền thưởng nhỏ và điều chỉnh mạch mà tôi đã sử dụng xử lý. Bạn có thể lấy nó từ đây mặc dù thực hiện những thay đổi lớn trong mọi bản sửa đổi, vì vậy bạn có thể phải loay hoay với các chức năng không dùng nữa để làm cho bản phác thảo hoạt động.
  4. FL studio hoặc bất kỳ phần mềm xử lý MIDI nào khác. Bạn có thể tải miễn phí phiên bản truy cập giới hạn FL studio tại đây.
  5. Vòng MIDI tạo ra một cổng MIDI ảo và được FL studio phát hiện như thể đó là một thiết bị MIDI. Nhận một bản sao giống nhau từ đây.
  6. MIDI không có lông được sử dụng để đọc các thông điệp MIDI từ cổng COM và gửi nó đến cổng MIDI vòng lặp. Nó cũng gỡ lỗi các thông báo MIDI trong thời gian thực, giúp cho việc gỡ lỗi trở nên thuận tiện. Nhận MIDI không có lông từ đây.

Bước 5: Mã liên quan cho mọi thứ

Tôi muốn cảm ơn Electronic Lifes MFG (Trang web Đây !!) cho thư viện FFT điểm cố định mà tôi đã sử dụng trong dự án này. Thư viện được tối ưu hóa cho gia đình AVR lớn. Đây là liên kết đến các tệp và mã thư viện mà anh ấy đã sử dụng. Tôi đang đính kèm mã của tôi bên dưới. Nó bao gồm cả bản phác thảo xử lý và mã AVR C. Xin lưu ý rằng đây là cấu hình phù hợp với tôi và tôi không chịu bất kỳ trách nhiệm nào nếu bạn làm hỏng bất kỳ thứ gì vì những mã này. Ngoài ra, tôi đã gặp rất nhiều vấn đề khi cố gắng làm cho mã hoạt động. Ví dụ, DDRD (Data Direction Register) có DDDx (x = 0-7) làm mặt nạ bit thay vì DDRDx thông thường (x = 0-7). Hãy coi chừng những lỗi này trong khi biên dịch. Ngoài ra, việc thay đổi bộ điều khiển vi mô cũng ảnh hưởng đến các định nghĩa này, vì vậy hãy chú ý đến điều này trong khi xử lý các lỗi biên dịch. Và nếu bạn đang thắc mắc tại sao thư mục dự án được gọi là DDT_Arduino_328p.rar, thì hãy cứ nói rằng buổi tối khi tôi bắt đầu rất tối và tôi đã lười đến mức không bật đèn.:P

Đến với phác thảo xử lý, tôi sử dụng xử lý 3.3.6 để viết phác thảo này. Bạn sẽ cần đặt số cổng COM trong bản phác thảo theo cách thủ công. Bạn có thể kiểm tra các bình luận trong mã.

Nếu ai đó có thể giúp tôi chuyển mã sang Arduino IDE và phiên bản xử lý mới nhất, tôi rất vui và cũng sẽ ghi công cho các nhà phát triển / những người đóng góp.

Bước 6: Thiết lập nó

  1. Mở mã và biên dịch mã với #define pcvisual không ghi chú và #define midi_out đã nhận xét.
  2. Mở xloader và duyệt đến thư mục có mã, duyệt đến tệp.hex và ghi nó vào nano bằng cách chọn bo mạch và cổng COM thích hợp.
  3. Mở phác thảo xử lý và chạy nó với chỉ mục cổng COM thích hợp. Nếu mọi thứ suôn sẻ, bạn sẽ có thể nhìn thấy phổ của tín hiệu trên chân A0.
  4. Lấy một tua vít và xoay nồi tông đơ cho đến khi quang phổ bằng phẳng (thành phần DC phải gần bằng 0). Sau đó, không nhập bất kỳ tín hiệu nào vào bảng. (Không gắn mô-đun micrô).
  5. Bây giờ hãy sử dụng bất kỳ công cụ tạo quét nào như thế này để cung cấp đầu vào cho bảng từ điện thoại vi mô và quan sát quang phổ.
  6. Nếu bạn không thấy tần số quét, hãy giảm tần số cắt bằng cách thay đổi điện trở 47 kilo ohm. Cũng tăng mức tăng bằng cách sử dụng nồi đặt trước 10 kilo ohm. Cố gắng đạt được đầu ra quét phẳng và nổi bật bằng cách thay đổi các thông số này. Đây là phần thú vị (phần thưởng nhỏ!), Chơi các bài hát yêu thích của bạn và thưởng thức phổ thời gian thực của chúng. (Xem video)
  7. Bây giờ, hãy biên dịch lại mã C nhúng lần này với #define pcvisual đã nhận xét và #define midi_out đã bỏ ghi chú.
  8. Tải lại mã đã biên dịch mới vào arduino Nano.
  9. Mở LoopMidi và tạo một cổng mới.
  10. Mở FL studio hoặc phần mềm giao diện MIDI khác và đảm bảo rằng cổng midi vòng lặp hiển thị trong cài đặt cổng MIDI.
  11. Mở MIDI không có lông với arduino được kết nối. Chọn cổng đầu ra là cổng LoopMidi. Vào cài đặt và đặt tốc độ Baud là 115200. Bây giờ chọn cổng COM tương ứng với Arduino Nano và mở cổng.
  12. Phát một số âm "thuần" gần micrô và bạn cũng sẽ nghe thấy nốt tương ứng trong phần mềm MIDI. Nếu không có phản hồi, hãy thử giảm ngưỡng up_threshold được xác định trong mã C. Nếu các ghi chú được kích hoạt ngẫu nhiên thì hãy tăng ngưỡng lên.
  13. Nhận đàn piano của bạn và kiểm tra tốc độ của hệ thống của bạn !! Điều tuyệt vời nhất là trong vùng ghi chú màu vàng, nó có thể thoải mái phát hiện nhiều phím bấm đồng thời một cách dễ dàng.

Lưu ý: Khi một ứng dụng truy cập cổng COM, nó không thể được đọc bởi một ứng dụng khác. Ví dụ: nếu MIDI không có lông đọc cổng COM, Xloader sẽ không thể flash bảng

Bước 7: Kết quả / Video

Đó là nó cho bây giờ guys! Hy vọng bạn thích nó. Nếu bạn có bất kỳ đề xuất hoặc cải tiến nào trong dự án, hãy cho tôi biết trong phần bình luận. Sự thanh bình!

Đề xuất: