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
 

 


Vuelta al Principio     Última actualización:  viernes, 18 de septiembre de 2015    Visitantes: contador de visitas