Esta página está en construcción: perdonen los errores y temas inacabados.
This page is being developed: I am sorry for errors and unfinished subjects.
Emisión de notas Midi, (frecuencias) en Visual Basic
El control Pitchbend en Midi es capaz de emitir notas finamente afinadas. He aquí las rutinas que lo hacen, según es usado con éxito en nuestro programa MapaTon4.
Dada una cierta nota, tecla como valor Midi, se varían los cents sobre ella. Y ya se sabe que el La3 de los teclados es 440 hercios.
'FILTRA VALORES de FLEXO y NOTA, a partir de tecla y comas 'VA, oct.2003 Public Sub notaon_can_bend2_cents(ByVal canal As Byte, ByVal tecla As Byte, velo As Byte, ByVal cents As Long) Dim flexo& Dim nota As Byte Dim comas_por_semit As Double Dim cents_por_semit As Long 'feb.2004- 'AJUSTE GENERAL DE TECLADO MODAL cents = cents + pitch_bend_general_cents '2004m ' NO cents = cents + 1200 * octava_teclado 'feb.2004 'AJUSTE de AFINACION de LA con SÊCTRALLAB. Lo lleva a Neutro en Flrxo=2001 cents = cents - 53 'debe ser 53.5 ¿¿¿ nota = tecla cents_por_semit = 100 'por definicion flexo& = 2047 + 2048 * (SEMITONOS_FLEX * cents / cents_por_semit) 'coma, semitono, columna ' If flexo& < 0 Then 'vmapa.Print "‒-" While flexo& < 0 nota = nota - 1 flexo& = flexo& + 2048 * SEMITONOS_FLEX '2048 Wend ' ElseIf flexo& > 4096 Then While flexo& > 4095 nota = nota + 1 flexo& = flexo& - 2048 * SEMITONOS_FLEX Wend Call notaon_can_bend(canal, nota, velo, flexo&) End Sub Public Sub notaon_can_bend(ByVal canal As Byte, ByVal tecla As Byte, velo As Byte, ByVal bend As Long) Dim te&, ve& ', mes& Dim loby As Integer, hiby As Integer Dim bendcodi& Dim aaa As String If tecla > 127 Or tecla < 0 Then Exit Sub 'filtro. Protege solo. Para corregir hacer fuera If bend < 0 Then bend = 0 Else If bend > 4095 Then bend = 4095 'Call change_pitch2(bend) loby = bend And &H7F hiby = bend And &H3F80 bendcodi& = loby + 2 * hiby 'te& = bend * 256 te& = bendcodi& * &H100 ve& = canal + &HE0 aaa = Hex$(te& + ve&) rc = midiOutShortMsg(hmidi, te& + ve&) 'notaon te& = tecla * &H100 ve& = canal + velo * &H10000 + &H90 ' middle c note on velocity 127 've& = ve& +nCANAL * &H10000 aaa = Hex$(te& + ve&) rc = midiOutShortMsg(hmidi, te& + ve&) ' middle c not End Sub '‒‒‒‒‒‒‒‒- ' TRAIGO DE WENEA. Agosto 2002 Public Sub set_pitch_bend2(semitones_bend) Dim cana As Long Dim valor As Long Dim valor_fijo As Long Dim aaa As String 'NOTE: The coarse adjustment (usually set via Data Entry 6) ' sets the range in semitones. 'The fine adjustment '(usually set via Data Entry 38 ') set the range in cents. 'For example, to adjust the pitch wheel range to go 'up/down 2 semitones and 4 cents: 'B0 65 00 Controller/chan 0, RPN coarse (101), Pitch Bend Range 'B0 64 00 Controller/chan 0, RPN fine (100), Pitch Bend Range 'B0 06 02 Controller/chan 0, Data Entry coarse, +/- 2 semitones 'B0 26 04 Controller/chan 0, Data Entry fine, +/- 4 cents 'Primero sale el de la derecha, luego los demas en orden rc = midiOutShortMsg(hmidi, &H65B0) ' middle c note on velocity 127 '2 semitonos, arriba y abajo SEMITONOS_FLEX = semitones_bend For cana = 0 To 15 ' Semitono arriba y abajo: va con 4096 valor = &H10000 * SEMITONOS_FLEX '1 semitono arriba, abajo desde 2048 valor_fijo = &H6B0 ' DOS Semitono arriba y abajo: va con 4096 aaa = Hex$(valor + valor_fijo + cana) 'bien 'bien rc = midiOutShortMsg(hmidi, valor + valor_fijo + cana) ' DOS Semitono arriba y abajo: va con 4096 Next cana 'rc = midiOutShortMsg(hMidi, &H4026B0) ' middle c note on velocity 127 End Sub