我的目标很简单,我想使用PCM方法通过音频线将字符串数据从PC1传输到PC2。 但是,当我从PC2记录数据时,我遇到了一些问题。事实上我期待ASCII数值,而不是我读取这样的值:
1111000-100111100010211211100222312121222222121111111111000000000-10-2-1-1-1-1-1-10-1-1-1-1-2-2-2-1-2-2-1-1-2-2 -2-1-1-10-1-1-1-3-2-2-1-1-1110-10-10-1011110-10011100-20-10000-1000-10-1-1-1000-1 -1-1-2-1-1-1-10-10-1-1-2-1-1-1000000101100101110011113121111222312111122111111021111101000010000-1-1-10-1010100110011011111012121110-1-3-5-4-4-7-8 -11-15-15-19-23-27-34-38-38-32-28-27-31-33-34-34-32-25-14228568510912212612311811310810396888175747577798079745933-3-47-84-110-116-99 -62-162757727264565151525248433735363836302092151421242215109101416123-9-19-22-17-82661-2-4-4-2-3-4-6-8-8-8-8-8-9-11-11-11-10-10 -10-11-12-12-11-9-7-8-9-10-8-4030-5-51111710-15-52-90-118-127-121-109-98-94-93-96 -93-87-5-5-5-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-7-7-6 -6-6-6-7-6-6-6-6-6-6-6-6-6-7-5-5-6-6-6-5-6-6-6-5-6 -6-5-5-5-6-6-6-5-6-5-5-5-5-4-5-5-5-4-5-5-5-5-5-5-5 -4-5-4-4-4-4-4-4-4-4-4-3-3-3-4-3-3-3-3-3-2-4-3-2-4 -2-2-2-3-3-2-2-3-2-2-2-3-2-3-2-2-2-2-2-2-1-2-1-1-1 -1-2-1-1-1-1-1-1-10-2 -
在这里,您可以找到我用来从麦克风音频端口读取数据的代码:
public static void Setup_Audio_Read() throws Exception {
format = null;
targetInfo = null;
targetLine = null;
format = new AudioFormat(Encoding.PCM_SIGNED, 44000, 8, 1, 1, 44000, true);
targetInfo = new DataLine.Info(TargetDataLine.class, format);
targetLine = (TargetDataLine) AudioSystem.getLine(targetInfo);
targetLine.open(format, targetData.length); //targetLine.open(format,targetLine.getBufferSize());
targetLine.start();
}
private static long extendSign(long temp, int bitsPerSample) {
int extensionBits = 64 - bitsPerSample;
return (temp << extensionBits) >> extensionBits;
}
public static void ReadLineData() throws IOException {
nBytesRead = targetLine.read(targetData, 0, targetData.length);
}
static public void Read() throws Exception {
Setup_Audio_Read();
int waiting_time = 0;
int bytesread = 0;
PrintStream out = new PrintStream(new FileOutputStream("C:\\Users\\Ale\\Desktop\\Prova\\Token.txt"));
while (waiting_time < 500) {
ReadLineData();
System.out.println(waiting_time);
long temp = 0;
int i = 0;
int bitsPerSample = format.getSampleSizeInBits();
int bytesPerSample = bytesPerSample(bitsPerSample);
while (i < nBytesRead) {
temp = (targetData[i] & 0xffL);
temp = extendSign(temp, bitsPerSample);
out.print(temp);
i = i + bytesPerSample;
}
waiting_time +
}
out.close();
}
如您所见,我使用了此论坛中报告的建议: How do I use audio sample data from Java Sound?
但它似乎不起作用。
你怎么看?我怎么解决这个问题? 提前致谢。 问候。啤酒