Toon posts:

[C/C++] wave replay speed

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een applicatie die een geluidsopname afspeelt in .WAV formaat. De originele opname is in .VOX formaat, maar dat wordt geconverteerd naar .WAV. (Het algorithme daarvoor heb ik van internet, ik ben niet bekend met de ins en outs van beide formaten). De WAV is 8Khz, 16bits/sample, mono.

Het probleem is als volgt: deze applicatie moet kunnen draaien onder zowel WinNT als Compaq unix (voorheen DEC unix) OSF4. En dat doet het ook, maar:

onder unix speelt hij 0.5% te traag af.

Nu zou je zeggen "what the heck, wat is nou 0.5%?" maar dat is in deze applicatie veel te veel. 0.5% is in 20 minuten toch al 6 seconden afwijking, en dat mag in dit geval gewoon niet.

De gebruikte libraries zijn de MS wave lib en de DEC (of Compaq) MME-lib (MultiMedia Environment) versie 2.42. Deze laatste is voor 95% compatible met de MS wave lib. Ik open de soundcard dus met WaveOutOpen en schrijf de data weg met WaveOutWrite.

De vraag: hoe kan ik de afspeelsnelheid 0.5% bijstellen? Ik heb in de doc's van geen van beide libs een mogelijkheid gevonden om de snelheid (pitch?) bij te regelen.... Ik hoop nu maar dat als iemand weet hoe dat in de MS lib moet, datzelfde ook werkt in de MME lib. Weet iemand of die mogelijkheid bestaat, en zo ja hoe?

Btw ik heb al geprobeerd om in de waveheader de samplefrekwentie te verhogen van 8000 naar 8040 in de hoop dat-ie dan 0.5% sneller afspeelt, maar dat wil niet :( . Ik krijg nu foutmeldingen van unrecognized wave format of zo iets (weet 't niet exact meer, 'k zit momenteel thuis).

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:29
Misschien heeft het wel te maken met het feit dat Unix multi - user is?
Misschien als je dat programma dan opstart met een hogere prioriteit?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Op maandag 17 december 2001 21:50 schreef whoami het volgende:
Misschien heeft het wel te maken met het feit dat Unix multi - user is?
Misschien als je dat programma dan opstart met een hogere prioriteit?
Hmmm, hogere prioriteit had ik nog niet geprobeerd, maar volgens mij is het niet load gerelateerd. Ik heb het geprobeerd terwijl er een redelijk zware applicatie naast stond te draaien, en ook als zowat enige actieve programma op het hele systeem. In beide gevallen was de snelheid 0.5% fout. Je zou toch verwachten dat als het load gerelateerd was, dat er dan verschillen zitten in die twee getallen.

Ik heb het vermoeden dat om een of andere reden de driver er gewoon 0.5% naast zit maar dat de schrijver daarvan heeft gedacht "dat merkt toch niemand". En inderdaad is het een hele tijd onopgemerkt gebleven, maar nu heeft een klant het wel gemerkt en die accepteert het niet. En terecht, want het geluid moet in deze applicatie in sync blijven met andere data.

Verwijderd

Op maandag 17 december 2001 21:21 schreef raccoon het volgende:

De vraag: hoe kan ik de afspeelsnelheid 0.5% bijstellen?
Met DirectSound kun je de afspeelfrequency instellen. Ik weet echter niet of je hiervan gebruik kan/mag/wil maken.

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

Timing onder bij verschillende OS'en zijn nooit aan elkaar gelijk. Nou moet ik zeggen dat 0.5% wel heel erg veel is. Maar aan de andere kant, probeer eens voor de gein een MP3'tje in winamp (windows) en een MP3'tje onder XMMS of mpg123 (linux/unix) af te spelen. Deze lopen pertinent NIET gelijk. Ik heb zelfs al afwijkingen van meer dan een seconde per minuut kunnen constateren.

Tegenwoordig wordt alles via DMA geregeld en je zegt tegen de geluidkaart in principe: van hier tot hier moet je zo snel spelen op die manier, ga je gang. Wat ik me kan voorstellen, is dat fabrikanten van geluidskaarten nogal brakke timer-oscillators op hun kaarten bouwen (hee, het moet goedkoop zijn, en of hij nu 1.00Mhz of 1.01Mhz tikt, who cares!?).

Yo dawg, I heard you like posts so I posted below your post so you can post again.


Verwijderd

Topicstarter
Ja, de verschillende hardware, daar heb ik ook al aan zitten te denken, maar een kristaloscillator kan toch geen 0.5% afwijken? De nauwkeurigheid van een kristalletje is toch minstens een paar tientallen ppm, misschien hooguit 100 ppm? En da's 0.01%!

Verwijderd

Topicstarter
Op maandag 17 december 2001 22:31 schreef noid het volgende:

[..]

Met DirectSound kun je de afspeelfrequency instellen. Ik weet echter niet of je hiervan gebruik kan/mag/wil maken.
Nee. Is niet beschikbaar op DEC MME-lib. En het moet zowel onder WinNT als onder DEC unix lopen.

Maar het feit dat je de snelheid kunt regelen, geldt dat (onder DirectSound) ook voor opnames in .WAV formaat? (ik weet niks van DirectSound, dat mag duidelijk zijn). Want als dat zo is, moet er dus in principe een manier voor zijn...

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

Op maandag 17 december 2001 23:15 schreef raccoon het volgende:
Ja, de verschillende hardware, daar heb ik ook al aan zitten te denken, maar een kristaloscillator kan toch geen 0.5% afwijken? De nauwkeurigheid van een kristalletje is toch minstens een paar tientallen ppm, misschien hooguit 100 ppm? En da's 0.01%!
Ik weet het, en daarom zei ik al dat ik 0.5% ook al veel vond. Maar misschien is het maar een deel van de afwijking?


Maar aan de andere kant: ik heb fabrikanten ergere troep op hardware zien bakken, dus waarom niet een afgedankte lading oscillators met een 0.5% afwijking (Swatch zou zo'n partij metteen uit het raam gooien, Creative en Asus daarintegen.....)

Yo dawg, I heard you like posts so I posted below your post so you can post again.


Verwijderd

Op maandag 17 december 2001 23:16 schreef raccoon het volgende:

Maar het feit dat je de snelheid kunt regelen, geldt dat (onder DirectSound) ook voor opnames in .WAV formaat?
Het opnemen van geluid onder DirectSound verschilt zo ver ik weet niet of amper van geluid opnemen zonder DirectSound (dus MME), dus inclusief extra latency. Bovendien is de frequentie waarop je opneemt vast, dus niet 8040, en als ik het goed heb vanaf 11.025 kHz.
( Tenzij dit weer veranderd is, want ik lees nu de docs van een oudere DirectSound API. )

Maar ja, je kunt ook op een hogere frequentie opnemen, en dan zelf de audio terugzetten naar 8040 Herz, met lineaire interpolatie, of mooiere dsp algoritmes. Maar ik heb te weinig zicht op waar je mee bezig bent, dus ik weet abslouut niet of je hier iets aan hebt.

Verwijderd

Topicstarter
Bedankt voor het meedenken, noid. Maar ik zit vast aan die 8kHz sample frekwentie. Het geluid wordt opgenomen met een telefonie-kaart, en die sampelt op maximaal 8kHz (de bandbreedte die hij aan moet kunnen is immers maximaal 3400 Hz, de telefoonlijn-bandbreedte). Die kaart slaat het geluid op in VOX formaat, wat een reductie van 50% oplevert t.o.v. WAV formaat. Die reductie is ook redelijk belangrijk, want er wordt van veel kanalen tegelijkertijd opgenomen, en er moet dus veel op schijf worden opgeslagen. Afspelen hoeft maar met 1 kanaal tegelijkertijd, dus dat doen we niet via die telefonie-kaart maar via de soundcard die iedere PC of werkstation toch al heeft.

Tijdens afspelen wordt er on-line geconverteerd van VOX naar WAV. Die conversie is goed, want er komt verstaanbaar geluid uit. En op WinNT nog op de goede snelheid ook. Maar op DEC unix dus niet.

Enne, over die hardware: het gaat hier wel om DEC (nu dus: Compaq) Alpha machines. Dus niet de eerste de beste kloon. Het geluidskaartje wat erin zit is meen ik een ESS-kaart, maar dat merk zegt me niet zoveel. Ik ga er echter wel vanuit dat Compaq geen troep gebruikt. Is dat misschien een foute veronderstelling?

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

Op maandag 17 december 2001 23:39 schreef raccoon het volgende:
Enne, over die hardware: het gaat hier wel om DEC (nu dus: Compaq) Alpha machines. Dus niet de eerste de beste kloon. Het geluidskaartje wat erin zit is meen ik een ESS-kaart, maar dat merk zegt me niet zoveel. Ik ga er echter wel vanuit dat Compaq geen troep gebruikt. Is dat misschien een foute veronderstelling?
Ja :+, en zeker de grote computerboeren (als ik 1 miljoen computers maak, en ik kan elke computer 10 cent goedkoper produceren....). Maar goed, het draait om de geluidskaart, daar kan best verschil in zitten. Als je het echt zeker wil weten, dan zou ik in beide systemen dezelfde (merk) geluidskaart erin zetten. Dan weet je waarschijnlijk of dit het probleem is of niet.

Yo dawg, I heard you like posts so I posted below your post so you can post again.


Verwijderd

Topicstarter
Op dinsdag 18 december 2001 00:02 schreef JayTaph het volgende:

[..]
Maar goed, het draait om de geluidskaart, daar kan best verschil in zitten. Als je het echt zeker wil weten, dan zou ik in beide systemen dezelfde (merk) geluidskaart erin zetten. Dan weet je waarschijnlijk of dit het probleem is of niet.
En dat gaat nou juist niet. De systemen die op WinNT draaien zijn allemaal standaard PC's, met Soundblaster (of compatible) geluidskaarten. Drivers bij de vleet dus. De unix systemen zijn Alpha workstations, met hun eigen ingebouwde geluidskaartje ('t is echt een heel klein dingetje). Volgens mij zijn er geen Soundblaster (of compatible) drivers voor DEC alpha stations (draaiend onder unix OSF4). Dus die geluidskaart verwisselen zit er niet in.

Ik heb nog wel een vraag aan noid: weet jij hoe DirectSound de pitch regelt? Lijit me dat jij er aardig wat vanaf weet, mede gezien je profile :)

Verwijderd

Op dinsdag 18 december 2001 09:39 schreef raccoon het volgende:

[..]
Ik heb nog wel een vraag aan noid: weet jij hoe DirectSound de pitch regelt?
De pitch kun je afstellen bij het afspelen van geluid bij dsound. Echter, het kan zijn dat niet alle geluidskaarten dit ondersteunen dus dat wordt uitproberen. Ik zal eens kijken of ik ergens wat code heb liggen waarmee je het kunt uitproberen en eventueel zelf kunt implementeren.

je hoort nog meer van me vandaag...

Verwijderd

Topicstarter
Op dinsdag 18 december 2001 11:53 schreef noid het volgende:

[..]
je hoort nog meer van me vandaag...
Ehhh, niet dus... Heb je nog wat gevonden, noid?

Ben zelf ook nog steeds het net aan het afstruinen naar mogelijke oplossingen (naast m'n normale werkzaamheden), maar ben nog niet veel wijzer geworden.

Verwijderd

Op woensdag 19 december 2001 12:32 schreef raccoon het volgende:

[..]

Ehhh, niet dus... Heb je nog wat gevonden, noid?
ik had je gisteren een mailtje gestuurd naar je hotmailaccount, maar dat lijkt niet te werken.

Het gaat hierom, ik vermoed dat DirectX onder NT4 niet verder gaat dan versie3, en dat daarom SetFrequency() niet ondersteund wordt (vermoed ik tenminste).

Een alternatief is om zelf de lengte van de wave file aan te passen door linaire interpolatie, en ik heb daar nog wat code voor liggen.

Dit betekent echter dat de wavefiles een extra bewerking krijgen en dat kost tijd en processorkracht. Heeft het dus zin om je die code te sturen?

Verwijderd

overigens nog een belangrijk nadeel van die pitch verandering, is dat (zoals de naam het al zegt) de pitch(toonhoogte) veranderd wordt. Nu wil het niet direct opvallen als het om maar een heel klein beetje is, maar toch....

Verwijderd

Topicstarter
Op woensdag 19 december 2001 13:47 schreef noid het volgende:
overigens nog een belangrijk nadeel van die pitch verandering, is dat (zoals de naam het al zegt) de pitch(toonhoogte) veranderd wordt. Nu wil het niet direct opvallen als het om maar een heel klein beetje is, maar toch....
Het lijkt mij dat dit juist compenseert voor het te traag afspelen wat er nu gebeurt. Ik vermoed dus dat de toonhoogte nu juist te laag is. Overigens, noid, ik heb je email wel ontvangen (alleen nog niet toen ik hier vanmorgen weer postte). Heb inmiddels een antwoord gestuurd ook.

Verwijderd

Op woensdag 19 december 2001 14:20 schreef raccoon het volgende:

[..]

Overigens, noid, ik heb je email wel ontvangen (alleen nog niet toen ik hier vanmorgen weer postte). Heb inmiddels een antwoord gestuurd ook.
Yep, gezien en gereplied :)
Pagina: 1