Java Audio & Media

0 отговора 0 прегледа
#1

Java Audio & Media

Здравейте,
Имам проблем с плейването, и запис на звук чрез Java Media
Успешно взимам Миксер и Линия обекти за микрофона и за плейбека но не чувам никакъв звук... иначе буфера на линията се пълни с някакви данни...

Ето ми и кода:
public static void testMicrophone()
{
AudioFormat format = null;
Mixer micMixer = null;
Mixer playMixer = null;

TargetDataLine.Info tinfo = null;
TargetDataLine tline = null;

SourceDataLine.Info sinfo = null;
SourceDataLine sline = null;

AudioFormat[] tformats = null;

Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo();
Mixer mixers[] = new Mixer[mixerInfos.length];
for(int i=0; i<mixerInfos.length; i++)
{
mixers = AudioSystem.getMixer(mixerInfos);
String desc = mixerInfos.getDescription();
if(desc.toLowerCase().contains((CharSequence)"capture"))
{
//System.out.println("Sound Capture device found");
micMixer = AudioSystem.getMixer(mixerInfos);
break;
}
}
for(int i=0; i<mixerInfos.length; i++)
{
mixers = AudioSystem.getMixer(mixerInfos);
String desc = mixerInfos.getDescription();
System.out.println(desc);
if(desc.toLowerCase().contains((CharSequence)"playback"))
{
playMixer = AudioSystem.getMixer(mixerInfos);
break;
}
}

Line.Info micMixerInfos[] = micMixer.getTargetLineInfo();

for(int i=0;i<micMixerInfos.length; i++)
{
tinfo = (TargetDataLine.Info)micMixerInfos;
tformats = tinfo.getFormats();
for(int j=0; j<tformats.length; j++) {
System.out.println("formats["+j+"]: "+tformats);
}
System.out.println("'"+tinfo+"'");
}

Line.Info playMixerInfos[] = playMixer.getSourceLineInfo();
sinfo = (SourceDataLine.Info)playMixerInfos[0];
/*for(int i=0; i<playMixerInfos.length;i++)
{
sinfo = (SourceDataLine.Info)playMixerInfos;
if(sinfo.getClass() == SourceDataLine.Info.class)
{
break;
}
}*/

try {
tline = (TargetDataLine)micMixer.getLine(tinfo);
tline.open();

System.out.println(playMixer.getLine(sinfo).getClass());
sline = (SourceDataLine)playMixer.getLine(sinfo);

sline.open();
// Assume that the TargetDataLine, line, has already
// been obtained and opened.
ByteArrayOutputStream out = new ByteArrayOutputStream();
int numBytesRead;
byte[] data = new byte[tline.getBufferSize()];
boolean stop = false;
// Begin audio capture.
tline.start();

// Here, stopped is a global boolean set by another thread.
while (!stop) {
// Read the next chunk of data from the TargetDataLine.
numBytesRead = tline.read(data, 0, data.length);
// Save this chunk of data.
out.write(data, 0, numBytesRead);
sline.write(data, 0, numBytesRead);
//System.out.println(out.toString());
}
}
catch(LineUnavailableException e)
{
}
if(tline != null)
tline.close();
}

---
Its nice to be important, but its more important to be nice.
Отговор