Chuyển đổi giá trị cao độ uốn cong (MIDI) thành giá trị cao độ bình thường của YouTube


11

Tôi đang thử phân tích và tổng hợp LPC ngoại tuyến bằng cách sử dụng triển khai rt_lpc (LPC thời gian thực) như được đưa ra ở đây . Có một số chức năng trong chương trình có thể được sử dụng cho chương trình phân tích và tổng hợp LPC ngoại tuyến. Mã rt_lpc chủ yếu dành cho các nhà soạn nhạc, v.v., có nghĩa là nó sử dụng đầu vào xung MIDI hoặc glottal. Có một số mã trong chương trình chuyển đổi giá trị cao độ (thu được từ tương quan tự động) thành bendgiá trị. Mối quan hệ được đưa ra như sau:

    pitch = (int)( Stk::sampleRate() / midi2pitch[ananya.data[1]] ) /
                            pow( 1.0653f, bend/64.0f*11.0f );
                    power *= ananya.data[2] / 64.0f;
bend = ge.data[1] / 128.0f + ge.data[2] - 64;

Một số điểm:
a. ananyalà một đối tượng của loại MidiMsgdường như được cư trú trên bay.
b. gecũng là một đối tượng thuộc loại MidiMsgdường như cũng được đưa vào hoạt động.
c. Hai đối tượng này được tạo khi chương trình chạy trong thời gian thực (của tôi là phiên bản ngoại tuyến chạy các phần chọn lọc của nó trong main.cpp của riêng tôi.

Câu hỏi của tôi:
1. uốn cong là gì?
2. Làm cách nào để chuyển đổi giá trị cao độ thành giá trị uốn cong? Các mối quan hệ ánh xạ là gì?

Tôi đã googled cho các giải pháp nhưng không tìm thấy câu trả lời rõ ràng.

Câu trả lời:


12

Cốt lõi của MIDI là một đại diện của âm nhạc như các sự kiện ghi chú rời rạc, mỗi sự kiện có một cao độ tĩnh. Điều này là hoàn hảo để đại diện cho âm nhạc như chơi trên các nhạc cụ bàn phím. Bạn có thể chuyển đổi bất kỳ tần số tương ứng với một ghi chú trên thang đo cường độ thành số ghi chú MIDI, sử dụng:

69+12×log2frequency440

Theo giả định rằng bộ thu MIDI được hiệu chỉnh cho A4 = 440 Hz.

Đại diện này phù hợp với nhạc piano, nhưng vấn đề là làm thế nào để thể hiện các nốt không được ánh xạ tới thang âm (âm nhạc không phải nhạc tây, âm thanh không âm nhạc) và cách thể hiện các biến đổi cao độ trong suốt thời gian của một nốt nhạc (glissando, rung).

Điều này được thực hiện trong MIDI bằng cách sử dụng "thông điệp uốn cong" hướng dẫn bộ tổng hợp để thay đổi cao độ của ghi chú hiện đang phát theo một khoảng nhỏ. Hầu hết các bộ tổng hợp được hiệu chỉnh theo mặc định cho +/- 2 nửa cung trong suốt phạm vi thông báo uốn cong (0 .. 16383). 8192 tương ứng với không có uốn cong - độ cao phát ra chính xác là giá trị ghi chú. Ánh xạ giữa giá trị uốn cong và tỷ lệ dịch chuyển tần số được đưa ra bởi:

femitted_notefnote_message=2pitchbend81924096×12

Do đó, bạn có thể nhận được tần suất của một ghi chú được chơi bởi một nhà tổng hợp từ công thức sau:

440×2note6912.0+pitchbend81924096×12

Trong đó ghi chú là số ghi chú MIDI 7 bit của tin nhắn Note On nhận được cuối cùng ; và pitchbend là giá trị 14 bit của thông báo uốn cong nhận được cuối cùng . Bộ tổng hợp bắt đầu với thanh ghi uốn cong được đặt thành 8192 và giá trị này cũng được đặt lại trong quá trình nhận thông báo "Đặt lại tất cả bộ điều khiển".

Hãy để chúng tôi lấy ví dụ sau đây. Bạn muốn thể hiện một trill sáo với quỹ đạo tần số sau: 500 Hz, 510 Hz, 500 Hz, dưới dạng tin nhắn MIDI.

Số ghi chú cơ sở là:

round(69+12×log2(500/440))=71 .

Vì vậy, bạn gửi tin nhắn "ghi chú trên" với ghi chú # bằng 71. Điều này tương đương với một mức:

440×2(7169)/12=493.88

Đó là cao độ gần nhất trên thang độ nóng. Bạn cần gửi một thông điệp uốn cong để nâng cao độ theo một yếu tố:

500493.88=1.0124

Và nhận được 500 Hz của bạn. Giá trị uốn cong tương ứng là:

round(8192+4096×12×log21.0124)=9065

Để có được 510 Hz của bạn, giá trị uốn cong sẽ là:

round(8192+4096×12×log2510493.88)=10469

Vì vậy, chuỗi tin nhắn MIDI của bạn cho 500, 510, 500 Hz sẽ là:

  • CHÚ THÍCH 71
  • PITCH BEND 9065
  • ...
  • PITCH BEND 10469
  • ...
  • PITCH BEND 9065

Bạn có thể nghĩ số ghi chú MIDI là phần "tách rời" của cao độ; và sân uốn cong như một phần "phân đoạn" dư thừa của sân.


Ngoài ra, từ sự hiểu biết của tôi về mã, ge là thông điệp uốn cong; ge.data [2] MSB của nó và ge.data [1] LSB của nó. ananya là ghi chú trên tin nhắn, ananya.data [1] là số ghi chú và ananya.data [2] vận tốc. Bên cạnh việc đặt tên biến thú vị dường như ngụ ý một mối tình lãng mạn ẩn giấu giữa các tác giả của mã, tôi thấy một WTF tiềm năng ở đây: có một cái gì đó tanh tanh trong các hằng số 1.0653f và 11.0f. Một lựa chọn dễ đọc sẽ là: 1.05946f và 12.0f. Hoặc 1.06504f và 11.0f. Các tác giả dường như giả định một phạm vi uốn cong +/- 1 quãng tám, đó là một WTF tiềm năng khác.
pichenettes

ROTFL trên phần "lãng mạn ẩn"! Tôi không nghĩ rằng tôi đã hiểu điều này đúng nên hãy chịu đựng tôi. Giá trị cao độ được lấy từ hàm autocorrelate, có vẻ như đó là MIDI Note là đầu ra. Chú ý midi2pitchmảng trong công thức? Nếu tôi đúng, điều đó có nghĩa là tôi vẫn không có bendgiá trị hoặc giá trị thực tế của cao độ để ước tính giá trị uốn cong từ đó, và không có cách nào để lấy chúng trừ khi tôi có tệp MIDI. Một trường hợp đơn giản có quá nhiều biến và quá ít phương trình. Làm thế nào để tôi ước tính uốn cong, giá trị cao độ thực tế và velocitytrong trường hợp này?
Sriram

Bạn đang cố làm gì vậy? Chuyển đổi một cặp cao độ / sức mạnh thành tin nhắn MIDI? Hoặc chuyển đổi dữ liệu MIDI sang cao độ thực tế? Mã được đưa ra ở trên sẽ chuyển đổi một cặp ghi chú MIDI đến + tin nhắn uốn cong (thông điệp ananya, thông điệp ge) thành một khoảng thời gian (biến cao độ) và công suất (biến công suất). Tôi nghĩ rằng điều này được sử dụng để thay thế sự kích thích LPC bằng một tổng hợp được điều khiển bởi bàn phím MIDI - một loại bộ phát âm thô hoặc hiệu ứng tự động.
pichenettes

xem nhanh rt_lpc.cpp xác nhận rằng các tin nhắn MIDI đến loại 0xe0 (PITCH BEND) đang cập nhật giá trị uốn cong; và rằng các tin nhắn MIDI đến loại 0x90 (LƯU Ý ON) được sao chép vào tin nhắn "ananya". Từ đó, việc tổng hợp lại bằng cách sử dụng cao độ đã sửa đổi được thực hiện bằng các giá trị này. Không chắc chắn những gì bạn muốn làm từ đó.
pichenettes

1
Vâng, đầu vào MIDI ở đây là một điều hoàn toàn khác để chuyển đổi tín hiệu sáng tạo. Nó không phải là một phần của chuỗi phân tích / tổng hợp LPC thông thường; nhưng thay vào đó cho phép một số thông số (cường độ và công suất) được đọc từ bàn phím thay vì được tạo ra bởi mô-đun phân tích. Có lẽ bạn có thể đăng câu hỏi mới với một số ví dụ về tệp âm thanh và trích xuất quỹ đạo cao độ bằng Hz, để chúng tôi có thể hướng bạn đến các kỹ thuật ước tính cường độ mạnh hơn. Thư viện Aubio có một vài biến thể của máy theo dõi sân.
pichenettes

6

MIDI là một giao thức cho phép (chủ yếu) các bộ tổng hợp kiểm soát hoặc được điều khiển bởi các bộ tổng hợp hoặc máy tính khác.

Đó là một giao thức nối tiếp cho phép trao đổi các thông điệp như "khóa C1 lên" "phím D4 xuống" "vận tốc phím", thay đổi âm thanh ", v.v. Nhiều bộ điều khiển có" bánh xe điều khiển "đó là cần điều khiển hoặc bánh xe điều chế. người chơi thay đổi tương tác cao độ của nốt hiện tại đang được chơi để tạo rung bằng tay hoặc liên tục "trượt" từ nốt này sang nốt khác. Vì điều này thường được người chơi guitar thực hiện bằng cách uốn cong dây đàn bằng tay trái, nó thường được gọi là uốn sân và do đó tên.

Thông báo uốn cong MIDI là một cách để truyền đạt mức độ thay đổi độ cao được cho là xảy ra tại bất kỳ thời điểm nào. Bộ tổng hợp (phần mềm hoặc phần cứng) nhận thông báo uốn cong được cho là để thay đổi cường độ của tất cả các ghi chú hiện tại đang được phát theo số lượng đã cho.

Thông báo của bộ điều khiển có đối số từ -8192 đến 8191 và trong các tệp MIDI tiêu chuẩn, điều này được cho là bao phủ phạm vi từ -200 cent đến 200 cent, trong đó 1 cent là 1/100 semitone, tức là tỷ lệ 2 ^ ( 1/1200) = 1.000577789506555. Ví dụ: để tạo độ dịch chuyển xuống dưới để đạt 93% tần số danh định, giá trị của bộ điều khiển sẽ là

c = round(log2(.93)*12*8192/2);

hoặc -5146 trong trường hợp này. 0,93 là tỷ lệ bạn muốn, 12 số lượng nửa cung trên mỗi quãng tám, 2 phạm vi uốn cong tối đa (200 cent hoặc 2 nửa cung trong trường hợp này) và log2 () logarit với cơ sở 2.

Tuy nhiên, trong hầu hết các trình tổng hợp, phạm vi có thể định cấu hình và có lẽ không nên cho rằng tất cả các trình tổng hợp hoạt động giống nhau.

Đây là một biểu đồ chuyển đổi có thể giúp đỡ. http://www.elvenminstrel.com/music/tuning/reference/pitchbends.shtml

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.