Ik heb een probleem met het replay volume van geluid:
Ik heb een programma wat geluid afspeelt wat hij in blokken van 2 seconden over TCP/IP binnenkrijgt (iedere 2 seconden komt er dus een blok binnen wat ook 2 seconden geluid bevat). Het geluid is opgenomen in VOX formaat, maar wordt on-the-fly geconverteerd naar ruw WAV (ADPCM formaat, dus geen codecs en zo nodig). Deze WAV buffers worden achter elkaar naar de geluidskaart geschreven d.m.v. een call naar WaveOutWrite(). Het allereerste buffer wordt 0.5 sec vertraagd voordat het naar de kaart geschreven wordt, dus alle volgende buffers komen binnen als het voorgaande buffer nog 0.5 seconde te gaan heeft.
Alles werkt heel leuk en aardig, maar er is het volgende probleem: als het geluidsnivo bij opname boven een bepaald nivo kwam, lijkt het wel alsof bij weergave het volume van het eerste buffer korrekt is, maar daarna wordt het afgeknepen tot een lager level. Het gekke is, dat als ik mijn programma de binnenkomende buffers laat dumpen naar een file, en deze file vervolgens afspeel m.b.v. CoolEdit, dan is het volume WEL over de volle lengte correct! Het enige verschil wat ik kan bedenken, is dat CoolEdit zo'n dumpfile als 1 groot buffer wegschrijft naar de geluidskaart (ca. 180 kB), en niet buffer voor buffer.
Bij een vergelijkbaar programma wat niet eerst converteert naar WAV maar de VOX buffers wegschrijft naar een telefonie-kaart doet zich precies hetzelfde verschijnsel voor! En de kaarten (zowel de standaard soundcard als die speciale telefoniekaart) moeten het geluidsnivo best aankunnen, want nogmaals: bij afspelen van de dumpfile via CoolEdit of een demoprogje wat bij die telefoniekaart hoort gaat het wel goed!
Iemand enig idee wat er aan de hand zou kunnen zijn?
Ik heb een programma wat geluid afspeelt wat hij in blokken van 2 seconden over TCP/IP binnenkrijgt (iedere 2 seconden komt er dus een blok binnen wat ook 2 seconden geluid bevat). Het geluid is opgenomen in VOX formaat, maar wordt on-the-fly geconverteerd naar ruw WAV (ADPCM formaat, dus geen codecs en zo nodig). Deze WAV buffers worden achter elkaar naar de geluidskaart geschreven d.m.v. een call naar WaveOutWrite(). Het allereerste buffer wordt 0.5 sec vertraagd voordat het naar de kaart geschreven wordt, dus alle volgende buffers komen binnen als het voorgaande buffer nog 0.5 seconde te gaan heeft.
Alles werkt heel leuk en aardig, maar er is het volgende probleem: als het geluidsnivo bij opname boven een bepaald nivo kwam, lijkt het wel alsof bij weergave het volume van het eerste buffer korrekt is, maar daarna wordt het afgeknepen tot een lager level. Het gekke is, dat als ik mijn programma de binnenkomende buffers laat dumpen naar een file, en deze file vervolgens afspeel m.b.v. CoolEdit, dan is het volume WEL over de volle lengte correct! Het enige verschil wat ik kan bedenken, is dat CoolEdit zo'n dumpfile als 1 groot buffer wegschrijft naar de geluidskaart (ca. 180 kB), en niet buffer voor buffer.
Bij een vergelijkbaar programma wat niet eerst converteert naar WAV maar de VOX buffers wegschrijft naar een telefonie-kaart doet zich precies hetzelfde verschijnsel voor! En de kaarten (zowel de standaard soundcard als die speciale telefoniekaart) moeten het geluidsnivo best aankunnen, want nogmaals: bij afspelen van de dumpfile via CoolEdit of een demoprogje wat bij die telefoniekaart hoort gaat het wel goed!
Iemand enig idee wat er aan de hand zou kunnen zijn?