- LiTime Speicher und Akkus         
Ergebnis 1 bis 2 von 2

Thema: Problem mit Midiverarbeitung ( gelöst )

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.04.2005
    Ort
    89331 Burgau
    Beiträge
    32

    Problem mit Midiverarbeitung ( gelöst )

    wer kann mir helfen
    ich möchte mit Midi-Kanal 7 (binär 151), Velcity 100
    und bei den Noten 80 bis 88, Kanäle vom Tiny2313 schalten,
    aber irgendwie wird der Midi-Kanal beim empfangen des Protokolls
    verschluckt bzw. überschrieben von Velocity

    Im unteren Code sollte eigentlich
    Protokoll(1) 151 (Note-on Ch. 7)
    Protokoll(2) 80 ....88
    Protokoll(3) 100 sein

    tatsächlich ist aber Protokoll(1) 100 Velocity, mit Drumcomputer getestet, ändert man Velo geht nichts mehr
    Protokoll(2) sind die Noten wie es sich gehört
    Protokoll(3) is nichts da

    was kann die Ursache sein, das der Note-On Befehl nicht im Protokoll steht
    und Velo auf Protokoll(1) geschrieben wird und nicht auf Protokoll(3)

    gruß und schonmal Danke Gerhard


    das Programm unten funktioniert, aber ohne den Note-on Befehl
    Code:
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    $baud = 31250
    
    Open "COMD.2:31250,8,n,1" For Input As #1                  
    Dim Zeiger As Byte At &HA0
    Zeiger = 1
    Dim Flag As Byte At &HA1
    Dim Adresse As Eram Byte
    Dim Adresse_temp As Byte At &HA3
    Dim Tempword As Word At &HA5
    Adresse_temp = Adresse
    Dim Tempbyte As Byte At &HA7
    Dim Protokoll(3) As Byte At &HA8
    
    Ddrd = &B11100010                                          
    Ddrb = &B11111111
    
    Config Timer0 = Timer , Prescale = 1024
    On Timer0 Timer_irq                                        
    Stop Timer0
    
    Config Timer1 = Timer , Prescale = 64
    On Timer1 Timer_irq2                                        
    Disable Timer1
    Stop Timer1
    Timer1 = 0
    
    Enable Timer0
    Enable Interrupts
    
    
    Do                                                         
      Tempbyte = Waitkey(#1)                                  
      Gosub Zeichenempfang                                     
     If Flag = 1 Then                                         
         Gosub Protokoll
         Flag = 0                                               
         Zeiger = 1
     End If
    Loop
    
    
    
    Zeichenempfang:
    
       Protokoll(zeiger) = Tempbyte                            
       If Tempbyte = 0 Then                                     
          Zeiger = 1                                            
       End If
    
     If Protokoll(1) = 100 Then     'sollte eigentlich 151 sein                           
            If Tempbyte = 0 Then                             
            Flag = 1                                            
            End If
            Incr Zeiger                                        
       Else
            Zeiger = 1                                         
            Timer0 = 0                           
            Start Timer0                         
            Enable Timer0                       
     End If
    Return
    End
    
    
    
    Timer_irq:
       Stop Timer0
       Disable Timer0
       Zeiger = 1
    Return
    End
    
    Timer_irq2:
        Portb = 0                                              
        Portd.6 = 0
       Timer1 = 0                                              
       Disable Timer1                                          
       Stop Timer1                                            
       Protokoll(1) = 0
       Protokoll(2) = 0
       Protokoll(3) = 0
    Return
    End
    
    Protokoll:
    
             If Protokoll(1) = 100 Then     ' sollte eigentlich Protokoll(3) sein
                     Flag = Protokoll(2)
    
                   If Flag = 80 Then                            
                     Portd.6 = 1
              Elseif Flag = 81 Then                             
                     Portb.0 = 1
              Elseif Flag = 82 Then
                     Portb.1 = 1
              Elseif Flag = 83 Then
                     Portb.2 = 1
              Elseif Flag = 84 Then
                     Portb.3 = 1
              Elseif Flag = 85 Then
                     Portb.4 = 1
              Elseif Flag = 86 Then
                     Portb.5 = 1
              Elseif Flag = 87 Then
                     Portb.6 = 1
              Elseif Flag = 88 Then
                     Portb.7 = 1
              Elseif Flag = 0 Then
                     Portb = 0
              End If
           End If
    
                                Protokoll(1) = 0               
                                Protokoll(2) = 0
                                Protokoll(3) = 0
                                Timer1 = 53036                
                                Enable Timer1
                                Start Timer1
    
    Return
    End

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    09.04.2005
    Ort
    89331 Burgau
    Beiträge
    32
    diese Erkenntnis könnte evtl auch anderen helfen

    die Daten der Kanalkennung werden nicht bei jedem Datenverkehr mitgesendet,
    sondern nur bei jedem Wechsel des Kanals

    komischerweise sollte das Byte für Kanal 7 - 151 sein ( 1001 0111 )
    tatsächlich wird aber 150 vom Akai-Drumcomputer ausgegeben

    zu beachten ist, das bei der Auswertung des Kanals, dieser nicht durch eine Note zurückgesetzt wird
    also im Code <> 150 funktioniert definitiv nicht
    die Noten gehen bis Wert 127
    die Kanäle beginnen bei Wert 144

    der Code für die Kanalkennung sollte so aussehen
    bei einem Zeichenempfang:

    Code:
    if Dateneingang = 150 then
    Kanal = 1
    end if
    if Dateneingang > 128 and < 150 or Dateneingang > 150 then
    Kanal = 0
    end if
    gruß Gerhard

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus