Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone音频录制设置采样率似乎不起作用_Iphone_Audio Recording - Fatal编程技术网

iPhone音频录制设置采样率似乎不起作用

iPhone音频录制设置采样率似乎不起作用,iphone,audio-recording,Iphone,Audio Recording,在音频录制中设置采样率时,尽管IOS表示采样频率为8000k,但似乎返回的数据为44100k。这是来自iOS5iPhone,但同样的情况也发生在iOS4.x上 代码部分如下所示 NSLog(@"Requested Sample Rate is %f",F64sampleRate); u.propertyResult = AudioSessionSetProperty ( kAudioSessionProperty_PreferredHardwareSampleRat

在音频录制中设置采样率时,尽管IOS表示采样频率为8000k,但似乎返回的数据为44100k。这是来自iOS5iPhone,但同样的情况也发生在iOS4.x上

代码部分如下所示

 NSLog(@"Requested Sample Rate is %f",F64sampleRate);            
 u.propertyResult = AudioSessionSetProperty (  kAudioSessionProperty_PreferredHardwareSampleRate ,sizeof(F64sampleRate) , &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 , &F64datasize, &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
调试输出如下

 NSLog(@"Requested Sample Rate is %f",F64sampleRate);            
 u.propertyResult = AudioSessionSetProperty (  kAudioSessionProperty_PreferredHardwareSampleRate ,sizeof(F64sampleRate) , &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 , &F64datasize, &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
数据回调如下,请注意bufferlength,请忽略其他数字

 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


有人对此有经验吗?

在配置音频队列或RemoteIO音频单元时,是否使用了不同的采样率,从而覆盖了音频会话中请求的采样率?Paul R??????hotpaw2我尝试在设置后重新启动/重新创建音频队列/等,但结果相同。