Это функция, которую мы используем для настройки AudioStreamBasicDescription (ASBD). На весь класс сильно влияет пример приложения SpeakHere от Apple.Почему это AudioStreamBasicDescription вызывает ошибку AudioConverterNew -50?
Это для записи на устройстве iOS (в частности, iPad Air, также протестированном на iPhone 6 Plus).
При запуске буфера AudioQueue для записи я получаю сообщение «AudioConverterNew received -50» в журналах устройства. По-видимому, это просто означает, что что-то не так правильно? Я предполагаю, что что-то не так с моей ASBD.
- (void)setupAudioFormat
{ // setup AudioStreamBasicDescription
memset(&mDataFormat, 0, sizeof(mDataFormat));
int sampleSize = sizeof(float);
AVAudioSession *session = [AVAudioSession sharedInstance];
mDataFormat.mSampleRate = [session sampleRate]; //44100
mDataFormat.mChannelsPerFrame = [session inputNumberOfChannels]; // why is this returning 0?
if (mDataFormat.mChannelsPerFrame <= 0)
{
mDataFormat.mChannelsPerFrame = 1; // mono
}
mDataFormat.mFormatID = kAudioFormatLinearPCM;
mDataFormat.mFormatFlags = kLinearPCMFormatFlagIsFloat | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsNonInterleaved;
mDataFormat.mBitsPerChannel = 8 * sampleSize;
mDataFormat.mBytesPerFrame = sampleSize * mDataFormat.mChannelsPerFrame;
mDataFormat.mBytesPerPacket = mDataFormat.mBytesPerFrame;
mDataFormat.mFramesPerPacket = 1;
mDataFormat.mReserved = 0;
NSLog(@"FORMAT sampleRate=%f, channels=%i, flags=%i, BPC=%i, BPF=%i", mDataFormat.mSampleRate, mDataFormat.mChannelsPerFrame, mDataFormat.mFormatFlags, mDataFormat.mBitsPerChannel, mDataFormat.mBytesPerFrame);
}
Пример приложение SpeakHere использует Linear PCM, а также, но это настройка с помощью 16-разрядной мало-Endian вместо поплавка.
В конечном счете, мне нужно передать данные звукового буфера на что-то еще в виде массива с плавающей точкой. Должен ли я изменить это, чтобы использовать подписанный 16-разрядный little-endian и преобразовать результаты в значения float?
Проблема заключалась в активации AVAudioSession. Я предполагаю, что сессия вернулась 0, потому что она неактивна. Я изменил его на моно, но этот код был основан на чужом примере, и я не уверен, почему они сделали это так. Я предполагаю, что было больше кода для обработки, однако было доступно много каналов, но я больше не могу найти этот пример. – Simurr