Differenze tra le versioni di "Estrarre i dati presenti in un CD-Audio con le risorse di linux/cdrom.h"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Con alcune risorse dichiarate nel file header "''linux/cdrom.h''" è possibile estrarre i dati memorizzati in un CD-Audio. <BR>Il punto iniziale, dal quale leggere i dati, sar...")
 
Riga 23: Riga 23:
 
    
 
    
 
   fl = Open "/dev/sr0" For Read
 
   fl = Open "/dev/sr0" For Read
 
+
 
 
  <FONT Color=gray>' ''Legge per 75 frame:''</font>
 
  <FONT Color=gray>' ''Legge per 75 frame:''</font>
 
   For frame = 0 To (CD_FRAMES - 1)
 
   For frame = 0 To (CD_FRAMES - 1)
 
     arg = Alloc(SizeOf(gb.Byte), CD_FRAMESIZE_RAW)
 
     arg = Alloc(SizeOf(gb.Byte), CD_FRAMESIZE_RAW)
 
     st = Memory arg For Write
 
     st = Memory arg For Write
 
+
   
 
  <FONT Color=gray>' ''Legge i dati presenti - ad esempio - partendo da 4' 0" 0frame:''</font>
 
  <FONT Color=gray>' ''Legge i dati presenti - ad esempio - partendo da 4' 0" 0frame:''</font>
 
     Write #st, 4 As Byte          <FONT Color=gray>' ''Minuti''</font>
 
     Write #st, 4 As Byte          <FONT Color=gray>' ''Minuti''</font>

Versione delle 02:13, 23 ago 2019

Con alcune risorse dichiarate nel file header "linux/cdrom.h" è possibile estrarre i dati memorizzati in un CD-Audio.
Il punto iniziale, dal quale leggere i dati, sarà individuato in base ai minuti, secondi e frame.


Mostriamo un possibile esempio:

Library "libc:6"

Private Const CDROMREADRAW As Long = &5314
Private Const CD_FRAMES As Integer = 75
Private Const CD_FRAMESIZE_RAW As Integer = 2352

' int ioctl (int __fd, unsigned long int __request, ...)
' Perform the I/O control operation specified by REQUEST on FD.
Private Extern ioctl(__fd As Integer, __request As Long, par As Pointer) As Integer


Public Sub Main()
 
 Dim fl As File
 Dim arg As Pointer
 Dim st As Stream
 Dim frame, c, i As Integer
 
 fl = Open "/dev/sr0" For Read
 
' Legge per 75 frame:
 For frame = 0 To (CD_FRAMES - 1)
   arg = Alloc(SizeOf(gb.Byte), CD_FRAMESIZE_RAW)
   st = Memory arg For Write
   
' Legge i dati presenti - ad esempio - partendo da 4' 0" 0frame:
   Write #st, 4 As Byte           ' Minuti
   Write #st, 0 As Byte           ' Secondi
   Write #st, frame As Byte       ' Frame
   
   i = ioctl(fl.Handle, CDROMREADRAW, arg)
   If i < 0 Then Error.Raise("ERRORE !")
   Print "Frame: "; frame
   Wait 0.5
   For i = 0 To (CD_FRAMESIZE_RAW - 1)
     Print i, Hex(Byte@(arg + i), 2)
   Next
   Print "------------"
   st.Close
   Free(arg)
 Next
 Print "=== Termine lettura dati ==="
 fl.Close
   
End