2013-08-22 4 views
1

Mac OS X에서 캡처 및 재생을 위해 vpio 오디오 장치를 사용하고 있습니다.Mac OS X에서 음성 처리 장치의 사용 가능한 형식

vpio 장치에서 입/출력 형식을 설정할 때까지 모든 것이 잘됩니다.

이 형식은 그냥 같이 원 : 나는 vpio의 (입력 버스/출력 범위)에이 형식을 설정할 수 있습니다

AudioStreamBasicDescription audio_format ; 
audio_format.mSampleRate  = 8000.0 ; 
audio_format.mBitsPerChannel  = 16 ; 
audio_format.mChannelsPerFrame = 1 ; 
audio_format.mBytesPerFrame  = (audio_format.mBitsPerChannel >> 3) * audio_format.mChannelsPerFrame ; 
audio_format.mFramesPerPacket = 1 ; 
audio_format.mBytesPerPacket  = audio_format.mBytesPerFrame * audio_format.mFramesPerPacket ; 
audio_format.mFormatID  = kAudioFormatLlinearPCM ; 
audio_format.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked ; 

,하지만 난 vpio의 (출력 버스/입력을 설정할 수 없습니다 범위) 나는 오류 코드 (kAudioUnitErr_FormatNotSupported를 얻을 것이다). 그러나 대신 AUHAL unit을 사용하면 AUHAL (입력 버스/출력 범위) 및 AUHAL (출력 버스/입력 범위)에 모두 형식을 설정할 수 있습니다.

두 단위 사이의 차이점을 알고 싶습니다.

그냥이 같은

몇 가지 시도를 한 후, 나는 마침내 vpio의 (출력 버스/입력 범위)에서 사용 가능한 형식 중 하나를 찾을 수 :

AudioStreamBasicDescription audio_format ; 
audio_format.mSampleRate  = 8000.0 ; 
audio_format.mBitsPerChannel  = 32 ; 
audio_format.mChannelsPerFrame = 1 ; 
audio_format.mBytesPerFrame  = (audio_format.mBitsPerChannel >> 3) * audio_format.mChannelsPerFrame ; 
audio_format.mFramesPerPacket = 1 ; 
audio_format.mBytesPerPacket  = audio_format.mBytesPerFrame * audio_format.mFramesPerPacket ; 
audio_format.mFormatID  = kAudioFormatLlinearPCM ; 
audio_format.mFormatFlags = kLinearPCMFormatFlagIsFloat | kLinearPCMFormatFlagIsPacked ; 

그러나 혼동하는 것은 내게는 그 vpio 년대의 형식 (입력 버스/출력 범위) 및 (출력 버스/입력 범위)이 일치하지 않았습니다. 그리고 나는 어떻게 가야 the available formats information of the vpio unit 가야할지 알고 싶습니까? Apple 사이트에서 사용할 수있는 형식에 대한 문서를 찾을 수 없습니다.

누군가 내 질문에 답변 할 수 있습니까?

감사합니다. &

답변

-1

다음 설정을 사용하여 프로젝트의 음성 녹음을위한 최상의 파일 크기와 음질을 얻었습니다.

// Setup audio session 
    AVAudioSession *session = [AVAudioSession sharedInstance]; 
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

    // Define the recorder setting 
    NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; 

    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey]; 
    [recordSetting setValue:[NSNumber numberWithFloat:8000.0] forKey:AVSampleRateKey]; 
    [recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; 
    [recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityLow] forKey:AVEncoderAudioQualityKey]; 

    // Initiate and prepare the recorder 
    recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:NULL]; 
    recorder.delegate = self; 
    recorder.meteringEnabled = YES; 
    [recorder prepareToRecord]; 
+0

답장을 보내 주셔서 감사합니다. 그러나 제가 알고 싶은 것은 아닙니다. 음성 처리 IO 유닛의 사용 가능한 형식을 얻는 방법을 묻습니다. –

+0

@JunLiu .. 나는 그것을 얻을 수 없었다 ... Voice Processing IO Unit ...좀 더 설명해 주시겠습니까? –

+0

내 끔찍한 영어로 죄송합니다. 음성 처리 IO 유닛은 mac/iOS 장치의 오디오 입력 및 출력에 인터페이스하고 음성 처리 기능을 제공하는 오디오 장치입니다. 자세한 내용은 AUComponent.h에서 볼 수 있습니다. –

0

나는 당신과 같은 문제가 있습니다. 음성 처리 오디오 장치로 오디오 형식을 설정하려고하면 오디오 형식 속성에 쓸 수 없음을 나타내는 -10865 오류가 표시됩니다.

정확하게 이해하면이 오디오 장치에서 어떤 형식도 설정할 수 없습니다. 8000 Hz 샘플 속도로 오디오가 필요한 경우이를 다시 샘플링해야합니다.

는 그것은 을 FFMPEG 그러한 swresample 같은 외부 LIB를 사용하여 오디오를 리샘플링 단위

  • 을 오디오 유닛 그래프를 생성하고 음성 처리 앞의 Converter Audio Unit를 추가
    1. 을 수행 할 수있다

      개발에 좋은 점이 있습니다.