Настройка частоты дискретизации аудиозаписи iPhone, похоже, не работает

#iphone #audio-recording

#iPhone #аудиозапись

Вопрос:

При настройке частоты дискретизации в аудиозаписи кажется, что, хотя IOS заявляет, что выборка составляет 8000 Кб, она, похоже, возвращает данные для 44100 кб. Это с iPhone IOS 5, но то же самое происходит на IOS 4.x

Части кода следующие

  NSLog(@"Requested Sample Rate is %f",F64sampleRate);            
 u.propertyResult = AudioSessionSetProperty (  kAudioSessionProperty_PreferredHardwareSampleRate ,sizeof(F64sampleRate) , amp;F64sampleRate );
 NSLog(@"Set Error Set Sample Rate %ld %lx %c%c%c%c",u.propertyResult,u.propertyResult,u.a[3],u.a[2],u.a[1],u.a[0]);

 u.propertyResult = AudioSessionGetProperty ( kAudioSessionProperty_CurrentHardwareSampleRate , amp;F64datasize, amp;F64realSampleRate );
 NSLog(@"Set Error Get Sample Rate %ld %lx %c%c%c%c",u.propertyResult,u.propertyResult,u.a[3],u.a[2],u.a[1],u.a[0]);
 NSLog(@"Sample Rate is %f",F64realSampleRate);
  

Вывод отладки выглядит следующим образом

 2011-11-04 09:57:46.003 MyCode[634:707] Set Error Get Sample Rate 0 0 
2011-11-04 09:57:46.063 MyCode[634:707] Sample Rate is 8000.000000
2011-11-04 09:57:46.067 MyCode[634:707] Requested Sample Rate is 8000.000000
2011-11-04 09:57:46.085 MyCode[634:707] Set Error Set Sample Rate 0 0 
2011-11-04 09:57:46.105 MyCode[634:707] Set Error Get Sample Rate 0 0 
2011-11-04 09:57:46.109 MyCode[634:707] Sample Rate is 8000.000000
2011-11-04 09:57:46.112 MyCode[634:707] Sample Rate Will Be 8000
2011-11-04 09:57:46.115 MyCode[634:707] Set Error Get Property 0 0 
2011-11-04 09:57:46.119 MyCode[634:707] Category 1919247201 72656361 reca
2011-11-04 09:57:46.122 MyCode[634:707] Set Error Get Sample Rate 0 0 
2011-11-04 09:57:46.126 MyCode[634:707] IO Buffer Duration is 0.023000
  

Обратные вызовы данных следующие, пожалуйста, обратите внимание на длину буфера, пожалуйста, игнорируйте другие цифры.

  2011-11-04 09:57:47.808 MyCode[634:707] buffsize 16000, bytesleftinbuffer 16000, bytestocopy 2048, bufferlength 2048
 2011-11-04 09:57:47.812 MyCode[634:707] buffsize 16000, bytesleftinbuffer 13952, byte stocopy 2048, bufferlength 2048
 2011-11-04 09:57:47.818 MyCode[634:707] buffsize 16000, bytesleftinbuffer 11904, bytestocopy 2048, bufferlength 2048
 2011-11-04 09:57:47.824 MyCode[634:707] buffsize 16000, bytesleftinbuffer 9856, bytestocopy 2048, bufferlength 2048
 2011-11-04 09:57:47.829 MyCode[634:707] buffsize 16000, bytesleftinbuffer 7808, bytestocopy 2048, bufferlength 2048
 2011-11-04 09:57:47.834 MyCode[634:707] buffsize 16000, bytesleftinbuffer 5760, bytestocopy 2048, bufferlength 2048
 2011-11-04 09:57:47.839 MyCode[634:707] buffsize 16000, bytesleftinbuffer 3712, bytestocopy 2048, bufferlength 2048
 2011-11-04 09:57:47.843 MyCode[634:707] buffsize 16000, bytesleftinbuffer 1664, bytestocopy 1664, bufferlength 2048
  

Итак, давайте сделаем некоторые вычисления здесь…

Время обратного вызова буфера (время выборки) составляет 0,023 секунды или около 43,5 раз в секунду

  • Это подтверждается временем отладки и информацией о свойстве get

Размер выборки обратного вызова буфера равен 1024 (короткий, поэтому общий размер буфера равен 2048)

Итак, 1024 * 43 = 44032 близко к 44100

Итак, если я здесь чего-то не упускаю, хотя IOS говорит, что это 8000k, похоже, что он перезванивает с 44100k.

У кого-нибудь есть опыт работы с этим?

Комментарии:

1. Использовали ли вы другую частоту дискретизации при настройке очереди звука или аудиоустройства RemoteIO и, таким образом, переопределили ту, которая была запрошена в вашей аудиосессии?

2. Пол Р?????? hotpaw2 Я попытался перезапустить / воссоздать очередь аудио / и т.д. После настроек с тем же результатом.