Differenze tra le versioni di "Eliminare una traccia da un file MIDI"

Da Gambas-it.org - Wikipedia.
(Creata pagina con 'Per eliminare una traccia da un file Midi con le sole funzioni di Gambas, è possibile usare il seguente codice: '''Public''' Sub Form_Open() Dim s1, s2, da, dati, mthd, ...')
 
Riga 1: Riga 1:
 
Per eliminare una traccia da un file Midi con le sole funzioni di Gambas, è possibile usare il seguente codice:
 
Per eliminare una traccia da un file Midi con le sole funzioni di Gambas, è possibile usare il seguente codice:
  '''Public''' Sub Form_Open()
+
  '''Public''' Sub Button1_Click()
 
   
 
   
   Dim s1, s2, da, dati, mthd, nuovo_file As String
+
   Dim s As String
  Dim el, j As Byte
 
  Dim lungh As Integer
 
 
   Dim bb As New Byte[]
 
   Dim bb As New Byte[]
   Dim tracce As New String[]
+
   Dim el As Byte
+
  Dim i, lungh As Integer
+
  Dim ii As New String[]
   s1 = File.Load("''/percorso/del/file.mid''")
+
 
   
+
   s = File.Load("<FONT Color=gray>''/percorso/del/file.mid''</font>")
 +
 
 +
  bb = Byte[].FromString(s)
 +
   
 +
  <FONT Color=gray>' ''Ciclo per individuare ciascuna traccia "MTrk" del file Midi:''</font>
 +
  Do
 +
    i = InStr(s, "MTrk", i + 1)
 +
    If i > 0 Then ii.Push(i)
 +
  Loop Until i = 0
 +
 
 +
  Print "Il file Midi contiene";; ii.Count;; "tracce Midi."
 +
 
 
   el = Val(InputBox("Scegliere la traccia da eliminare:"))
 
   el = Val(InputBox("Scegliere la traccia da eliminare:"))
+
 
   If el = 1 Then
+
   Select Case el
    Message.Warning("Eliminazione della 'Traccia del Tempo' non consentita !")
+
    Case 1
     Quit
+
      Message.Warning("Eliminazione della '<I>Traccia del Tempo</i>' non consentita !")
   Endif
+
      Return
+
     Case ii.Count + 1
  <FONT color=gray>' ''Carica la sola parte delle tracce "MTrk":''</font>
+
      Message.Warning("Numero traccia superiore alla quantità di tracce presenti nel file Midi !")
   s2 = Right(s1, Len(s1) - 14)
+
      Return   
+
   End Select
<FONT color=gray>' ''Ciclo per individuare ciascuna traccia "MTrk" del file Midi:''</font>
+
 
   While j < Asc(Mid(s1, 12, 1))
+
  <FONT Color=gray>' ''Individua la dimensione della traccia da eliminare:''</font>
+
   lungh = bb[ii[el - 1] + 6]
    bb = Byte[].FromString(Mid(s2, 5, 4))
+
  lungh += bb[ii[el - 1] + 5] * 256        <FONT Color=gray>' ''&0100''</font>
+
   lungh += bb[ii[el - 1] + 4] * 65536     <FONT Color=gray>' ''&010000''</font>
    lungh = Val("&" & Hex(bb[0]) & Hex(bb[1]) & Hex(bb[2]) & Hex(bb[3]))
+
   lungh += bb[ii[el - 1] + 3] * 16777216  <FONT Color=gray>' ''&01000000''</font>
 
    tracce.Add(Mid(s2, 1, lungh + 8))
 
     
 
     s2 = Right(s2, Len(s2) - (8 + lungh))
 
 
    Inc j
 
 
  Wend
 
 
 
<FONT color=gray>' ''Rimuove la traccia "MTrk" prescelta:''</font>
 
   tracce.Remove(el - 1, 1)
 
 
  For Each da In tracce
 
    dati &= da
 
  Next
 
   
 
  mthd = Left(s1, 11) & Chr(tracce.Count) & Mid(s1, 13, 2)
 
 
      
 
      
   nuovo_file = mthd & dati
+
   bb.Remove(ii[el - 1] - 1, 8 + lungh)
 +
 
 +
  bb[11] -= 1
 +
 
 +
  Print "Salvataggio del nuovo file Midi pari a";; bb.Count;; "byte."
 +
  File.Save("<FONT Color=gray>''/percorso/del/nuovo_file.mid''</font>", bb.ToString(0, bb.count))
 
      
 
      
  File.Save("/tmp/nuovo.mid", nuovo_file)
 
 
  Quit
 
 
 
  '''End'''
 
  '''End'''

Versione delle 15:29, 29 mag 2015

Per eliminare una traccia da un file Midi con le sole funzioni di Gambas, è possibile usare il seguente codice:

Public Sub Button1_Click()

 Dim s As String
 Dim bb As New Byte[]
 Dim el As Byte
 Dim i, lungh As Integer
 Dim ii As New String[]
 
  s = File.Load("/percorso/del/file.mid")
 
  bb = Byte[].FromString(s)
   
' Ciclo per individuare ciascuna traccia "MTrk" del file Midi:
  Do
    i = InStr(s, "MTrk", i + 1)
    If i > 0 Then ii.Push(i)
  Loop Until i = 0
 
  Print "Il file Midi contiene";; ii.Count;; "tracce Midi."
  
  el = Val(InputBox("Scegliere la traccia da eliminare:"))
  
  Select Case el
    Case 1
      Message.Warning("Eliminazione della 'Traccia del Tempo' non consentita !")
      Return
    Case ii.Count + 1
      Message.Warning("Numero traccia superiore alla quantità di tracce presenti nel file Midi !")
      Return     
  End Select
  
' Individua la dimensione della traccia da eliminare:
  lungh = bb[ii[el - 1] + 6]
  lungh += bb[ii[el - 1] + 5] * 256        ' &0100
  lungh += bb[ii[el - 1] + 4] * 65536      ' &010000
  lungh += bb[ii[el - 1] + 3] * 16777216   ' &01000000
   
  bb.Remove(ii[el - 1] - 1, 8 + lungh)
  
  bb[11] -= 1
  
  Print "Salvataggio del nuovo file Midi pari a";; bb.Count;; "byte."
  File.Save("/percorso/del/nuovo_file.mid", bb.ToString(0, bb.count))
   
End