[VB]Audio/geluid bewerken

Pagina: 1
Acties:

  • -DarkShadow-
  • Registratie: December 2001
  • Niet online
Ik programmeer al enkele jaren Visual Basic. En nu wil ik eens beginnen met het programmeren van een applicatie die audiofiles kan bewerken met filters e.d. net zoals bijv. Cool Edit. Ik kan gebruik maken van DirectX, maar ik denk dat die te beperkt is. Hoe zou ik met audiobewerking kunnen beginnen??? Zou ik een goede engine moeten zoeken ofzow? Of kan er genoeg gedaan worden met DX en een aantal API's waar kan ik zoeken en waarnaar? Voorbeelden? Etc.
DX heb ik al aardig onder de knie, het sound gedeelte nog niet echt, maar dat is zo te leren.

Specialist in:
Soldeerstations
Oscilloscoop


  • prisselada
  • Registratie: September 2002
  • Laatst online: 22-11-2025

if you're gonna be dumb you gotta be though


  • -DarkShadow-
  • Registratie: December 2001
  • Niet online
nog niet, kom ik eigenlijk niet zo vaak

Specialist in:
Soldeerstations
Oscilloscoop


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 11:40
Is toch een erg goede site, vooral de artikelen zijn erg goed.

  • -DarkShadow-
  • Registratie: December 2001
  • Niet online
Ik heb op JWCS.net een aantal goede tutorials gelezen. Je moet wel enig verstand hebben van binair tellen en geluid, anders snap je er niks van, maar dat is dus geen probleem. Ik denk dat je het best de volgende stappen moet volgen bij audiobewerking:
1. Alle codecs eruit gooien, dus omzetten naar ongecomprimeerde wave.
2. Die opslaan in iets (RAM, HDD???)
3. De stilte lijn naar 0 brengen, dus het punt waarop het volume nul is moet binair ook nul zijn.
4. Volume van de kanalen enigzins aanpassen als er gemixt moet worden.
5. Beginnen maar met allerlei algorithmen.

Nu weet ik nog niet alles wat ik weten moet. Hoe kan ik de wave data het beste opslaan tijdens de bewerking in het geheugen, het is 8 en 16 bit geluid. 8 bit kan als Byte, maar een integer voor 16 bit is wel erg overdreven ofniet?
En kan ik dan alles het beste in arrays plaatsen? Dan krijg je wel erg veel arrays, voor een 3 seconden durend geluidje (stereo) krijg je dan:
intArrayChannel1(44100*3)
intArrayChannel2(44100*3)
Is dat niet erg langzaam? Bij een liedje van 3 minuten heb je dan echt een probleem volgens mij.

Of wordt er in de meeste audioprogramma's gewerkt met de Hardeschijf? Dat je i.p.v. het werkgeheugen gebruikt, gewoon de HDD gebruikt? Dat is ook erg langzaam....

Of is de hierboven beschreven manier echt onzin?

En hoe speel je die arrays dan af?

En hoe kan ik assembler in VB6 integreren, omdat veel van de bewerkingen veeeel sneller gaan op dat niveau en niet moeilijk te programmeren zijn.

[ Voor 8% gewijzigd door -DarkShadow- op 25-12-2002 17:14 ]

Specialist in:
Soldeerstations
Oscilloscoop


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
hmmm tenzij je een Dual Athlon heb raad ik je af om met Visual Basic de eigenlijke 'sound-arrays' te gaan knoeien. Daar is VB echt niet voor gemaakt. Waar het wel steengoed in is , is het gebruik van API en COM objecten. Dus eigenlijk is de vraag wil je je eigen filters schrijven (bv een Echo of zo - DSP) of wil je bestaande effecten toepassen op bestaande (of via LineIn / Mic) binnenkomen. Daarvoor is DirectX 8.1 echt tamelijk goed: daar zit een hele Plugin structuur aan vast (Komt van de vroegere DirectShow) en met goed zoeken zul je ook ;plugin convertors vinden die filter van Cubase/CoolEdit/etc/etc (zelfs Rebirth en Reason) als DirectShow filter kunnen gebruiken. Helaas toen ik zocht was erniet bijster veel info online maar de MSDN en DirectX SDK zijn een goed vertrek punt. Je kunt ook met de oude multimedia API van windows werken voor je sound output / input maar de plugin strcutuur van DirectShow is echt handig en niet moeilijk te leren (ik weer eerlijk gezegd niet of je een plugin met VB kunt maken...)

  • -DarkShadow-
  • Registratie: December 2001
  • Niet online
Ik wil eigenlijk een programma programmeren zoals CoolEdit, maar dan speciaal voor muziek, dus met meer muziek functies. Maar je moet wel volledige controle hebben over de wave's, net zoals in CoolEdit dus. Maar daar is Visual Basic dus niet echt geschikt voor? Kan ik dan beter Visual C++ gebruiken?
Hoe zou ik dat dan in C++ kunnen doen?

BTW, mijn methode gebruikt voor een stereo muziekje van 3 minuten 30MB werkgeheugen; 3*60*44100*2*2/1048576=30MB

De Algorithmen zijn het probleem niet, die zijn over het algemeen makkelijk te doen, maar het opslaan en aanroepen van de Wavedata is het probleem en ook het afspelen van meerdere array's.

Waarom zou het wel in C++ gaan en niet in VB6?
Ik zoek een goede C++ compiler voor winXP, waarmee je win32 progjes kunt schrijven en die niet zoveel rommel heeft zoals MS Visual C++, maar toch makelijk is.

[ Voor 62% gewijzigd door -DarkShadow- op 26-12-2002 22:29 . Reden: Wie leest dit nou? ]

Specialist in:
Soldeerstations
Oscilloscoop


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
tja alles kan he. maar array in VB zijn fundamenteel anders dan in C++ / C / Asm - daarmee wil ik niet zeggen dat het niet gaat in VB, maar hoe snel het zal gaan? euh DSP gemakkelijk? Veel mensen weten niet dat een SBLive chip evenveel cpu power heeft als een PIII800 en die doet alleen maar wat echo, reverbs, etc... Sound stuff is heel intensief anders zouden er geen soundcards bestaan (zie ook Graphics met dezelfde analogie).

C++ is toch gauw zo'n 1000 keer sneller als je werkt met basic structs (arrays-pointer) en enorme loops... Een goed compiler? nou Intel is de beste (veruit) maar als het gratis moet je wel GCC gebruiken en die is niet slecht maar nog altijd een pak trager dan M$ of Intel (codewarrior is ook OK, de laatste versie van Borland die ik had genereerde af en toe foute code). En je hoeft ook niet de MS visual c++ studio te gebruiken he - de compiler / linker is net zoals alle andere compilers een standalone executable. Als programmeur vindt ik Visual Studio erg goed vanwege goede debugging tools en nice Intellisence: Van MFC moet je natuurlijk wel afblijven.

Soit ik denk dat als je echt gewoon je sound wil afspelen misschien bets met de oude API speelt - daarvoor werk je dan met WAV's structs etc die je vast in VB kunt proppen - verder dan de API gebruiken voor af te spelen... Nu ja ik zou bij DirectX blijven maar tis blijkbaar een learning geval... het afspelen van meerder wavs (of sound gevallen) is meestal geen probleem - windows gaat ie voor jouw mooi mixen. Als je dat ook zelf wil doen ? moet je als terug naar de DOS dagen en hoewel ik vroeger mijn SB16 zelf aansprak via de poorten (gaat niet Windows2000/NT) is dat echt overkill.

Het snelste is mischien een WriteFilenaar memory doen (als een wav file) en een playsound met die memory file...

Cooledit (denk ik) gebruikt ofwel ASIO/DirectSound/Windows multimedia om af te spelen maar needless to say dat dat allemaal C/C++ is.

Download alvast een de DirectX 8.1 sdk en kijk naar de VB samples - best wel fun/klein en snel.

Je vroeg ook wat programmas gebruiken voor af te spelen: HD of RAM. dat hangt natuurlijk af van de size... In het ergste geval neem je streaming die om de zoveel tellen de buffer van HD naar RAM vult wanneer de buffer van het sound zelf nog aan het spelen is....

  • -DarkShadow-
  • Registratie: December 2001
  • Niet online
Ik wil alles zelf programmeren zoals mixen bijvoorbeeld, omdat ik de wave's weer moet opslaan, kan dit ook met de windows API?

Dingen zoals disortion, echo en reverb zijn makkelijk te doen (10 regels code per effect), maar ik denk dat ik gedeeltelijk gebruik ga maken van DirectX, omdat die gemakkelijk toegang geeft tot de geluidskaart.

Ik ga een klein programmaatje schrijven in Visual Basic dat een wavje in een array laadt en dan kijken hoe snel hij nog is. Is het dan nog te langsaam, dan koop ik een goed boek over C++ windows programming, want wat ik hier nu heb liggen is brak (tips?)

BTW:
Ik dacht dat GCC van C/C++ naar ASM compileert, want daar gebruik ik hem ook voor bij mijn AVR's.

[ Voor 11% gewijzigd door -DarkShadow- op 27-12-2002 11:15 ]

Specialist in:
Soldeerstations
Oscilloscoop


  • -DarkShadow-
  • Registratie: December 2001
  • Niet online
ahum?

Specialist in:
Soldeerstations
Oscilloscoop


Verwijderd

-DarkShadow- schreef op 27 december 2002 @ 11:12:
Ik dacht dat GCC van C/C++ naar ASM compileert, want daar gebruik ik hem ook voor bij mijn AVR's.
Euhh das wel 'n beetje het doel van een compiler ja het vertalen van "leesbare text" naar instructies die voor je processor te behappen zijn...

[ Voor 5% gewijzigd door Verwijderd op 27-12-2002 23:54 ]


  • -DarkShadow-
  • Registratie: December 2001
  • Niet online
gaat dat dan niet direct naar HEX?

Specialist in:
Soldeerstations
Oscilloscoop


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
lol het gaat van C++ -> ASM -> bytecode (de processor taal laten we maar zeggen). maar de middelste stap wordt meestal verborgen alhoewel je bij alle compilers ook de gegenereerde ASM file funt opvragen...

ivm je projectje zou ik zoals je zegt gewoon wat probeeren. Directshow is misschien niet snel aan de gang te krijgen voor je eigen plugins maar eens dat het lukt is het eenvoudig. Op zo'n laag niveau is het heus niet moeilijker in C++ dan VB...

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 15-08 11:47

Sponge

Serious Game Developer

Als je overigens met DirectSound(7/8) bezig bent, kun je volgens mij ook direct data in de buffer schrijven, wat ook in de DirectX8 SDK documents beschreven staat (als je die niet hebt, msdn.microsoft.com/directx

Gisteren zat ik nog hierover na te denken, maar heb het maar gelaten (ik wou wave files uit package file direct in SecondaryBuffer8 buffer laden), maar er zat zo veel werk aan voor zo iets simpels, dat ik gewoon de file extract, tijelijk opsla, en dan gewoon weer met CreateBufferFromFile oid laad.

Overigens weet ik dat er wel een site is waar een "mod player" staat die Directsound8 gebruikt, en de directe toegang gebruikt. Op www.pscode.com staat ook een ImpulseTracker player, die gebruikt echter DS7

btw, VB kan snel zijn, zoalng je maar goed alles in de gaten houdt ;)
Check bijv: http://vbfibre.persistentrealities.com

  • -DarkShadow-
  • Registratie: December 2001
  • Niet online
DirectX is totaal geen probleem, ik programmeer al anderhalf jaar D3D, DS heb ik ook al eens bestudeerd, maar vond ik tot nu toe nog niet aantrekkelijk. Ik ga het toch proberen in Visual Basic, maar eerst ga ik eens wat andere audioprogramma's bestuderen.

Specialist in:
Soldeerstations
Oscilloscoop

Pagina: 1