2013-10-08 2 views
6

का उपयोग कर iOS पर रिकॉर्डिंग।विकृत (रोबोट) ऑडियो मैं आईओएस में <code>AudioQueue</code> उपयोग कर रहा हूँ वेब के लिए रिकॉर्डिंग की स्ट्रीमिंग को लागू करने के AudioQueue

समस्या यह है कि आमतौर पर काफी अच्छी तरह से काम करता है, लेकिन कभी-कभी (~ मेरे प्रयासों में से 20%) ध्वनि बहुत विकृत हो जाती है - यह रोबोटिक लगता है।

संपादित करें: मैं iOS6 और ios6.1 सिम्युलेटर पर काफी आसानी से यह पुन: पेश करने में सक्षम हूँ - लेकिन मैं एक असली फोन पर यह पुन: पेश करने में सक्षम नहीं था (ios6.1.3)।

इसे डीबग करने का प्रयास मैं पीसीएम डेटा को एक फ़ाइल में सहेजता हूं। पीसीएम फ़ाइल में वही विकृति दिखाई देती है, इसलिए यह एन्कोडिंग या अपलोड कोड में कोई समस्या नहीं है। मैंने बफर की संख्या और बफर के आकार के साथ खेलने की भी कोशिश की है - कुछ भी मदद नहीं की।

समस्या मैं यह कैसे आगे डिबग करने के लिए पता नहीं है है - ऐसा लगता है बफर कॉलबैक करने के लिए इनपुट के रूप में विकृत है - इससे पहले कि मेरे कोड (ऑडियो कतार config को छोड़कर) सक्रिय है।

  • क्या आपके पास विचार है कि समस्या क्या हो सकती है?
  • या इसे आगे कैसे डिबग करें?

कतार सेटअप कोड:

audioFormat.mFormatID   = kAudioFormatLinearPCM; 
audioFormat.mSampleRate  = SAMPLE_RATE; //16000.0; 
audioFormat.mChannelsPerFrame = CHANNELS; //1; 
audioFormat.mBitsPerChannel = 16; 
audioFormat.mFramesPerPacket = 1; 
audioFormat.mBytesPerFrame = audioFormat.mChannelsPerFrame * sizeof(SInt16); 
audioFormat.mBytesPerPacket = audioFormat.mBytesPerFrame * audioFormat.mFramesPerPacket; 
audioFormat.mFormatFlags  = kLinearPCMFormatFlagIsSignedInteger 
            | kLinearPCMFormatFlagIsPacked; 

AudioQueueNewInput(
    &audioFormat, 
    recordCallback, 
    self,    // userData 
    CFRunLoopGetMain(), // run loop 
    NULL,    // run loop mode 
    0,     // flags 
    &recordQueue); 

UInt32 trueValue = true; 
    AudioQueueSetProperty(recordQueue,kAudioQueueProperty_EnableLevelMetering,&trueValue,sizeof (UInt32)); 

for (int t = 0; t < NUMBER_AUDIO_DATA_BUFFERS; ++t) 
{ 
    AudioQueueAllocateBuffer(
     recordQueue, 
     bufferByteSize, 
     &recordQueueBuffers[t]); 
} 

for (int t = 0; t < NUMBER_AUDIO_DATA_BUFFERS; ++t) 
{ 
    AudioQueueEnqueueBuffer(
     recordQueue, 
     recordQueueBuffers[t], 
     0, 
     NULL); 
} 

प्रारंभ रिकॉर्डिंग समारोह:

pcmFile = [[NSOutputStream alloc] initToFileAtPath:pcmFilePath append:YES]; 
[pcmFile scheduleInRunLoop:[NSRunLoop currentRunLoop] 
         forMode:NSDefaultRunLoopMode]; 
[pcmFile open]; 
setupQueue(); // see above 
AudioQueueStart(recordQueue, NULL); 

कॉलबैक कोड:

static void recordCallback(
    void* inUserData, 
    AudioQueueRef inAudioQueue, 
    AudioQueueBufferRef inBuffer, 
    const AudioTimeStamp* inStartTime, 
    UInt32 inNumPackets, 
    const AudioStreamPacketDescription* inPacketDesc) 

    Recorder* recorder = (Recorder*) inUserData; 
    if (!recorder.recording) 
     return; 
    [recorder.pcmFile write:inBuffer->mAudioData maxLength:inBuffer->mAudioDataByteSize]; 
    AudioQueueEnqueueBuffer(inAudioQueue, inBuffer, 0, NULL); 
} 
+0

वही समस्या यहां ... – Idan

उत्तर

0

हम iOS पर SoundJS वेब ऑडियो में ठीक उसी मुद्दा था जब भी एक वीडियो तत्व मौजूद थे और कैश खाली था। एक बार कैश किया गया, समस्या दूर चली गई। हम इस मुद्दे के लिए एक फिक्स या काम खोजने में असमर्थ थे।

आप हमारे समुदाय मंच में विवरण पढ़ सकते हैं:

http://community.createjs.com/discussions/soundjs/162-ios-audio-distortion-when-video-element-exists

आशा है कि मदद करता है।

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