Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ubacivanje tišine u WAV algoritam

[es] :: .NET :: ubacivanje tišine u WAV algoritam

[ Pregleda: 1318 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Omega Warrior
Zoran Bogdanov
Croatia

Član broj: 68126
Poruke: 43
*.net.t-com.hr.



Profil

icon ubacivanje tišine u WAV algoritam01.10.2007. u 19:22 - pre 201 meseci
Pozdrav,

Trenutno radim na projektu koji stvara WAV fileove specifične frekvencije (savršeni sinus)

kod savršeno radi, stvara wav file i savršenu sinusoidu.

Ovdje je prikazan samo kod koji stvara wav tj. sinus

Dim i As Long
Dim lngLimit As Double
Dim lngDataL, lngDataR As Double
Dim dblDataPt As Double
Dim blnPositive As Boolean
Dim intCycleCount As Integer
Dim lngFileSize As Double
Dim lngSamples As Double
Dim lngDataSize As Double
Dim dblDataSlice As Double

Dim dblWaveTime As Double
Dim dblTotalTime As Double
Dim dblSampleTime As Double

dblFrequency = Frequency

'If dblFrequency > 1000 Then
' intCycles = 100
'Else
' intCycles = 10
'End If

intCycles = CInt(trajanje)


dblWaveTime = 1 / dblFrequency
dblTotalTime = dblWaveTime * intCycles
dblSampleTime = 1 / CDbl(lngSampleRate)
dblDataSlice = (2 * PI) / (dblWaveTime / dblSampleTime)

lngSamples = 0
intCycleCount = 0
blnPositive = True
Do
dblDataPt = System.Math.Sin(lngSamples * dblDataSlice)
If lngSamples > 0 Then
If dblDataPt < 0 Then
blnPositive = False
Else
' Detect Zero Crossing
If Not blnPositive Then
intCycleCount = intCycleCount + 1
If intCycleCount >= intCycles Then Exit Do
blnPositive = True
End If

End If
End If
lngSamples = lngSamples + 1

Loop



'-------------------------------------------------------------------------------
' Bytes 40 - 43 Length of Data Samples * Channels * Bits per Sample / 8
'-------------------------------------------------------------------------------
lngDataSize = lngSamples * intAudioWidth * (intBits / 8)
ReDim Preserve WavArray(0 To 43 + lngDataSize)

WavArray(40) = ExtractByte(lngDataSize, 0)
WavArray(41) = ExtractByte(lngDataSize, 1)
WavArray(42) = ExtractByte(lngDataSize, 2)
WavArray(43) = ExtractByte(lngDataSize, 3)

'-------------------------------------------------------------------------------
' Bytes 04 - 07 Total Length to Follow (Length of File - 8)
'-------------------------------------------------------------------------------
lngFileSize = lngDataSize + 36

WavArray(4) = ExtractByte(lngFileSize, 0)
WavArray(5) = ExtractByte(lngFileSize, 1)
WavArray(6) = ExtractByte(lngFileSize, 2)
WavArray(7) = ExtractByte(lngFileSize, 3)

'-------------------------------------------------------------------------------
' Bytes 44 - End Data Samples
'-------------------------------------------------------------------------------

If intBits = 8 Then
lngLimit = 127
Else
lngLimit = 32767
End If

For i = 0 To lngSamples - 1

If intBits = 8 Then
'-----------------------------------------------------------------------
' 8 Bit Data
'-----------------------------------------------------------------------
' Calculate data point.
dblDataPt = System.Math.Sin(i * dblDataSlice) * lngLimit
lngDataL = Int(dblDataPt * dblVolumeL) + lngLimit
lngDataR = Int(dblDataPt * dblVolumeR) + lngLimit

' Place data point in wave tile.
If intAudioMode = MODE_MONO Then WavArray(i + 44) = ExtractByte(lngDataL, 0)

If intAudioMode = MODE_LR Then 'L+R stereo
WavArray((2 * i) + 44) = ExtractByte(lngDataL, 0)
WavArray((2 * i) + 45) = ExtractByte(lngDataR, 0)
End If

If intAudioMode = MODE_L Then ' L only stereo
WavArray((2 * i) + 44) = ExtractByte(lngDataL, 0)
WavArray((2 * i) + 45) = 0
End If

If intAudioMode = MODE_R Then ' R only stereo
WavArray((2 * i) + 44) = 0
WavArray((2 * i) + 45) = ExtractByte(lngDataR, 0)
End If

Else

'-----------------------------------------------------------------------
' 16 Bit Data
'-----------------------------------------------------------------------
' Calculate data point.
dblDataPt = System.Math.Sin(i * dblDataSlice) * lngLimit
lngDataL = Int(dblDataPt * dblVolumeL)
lngDataR = Int(dblDataPt * dblVolumeR)

' Place data point in wave tile.
If intAudioMode = MODE_MONO Then
WavArray((2 * i) + 44) = ExtractByte(lngDataL, 0)
WavArray((2 * i) + 45) = ExtractByte(lngDataL, 1)
End If

If intAudioMode = MODE_LR Then
WavArray((4 * i) + 44) = ExtractByte(lngDataL, 0)
WavArray((4 * i) + 45) = ExtractByte(lngDataL, 1)
WavArray((4 * i) + 46) = ExtractByte(lngDataR, 0)
WavArray((4 * i) + 47) = ExtractByte(lngDataR, 1)
End If

If intAudioMode = MODE_L Then
WavArray((4 * i) + 44) = ExtractByte(lngDataL, 0)
WavArray((4 * i) + 45) = ExtractByte(lngDataL, 1)
WavArray((4 * i) + 46) = 0
WavArray((4 * i) + 47) = 0
End If

If intAudioMode = MODE_R Then
WavArray((4 * i) + 44) = 0
WavArray((4 * i) + 45) = 0
WavArray((4 * i) + 46) = ExtractByte(lngDataR, 0)
WavArray((4 * i) + 47) = ExtractByte(lngDataR, 1)
End If

End If

Next


kao što naslov kaže treabao bih nešto napraviti sa iovim kodom, da on ubacuje u sinusoidu tišinu. bilo to na početku ili na kraju svejedno, samo da se ubaci tišina, pa onda je lako odredit gdje će se pojavit.

Molim bilo kakvu pomoć, unaprijed veliko hvala!
 
Odgovor na temu

kuzmam
ireland

Član broj: 46518
Poruke: 31
212.147.139.*



Profil

icon Re: ubacivanje tišine u WAV algoritam02.10.2007. u 15:36 - pre 201 meseci
komentari i promenljive su malo na engleskom, malo na maternjem :)
 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
*.adsl.net.t-com.hr.



+19 Profil

icon Re: ubacivanje tišine u WAV algoritam02.10.2007. u 19:57 - pre 201 meseci
ako hočeš na kraju, ubaciš točke za pravac na nečujnoj frekvenciji.
tj. na 30 kHZ i da bude pravac skroz.koliko hočeš da traje, toliko ti bude dužina, ili na večoj frekvenciji, ali da bude iza sinusoide.
ili prekineš sinusoidu ubaciš pravac i opet nastaviš sinusoidu.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: ubacivanje tišine u WAV algoritam03.10.2007. u 21:16 - pre 201 meseci
Ne moze lako da ubaci 30kHz signal u wav file jer je sampling rate neophodan za smestanje 30Khz signala veci ili jednak od 60KHz, tako da signal ne bi stao u 44.1kHz wav file. Cak iako napravis taj signal u 96Khz HiDef wav file nece biti tisina, veci visokofrekventni zvuk koji ce verovatno izludjivati kucad po komsiluku

Najjednostavniji nacin da uneses tisinu u algoritam je da ubacis nule na oba kanala, ako pogledas sta sad imas za MODE_L i MODE_R videces da onaj drugi kanal dobija nule, tj ubacuje mu se tisina, ako na oba kanala ubacis 0 dobices tisinu...

Btw, ne postoji savrsena sinusoida u digitalnoj tehnologiji, koliki god bio sampling rate signal ce biti krecav i nikad savrsen Sve je u aproksimaciji i zavaravanju cula

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

[es] :: .NET :: ubacivanje tišine u WAV algoritam

[ Pregleda: 1318 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.