Hoi!
Voor een project moet ik zorgen dat het geluid dat uit mijn boxen komt opgenomen wordt.
Nu heb ik deze code:
Maar op een of andere manier neemt hij dus een verkeerde mixer op. Waarschijnlijk dus de microfoon.
Weet iemand of het mogelijk om gewoon de system mixer te pakken te krijgen?
Met deze methode krijg ik wel een lijst met mixers:
En daar staat dan ook mijn normale output mixer in maar dit zijn dus SourceDataLines, en wanneer ik die in mijn andere methode invoer geeft hij errors dat hij niet kan lezen. TagertDataLines werken wel maar dit is alleen voor invoer.
Voor een project moet ik zorgen dat het geluid dat uit mijn boxen komt opgenomen wordt.
Nu heb ik deze code:
code:
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
| public void captureAudio() { final int capturetime = 10; //seconds try { //Get the format final AudioFormat format = getFormat(); DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); final TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info); line.open(format); line.start(); System.out.println("Recording Started"); Runnable runner = new Runnable() { int bufferSize = (int)format.getSampleRate() * format.getFrameSize(); byte buffer[] = new byte[bufferSize]; public void run() { out = new ByteArrayOutputStream(); running = true; int counter = 0; try { while (running) { counter++; System.out.println(counter); System.out.println("Volume: "+line.getLevel()); int count = line.read(buffer, 0, buffer.length); if (count > 0) { out.write(buffer, 0, count); } if(counter >= capturetime) { running = false; System.out.println("Recording Stopped"); } } out.close(); } catch (IOException e) { System.err.println("I/O problems: " + e); System.exit(-1); } } }; Thread captureThread = new Thread(runner); captureThread.start(); } catch (LineUnavailableException e) { System.err.println("Line unavailable: " + e); System.exit(-2); } } |
Maar op een of andere manier neemt hij dus een verkeerde mixer op. Waarschijnlijk dus de microfoon.
Weet iemand of het mogelijk om gewoon de system mixer te pakken te krijgen?
Met deze methode krijg ik wel een lijst met mixers:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| public void listMixers(boolean bPlayback) { final AudioFormat format = getFormat(); System.out.println("Available Mixers: "); Mixer.Info[] aInfos = AudioSystem.getMixerInfo(); for(int i=0; i < aInfos.length; i++) { Mixer mixer = AudioSystem.getMixer(aInfos[i]); Line.Info lineInfo = new Line.Info(bPlayback ? SourceDataLine.class : TargetDataLine.class); if(mixer.isLineSupported(lineInfo)) { System.out.println(mixer.getMixerInfo().getName()); } } } |
En daar staat dan ook mijn normale output mixer in maar dit zijn dus SourceDataLines, en wanneer ik die in mijn andere methode invoer geeft hij errors dat hij niet kan lezen. TagertDataLines werken wel maar dit is alleen voor invoer.