2012-12-13 3 views
0

제 질문은 약간 추상적이지만 좋은 근거가 있습니다. 성공적으로 스피커에 마이크 오디오 데이터를 반복하는 C로 작성된 JACK 스크립트를 실행했습니다. 그러나 재생 중에 오디오 자체의 스트림을 변경하는 방법을 알고 싶습니다. 아마도 필자가 시도해보고 싶은 것은 필터입니다. 높은 (또는 낮은) 주파수 (완전히 차단). 내 이해에서 오디오는 아날로그 신호로 전달되어 디지털 값 (특정 범위 내)으로 변환됩니다.C로 "JACK 오디오"데이터를 처리 중입니까?

저는이 두 가지 방법 중 하나에 대해 가야한다고 생각합니다. 한 가지 방법은 각 값을 처리하고 빈도 (또는 빈도 이상)가 부족한 지 확인하는 것입니다. 값을 0 (또는 마지막 루프주기의 이전 값)으로 변경하여 재생 중 오디오의 빈 부분을 방지하십시오. 짐작할 수있는 두 번째 방법은 JACK이 주파수 스펙트럼에 의해 할당 된 값의 전체 배열을 버퍼에 제공한다는 것입니다. 어떻게해야합니까? (앞으로 나는 원시 데이터와 다른 일을하고 싶지만 난이 원시 오디오 프로세싱에 대해 잘 알고 얻을 수있는 좋은 시작이라고 생각)

다음

내 간단한 코드입니다http://pastebin.com/Hmiumqkz 당신은 내가 노력 것을 볼 수 있습니다 값으로 인쇄 할 때 "float"이 될 것이라고 생각합니다. 주파수를 필터링 할 수 있을지도 모르겠지만이 코드를 실행할 때 콘솔에 아무 것도 인쇄되지 않는 것은 확실하지 않습니다. 마이크를 스피커로 되돌려 루프하면서 콘솔로 출력하지 마십시오 .....

참고 : Gstreamer, ALSA, NAudio, irr을 사용하는 프로그램을 이미 성공적으로 컴파일하고 테스트했습니다 Kang, Phonon 라이브러리를 사용하면 OS와 내가 프로젝트에 필요한 원시 오디오 데이터 사이에 필요한 상호 호환성을 허용하지 않습니다. 내가 묻는 것은 저에게 lazily가 "other 라이브러리 "는 단지"쉽게 "하기 위해서이지만 이미 시도했지만 모두 실패합니다.

+0

주파수 및 시간) 모두 : http://jackaudio.org를/applications 어떤 것은 소스 코드에 비싸고, 다른 것들은 유효한 링크가 아니거나, 컴파일되지 않은 깨진 코드이다. 아마 나는 어떤 사람이라도 알고있는 잭을 사용하는 사운드 분석기로부터 배울 수있을 것입니다. – Xenland

+0

JACK 오디오 API를 더 자세히 살펴보면 ringbuffers가 데이터를 저장하는 "버퍼"라는 사실을 알게되었습니다. (데이터가 루프를 돌고 데이터 조각을 대체하는 경우도 있습니다) JACKS 링 버퍼 (ringbuffers)를 사용하고 데이터를 로컬로 내 프로그램에 버퍼링하고 적절하게 슬라이스를 "처리"할 수 있습니다. http://jackaudio.org/files/docs/html/ringbuffer_8h.html#aa21aaf8ff173ba0e89b35554f20d4ccb 아이디어가 있으십니까? – Xenland

+0

다음은 더 나은 목록입니다. http : //wiki.linuxaudio.org/apps/categories/jack 나는 왜곡 효과를 만드는 방법을 찾을 수 있었고, 실제로 그것을하고 싶었던 것과 같은 방식으로 실제로 움직이고있었습니다. 다음은 개발/테스트 용 VALID 처리 오디오 애플리케이션에 대한 링크입니다 : http://www.dis-dot-dat.net/index.cgi?item=/code/arcangel/ – Xenland

답변

0

정말 여기에 답변 할 수있는 질문이 없으므로 몇 가지 외부 리소스를 알려 드리겠습니다.

http://blog.bjornroche.com/2012/08/basic-audio-eqs.html

그것의 대부분은 C와 같은 psuedocode로 작성하고 단계별 과정을 안내합니다 : 여기

인기 RBJ filters에 따라 EQ를 설계를위한 튜토리얼입니다.

+0

JACK 오디오를 아는 사람들은 샘플을 읽을 것입니다 코드 및 설명을 제공하고 내가 현재 프레임 빈도 값을 찾는 데 문제가 있음을 알고 있어야합니다. (나는 방금 -1에서 +1까지 범위를 찾았습니다.) – Xenland

+1

막연한 질문을하는 중입니다. (" 오디오 처리 방법 ")과 몇 가지 특정 질문 ("왜이 가치 인쇄가 아닌가? ")이 있습니다. 사람들이 여러 가지 질문에 답할 것을 기대해서는 안됩니다. –

-1

여기에 올바른 대답이 있습니다. for 루프는 proccess() 콜백 함수에서 printf() 함수를 보게됩니다. for 루프는 버퍼의 현재 프레임을 인쇄합니다 (주파수 도메인이지만 for() 루프는 너무 시간 영역뿐만 아니라 시간이 지남에 인쇄되어 - 난 그냥이 링크에서 "분석기"를 체크 아웃에서 시도

http://pastebin.com/axDLw7cc

+0

JACK API에는 주파수 도메인이 없습니다. 한 번에 한 줄씩 각 샘플을 인쇄하는 것뿐입니다. 두 가지 모두에 frowned입니다 (당신은 당신의 오디오 쓰레드 내에서 printf를 호출해서는 안됩니다). –

관련 문제