문제

Remote IO 연결을 사용하고 오디오 입력을 내장 된 필터 효과 (iOS 5에서만)를 통해 라우팅 한 다음 하드웨어에서 다시 꺼냅니다.IT에서 입력에서 출력까지 똑바로 라우팅 할 수 있지만 필터를 사용할 수 없습니다.필터 오디오 단위 또는 잘못된 라우팅인지 확실하지 않습니다.

이 비트는 데이터가 처리되도록 필터를 설정하고 라우팅을 변경하는 시도 일뿐입니다.

도움이 감사합니다.

// ******* BEGIN FILTER ********

NSLog(@"Begin filter");

// Creates Audio Component Description - Output Filter    
AudioComponentDescription filterCompDesc;
filterCompDesc .componentType = kAudioUnitType_Effect;
filterCompDesc.componentSubType = kAudioUnitSubType_LowPassFilter;
filterCompDesc.componentManufacturer = kAudioUnitManufacturer_Apple;
filterCompDesc.componentFlags = 1;
filterCompDesc.componentFlagsMask = 1;


// Create Filter Unit
AudioUnit lpFilterUnit;
AudioComponent filterComponent = AudioComponentFindNext(NULL, &filterCompDesc);
setupErr = AudioComponentInstanceNew(filterComponent, &lpFilterUnit);
NSAssert(setupErr == noErr, @"No instance of filter");

AudioUnitElement bus2 = 2;
setupErr = AudioUnitSetProperty(lpFilterUnit, kAudioUnitSubType_LowPassFilter, kAudioUnitScope_Output, bus2, &oneFlag, sizeof(oneFlag));

AudioUnitElement bus3 = 3;
setupErr = AudioUnitSetProperty(lpFilterUnit, kAudioUnitSubType_LowPassFilter, kAudioUnitScope_Input, bus3, &oneFlag, sizeof(oneFlag));



// ******** END FILTER ******** //


AudioUnitConnection hardInToLP;
hardInToLP.sourceAudioUnit    = remoteIOunit;
hardInToLP.sourceOutputNumber = 1;
hardInToLP.destInputNumber    = 3;

setupErr = AudioUnitSetProperty (
                      remoteIOunit,                     // connection destination
                      kAudioUnitProperty_MakeConnection,  // property key
                      kAudioUnitScope_Input,              // destination scope
                      bus3,                // destination element
                      &hardInToLP,                // connection definition
                      sizeof (hardInToLP)
                      );

AudioUnitConnection LPToHardOut;
LPToHardOut.sourceAudioUnit    = lpFilterUnit;
LPToHardOut.sourceOutputNumber = 1;
LPToHardOut.destInputNumber    = 3;

setupErr = AudioUnitSetProperty (
                      remoteIOunit,                     // connection destination
                      kAudioUnitProperty_MakeConnection,  // property key
                      kAudioUnitScope_Input,              // destination scope
                      bus3,                // destination element
                      &hardInToLP,                // connection definition
                      sizeof (hardInToLP)
                      );


/*
// Sets up the Audio Units Connection - new instance called connection
AudioUnitConnection connection;

// Connect Audio Input's out to Audio Out's in
connection.sourceAudioUnit = remoteIOunit;
connection.sourceOutputNumber = bus1;
connection.destInputNumber = bus0;


setupErr = AudioUnitSetProperty(remoteIOunit, kAudioUnitProperty_MakeConnection, kAudioUnitScope_Input, bus0, &connection, sizeof(connection));
*/ 

NSAssert(setupErr == noErr, @"No RIO connection");
.

도움이 되었습니까?

해결책

여기에있는 몇 가지 일들 :

  • OSStatus를 반환 할 수있는 모든 호출 후 Assert (또는 일종의 체크 오류 및 로그 -I-IT)를 수행하면 많은 도움이 될 것입니다. 그런 식으로 당신이 얼마나 멀리 떨어져 있는지 알아낼 수 있습니다. 아마도 실제 OSStatus 값이= NoErr 일 때 실제 OSStatus 값을 기록하고 (Xcode 설명서 뷰어에서 "오디오 단위 구성 요소 서비스 참조"에서 시작하십시오).
  • 필터 audiounit을 만드는 후에는 audiounitsetproperty () 호출로하는 일을 얻지 못합니다. 두 번째 매개 변수는 속성의 이름 (KaudiounitProperty ...으로 시작하는 것)이어야합니다. 거의 확실히 오류를 반환합니다.
  • remoteiounit에는 두 개의 버스 만 있으며 특별한 의미가 있습니다. MIC에서 버스 1이 입력되면 버스 0이 하드웨어로 출력됩니다. 원격 IO 입력 범위 버스 3에 연결하려고하면 다른 오류가 발생할 것입니다

    오디오 통과 작업을 수행 할 때 롤백 할 수 있습니다. 즉, 당신이 단지 remoorio를 가지고 있고, 출력 범위 / 버스 1에서부터 입력 범위 / 버스 0까지의 연결을 의미합니다.

    다음 필터 장치를 만듭니다. 연결을 변경하십시오.

    • 원격 출력 범위 버스 1 입력 범위 버스 0 을 필터링합니다.
    • 필터 출력 범위 버스 0 to RemoteIO 입력 범위 버스 0

      문제가 될 다른 것들은 이러한 모든 iOS 5 필터가 부동 소수점 LPCM 형식을 사용하고자하는 것으로 보이는 것으로 보이는 것으로 보이는 것입니다. 이는 다른 단위가 기본적으로 기본 형식이 아닙니다. 필터 유닛 (입력 또는 출력 범위가 동일 할 것인가)에서 스트림 형식을 가져와야 할 수 있습니다 (refterio 출력 범위 / 버스 1이 생성되고 Remoteio 입력 범위 / 버스 0이 수용되는 형식으로 설정하십시오. 또 다른 옵션은 필터 장치 전후에 Auconverter 유닛을 도입하는 것입니다.

다른 팁

여기에 주어진 첫 번째 답변은 저를 훨씬 더 좌절 시켰습니다.아니오 Apple 문서는 효과 단위의 파일 형식이 부동 소수점이 필요하다고 알려줍니다.이 게시물을 읽을 때까지 제대로 오디오를 재생하지 못하도록 유지하는 이유를 알아낼 수 없습니다.위의 조언을 따르고 저역 통과 필터 장치에서 스트림 형식을 검색하고 생성 된 2 개의 변환기 유닛을 설정하는 데 사용됩니다 (즉, 사전 필터 변환기의 출력 형식과 포스트 필터의 입력 형식 설정변환기. 일단 내가 그것을했고 모든 노드를 함께 연결했으면 예상대로 작업을 시작했습니다.

로우 패스 필터를 사용하려고하고 제안 된 일명을 제안한대로하려고 할 때 형식을 설정하면 "작업을 완료 할 수 없음"오류가 발생할 수 있습니다.이 코드에서는이 코드에 결함이 있습니까? LowpassUnit을 검색 한 후에도 오류가 발생하지만 아무 것도 없지만 아무도 없습니다.

result = AudioUnitSetProperty(lowpassUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &stereoStreamFormat, sizeof (stereoStreamFormat));
    if (noErr != result)
{
    NSLog(@"%@", [NSError errorWithDomain:NSOSStatusErrorDomain code:result        userInfo:nil]);
    return;
}
.

PS : 누구든지 적절한 오디오 단위 문서를 알고있는 경우 공식 문서가 실제로 부족한 것으로 공유하십시오

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top