Мое приложение iOS с использованием аудиоустройств с частотой дискретизации 8000 герц Возвращает искаженный голос

StackOverflow https://stackoverflow.com//questions/11690395

Вопрос

Мне действительно нужна помощь в этом вопросе.Я разрабатываю приложение IOS с аудиоустройствами, записанный аудио нужен на частоте дискретизации 8bit / 8000 Hertz с использованием формата ALAW.Как когда-нибудь я получаю искаженный голос, выходящий из динамика.

Я наткнулся на этот образец онлайн:

http://www.stefanpopp.de/2011/ Capture-iPhone-Microphone / Comment-Page-1 /

При попытке отладить мое приложение, я использовал свой аудиоформат в своем приложении, и я получаю тот же искаженный звук.Я догадаюсь, что у меня есть неправильные настройки, либо мне нужно сделать что-то еще, чтобы позволить этому работать.Учитывая приложение в ссылке, а показано ниже аудиоформата, может кто-нибудь сказать мне, если я сделаю что-то не так или что-то пропустить?Я не знаю много об этом, спасибо.

Аудиоформатный формат:

AudioStreamBasicDescription audioFormat;
    audioFormat.mSampleRate         = 8000;
    audioFormat.mFormatID           = kAudioFormatALaw;
    audioFormat.mFormatFlags        = kAudioFormatFlagIsPacked | kAudioFormatFlagIsSignedInteger;
    audioFormat.mFramesPerPacket    = 1;
    audioFormat.mChannelsPerFrame   = 1;
    audioFormat.mBitsPerChannel     = 8;
    audioFormat.mBytesPerPacket     = 1;
    audioFormat.mBytesPerFrame      = 1;
.

Это было полезно?

Решение

в конце концов получил его правильно. Я выложу здесь, чтобы помочь кому-либо еще, стоящую перед похожими вопросами.

Основная проблема, которую я сталкивался с тем, что существует огромная разница между симулятором и фактическим устройством. Запуск приложения на устройстве качество звука было лучше, но он продолжал пропустить каждую секунду или 2, я обнаружил настройку, которая, казалось, исправила это и настройку для изменения размера / длительности буфера. (Установка продолжительности не работает над симулятором, некоторые из моих проблем нуждаются в его, чтобы запустить определенную скорость синхронизации с чем-то другим, это вызывало искаженные звуки)

status = AudioSessionInitialize(NULL, kCFRunLoopDefaultMode, NULL, audioUnit);
UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord;
status = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory);
[self hasError:status:__FILE__:__LINE__];

Float32 preferredBufferSize = 0.005805; // in seconds
status = AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferSize), &preferredBufferSize);
[self hasError:status:__FILE__:__LINE__];

status = AudioSessionSetActive(true);
.

Первая собственность аудиосессии - это то, что остановило пропуск, заставляя его играть гораздо более плавно. Второе регулирует продолжительность буфера, это в считанные секунды, как часто обратные вызовы уволены и дадут вам другой размер буфера. Его наилучшие усилия, означающие, что он будет настолько близок, так как это может понадобиться, но, похоже, есть список доступных размеров и выбирает ближайший.

См. Почта, которую я ссылаюсь на мой вопрос для очень хорошего учебного пособия / образца программы, чтобы начать работу с этим.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top