Seite 3 von 3

Verfasst: 07.03.2006 22:14
von Graffiti
@Green Snake................das sehe ich auch so,
ich suche nur mal einen Ansatzpunkt wie so etwas aussehen könnte, die Zeitschienen und Marker die ich noch brauche um Zeiten auszulesen bringe ich dann doch zusammen.
mein bestehendes Steuerungs-Programm habe ich immerhin auch schon nahezu alleine programmiert.

Mein Problem liegt darin, das ich von diesem Teil absolut keine Ahnung habe und einfach nur im Forum auf Hilfe hoffe und auch daraus dazulernen kann

@AndyX
das ich das WAV gut kenne habe ich nicht behauptet, sondern keine Ahnung davon habe und nicht weiterkomme
dazu bin ich noch relativ Anfänger

@MVXA
also von der Aussage von super_castle distanziere ich mich energisch
mit meiner spöttischen Bemerkung an dich meinte ich eigentlich hauptsächlich, wenn ich bei PB Fragen nicht hier nachfragen kann, in welchem Forum dann.
Ich habe es auch nicht beleidigend gemeint, wenn du es aber doch so aufgefasst hast, mach ich nen Knicks und entschuldige mich natürlich auch dafür

Verfasst: 07.03.2006 22:18
von MVXA
Soweit zum Auslesen der Wave:

Code: Alles auswählen

    Structure sWAVHead
        lSignatur.l         ; Sollte immer $46464952 sein ("RIFF")
        lFileSize.l         ; Größe der Datei
        lRIFFType.l         ; Sollte $45564157 sein
    EndStructure
    
    Structure sWAVChunk_FMT
        wFormat.w           ; Chunk Format
        wChannels.w         ; Anzahl der Kanäle (1 = mono, 2 = stereo)
        lSamples.l          ; Abtastrate pro Sekunde (z.B. 44100)
        lBytesPerSec.l      ; Sample-Rate * Block-Align
        wBlockAlign.w       ; Kanäle * bits/sample / 8
        wBitsPerSample.w    ; bits/sample (8 oder 16)
    EndStructure
    
    Structure sWAVChunk_DATA
        pSampleData.l
    EndStructure
    
    Structure sWAVChunk
        lChunkID.l          ; Normalerweise 'fmt ' ($20746D66) oder 'data' ($61746164)
        lSize.l             ; Größe des Chunks
        
        StructureUnion
            tChunkFMT.sWAVChunk_FMT
            tChunkDATA.sWAVChunk_DATA
        EndStructureUnion
    EndStructure
    
NewList WaveContent.sWAVChunk()
    
Procedure OpenWave(sDateiName.s)
    DefType.sWAVHead tWAVHEAD
    DefType.l lFileID
    
    lFileID = ReadFile(#PB_Any, sDateiName)
    If lFileID
        ReadData(@tWAVHEAD, SizeOf(sWAVHead))
        If tWAVHEAD\lSignatur = $46464952
            If tWAVHEAD\lFileSize = (FileSize(sDateiName)-8)
                ClearList(WaveContent())
                
                While (Eof(lFileID) = #False)
                    AddElement(WaveContent())
                    ReadData(@WaveContent(), 8)

                    Select WaveContent()\lChunkID
                        Case ' tmf': Debug "TMF"
                            ReadData(@WaveContent()+8, WaveContent()\lSize)
                        
                        Case 'atad': Debug "Data"
                            WaveContent()\tChunkDATA\pSampleData = AllocateMemory(WaveContent()\lSize)
                            ReadData(WaveContent()\tChunkDATA\pSampleData, WaveContent()\lSize)
                            
                        Default: Debug "Unknown"
                            DeleteElement(WaveContent())
                    EndSelect
                Wend
            
            Else
                Debug "Filesize mismatch"
            EndIf
            
        Else
            Debug "Invalid Wave..."
        EndIf
        
        CloseFile(lFileID)
    EndIf
EndProcedure

OpenWave("D:\m_pass.wav")

ForEach WaveContent()
    If WaveContent()\lChunkID = 'atad'
        CreateFile(1, "C:\Out.raw")
        WriteData(WaveContent()\tChunkDATA\pSampleData, WaveContent()\lSize)
        ; WaveContent()\tChunkDATA\pSampleData ist Pointer zu Data mit Sample
        ; WaveContent()\lSize Größe der Daten
    EndIf
Next

Verfasst: 07.03.2006 22:19
von AndyX
wenn ich bei PB Fragen nicht hier nachfragen kann, in welchem Forum dann.
www.purebasic-lounge.de :D :allright: (bitte keinen Board vs. Lounge Flame hier jetzt)

Verfasst: 07.03.2006 22:25
von Graffiti
danke AndyX, das kenne ich noch gar nicht

Verfasst: 07.03.2006 22:32
von Graffiti
@MXVA

Danke für deine Hilfe jetzt habe ich mal einen Anhaltspunkt auf dem ich aufbauen kann

:shock: werde mal heute Nacht das ganze unter mein Kissen legen und auf meine Erleuchtung hoffen :shock:

gruß und nichts für ungut

Verfasst: 07.03.2006 22:34
von Froggerprogger
Zum WAV-Format gibt's hier Infos:
http://www.sonicspot.com/guide/wavefiles.html
Einfach mal durchlesen. An englischsprachige Beschreibungen kann man sich gar nicht früh genug gewöhnen. Außerdem wird dort verständlich alles zum WAV-Format erklärt, selbst so selten genutzte Features wie Marker, etc.

Und das unkomprimierte WAV-format ist tatsächlich supereinfach:
Z.b. bei 16 Bit stereo parse einfach bis zum data-chunk, der durch die Bytes 'data' eingeleitet wird. Danach folgen immer abwechselnd links/rechts jeweils ein 16-Bit-Samplewert. 0 ist 0, 32768 max, -32768 min.
Weitere Infos hinter obigem Link oder auf wotsit.org.
MVXA hat dafür ja auch schon einen schönen Source gepostet.

Verfasst: 07.03.2006 22:35
von MVXA
Hab mich größten teils an das gehalten was auch in Wikipedia steht:
http://de.wikipedia.org/wiki/WAV_%28Format%29

Da steht auch noch mehr nützliches... Einfach mal rein schauen :allright:.
Vielleicht bringt dir der Link jetzt mehr im Zusammenhang mit dem Code.

Verfasst: 18.03.2006 13:13
von Macros

Verfasst: 19.03.2006 11:25
von Agent
Bei so schlechten/bösen Posts muss ich mein Senf auch dazugeben:

1) Dies ist ein Forum, kein Lösungsbuch!
2) Warum darf jemand, der so beleidigend ist, hier überhaupt noch posten? /ban

...meine Meinung. Danke.

Verfasst: 19.03.2006 11:41
von Kaeru Gaman
noch etwas grundsätzliches:

wenn du, Graffitti, probleme mit dem gedanklichen hintergrund hast,
dann probier mal, eine sinus-funktion grafisch darzustellen...