2015-12-19 11 views
7

के साथ 96kHz पर रिकॉर्ड करें मैं अपने RØDE iXY यूएसबी माइक्रोफोन के साथ पूर्ण 96kHz पर रिकॉर्ड करने की कोशिश कर रहा हूं।
रिकॉर्डिंग बिना त्रुटि के चला जाता है और जब मैं माइक्रो कनेक्ट के साथ ऐप लॉन्च करता हूं, तो मुझे लगता है कि AVAudioSession 96kHz नमूना दर पर सफलतापूर्वक चल रहा है।
लेकिन अगर मैं स्पेक्ट्रम यह स्पष्ट है पर देखने के अलावा कुछ नहीं प्रतिदर्श चैनल शोर 20kHz ऊपर है कि वहाँ: enter image description hereआईओएस। यूएसबी माइक्रोफोन

तुलना इसके लिए एक ही रिकॉर्डिंग एप्लिकेशन को USB माइक के साथ बंडल का उपयोग कर के एक स्पेक्ट्रम है (सवार आरईसी) : enter image description here

क्या मुझे मूल 96kHz पर रिकॉर्ड करने के लिए कुछ और करना चाहिए? या शायद आरओएसडीई रिक ऐप यूएसबी पर कुछ स्वामित्व प्रोटोकॉल के साथ माइक्रो के साथ संचार करता है और मैं यहां भाग्य से बाहर हूं?

मैं स्रोत कोड है कि मैं का उपयोग शामिल है:।

static AudioStreamBasicDescription AudioDescription24BitStereo96000 = (AudioStreamBasicDescription) { 
    .mFormatID   = kAudioFormatLinearPCM, 
    .mFormatFlags  = kAudioFormatFlagIsPacked | kAudioFormatFlagIsSignedInteger, 
    .mChannelsPerFrame = 2, 
    .mBytesPerPacket = 6, 
    .mFramesPerPacket = 1, 
    .mBytesPerFrame  = 6, 
    .mBitsPerChannel = 24, 
    .mSampleRate  = 96000.0 
}; 

- (void)setupAudioSession 
{ 
    AVAudioSession *session = [AVAudioSession sharedInstance]; 
    [session setCategory:AVAudioSessionCategoryRecord error:&error]; 
    [session setActive:YES error:&error]; 
    [session setPreferredSampleRate:96000.0f error:&error]; 

    //I got my 96000Hz with the USB mic plugged in! 
    NSLog(@"sampleRate = %lf", session.sampleRate); 
} 

- (void)startRecording 
{ 
    AudioComponentDescription desc; 
    desc.componentType = kAudioUnitType_Output; 
    desc.componentSubType = kAudioUnitSubType_RemoteIO; 
    desc.componentFlags = 0; 
    desc.componentFlagsMask = 0; 
    desc.componentManufacturer = kAudioUnitManufacturer_Apple; 

    AudioComponent inputComponent = AudioComponentFindNext(NULL, &desc); 
    AudioComponentInstanceNew(inputComponent, &audioUnit); 

    AudioUnitScope inputBus = 1; 

    UInt32 flag = 1; 
    AudioUnitSetProperty(audioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, inputBus, &flag, sizeof(flag)); 

    audioDescription = AudioDescription24BitStereo96000; 

    AudioUnitSetProperty(audioUnit, 
         kAudioUnitProperty_StreamFormat, 
         kAudioUnitScope_Output, 
         inputBus, 
         &audioDescription, 
         sizeof(audioDescription)); 

    AURenderCallbackStruct callbackStruct; 
    callbackStruct.inputProc = recordingCallback; 
    callbackStruct.inputProcRefCon = (__bridge void *)(self); 
    AudioUnitSetProperty(audioUnit, 
         kAudioOutputUnitProperty_SetInputCallback, 
         kAudioUnitScope_Global, 
         inputBus, &callbackStruct, 
         sizeof(callbackStruct)); 

    AudioOutputUnitStart(audioUnit); 
} 

static OSStatus recordingCallback(void *inRefCon, 
            AudioUnitRenderActionFlags *ioActionFlags, 
            const AudioTimeStamp *inTimeStamp, 
            UInt32 inBusNumber, 
            UInt32 inNumberFrames, 
            AudioBufferList *ioData) 
{ 
    AudioBuffer audioBuffer; 
    audioBuffer.mNumberChannels = 1; 
    audioBuffer.mDataByteSize = inNumberFrames * audioDescription.mBytesPerFrame; 
    audioBuffer.mData = malloc(inNumberFrames * audioDescription.mBytesPerFrame); 

    // Put buffer in a AudioBufferList 
    AudioBufferList bufferList; 
    bufferList.mNumberBuffers = 1; 
    bufferList.mBuffers[0] = audioBuffer; 

    AudioUnitRender(audioUnit, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, &bufferList); 

    //I then take the samples and write them to WAV file 
} 
+0

ऑडियो यूनिट का स्ट्रीम प्रारूप सेट करता है? क्या आपने इसे सेट करने के बाद स्ट्रीम प्रारूप प्राप्त करने का प्रयास किया है? – lixing123

+0

मैंने पहले से ही अपने 96 के ऑडियो डिस्क्रिप्शन में kAudioUnitProperty_StreamFormat सेट किया है। मैंने इसे बिना किसी प्रभाव के kAudioUnitScope_Input पर सेट करने का प्रयास किया। धारा प्रारूप प्राप्त करना जो मैंने पारित किया है, यानी यह सिम्युलेटर पर 96kHz देता है (जो केवल 48kHz तक का समर्थन करता है)। –

+1

AFAIK, रोड iXY रिकॉर्डिंग पर कोरऑडियो को छोड़कर अपने प्रारूप का उपयोग करता है, या इसलिए यदि मैं इसे सही समझता हूं तो वे इसका विज्ञापन करते हैं। – user3078414

उत्तर

2

हार्डवेयर की जांच करें नमूना दर आपका माइक्रोफ़ोन प्लग के साथ ऑडियो सत्र संपत्ति इसके अलावा सभी ऑडियो इकाई समारोह त्रुटि वापसी मान की जाँच करें।

रिमोटियो कम इनपुट नमूना दर का उपयोग कर रहा है और फिर 96k स्ट्रीम में फिर से बदल सकता है।

संबंधित मुद्दे