Ik ben een vu meter aan het bouwen in C# hiervoor gebruik ik wat van het internet geplukte code om de data van windows te bemachtigen, via Directx.
Ik krijg nu alle data +/- 1 seconde vertraagt binnen, wat het effect grondig verpest.
Ik ben de hele middag bezig geweest met het vinden van andere voorbeelden maar dat was niet zo succesvol. Er zijn veel vumeter classes te vinden voor als je zelf je geluid speelt, maar dat is dus NIET wat ik wil. Ik wil dat hij reageert op al het geluid wat op de pc wordt afgespeelt.
Hier de codie die ik gevonden heb:
Ik heb hem lang zelf bestudeert en vershillende veranderd en weer getest om te kijken of dat het oplost maar niets hielp. Verder vindt ik het ook raar dat er een seconde vertraging kan komen met een buffer van maar een paar bytes.
De GetVuData() methode roep ik 40 keer per seconde aan vanuit een daarvoor aangemaakte thread. Ik heb bevestigt dat dit gebeurt door eea naar de console te schrijven.
Is er hier iemand die bekend is met dit soort acties en die ziet wat er hier mis is?
Ik krijg nu alle data +/- 1 seconde vertraagt binnen, wat het effect grondig verpest.
Ik ben de hele middag bezig geweest met het vinden van andere voorbeelden maar dat was niet zo succesvol. Er zijn veel vumeter classes te vinden voor als je zelf je geluid speelt, maar dat is dus NIET wat ik wil. Ik wil dat hij reageert op al het geluid wat op de pc wordt afgespeelt.
Hier de codie die ik gevonden heb:
Ik heb hem lang zelf bestudeert en vershillende veranderd en weer getest om te kijken of dat het oplost maar niets hielp. Verder vindt ik het ook raar dat er een seconde vertraging kan komen met een buffer van maar een paar bytes.
De GetVuData() methode roep ik 40 keer per seconde aan vanuit een daarvoor aangemaakte thread. Ik heb bevestigt dat dit gebeurt door eea naar de console te schrijven.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| public class DXVuMeter { private CaptureBuffer buffer; private CaptureDevicesCollection audioDevices; private int selectedAudioDevice; private Int16 bitsPerSample = 16; private int samplesPerSecond = 44100; private Int16 channels = 2; private Int16 samples = 8; private Int16[] smoothValues; private int smoothing = 5; public DXVuMeter(int bitsPerSample, int samplesPerSecond, int channels) { this.bitsPerSample = (Int16)bitsPerSample; this.samplesPerSecond = samplesPerSecond; this.channels = (Int16)channels; audioDevices = new CaptureDevicesCollection(); selectedAudioDevice = 0; smoothValues = new Int16[channels]; smoothValues.Initialize(); } public void StartCapture(){ Capture capture = new Capture(audioDevices[selectedAudioDevice].DriverGuid); CaptureBufferDescription description = new CaptureBufferDescription(); WaveFormat waveForm = new WaveFormat(); waveForm.BitsPerSample = bitsPerSample; waveForm.SamplesPerSecond = samplesPerSecond; waveForm.Channels = channels; waveForm.BlockAlign = (short)(waveForm.Channels * waveForm.BitsPerSample / 8); waveForm.AverageBytesPerSecond = waveForm.BlockAlign * waveForm.SamplesPerSecond; waveForm.FormatTag = WaveFormatTag.Pcm; description.Format = waveForm; description.BufferBytes = 9 * waveForm.BlockAlign; buffer = new Microsoft.DirectX.DirectSound.CaptureBuffer(description, capture); buffer.Start(true); } public void StopCapture(){ buffer.Stop(); } public Int16[] GetVuData(){ Int32[] sampleFormatArray = { this.samples, 2, 1 }; Array samples = buffer.Read(0, typeof(Int16), LockFlag.FromWriteCursor, sampleFormatArray); Int16[] values = new Int16[channels]; for (int i = 0; i < channels; i++){ for (int j = 0; j < this.samples; j++){ values[i] += (Int16)samples.GetValue(j, i, 0); } values[i] = (Int16)(Math.Abs(values[i] / this.samples / 30)); if (values[i] > 100) values[i] = 100; } return values; } } |
Is er hier iemand die bekend is met dit soort acties en die ziet wat er hier mis is?
[ Voor 6% gewijzigd door martijnve op 02-08-2007 12:37 ]
Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW