2011-01-02 5 views
11

마이크 출력을 "시뮬레이트"해야하는 곳에 문제가 있습니다.가상 마이크 (가상 마이크)

데이터는 네트워크를 통해 들어오고 PCM으로 디코딩되며 기본적으로 마이크에 기록되어야합니다. 그러면 다른 프로그램이 읽고/녹음 할 수 있습니다.

나는 alsa에서 읽었지만 정보는 매우 희소합니다. 파일 플러그인은 유망 해 보입니다. 저는 "infile"이라는 이름의 파이프를 가지고있어서 응용 프로그램에서 데이터를 전달할 수 있다고 생각했습니다. 나는 그러나 (vlc/대담 단지 segfault) 일할 수 없습니다.

pcm.testing { 
    type file 
    slave { 
    pcm { 
     type hw 
     card 0 
     device 0 
    } 
    } 
    infile "/dev/urandom" 
    format "raw" 
} 

더 좋은 방법이 있습니까? alsa 플러그인 (특히 파일 플러그인)에 대한 제안 사항은 무엇입니까?

답변

7

소리가 네트워크를 통해 전달되고 읽을 때까지 무엇이 캐시 될까요? 아니면 데이터가 삭제됩니까? 일반적으로 아래처럼 (거의 테스트되지 않은) 가상 마이크로 작동해야하지만, 장치가 열렸을 때 파일이 처음부터 읽히고 파일 끝을 어떻게 처리해야하는지 확인해야한다고 생각합니다. 아마도 파이프를 사용하여 시도하지만 들어오는 데이터를 캐싱/폐기하는 것은 네트워크에서 앱을 읽는 방식으로 처리해야합니다.

pcm.virtmic { 
    type file 
    format "raw" 
    slave.pcm "default" 
    file '/dev/null' 
    infile '/dev/urandom' 
} 

자세한 내용은 alsa docs을 참조하십시오.

이 도구가 실제로 작업에 필요한 것인지 확실하지 않습니다. '파일'로 할 수있는 것처럼 'infile'옵션으로 명령을 시작할 수 있다면 정말 멋지 겠지만, 불행히도 당신은 할 수 없습니다 ...

희망이 있습니다.

업데이트 : slave.pcm은 "null"이 아니고 실제 장치 여야합니다. 그것은 타이밍에 사용되는 것으로 보이거나 모르지만 null을 사용하면 레코더 프로세스가 영원히 차단됩니다. 이 장치는 주어진 샘플 속도로 사용자를 강제 할 수 있으므로주의해야합니다. "기본값"을 사용하는 것은 정상적인 기본값입니다. infile은 정확한/일치 형식 및 비율의 원시 사운드 데이터를 제공해야합니다. btw를 사용하면 alsa 서버 및 jackd 및 기타 사운드 시스템과 라이브러리에서 작업을위한 대체 솔루션을 볼 수 있습니다.