Tôi tạo một giao diện trống sequencer cho nhạc điện tử .
Nó sử dụng một siêu vi arduino như bộ vi xử lý của nó và hiện tại nó giao tiếp với một chương trình Xử lý mà tôi đã viết cho giao tiếp nối tiếp. Từ đó, các tin nhắn OSC được gửi đến một chương trình Max / MSP mà đối tác cộng tác của tôi đã viết để tạo ra một luồng dữ liệu midi.
Vì thế:
Giao diện vật lý của tôi -> Arduino Mega -> I / O nối tiếp -> Đang xử lý -> OSC -> Max / MSP -> Midi (-> ứng dụng âm nhạc)
Tôi đã chọn con đường này một phần vì không đủ thông minh để loại bỏ bất kỳ bước nào, nhưng cũng để phù hợp với việc có thể cập nhật giao diện vật lý theo cách chúng tôi muốn, có thể tạo giao diện vật lý đa mục đích (nhiều chế độ cho fader, núm và nút chọn giọng nói) và có thể đảm bảo nhiệm vụ điều chỉnh thời gian và nhịp điệu quan trọng (hay còn gọi là "swing").
Tin nhắn nối tiếp của tôi được thiết lập như thế này:
PL,1; // transport control: play
PL,0; // transport control: stop
SW,30; // swing value 30
TM,130; // tempo value 130
SD,1,8,04,0; // Step sequencer data, pattern 1, voice 8 (of 8), step 04 (of 16), off
MU,8,1; // Mute, voice 8 (of 8), on
SO,4,0; // Solo, voice 4 (of 8), off
VL,3,127; // Velocity, voice 3 (of 8), value 127
CC,1,127; // Midi CC, controller 1, value 127
NN,1,36; // Note number, voice 1 (of 8), value 36 (usually a kick drum)
Vì vậy, bạn có thể thấy rằng dựa trên số dấu phẩy trên mỗi dấu chấm phẩy, tôi có thể xác định cách phân tích dữ liệu nối tiếp từ arduino trong chương trình xử lý. Từ Xử lý, các loại thông báo này được chuyển thành OSC như thế này:
/beatseqr/play 1
/beatseqr/play 0
/beatseqr/swing 30
/beatseqr/tempo 130
/beatseqr/matrix/1/8/04 0
/beatseqr/mute/8 1
/beatseqr/solo/4 0
/beatseqr/velocity/3 127
/beatseqr/midicc/1 127
/beatseqr/midinn/1 36
Và tất cả đều hoạt động tốt, nhưng nó cảm thấy không hiệu quả. Tôi có thực sự cần ứng dụng xử lý ở giữa không?
Bây giờ, tôi đã cố gắng loại bỏ phần Xử lý và các phần OSC khỏi phương trình, nhưng tôi thiếu một số kiến thức liên quan đến thiết kế giao thức dữ liệu nối tiếp.
Tôi biết rằng có một udpreceive
đối tượng trong Max. Và nó hoạt động ok tôi đoán? Có lẽ tôi đang sử dụng nó sai.
Tại một thời điểm, tôi đã chuyển tất cả mã arduino của mình sang không gửi dòng mới vào cuối mỗi tin nhắn nối tiếp vì điều đó không có ý nghĩa gì đặc biệt với udpreceive
đối tượng của Max . Trong thực tế, nếu tôi nhớ lại một cách chính xác, nó sẽ chỉ chấp nhận tin nhắn đầu tiên cho đến dòng mới đầu tiên và sau đó nó sẽ dừng xử lý dữ liệu. Vì vậy, để giải quyết vấn đề đó, tôi đã loại bỏ tất cả các ký tự dòng mới và sau đó nó sẽ xuất hiện thành max / msp liên tục.
Sau đó, vấn đề tiếp theo với phương thức này là udpreceive
đối tượng chỉ chấp nhận một ký tự tại một thời điểm. Vì vậy, tôi đã cố gắng sử dụng một js
đối tượng javascript để ghép các ký tự đến và sau đó phân tích chúng trên dấu chấm phẩy và dấu phẩy. Vấn đề tôi gặp phải là nó không thể đoán trước và không ổn định. Các ký tự sẽ rơi ra và tin nhắn sẽ không thể xử lý. Vì vậy, nó thực sự khiến tôi tự hỏi liệu tôi có nên thay đổi giao thức dữ liệu nối tiếp của mình sang một thứ gì đó mạnh mẽ hơn không? Hoặc nếu tôi chỉ làm sai hoàn toàn?
Tôi có nên loại bỏ tất cả và bắt đầu lại từ đầu bằng cách sử dụng firmware Firmata không? Tôi đã thấy một số hướng dẫn sử dụng Firmata với Max / MSP và tôi đoán rằng tôi có thể có một cái nhìn mới về những gì mã trên hộp đang làm và nếu nó cần phải làm điều đó. Công ty có thể chấp nhận dữ liệu chuỗi trên pin để gửi đến màn hình LCD nối tiếp trên tàu không? nếu tôi có thể điều khiển LCD từ max / msp, điều đó có thể hoạt động tốt.
Có lời khuyên nào không?
OMGWTF
nút, nhưng cũng suy nghĩ rất kỹ và câu hỏi chi tiết quá!