Re: Audio beep @ 192k and 24 bits
Posted: Wed May 13, 2015 7:15 pm
Hi Simo_na,
you can use the RME Analyser (DIGICheck). This is a very good Analyser.
you can use the RME Analyser (DIGICheck). This is a very good Analyser.
http://www.purebasic.com
https://www.purebasic.fr/english/
Hi Wolfram, with DIGICheck also sweep...Wolfram wrote:Hi Simo_na,
you can use the RME Analyser (DIGICheck). This is a very good Analyser.
Thank you Infratec for your work, now i will try it with Audacity ...infratec wrote:Hi,
as mentioned already: Audacity (Freeware)
Bernd
Code: Select all
r + SineStep
If r > #PI * 2 : r - #PI * 2 : EndIf
Code: Select all
Define SineStep.f, i.i, r1.f, r2.f, s1.f, s2.f
SineStep = 0.002
For i = 0 To 1000000
s1 = Sin(r1)
s2 = Sin(r2)
If s1 <> s2
If Abs(s1 - s2) > 0.1
Debug i
Debug ""
Debug r1
Debug s1
Debug Sin(r1)
Debug ""
Debug r2
Debug s2
Debug Sin(r2)
Debug "-----"
Break
EndIf
EndIf
r1 + SineStep
r2 + SineStep
If r2 > #PI * 2 : r2 - #PI * 2 : EndIf
Next i
Code: Select all
EnableExplicit
Structure RIFFStructure
Riff.a[4]
Length.l
Wave.a[4]
EndStructure
Structure fmtStructure
fmt.a[4]
Length.l
Format.u
Channels.u
SampleRate.l
BytesPerSecond.l
BlockAlign.u
BitsPerSample.u
EndStructure
Structure dataStructure
Signature.a[4]
Length.l
EndStructure
Procedure.i CreateSineWAV(*WAVBuffer,Freq.i=997,DurationMs.i=10000)
Protected.i Result,dataOffset,Ptr,i,Value,MaxAmp,twi=2,zer=0,eit=8,one=1,fou=4,sixt=16,sarat=192000,bitsam=24,sev=7
Protected.f SineStep,r,twf=2.0,durfix=1000.0,eitw=0.8
Protected *RiffPtr.RIFFStructure,*fmtPtr.fmtStructure,*dataPtr.dataStructure
If *WAVBuffer
*RiffPtr=*WAVBuffer
PokeS(@*RiffPtr\Riff,"RIFF",fou,#PB_Ascii|#PB_String_NoZero)
PokeS(@*RiffPtr\Wave,"WAVE",fou,#PB_Ascii|#PB_String_NoZero)
*fmtPtr=*WAVBuffer+SizeOf(RIFFStructure)
PokeS(@*fmtPtr\fmt,"fmt ",fou,#PB_Ascii|#PB_String_NoZero)
*fmtPtr\Length=SizeOf(fmtStructure)-eit
*fmtPtr\Format=one
*fmtPtr\Channels=one
*fmtPtr\SampleRate=sarat
*fmtPtr\BitsPerSample=bitsam
*fmtPtr\BlockAlign=*fmtPtr\Channels*((*fmtPtr\BitsPerSample+sev) / eit)
*fmtPtr\BytesPerSecond=*fmtPtr\SampleRate**fmtPtr\BlockAlign
*dataPtr=*WAVBuffer+SizeOf(RIFFStructure)+SizeOf(fmtStructure)
PokeS(@*dataPtr\Signature,"data",fou,#PB_Ascii|#PB_String_NoZero)
dataOffset=SizeOf(RIFFStructure)+SizeOf(fmtStructure)+SizeOf(dataStructure)
Ptr=zer
SineStep=#PI*twf*Freq / *fmtPtr\SampleRate
r=zer
MaxAmp=((twi<<(*fmtPtr\BitsPerSample-twi))-one)*eitw
Repeat
Value=Sin(r)*MaxAmp
r+SineStep
If r > #PI*twf : r-#PI*twf : EndIf
PokeA(*WAVBuffer+dataOffset+Ptr,Value & $FF)
Ptr+one
PokeA(*WAVBuffer+dataOffset+Ptr,(Value>>eit) & $FF)
Ptr+one
PokeA(*WAVBuffer+dataOffset+Ptr,(Value>>sixt) & $FF)
Ptr+one
Until Ptr >= *fmtPtr\BytesPerSecond / durfix*DurationMs
*dataPtr\Length=Ptr
*RiffPtr\Length=SizeOf(RIFFStructure)+SizeOf(fmtStructure)+SizeOf(dataStructure)+Ptr-eit
Result=*RiffPtr\Length+eit
EndIf
ProcedureReturn Result
EndProcedure
InitSound()
Define *Buffer,Length.i,mydura.i,myfreq.i
mydura=10000 ; duration
myfreq=997 ; frequency
*Buffer=AllocateMemory(mydura*myfreq*2)
If *Buffer
Length=CreateSineWAV(*Buffer,myfreq,mydura)
If Length
If CreateFile(0,"c:\tmp\test.wav")
WriteData(0,*Buffer,Length)
CloseFile(0)
EndIf
If CatchSound(0,*Buffer,Length)
PlaySound(0)
While SoundStatus(0)=#PB_Sound_Playing
Delay(10)
Wend
EndIf
EndIf
FreeMemory(*Buffer)
EndIf
Code: Select all
PokeA(*WAVBuffer+dataOffset+Ptr,Value & $FF)
Code: Select all
*Buffer=AllocateMemory(mydura*myfreq*2)
Code: Select all
*Buffer = AllocateMemory(44 + (mydura/1000)*sarat * channel * (bitsam / 8))
Code: Select all
EnableExplicit
Structure RIFFStructure
Riff.a[4]
Length.l
Wave.a[4]
EndStructure
Structure fmtStructure
fmt.a[4]
Length.l
Format.u
Channels.u
SampleRate.l
BytesPerSecond.l
BlockAlign.u
BitsPerSample.u
EndStructure
Structure dataStructure
Signature.a[4]
Length.l
EndStructure
Procedure.i CreateSineWAV(*WAVBuffer,Freq.i,DurationMs.i,sarat.i,Channel.i,bitsam.i)
Protected.i Result,dataOffset,Ptr,i,Value,MaxAmp,twi=2,zer=0,eit=8,one=1,fou=4,sixt=16,sev=7
Protected.f SineStep,r,twf=2.0,durfix=1000.0,eitw=0.8
Protected *RiffPtr.RIFFStructure,*fmtPtr.fmtStructure,*dataPtr.dataStructure
If *WAVBuffer
*RiffPtr=*WAVBuffer
PokeS(@*RiffPtr\Riff,"RIFF",fou,#PB_Ascii|#PB_String_NoZero)
PokeS(@*RiffPtr\Wave,"WAVE",fou,#PB_Ascii|#PB_String_NoZero)
*fmtPtr=*WAVBuffer+SizeOf(RIFFStructure)
PokeS(@*fmtPtr\fmt,"fmt ",fou,#PB_Ascii|#PB_String_NoZero)
*fmtPtr\Length=SizeOf(fmtStructure)-eit
*fmtPtr\Format=one
*fmtPtr\Channels=Channel
*fmtPtr\SampleRate=sarat
*fmtPtr\BitsPerSample=bitsam
*fmtPtr\BlockAlign=*fmtPtr\Channels*((*fmtPtr\BitsPerSample+sev) / eit)
*fmtPtr\BytesPerSecond=*fmtPtr\SampleRate**fmtPtr\BlockAlign
*dataPtr=*WAVBuffer+SizeOf(RIFFStructure)+SizeOf(fmtStructure)
PokeS(@*dataPtr\Signature,"data",fou,#PB_Ascii|#PB_String_NoZero)
dataOffset=SizeOf(RIFFStructure)+SizeOf(fmtStructure)+SizeOf(dataStructure)
Ptr=zer
SineStep=#PI*twf*Freq / *fmtPtr\SampleRate
r=zer
MaxAmp=((twi<<(*fmtPtr\BitsPerSample-twi))-one)*eitw
Repeat
Value=Sin(r)*MaxAmp
r+SineStep
If r > #PI*twf
r-#PI*twf
EndIf
PokeA(*WAVBuffer+dataOffset+Ptr,Value & $FF)
Ptr+one
PokeA(*WAVBuffer+dataOffset+Ptr,(Value>>eit) & $FF)
Ptr+one
PokeA(*WAVBuffer+dataOffset+Ptr,(Value>>sixt) & $FF)
Ptr+one
Until Ptr >= *fmtPtr\BytesPerSecond / durfix*DurationMs
*dataPtr\Length=Ptr
*RiffPtr\Length=SizeOf(RIFFStructure)+SizeOf(fmtStructure)+SizeOf(dataStructure)+Ptr-eit
Result=*RiffPtr\Length+eit
EndIf
ProcedureReturn Result
EndProcedure
InitSound()
Define *Buffer,Length.i,mydura.i,myfreq.i,sarat.i,Channel.i,bitsam.i
mydura=1000 ; duration
myfreq=20000 ; frequency
sarat=192000; sample rate
Channel=1
bitsam=24 ; bitrate
; *Buffer=AllocateMemory(mydura*myfreq*2)
*Buffer = AllocateMemory(44 + (mydura/1000)*sarat * channel * (bitsam / 8)) ; V03
Length=CreateSineWAV(*Buffer,myfreq,mydura,sarat,Channel,bitsam)
If Length
If CreateFile(0,"test_" + Str(mydura) + "_" + Str(myfreq) + ".wav")
WriteData(0,*Buffer,Length)
CloseFile(0)
EndIf
If CatchSound(0,*Buffer,Length)
PlaySound(0)
While SoundStatus(0)=#PB_Sound_Playing
Delay(10)
Wend
EndIf
EndIf
FreeMemory(*Buffer)