Ik was op zoek naar een Real-Time Waveform Generator die de soundkaart van de PC doet aansturen.
Daarmee wou ik een WaveForm in Real-Time aanpassen door de grafiek op het scherm te veranderen, waarna het effect meteen in werking treed.
Dus dan hoef ik niet steeds weer Wave-Forms met Audacity te maken (meerdere 360 graden sinussen achter elkaar te plakken om zo een geluidsbestand van 1 min te maken) en steeds weer uitproberen of het dan wat beter is, en steeds lang zitten te klooien. Je moet er enorm veel tijd aan besteden.
Dus toen dacht ik aan iets waardoor je meteen het effect van de aanpassing kon waarnemen.
Ik kwam toen uit op SigGen wat in code geschreven is.
Het is in Visual basic 6 en in C te vinden.
Geen van bijde krijg ik foutloos aan het werk en dus ook niet gecompileerd voor eigen gebruik.
Het installeren van VB6 is al lastig genoeg met alle meldingen, en bij het openen van het SigGen.vbp project kom je ook al 5 meldingen tegen.
Toch krijg ik het aan de praat maar met wat beperkingen, zie foto hieronder: (er zijn wat instel mogelijkheden weg)
De waveform kan op het scherm aangepast worden terwijl het geluid afspeeld, dus dat werkt goed.
Maar als ik het programma afsluit en daarna weer het project wil laden, dan gaat dat niet meer.
Ik moet dan weer de gezipte file uitpakken en weer laden.
Kijk zo handig is dit, je ziet gewoon 1 sinus die je doet aanpassen:
Enig idee om dit aan de praat te krijgen of om het te compileren ?
Het is gewoon een VERREKT handig programma-tje die je nog wel eens hard nodig kan hebben.
Of is er misschien een alternatief zonder ervoor D/A omzetters te moeten aanschaffen ?
VB6 code (link)
leeg[Bericht gewijzigd door daan69 op (92%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Jammer dat die soepkip het commentaar allemaal in het Italiaans heeft geschreven...
(commentaar bij sourcecode altijd in het Engels; dat begrijpt (bijna) iedereen)
Als het alleen om sinussen gaat is het vrij simpel. Ik heb eventueel nog een programmaatje wat sinusbestanden maakt met instelbare lengte.
Kun je ook een sweepfile mee maken... (van xx Hz tot yy Hz in zz sec)
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Heb het even opgedoken, is een command-line tooltje. (SWEEP.EXE in zipfile). Maakt een 44kHz mono file aan.
Source is maar liefst enkele tientallen regels lang... 
Starten: SWEEP AAA,BBB,CCC (AAA = startfreq in Hz, BBB = stopfreq in Hz, CCC is lengte in seconden. Voor constante toon zijn AAA en BBB dus gelijk)
'==================================================================================================
#COMPILE EXE
#DIM ALL
'--------------------------------------------------------------------------------------------------
FUNCTION PBMAIN
LOCAL Pi AS DOUBLE, TempSine, FStep AS SINGLE, iResult, iTmp AS INTEGER
LOCAL hFile, Freq_Lo, Freq_Hi, SampRate, Cnt, Duration, Ampli AS LONG
LOCAL FName, Cmd AS STRING, FLength AS DWORD
'------------------------------------------------------------------------------------------------
Cmd = REMOVE$(COMMAND$, ANY " ") 'Process commandstring
IF PARSECOUNT(Cmd, ANY ", ") = 3 THEN
FName = PARSE$(Cmd, ANY ", ",1) & "_" & PARSE$(Cmd, ANY ", ",2) & _
"_" & PARSE$(Cmd, ANY ", ",3) & ".WAV"
Freq_Lo = VAL(PARSE$(Cmd, ANY ", ",1))
Freq_Hi = VAL(PARSE$(Cmd, ANY ", ",2))
Duration = VAL(PARSE$(Cmd, ANY ", ",3))
COLOR 15,0
ELSE
COLOR 14,0
PRINT "Parameters incorrect. Please use command-line:"
PRINT "Sweep <start>,<stop>,<duration>"
PRINT "- <start> = startfrequency in Hz"
PRINT "- <stop> = stopfrequency in Hz"
PRINT "- <duration> = file length in seconds."
COLOR 7,0
EXIT FUNCTION
END IF '
'------------------------------------------------------------------------------------------------
SampRate = 44100 'Set WAV header parms
FStep = (Freq_Hi - Freq_Lo) / (Duration * SampRate) '
FLength = Duration * SampRate '
Pi = 4 * ATN(1) '
Ampli = 100 '
PRINT "File " & FName & " will be created. (will take some time)"
PRINT "Sweep from " & FORMAT$(Freq_Lo) & " to " & FORMAT$(Freq_Hi) & " Hz, length " & FORMAT$(Duration)& " sec." '
PRINT
'------------------------------------------------------------------------------------------------
' Open file and write WAV file header
'------------------------------------------------------------------------------------------------
hFile = FREEFILE
OPEN FName FOR BINARY AS #hFile 'opens the wav file
PUT$ #hFile, "RIFF" 'RIFF header
PUT$ #hFile, MKDWD$(FLength + (44-8)) 'Length data + 36
PUT$ #hFile, "WAVEfmt " 'WAVE header
PUT$ #hFile, MKDWD$(16) 'Format chunk
PUT$ #hFile, MKWRD$(1) 'File format
PUT$ #hFile, MKWRD$(1) 'Channels
PUT$ #hFile, MKDWD$(SampRate) 'Sampling rate
PUT$ #hFile, MKDWD$(SampRate) 'Bytes per second
PUT$ #hFile, MKWRD$(1) 'Alignment
PUT$ #hFile, MKWRD$(8) 'Bits per sample
PUT$ #hFile, "data" 'Data chunk starts here
PUT$ #hFile, MKDWD$(FLength) 'Length data
'------------------------------------------------------------------------------------------------
' Now create and write all the samples we need
'------------------------------------------------------------------------------------------------
DO
iTmp = 127 + Ampli * SIN(TempSine)
iResult = 127 + Ampli * SIN(TempSine)
TempSine = TempSine + 2 * Pi * ((Freq_Lo + FStep * Cnt) / SampRate)
IF TempSine > 2 * Pi THEN TempSine = TempSine - 2 * Pi
PUT$ #hFile, CHR$(LOBYT(iResult))
INCR Cnt
LOOP UNTIL Cnt = FLength
PRINT "File " & FName & " is created."
PRINT "Sweep from " & FORMAT$(Freq_Lo) & " to " & FORMAT$(Freq_Hi) & " Hz, length " & FORMAT$(Duration)& " sec." '
FLUSH #hFile
CLOSE #hFile
COLOR 7,0
END FUNCTIONOp 24 februari 2020 00:34:20 schreef Arco:
Jammer dat die soepkip het commentaar allemaal in het Italiaans heeft geschreven...(commentaar bij sourcecode altijd in het Engels;
Nee hoor! In de landstaal van je doelgroep.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ah, oke...
Je had het over 'aan elkaar plakken van sinussen', maar daar heeft het dus eigenlijk niks mee te maken... 
(je wilt willekeurige golfvormen kunnen maken)
Klopt, want dat doet het programma zelf.
Je maakt 1 sinus naar wens, en het programma maakt er een oneindige loop van, en stopt ook niet met afspelen tenzij je op "stop" klikt.
Maar ja deze (SigGen in VisualBasic6.0 code) werkt niet goed, en kan hem dus ook niet compileren
Link WebSite
Link Zip-Bestand (VB6 project)
of iemand die weet hoe het aan de praat te krijgen,
of anders een alternatief (heb zelf nog niks kunnen vinden)
Roland van Leusden
It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
Gebruik je WinXP en VB6 ? Ik heb wel dit gevonden:
https://create.arduino.cc/projecthub/BruceEvans/arduino-due-arbitrary-…
Daar heb je wel een arduino Due bij nodig.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Arco, Krijg jij SinGen gecompileerd dan?
Ook met behoud van de /\ en \/ buttons ?
Ik heb de link van Roland even bestudeerd maar ik denk niet dat dit gaat werken met auto-fill en de rest van die dingen.
Het gaat om de sinus-vorm aan te passen met de muis-aanwijzer, en dan in een loop afspelen.
Ik kwam net CurveCTRL_DEMO tegen maar daarmee maak je alleen de curve, en wordt er geen geluid van gemaakt.
[Bericht gewijzigd door daan69 op (24%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Compileren gaat goed, run in de interpreter ook (komt geluid uit), alleen kun je geen exe maken.
De fouten worden veroorzaakt door niet geregistreerde libraries (waarschijnlijk OCX'en), gewoon doorklikken bij elke fout.
(of de libraries aanmelden in de registry)
Wat je met /\ en /\ buttons bedoelt weet ik niet, die zie ik nergens. (met de muis de sinus 'uitrekken' gaat wel)
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ah,
Even op die website gekeken, daar horen updown controls te zitten...
(je kunt wel gewoon de waarde in de editboxen aanpassen.)
Om alles te laten werken zul je zoals gezegd de libraries in de registry moeten aanmelden...
Om die libraries te registreren, moet je daar geen serial-nummer en een account voor hebben ?
Normaal krijg je dat bij aankoop.
Maar wat als je nu dit sterk verouderde VB6 wil installeren ?
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Is (gelukkig) al heel lang geleden dat ik wat met VB heb gedaan... 
Hier staat beschreven hoe je een OCX registreert: https://support.microsoft.com/nl-nl/help/146219/how-to-register-an-act…
(ik weet niet wat er nodig is, maar gezien de ontbrekende updown controls in ieder geval de COMCTL32.OCX)
blackdog
Golden Member
Daar de mens het noodzakelijke niet kan volbrengen, streeft hij naar het overbodige (Goethe)
Hi daan69,
Vraagje, waar heb je dit voor nodig?
Het kan natuurlijk zo zijn dat je graag met Visual Basic worsteld, maar tegenwoording kan dit ook vrij aardig met een goedkope functie generator.
Scheeld je heel veel tijd als dit belangrijk voor je is.
Kijk een naar deze generator, is de goedkoopste uit de range en is 10MHZ max. (veel meer dan je geluidskaart)
https://www.eleshop.nl/catalog/product/view/id/2343/s/rigol-dg811-func…
Je kan daar heel mooi je golvormen mee maken.
Groet,
Bram
Roland van Leusden
It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
@Blackdog, niet goed gelezen, je hebt gelijk. daan69 wil een AWG generator. Net als @Arco is het jaren terug dat ik iets met VB heb gedaan, je kunt VB6 naar VB.net converteren, maar je zal het nodig werk zelf moeten doen.
[Bericht gewijzigd door Roland van Leusden op (10%)]
blackdog
Golden Member
Daar de mens het noodzakelijke niet kan volbrengen, streeft hij naar het overbodige (Goethe)
Nou, niet dat ik met VB6 wil worstelen, maar ik kom eigenlijk nog niks anders tegen wat het werk kan doen en via de soundcard kan uitsturen.
PS: Het gaat mij nog steeds om de grafiek van de waveform op het scherm in realtime met de muiswijzer aan te passen waardoor de verandering meteen in werking treed en het effect ook meteen waarneembaar is.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Als je de updown keys niet nodig hebt, dan werkt 't zo al (frequentie e.d. kun je direct in de edit boxes inkloppen)
Ja klopt.
Ik vond dat er wat te weinig punten waren waarmee je de waveform kon aanpassen.
Ben toen gaan kijken hoe het programma de waveform doet opslaan, gewoon X/Y Coördinaten in een kladblok bestand.
Zoals je onder kan zien heb ik gewoon 20 punten erbij gerekend.
CODE VOOR 20 PUNTEN:
0,0
.0005,.309016994374947
.001,.587785252292473
.0015,.809016994374947
.002,.951056516295153
.0025,1
.003,.951056516295154
.0035,.809016994374949
.004,.587785252292475
.0045,.30901699437495
.005,3.23108510433268E-15
.0055,-.309016994374944
.006,-.58778525229247
.0065,-.809016994374945
.007,-.951056516295152
.0075,-1
.008,-.951056516295155
.0085,-.809016994374951
.009,-.587785252292478
.0095,-.309016994374954
.01,020 PUNTEN:
===================================================================================================
CODE VOOR 40 PUNTEN:
0,0
.0003,.159016994374954
.0005,.309016994374947
.0008,.459016994374947
.001,.587785252292473
.0012,.707785252292473
.0015,.809016994374947
.0017,.889016994374947
.002,.951056516295153
.0022,.981056516295153
.0025,1
.0028,.981056516295153
.003,.951056516295154
.0033,.889016994374947
.0035,.809016994374949
.0037,.707785252292473
.004,.587785252292475
.0042,.459016994374947
.0045,.30901699437495
.0047,.15901699437495
.0050,0
.0052,-.159016994374954
.0055,-.309016994374944
.0057,-.459016994374947
.006,-.58778525229247
.0062,-.707785252292473
.0065,-.809016994374945
.0067,-.889016994374947
.007,-.951056516295152
.0072,-.981056516295153
.0075,-1
.0078,-.981056516295153
.008,-.951056516295155
.0082,-.889016994374947
.0085,-.809016994374951
.0087,-.707785252292473
.009,-.587785252292478
.0092,-.459016994374947
.0095,-.309016994374954
.0097,-.159016994374954
.01,040 PUNTEN:
Het enigste wat ik nou lastig vind is dat het programma venstertje wat te klein is, mocht van mij 2x zo groot zijn, dan was de grafiek makkelijker met de muis in te stellen.
(jammer dat die italiaansekluppel alles in een pizza-code geschreven heeft)
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik denk dat je kwa geluid weinig verschil tussen 20 of 40 punten gaat horen. (je kunt de punten ook zijdelings verplaatsen)
Ik betwijfel ook of het opgewekte signaal echt wel klopt. (de schaalverdeling zeker niet, want die staat op 0.01s, dat klopt duidelijk zeker niet)
Als je de sinus 'uitrekt' tot een blokgolf, komt er een totaal andere frequentie uit, wat niet klopt. (geluid zou alleen scherper moeten worden)
Dat valt wel mee, ik heb even gekeken.
Zal waarschijnlijk komen omdat de opgaande en neergaande lijnen niet echt vertikaal zijn.
Je kan geen enkel punt precies onder elkaar zetten, wel op dezelfde hoogte.
Frequentie klopt ook wel, net gecheckt met SCOPE.EXE
OWWW nou zie ik het:
Uhm als je boven de 3KHz komt dan treed er vervorming op, ook al heb je de instelling voor je soundcard op 48KHz staan.
Gelukkig hoef ik niet boven de 100Hz te komen denk ik, dus dit zal wel werken voor mij.
-------------------
Trouwens voor de mensen die dit toch kunnen gebvruiken het volgende:
Ik had ook een post gemaakt op een engels forum en daar gaf iemand (jsvenu) mij een link om SigGen als een EXE te downloaden.
klik voor (WEBSITE)
klik voor (BESTAND)
Jammer dat het menu enzo nog nog steeds in de piza-taal geschreven is.
------------------------------
Kwa uitvoering merk ik geen verschil tussen het VB6 project en de SigGen.exe bestand.
Alleen dat alle buttons er zijn en dat alles naar behoren werkt.
Hier nog even een aangepaste sinus van 100Hz gemeten met SCOPE.EXE:
Sorry maar ik moet even een nieuw post maken.
Ik heb namelijk SigGen voor 99% vertaald naar engels.
(copyright blijft - is niks anders veranderd - Credits aanwezig)
Er zijn een paar underscores die moeten blijven anders verspringt de text.
En er zijn een aantal Pizza-woorden die ik in geen enkel bestand kan terug vinden. Raar maar waar.
De CAB-File is weer mooi samen gesteld en alles weer in een Zip-File gezet.
Alles is gedaan met een HEX-EDITOR die de SigGen.exe aanpast.
Ik zal Dhr Franco Languasco hierover een mail sturen.
Hier nog even een screenshot van het engels:
-----------------------------------------------------------------
EDIT: Ik heb contact met hem, en hij vind het heel leuk.
Ben bezig om het te verwezenlijken, maar dan in de project bestanden van VB6 zelf.
