Aktuelle Zeit: 11.08.2020 21:08

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Wave-datei erzeugen von Daten
BeitragVerfasst: 19.02.2010 21:35 
Offline
Moderator
Benutzeravatar

Registriert: 27.05.2008 12:44
Wohnort: Oberland
Klar sieht's gut aus. :)

Du bist seit über vier Jahren dabei und kannst doch wohl noch so ein bißchen Quelltext schreiben? Klar sind das WAVE-Daten. Die übergibst Du mit CatchSound() Deiner Audio-Hardware. Vergiß nicht, das Audio-Signal um mind. 40dB zu dämpfen, bevor Du auf einen Mikrofoneingang gehst!

Den Rest schreibste jetzt auch mal selbst, gell?

Gruß - WPö

_________________
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wave-datei erzeugen von Daten
BeitragVerfasst: 03.03.2010 23:59 
Offline

Registriert: 29.11.2005 15:05
So, jetzt funktioniert es.
Alle Daten werden korrekt übertragen als Wav zum MPF1, bzw werden auch als wav abgespeichert.

Gruss

Code:

  SetCurrentDirectory(GetPathPart(ProgramFilename()))
 
  Global *tonspeicher.l,*datspeicher.l,tonlaenge.l,datlaenge.l,bytespersec.l
  Global uni_w.u,lobyte.c,hibyte.c,secs.f
  Global samplerate.l,bitrate.l,channels.l,volume.l,n_samples.l,n_dat.l,zaehler.l
 
  Declare w_impulse(n_impulse.l,khz.l)
  Declare bit_0()
  Declare bit_1()
  Declare w_byte(byte_bits.c)
  Declare a_sync()
  Declare m_sync()
  Declare e_sync()
  Declare vn_spann()
 
  Procedure w_impulse(n_impulse.l,khz.l)
    Protected n_size.l,i.l,h.l,l.l
 
    khz * 1000
    n_size=samplerate/(2*khz)
    For i=1 To n_impulse
      ; hipegel
      For h=1 To n_size
        PokeW(*tonspeicher+n_samples,volume)
        n_samples + 2
      Next 
      ; lopegel
      For h=1 To n_size
        PokeW(*tonspeicher+n_samples,-volume)
        n_samples + 2
      Next
    Next   
  EndProcedure
 
  Procedure bit_0()
    w_impulse(8,2) ; 8 * 2 khz
    w_impulse(2,1) ; 2 * 1 khz
  EndProcedure
 
  Procedure bit_1()
    w_impulse(4,2) ; 4 * 2 khz
    w_impulse(4,1) ; 4 * 1 khz
  EndProcedure
 
  Procedure w_byte(byte_bits.c)
    Protected i.l
    bit_0()
    For i=0 To 7
      If (byte_bits & (1<<i))
         bit_1()
      Else
         bit_0()
      EndIf
    Next i
    bit_1()
  EndProcedure
 
  Procedure a_sync()
    w_impulse(4000,1) ; 4 sec 1khz
  EndProcedure
 
  Procedure m_sync()
    w_impulse(4000,2) ; 2 sec 2khz
  EndProcedure
 
  Procedure e_sync()
    w_impulse(4000,2) ; 2 sec 2khz
  EndProcedure
 
  Procedure vn_spann()
    Protected i.l
    For i=1 To 100
      PokeW(*tonspeicher+n_samples,0)
      n_samples + 2
    Next
  EndProcedure 
 
  InitSprite()
  InitSound()
 
  OpenWindow(0,0,0,800,600,"sound-test",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
  OpenWindowedScreen(WindowID(0),10,10,350,300,0,0,0)
 
  text1=TextGadget(#PB_Any, 10,380,200,20, "Taste-Q")
 
  ClearScreen(RGB(128,128,128))
 
  OpenFile(0,"dice2.bin")
  datlaenge=Lof(0)
  *datspeicher= AllocateMemory(datlaenge)
  ReadData(0, *datspeicher, datlaenge)
  CloseFile(0)
                       
  samplerate = 8000
  bitrate = 16                     
  channels = 1 
  volume=32000 
                                                       
  bytespersec = channels*bitrate/8*samplerate 
 
  secs=(datlaenge*8+7*8)*0.006+10
 
  tonlaenge=bytesperSec*secs+44
  *tonspeicher= AllocateMemory(tonlaenge)
 
  Repeat
   
    Event.l = WaitWindowEvent(2)
 
    If GetAsyncKeyState_(#VK_Q)   
   
      SetGadgetText(text1,"erstelle")
     
      PokeS(*tonspeicher,"RIFF")     
      PokeL(*tonspeicher+4,36+bytespersec*secs)       
      PokeS(*tonspeicher+8,"WAVE") 
      PokeS(*tonspeicher+12,"fmt ") 
      PokeL(*tonspeicher+16,16)
      PokeW(*tonspeicher+20,1)
      PokeW(*tonspeicher+22,channels)         
      PokeL(*tonspeicher+24,samplerate ) 
      PokeL(*tonspeicher+28,bytespersec)
      PokeW(*tonspeicher+32,bitrate/8*channels)
      PokeW(*tonspeicher+34,bitrate)
      PokeS(*tonspeicher+36,"data")   
      PokeL(*tonspeicher+40,bytespersec*secs)
     
      n_samples=44
     
      vn_spann()
     
      a_sync()
     
      uni_w=1   ;filenummer 2byte
      lobyte=uni_w & $00ff
      hibyte=uni_w & $ff00/256
      w_byte(lobyte)
      w_byte(hibyte)
     
      uni_w=$1800   ;startadresse $1800 2byte
      lobyte=uni_w & $00ff
      hibyte=uni_w & $ff00/256
      w_byte(lobyte)
      w_byte(hibyte)
     
      uni_w=$1800+datlaenge-1  ;endadresse $1800+datlaenge 2byte
      lobyte=uni_w & $00ff
      hibyte=uni_w & $ff00/256
      w_byte(lobyte)
      w_byte(hibyte)
     
      uni_w=0
      For zaehler=0 To datlaenge-1 ;programmdaten zur checksumme
        uni_w= uni_w+PeekB(*datspeicher+zaehler)
      Next
      lobyte=uni_w & $00ff  ;checksumme 1byte
      w_byte(lobyte)
     
      m_sync()
     
      For zaehler=0 To datlaenge-1 ;programmdaten
        lobyte = PeekB(*datspeicher+zaehler)
        w_byte(lobyte)   
      Next
     
      e_sync()
     
      CreateFile(0, "wavtest.wav") 
      WriteData(0,*tonspeicher,tonlaenge)
      CloseFile(0)
     
      SetGadgetText(text1,"Datei und Speicher")
     EndIf
     
     If GetAsyncKeyState_(#VK_S)     
       CatchSound(0, *tonspeicher)
       PlaySound(0) 
     EndIf
     
  Until Event = #PB_Event_CloseWindow   

End



Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye