2010-05-19 5 views
4

LAN을 통해 오디오를 스트리밍하는 간단한 소프트웨어를 작성하고 있습니다. 모든 네트워크 부분을 구현했지만 Java Sound API를 사용하고 있습니다. 마이크 및 라인 입력에서 오디오를 성공적으로 캡처했지만 스피커와 같은 대상 포트에서 캡처 할 수 없습니다. 내 질문은 마스터 대상 포트에서 캡처 할 수 있습니까? 여기 라인을 초기화 할 때 작동하는 코드가 있습니다.Java Sound API : 대상 포트에서 사운드 출력 캡처

private boolean startCapture(){ 
    try{ 
     DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); 
     line = (TargetDataLine)AudioSystem.getLine(info); 
     audioBuffer = new byte[bufferSize]; 
     line.open(format); 
     line.start(); 
     return true; 
    }catch(Exception e){ 
     System.out.println("Exception thrown when capturing audio:\n" + e); 
     return false; 
    } 
} 

이와 같은 코드를 실행하면 마이크가 내 회선으로 사용됩니다. Here은 내 사운드 시스템에 대한 정보입니다. 가장 중요한 것은 아마 제가 리눅스를 사용하고 있다는 사실입니다.

당신이 나에게 줄 수있는 모든 도움에 미리 감사드립니다.

+0

그래서 작동하게 만들었습니까? –

+0

아니요. 직접적으로 필요한 것을 액세스 할 수 없었습니다. –

+0

그래서 스피커에서 녹음하고 싶습니까? –

답변

0

스피커는 TargetDataLine이 아닌 SourceDataLine입니다. 스피커에서 "포착"하는 방법을 이해하지 못합니까?

+0

여전히 믹서의 포트입니다. 내 이해는 실제로 믹서에서 스피커로 나가기 전에 믹서에서 가져올 수 있다는 것입니다. 해당 포트를 통해 데이터가 흐르도록하는 방법이 있어야합니다. –

1

네트워크 사운드와 관련된 한 가지 문제는 사운드 카드 클럭 간의 차이로 인해 각 끝에있는 컴퓨터의 샘플 속도가 약간 다를 수 있다는 것입니다. 컴퓨터 시계는 다양합니다. 보내는 컴퓨터가받는 컴퓨터보다 느리게 실행 중이면 버퍼가 있더라도 버퍼가 천천히 비워집니다. 실행 속도가 빠르면 천천히 과도한 데이터가 발생합니다. This person는 당신이하고 있던 것을 방금 시도하고 중퇴자를 보았습니다. 더 비싼 사운드 카드를 구입하면 문제가 줄어들지 만 완전히 GPS 시간 신호에 고정시키지 않으면 문제를 완전히 해결할 수는 없습니다. 일반적인 일반 사용자는 그렇게하지 않습니다.

아마도 짧은 전송에 대해서는 문제가 될 수 있습니다. 예를 들어 음성을 보내고 스피커가 조용 할 때 전송을 중지하면 다시 시작할 때 버퍼를 동기화 할 수 있습니다. 나는 대기 시간에 어떤 영향을 줄지 궁금해. "적절한"솔루션은 샘플 속도의 약간의 차이를 처리하기 위해 수신 측에서 오디오를 다시 샘플링해야합니다.

주파수가 너무 작 으면 가장 가까운 이웃을 가져갈 수 있습니다. 즉, 매번 샘플을 건너 뛰거나 복제하는 것이 좋습니다. 필자가 들어 본 디지털 아마추어 라디오 소프트웨어는 샘플간에 선형 보간법을 사용합니다. 새로운 데이터가 들어오는 속도로 버퍼를 비울 수 있도록 스케일링 팩터를 유지하고 제어해야하지만, 네트워크 바가 리에 지나치게 화나게하지 않고 갑작스러운 큰 변경을 시도하지 않는 제어 루프가 있어야합니다 .

나는 이것을 고려했는지 여부를 알지 못합니다. 나는 사람들이 이것을 시도한 것을 보았다. 나는 요즘 사람들이 이런 종류의 일을 처리하는 기성품 오디오 회의 라이브러리를 사용하는 것을 제외하고는. 이를 수행하는 방법에 관심이 있으시면 디지털 아마추어 라디오 커뮤니티를 살펴 보는 것이 좋습니다.

+0

이것은 내가 생각한 것이 아닙니다. 귀하의 답변에 감사드립니다. 이 사이드 프로젝트는 내가 그 부분에 접근 할 수 없었기 때문에 얼마간 죽었습니다. 나는이 두 가지를 어떻게 동기화 할 것인지 정확히 알지 못했지만 당신의 설명은 나의 이해를 증진 시키는데 매우 도움이된다. –

1

여기가 방법입니다 (프로그래밍 방식이 아님).

이동 : 제어판 \ 하드웨어 및 소리 \ 소리 아이콘을 클릭하십시오. 이제 녹음에 들어가서 마우스 오른쪽 버튼을 누르고 모두 선택하십시오. 연결 해제 된 장치를 활성화하십시오. "Stereo mix"아이콘을 찾을 수 있습니다. 기본 장치로 사용하십시오. .

이제 소리를 녹음 해보십시오. 문제가 해결되었습니다.

+0

예, 작동하지만 Windows에만 해당됩니다. 플랫폼 간 호환성이 필요합니다. Java에서 처음 작성된 이유입니다. –