ToonsterMedlem sedan feb. 20001 590 inlägg Är det någon programmerande musiker här (Chainsaw?) som testat att läsa av midiporten och därefter spela upp diverse ljud?
Fixa programmet är inga problem (vågformer placerade i minnet), utan det jag undrar är om det blir en godtagbar fördröjning från "note on", eller om Windows API (Multimedia) och dess MIDI funktioner klarar av detta i realtid?
Har sökt information på nätet, och det lilla jag hittat (om prestandan) är att det kan bli vissa fördröjningar från MIDI instrumentet/Sequencern tills att signalen hamnar i applikationsprogrammet.
Visst, en lite udda och speciell fråga, men jag kastar ut den ändå.
/T
BeatboxMedlem sedan okt. 20013 217 inlägg Om du använder DirectX 8 eller senare så finns det ett fint litet interface till ett COM object som man kan ta tag i. IDirectMusicPort8 heter det.
The IDirectMusicPort8 interface provides access to a DirectMusicPort object, which represents a device that sends or receives music data. The input port of an MPU-401, the output port of an MPU-401, the Microsoft software synthesizer, and an IHV-provided filter are all ports. A physical device such as an MPU-401 might provide multiple ports. A single port, however, cannot both capture and render data.
Tyvärr så finns det inget stöd för att läsa/skriva till MIDI-portar i automationmodellen för DirectX. Tragiskt men sant.
JonMedlem sedan juli 20011 304 inlägg
om det blir en godtagbar fördröjning från "note on", eller om Windows API (Multimedia) och dess MIDI funktioner klarar av detta i realtid?
Det beror på vilket ljudkort du har.
Har du inget "bättre" kort får du räkna med en latency från note on till samplingsuppspelning på ganska så många millisekunder...
Om du har en senare version av cubase kan du kolla hur mycket!
ToonsterMedlem sedan feb. 20001 590 inlägg
Det beror på vilket ljudkort du har.
Jo, men tanken är att jag själv ska skriva programmet som känner av ljudkortet, så ljudkortet i sig kan väl inte spela så stor roll?
Det jag undrar är om de inbyggda MIDI funktionerna i Windows API är tillräckligt bra?
Vill inte använda Direct X
(Jag har ett Turtle Beach, men applikationen i sig kommer inte använda några ljudkortsspecifika funktioner typ wawetables osv. Programmet jag ska göra ska "bara" köra ut vågformer från minnet)
/T
Marcus EMedlem sedan maj 20021 466 inlägg
Jon skrev:
Det beror på vilket ljudkort du har.
Vilka ljudkort rekommenderar du?
Jon skrev:
Om du har en senare version av cubase kan du kolla hur mycket!
Var?
JonMedlem sedan juli 20011 304 inlägg Det spelar rätt så stor roll vilket ljudkort man har om jag har förstått dig rätt att du ska pela upp samplingar vid knapptryck på typ midi-instrument. Ska du spela upp från en ljudmodul eller liknande är det inga problem alls.
De billigare soundblaster-korten ligger med en latency på typ massa ms. Det lite dyrare Soundblaster Audigy Platinum EX har en neråt 4-5 ms om jag inte lissminner mig.
Fast man kan köra sitt live med hackade drivare (EMU APS) och få ner den ganska rejält ;)
Har dock inte hållt på på ett tag så det är möjligt att det har hänt en del på sista tiden.
Sök lite på ASIO och latency. Håll den under 10 ms åtminstonde.
Kommer inte riktigt ihåg var man hittar den i cubase. Under inställningar för ljudkortet där man ställer in bufferstorlek etc kanske? :)
ToonsterMedlem sedan feb. 20001 590 inlägg Kan inte förstå varför ljudkortet är inblandat. Jag kommer inte alls att använda ljudkortets MIDI funktioner.
Jag undrar ju bara om Windows API för MIDI, och om det finns/blir fördröjning där.
Det är själva MIDI signalen och eventuell fördröjning som jag undrar över, alltså signal IN. Allt annat är just nu oviktigt...
/T
BeatboxMedlem sedan okt. 20013 217 inlägg Sök i MSDN efter "MIDI Functions". Det finns en hel uppsjö med funktioner. Dom finns väl dokumenterade i MSDN. Det finns exempel i PlatformSDK:n om man läser MSDN.
Om det är en mjukvarusynth du är ute efter så kanske vi ska slå våra kloka huvuden ihop Toonster. Jag expremetierar också med en sådan, fast i DirectX.
ToonsterMedlem sedan feb. 20001 590 inlägg Jag kommer inte använda Direct X, utan utgår helt enkelt från minnesbuffertar som i realtid skickas till ljudkortet.
Principen är ganska enkel, och kan använda i stort sett hur många röster (polyfoni) som helst.
Just realtidshanteringen kan skapa problem om det blir tidsfördröjningar, eftersom det då blir en "offset" i minnesbufferten. Håller just nu och funderar kring detta.
Hade det varit ren uppspelning efter förutbestämda värden, så är problemet inte alls så stort.
(Finns en liten artikel i Dr Dobbs Journal, januari numret i år)
/T
Marcus EMedlem sedan maj 20021 466 inlägg Ljudkortet är inblandat därför att det är ljudkortet som för vidare signalen från midi-instrumentet till operativsystemet.
Håller själv på med ett inspelnings/uppselningsprogram för MIDI och fördröjningen är inte märkbar.
BeatboxMedlem sedan okt. 20013 217 inlägg
Jag kommer inte använda Direct X, utan utgår helt enkelt från minnesbuffertar som i realtid skickas till ljudkortet.
Det får man helt gratis om man använder DirectX, dvs DirectX sköter mixningen. Sedan så finns ju alla de vanliga effekterna som reverb, eko, EQ etc färdiga i DirectX.
ToonsterMedlem sedan feb. 20001 590 inlägg Beatbox-> Låter lite frestande med en Direct X implementation, men som det är nu, så måste/vill jag bearbeta ljudsignalen i realtid med diverse funktioner. Detta är för min del enklast som det är just nu.
Marcus E -> Så om man bortser från hårdvaran (MIDI interfacet är ju inte nödvändigtvis i ljudkortet) så kan jag räkna med en försumbar fördröjning?
/T
BeatboxMedlem sedan okt. 20013 217 inlägg Du kan ju höra av dig då du får det där med MIDI att funka. Det va där jag stöp pga att jag har inte så mycket tid och lust att lägga på just den delen. Som sagt var så tror jag man kan hitta nått exempel i PlatformSDK:n. Jag såg nått om ett exempel som läste just från MIDI.
Marcus EMedlem sedan maj 20021 466 inlägg Det är väldigt enkelt att läsa av data från MIDI-porten.
Anropa bara funktionerna midiInOpen med någon form av callback följt av funktionen midiInStart.
Data anländer sedan till din callback. För att kunna tyda den behövs en annan specifikation än Platform SDK. T.ex. denna: http://www.borg.com/~jglatt/tech/midispec.htm (MIDI) eller denna http://crystal.apana.org.au/ghansper/midi_introduction/midi_file_format.html (MIDI-filer).