Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.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
Ios 更改音频单位上的速率NewTimePitch_Ios_Iphone_Audio_Core Audio_Audiounit - Fatal编程技术网

Ios 更改音频单位上的速率NewTimePitch

Ios 更改音频单位上的速率NewTimePitch,ios,iphone,audio,core-audio,audiounit,Ios,Iphone,Audio,Core Audio,Audiounit,我使用的是带有不同音频单元的AUGraph,其中一个是类型kAudioUnitType\u FormatConverter,以及子类型kAudioUnitSubType\u NewTimePitch。 我正在尝试更改其上的kNewTimePitchParam\u Rate参数 它确实以某种方式工作,但当我将参数重置为值1.0(无变化率)时,音频中仍然会出现音调变化。我正在努力理解如何正确地做到这一点 我在应用程序中实时执行此操作,直接调用AudioUnitSetParameter()函数: -

我使用的是带有不同音频单元的
AUGraph
,其中一个是类型
kAudioUnitType\u FormatConverter
,以及子类型
kAudioUnitSubType\u NewTimePitch
。 我正在尝试更改其上的
kNewTimePitchParam\u Rate
参数

它确实以某种方式工作,但当我将参数重置为值1.0(无变化率)时,音频中仍然会出现音调变化。我正在努力理解如何正确地做到这一点

我在应用程序中实时执行此操作,直接调用
AudioUnitSetParameter()
函数:

- (void)setTempo:(float)value {
    OSStatus err = noErr;
    err = AudioUnitSetParameter(tempoUnit, kNewTimePitchParam_Rate, kAudioUnitScope_Global, 0, (Float32)value, 0);
    if (err != noErr) {
        NSLog(@"Could not set tempo unit rate: %d", (int)err);
    }
}
这是正确的方法吗? 这是一个iOS应用程序,有没有更好的方法来实现这一点

相关问题:

编辑

在四处挖掘和记录之后,我发现:

首先是完整的图形结构:

AudioUnitGraph 0xDF5046:
  Member Nodes:
    node 1: 'auou' 'rioc' 'appl', instance 0x170837a80 O I
    node 2: 'aufc' 'nutp' 'appl', instance 0x170634f20 O I
    node 3: 'aufc' 'nutp' 'appl', instance 0x170a23140 O I
    node 4: 'aufc' 'nutp' 'appl', instance 0x17083b700 O I
    node 5: 'aumx' 'mcmx' 'appl', instance 0x17063bc80 O I
    node 6: 'aumx' 'mcmx' 'appl', instance 0x174626da0 O I
    node 7: 'aumx' 'mcmx' 'appl', instance 0x17063bd60 O I
  Connections:
    node   6 bus   0 => node   4 bus   0  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    node   5 bus   0 => node   3 bus   0  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    node   4 bus   0 => node   7 bus   0  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    node   3 bus   0 => node   7 bus   1  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    node   7 bus   0 => node   2 bus   0  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    node   2 bus   0 => node   1 bus   0  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
  Input Callbacks:
    {0x100a31764, 0x1706df330} => node   5 bus   0  [2 ch, 44100 Hz]
    {0x100a31764, 0x1706df250} => node   5 bus   1  [2 ch, 44100 Hz]
    {0x100a31764, 0x1706dccb0} => node   5 bus   2  [2 ch, 44100 Hz]
    {0x100a31764, 0x1706dda40} => node   5 bus   3  [2 ch, 44100 Hz]
    {0x100a31764, 0x1706dcc40} => node   5 bus   4  [2 ch, 44100 Hz]
    {0x100a31764, 0x1706dca80} => node   5 bus   5  [2 ch, 44100 Hz]
    {0x100a31764, 0x1706dcaf0} => node   5 bus   6  [2 ch, 44100 Hz]
    {0x100a31764, 0x1706df2c0} => node   5 bus   7  [2 ch, 44100 Hz]
    {0x100a31764, 0x1706dce00} => node   5 bus   8  [2 ch, 44100 Hz]
    {0x100a31764, 0x1706ddb90} => node   5 bus   9  [2 ch, 44100 Hz]
    {0x100a31764, 0x1706dddc0} => node   5 bus  10  [2 ch, 44100 Hz]
    {0x100a31764, 0x1708c0c40} => node   6 bus   0  [2 ch, 44100 Hz]
    {0x100a31764, 0x1706df410} => node   6 bus   1  [2 ch, 44100 Hz]
    {0x100a31764, 0x1706ddab0} => node   6 bus   2  [2 ch, 44100 Hz]
  CurrentState:
    mLastUpdateError=0, eventsToProcess=F, isInitialized=T, isRunning=T (1)
在图的最左侧,有到多声道混音器,每个混音器后面都有一个音频单元新的时间音高(音高调制),然后是一个从这两个单元接收音频数据的混音器,最后是节奏音频单元

我使用render回调配置左侧的每个混合器

起初,我认为每个回调都会一个接一个地调用,为同一个音频时间戳请求X帧音频数据,但在改变速度单位的速率后,帧不再按顺序被请求。 默认利率为1.0时不会发生这种情况

以下是默认速率为1.0的输出日志记录:

0 -> 1024 / 7785692434.000000 (0)
1 -> 1024 / 7785692434.000000 (0)
11 -> 1024 / 7785692434.000000 (0)
2 -> 1024 / 7785692434.000000 (0)
3 -> 1024 / 7785692434.000000 (0)
4 -> 1024 / 7785692434.000000 (0)
5 -> 1024 / 7785692434.000000 (0)
6 -> 1024 / 7785692434.000000 (0)
7 -> 1024 / 7785692434.000000 (0)
8 -> 1024 / 7785692434.000000 (0)
9 -> 1024 / 7785692434.000000 (0)
10 -> 1024 / 7785692434.000000 (0)
12 -> 1024 / 7785692434.000000 (0)
13 -> 1024 / 7785692434.000000 (0)
------------ advance to 1024 --------------
0 -> 1024 / 7785693458.000000 (0)
1 -> 1024 / 7785693458.000000 (0)
11 -> 1024 / 7785693458.000000 (0)
2 -> 1024 / 7785693458.000000 (0)
3 -> 1024 / 7785693458.000000 (0)
4 -> 1024 / 7785693458.000000 (0)
5 -> 1024 / 7785693458.000000 (0)
6 -> 1024 / 7785693458.000000 (0)
7 -> 1024 / 7785693458.000000 (0)
8 -> 1024 / 7785693458.000000 (0)
9 -> 1024 / 7785693458.000000 (0)
10 -> 1024 / 7785693458.000000 (0)
12 -> 1024 / 7785693458.000000 (0)
13 -> 1024 / 7785693458.000000 (0)
所以这里一切都很好,回调编号0、1和11放在一个混音器上,其余放在另一个混音器上(右边的大浮点数是回调音频时间戳采样时间)。
现在,当我换成更高的费率时:

0 -> 1156 / 7785775378.000000 (0)
1 -> 1156 / 7785775378.000000 (0)
11 -> 1156 / 7785775378.000000 (0)
------------ advance to 84100 --------------
0 -> 380 / 7785776534.000000 (0)
1 -> 380 / 7785776534.000000 (0)
11 -> 380 / 7785776534.000000 (0)
------------ advance to 84480 --------------
2 -> 1156 / 7785775378.000000 (0)
3 -> 1156 / 7785775378.000000 (0)
4 -> 1156 / 7785775378.000000 (0)
5 -> 1156 / 7785775378.000000 (0)
6 -> 1156 / 7785775378.000000 (0)
7 -> 1156 / 7785775378.000000 (0)
8 -> 1156 / 7785775378.000000 (0)
9 -> 1156 / 7785775378.000000 (0)
10 -> 1156 / 7785775378.000000 (0)
12 -> 1156 / 7785775378.000000 (0)
13 -> 1156 / 7785775378.000000 (0)
------------ advance to 85636 --------------
2 -> 380 / 7785776534.000000 (0)
3 -> 380 / 7785776534.000000 (0)
4 -> 380 / 7785776534.000000 (0)
5 -> 380 / 7785776534.000000 (0)
6 -> 380 / 7785776534.000000 (0)
7 -> 380 / 7785776534.000000 (0)
8 -> 380 / 7785776534.000000 (0)
9 -> 380 / 7785776534.000000 (0)
10 -> 380 / 7785776534.000000 (0)
12 -> 380 / 7785776534.000000 (0)
13 -> 380 / 7785776534.000000 (0)
音频数据的请求顺序不同,前3次回调两次,其余两次

有人能证实我所观察到的是预期的吗