iOS için bir frekans algılama uygulaması üzerinde çalışıyorum ve mikrofondan ses örnekleri ile kullanıcı tanımlı bir AudioBufferList doldurma sorunu yaşıyorum.Uzak I/O ile kayıt, AudioUnitRender -50 dönüş kodu
InputCallback yöntemimde AudioUnitRender'ı aradığımda -50 dönüş kodunu alıyorum. Bunun benim parametrelerimden birinin geçersiz olduğu anlamına geldiğini düşünüyorum. Sanırım AudioBufferList, ama neyin yanlış olduğunu anlayamadım. Sanırım ayarladıktan sonra ASBD'imde belirttiğim veri formatıyla eşleşiyor. Aşağıda
uzak G/Ç kurulumu ve fonksiyon ı yanlış olabilir inanıyorum çağırır:ASBD:
size_t bytesPerSample = sizeof(AudioUnitSampleType);
AudioStreamBasicDescription localStreamFormat = {0};
localStreamFormat.mFormatID = kAudioFormatLinearPCM;
localStreamFormat.mFormatFlags = kAudioFormatFlagsAudioUnitCanonical;
localStreamFormat.mBytesPerPacket = bytesPerSample;
localStreamFormat.mBytesPerFrame = bytesPerSample;
localStreamFormat.mFramesPerPacket = 1;
localStreamFormat.mBitsPerChannel = 8 * bytesPerSample;
localStreamFormat.mChannelsPerFrame = 2;
localStreamFormat.mSampleRate = sampleRate;
InputCallback Bildirgesi:
err = AudioUnitSetProperty(ioUnit, kAudioOutputUnitProperty_SetInputCallback,
kAudioUnitScope_Input,
kOutputBus, &callbackStruct, sizeof(callbackStruct));
AudioBufferList Bildirgesi:
// Allocate AudioBuffers
bufferList = (AudioBufferList *)malloc(sizeof(AudioBuffer));
bufferList->mNumberBuffers = 1;
bufferList->mBuffers[0].mNumberChannels = 2;
bufferList->mBuffers[0].mDataByteSize = 1024;
bufferList->mBuffers[0].mData = calloc(256, sizeof(uint32_t));
InputCallback Fonksiyonu:
AudioUnit rioUnit = THIS->ioUnit;
OSStatus renderErr;
UInt32 bus1 = 1;
renderErr = AudioUnitRender(rioUnit, ioActionFlags, inTimeStamp, bus1, inNumberFrames, THIS->bufferList);
birkaç nokta not:
- /Ç veri 8.24 bitlik sabit nokta ben, Örnek Oranı = uzaktan I kurallı biçimi yana 22.050 Hz
- olduğunu Numunelerin her biri 32 bit olduğunu varsayarak (veya 4 bayt). İmzasız bir int 4 bayt olduğundan, ses arabamı ayırmak için bunu kullanıyorum.
- Ses veri akışını yalnızca giriş yerine PassThru olarak uygularsam, sesi doğru şekilde işitmek için aynı kodu alabilirim.
- Uzak I/O üzerinde zaten Michael Tyson's blog post'a baktım. Yaptığım şeyden farklı bir şey görmedim.
Tekrar teşekkürler, hepiniz harikasınız!
Demetri
Sonunda bahsettiğim frekans algılama uygulamasını bitirdim. İlgilenenler için kaynak kodu ile birlikte bir yazdım. DÜZENLEME: bağlantı ... http: //sleepyleaf.com/2011/01/25/pitch-detection-in-ios-4-x/ – irtemed88
Belirtilen hiçbir Kod bulunamadı .. Links sleepyleaf.com/2011/ 01/25/pitch-detection-in-ios-4-x - irtemed88 –
Hata! Üzgünüm, etki alanımı güncelledim. Yeni bağlantı: http://demetrimiller.com/2011/01/25/pitch-detection-in-ios-4-x/ – irtemed88