2010-08-18 3 views
1

Core Audio를 처음 사용하여 정말 잃어 버렸습니다. 오디오를 녹음하고 해당 녹음에 음성 변조를 적용하려고합니다. 그것을 재생하십시오. 오디오 녹음을 위해 Audio Queue를 사용하는 Speak Here Here 예제를 살펴 보았습니다. 나는 오디오 샘플을 바꾸는 방법의 부분에 붙어있다. 콜백 함수의 Audio Unit을 사용하여 오디오 샘플을 변경할 수는 있지만 그 샘플을 어떻게 변경해야하는지 알지 못합니다.iPhone 용 Core Audio (오디오 장치/원격 IO)에서 녹음 된 음성을 사람의 음성으로 변경하는 방법

나를 소스 코드 나 튜토리얼 또는 객관적인 C를위한 음성 변조를 설명하는 사이트로 안내 할 수 있다면 정말 도움이 될 것입니다. 모두에게 미리 감사드립니다.

+0

관련 항목 : http://stackoverflow.com/questions/1158950/voice-alteration-algorithm – cregox

답변

2

여기서하려는 것은 그렇게 간단하지 않습니다. 기본적으로 음성을 변경하려면 보코더 ("음성 코더")를 구현해야합니다. Wikipedia links이 도움이 될 것입니다.

그런 다음 CoreAudio에서이 샘플을 조작했습니다. Audio Queue Services을 사용하여이를 수행 할 수 있지만 사용하기 쉬운 API는 아닙니다. 실제로 더 간단한 CoreAudio API 중 하나를 사용하고 Audio Unit에서 보코더를 래핑하는 것이 덜 어려울 수 있습니다.

오디오 처리에 경험이 있습니까? 일반적으로 오디오 프로세싱에 대한 사전 지식없이 보코더를 구현하는 것은 어려운 작업입니다.

2

먼저 질문에 실제로 대답하십시오. AudioQueueNewInput() 함수를 호출 할 때 데이터를 사용할 수있을 때마다 호출 될 루틴의 이름을 전달합니다. 당신은 아마 MyInputBufferHandler() 또는 무엇이라고 불렀습니다. 세 번째 인수는 들어오는 데이터를 보유하는 AudioQueueBufferRef입니다.

각 샘플 (진폭)을보고 낮추거나 올리는 것만 큼 간단하지는 않습니다. 진폭으로 시간 (시간) 영역에서 샘플을받습니다. 사용할 수있는 음조 또는 주파수 정보가 없습니다. 당신이해야 할 일은 들어오는 샘플 (파형)을 주파수 영역으로 이동시키는 것입니다. 여기서 공간의 각 "지점"은 주파수이고 동력과 위상을 동반합니다. 당신은 FFT (고속 푸리에 변환)로 할 수 있지만 수학은 다소 정교합니다. Apple은 Acceleration 프레임 워크에서 FFT 루틴을 제공하지만 여기에서는 매우 깊은 물에 빠져들고 있음을 알고 있어야합니다.

관련 문제