Форум программистов, компьютерный форум CyberForum.ru

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Death
4 / 4 / 1
Регистрация: 18.10.2009
Сообщений: 44
#1

Core Audio - Программирование iOS/iPhone

12.05.2013, 19:49. Просмотров 796. Ответов 4
Метки нет (Все метки)

Кто нибуль работал с Core Audio с AudioUnit? Нужна помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2013, 19:49     Core Audio
Посмотрите здесь:

Драйвер на Realtek AC'97 Audio for VIA (R) Audio Controller
Нужно разъяснение с Core Data
core data newManagedObject setValue:
core data, две сущности
core data запрос на получение суммы атрибута, всех записей
Использование Core Data в статической библиотеке
Core Graphics анимация
Objective-C Как записать данные в соответствующую категорию с Core Data?
Муки выбора: core data или работа "напрямую" с sqlite
Core Data проверка уникальности записи
Improve Core Data skills
JavaScript New Audio; audio.replay?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
12.05.2013, 22:05     Core Audio #2
Не пробовали сразу описать проблему? А то какая помощь Вам нужна то?
Если "как с ним работать" - то сюда.
Death
4 / 4 / 1
Регистрация: 18.10.2009
Сообщений: 44
13.05.2013, 00:52  [ТС]     Core Audio #3
Извените
Проблема такова. Пытаюсь создать граф. Mixer -> NBandEQ -> Output.

В Mixer юнит через свойства привязываю колбек для получение данных. т,е источник данных у меня это Mixer.

Если без NBandEQ звук воспроизводиться нормально, если сразу подать на Output. Т,е граф получается такой Mixer -> Output.

Если добавить вершину NBandEQ, то приложение пишит что неизвестный формат и ничего не происходит, тоже самое и остальными и эфектами. Ошибок при создание и инциализирование вершины нету.

Формат я указываю. Формат PCM у меня. Иначе во первых не было бы звука. Да вообще чтобы производить эффекты над звуком, должен быть звук раскодирован.

Едиственный какой эфект срабатывает, это AUiPodEQ. Как быть?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
AURenderCallbackStruct inputCallbackStruct;
inputCallbackStruct.inputProc = ipodRenderCallback;
inputCallbackStruct.inputProcRefCon = (__bridge void*)self;
 
AUGraphSetNodeInputCallback (
processingGraph,
mixerNode,
0,
&inputCallbackStruct
);
 
AudioUnitSetProperty (
mixerUnit,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Input,
mainBus,
&SInt16StereoStreamFormat,
sizeof (SInt16StereoStreamFormat)
);
Связать kAudioUnitSubType_AudioFilePlayer ->kAudioUnitSubType_NBandEQ -> kAudioUnitSubType_RemoteIO - это нормально получается. Но вот если нужно в графе есть микшер, а затем после него делать вершины с эфектами, то уже не работает. Как быть? Может кто-то пробывал делать какие-то эфекты, которые поступали из микреша?

Вот код.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
-(void) configureAndInitializeAudioProcessingGraph {
    
    
        OSStatus result = noErr;
        result = NewAUGraph (&processingGraph);
        
        if (noErr != result) {[self printErrorMessage: @"NewAUGraph" withStatus: result]; return;}
        
        
        
        AudioComponentDescription iOUnitDescription;
        iOUnitDescription.componentType          = kAudioUnitType_Output;
        iOUnitDescription.componentSubType       = kAudioUnitSubType_RemoteIO;
        iOUnitDescription.componentManufacturer  = kAudioUnitManufacturer_Apple;
        iOUnitDescription.componentFlags         = 0;
        iOUnitDescription.componentFlagsMask     = 0;
        
        AudioComponentDescription MixerUnitDescription;
        MixerUnitDescription.componentType          = kAudioUnitType_Mixer;
        MixerUnitDescription.componentSubType       = kAudioUnitSubType_MultiChannelMixer;
        MixerUnitDescription.componentManufacturer  = kAudioUnitManufacturer_Apple;
        MixerUnitDescription.componentFlags         = 0;
        MixerUnitDescription.componentFlagsMask     = 0;
    
 
        AudioComponentDescription EQDescription;
        EQDescription.componentType = kAudioUnitType_Effect;
        EQDescription.componentSubType = kAudioUnitSubType_NBandEQ;
        EQDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
        EQDescription.componentFlags = 0;
        EQDescription.componentFlagsMask = 0;
    
 
        result = AUGraphAddNode ( processingGraph,
                                 &iOUnitDescription,
                                 &iONode
                                 );
    
        if (noErr != result) {[self printErrorMessage: @"AUGraphNewNode failed for I/O unit" withStatus: result]; return;}
        
        result =  AUGraphAddNode (
                                  processingGraph,
                                  &MixerUnitDescription,
                                  &mixerNode
                                  );
    
    
    if (noErr != result) {[self printErrorMessage: @"AUGraphNewNode failed for Mixer unit" withStatus: result]; return;}
    
    
    
        result = AUGraphAddNode
                                (
                                 processingGraph,
                                 &EQDescription,
                                 &eqNode
                                 );
    
    
    
    result = AUGraphConnectNodeInput (
                                      processingGraph,
                                      mixerNode,
                                      0,
                                      eqNode,
                                      0
                                      );
    
    
    if (noErr != result) {[self printErrorMessage: @"AUGraphConnectNodeInput conv to eq" withStatus: result]; return;}
    
    result = AUGraphConnectNodeInput (
                                      processingGraph,
                                      eqNode,
                                      0,
                                      iONode,
                                      0
                                      );
    
    
        result = AUGraphOpen (processingGraph);
    
    
        if (noErr != result) {[self printErrorMessage: @"AUGraphOpen" withStatus: result]; return;}
        
        result = AUGraphNodeInfo (
                                    processingGraph,
                                    mixerNode,
                                    NULL,
                                    &mixerUnit
                                    );
 
    
        if (noErr != result) {[self printErrorMessage: @"AUGraphNodeInfo" withStatus: result]; return;}
    
        
        result = AUGraphNodeInfo (
                                    processingGraph,
                                    iONode,
                                    NULL,
                                    &ioUnit
                                   );
    
    
        result =    AUGraphNodeInfo  (
                                 processingGraph,
                                 eqNode,
                                 NULL,
                                 &eqUnit
                                 );
 
    
        if (noErr != result) {[self printErrorMessage: @"AUGraphConnectNodeInput eq to ionode" withStatus: result]; return;}
 
    
        [self setPropertyMixerUnit];
    
        result = AUGraphInitialize (processingGraph);
    
        if (noErr != result) {[self printErrorMessage: @"error" withStatus: result]; return;}   
}
 
-(void)setPropertyMixerUnit{
    
    UInt32 maximumFramesPerSlice = 4096;
    
    AudioUnitSetProperty (
                                   mixerUnit,
                                   kAudioUnitProperty_MaximumFramesPerSlice,
                                   kAudioUnitScope_Global,
                                   0,
                                   &maximumFramesPerSlice,
                                   sizeof (maximumFramesPerSlice)
                                   );
    
    AURenderCallbackStruct inputCallbackStruct;
    inputCallbackStruct.inputProc        = ipodRenderCallback;
    inputCallbackStruct.inputProcRefCon  = (__bridge void*)self;
    
    AUGraphSetNodeInputCallback (
                                          processingGraph,
                                          mixerNode,
                                          0,
                                          &inputCallbackStruct
                                          );
    
    AudioUnitSetProperty         (
                                   mixerUnit,
                                   kAudioUnitProperty_StreamFormat,
                                   kAudioUnitScope_Input,
                                   mainBus,
                                   &SInt16StereoStreamFormat,
                                   sizeof (SInt16StereoStreamFormat)
                                   );
}
Добавлено через 56 минут
Если конкретно что за ошибка, то AUGraphInitialize error: -10868
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
13.05.2013, 12:39     Core Audio #4
А почему сначала вы делаете добавление kAudioUnitType_Output, а потом kAudioUnitType_Mixer?
Нелогично... Или я что не так понимаю?
Попробуйте изменить, если нет - гляньте туториал, может поможет, если нет, будем дальше копать.
Death
4 / 4 / 1
Регистрация: 18.10.2009
Сообщений: 44
13.05.2013, 22:06  [ТС]     Core Audio #5
Да добавления в каком порядке, вроде не имеет не какого значения. Мы же просто создаем веришины, но они не соединены. А вот при соединение там уже порядок нужен.

Добавлено через 10 минут
Что еще интересного увидел, так вот это.

result = AudioUnitGetProperty( mMixer,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Output,
0,
&desc,
&size);

// Initializes the structure to 0 to ensure there are no spurious values.
memset (&desc, 0, sizeof (desc));

// Make modifications to the CAStreamBasicDescription
// AUCanonical on the iPhone is the 8.24 integer format that is native to the iPhone.
// The Mixer unit does the format shifting for you.
desc.SetAUCanonical(1, true);
desc.mSampleRate = kGraphSampleRate;

// Apply the modified CAStreamBasicDescription to the output Audio Unit
result = AudioUnitSetProperty( mMixer,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Output,
0,
&desc,
sizeof(desc))

Это и того же тотуриала, который вы мне прислали. Тут в микшаре еще так же настраивается kAudioUnitScope_Output, у меня этого нету. Возможно именно это и надо добавить. Впринцапе даже логично было бы, есть Input, а Output нету. Хотя почему-то unit AUIpodEQ работает без Output.

То что для вершины NBandEQ нужно добавлять пару свойств для настройки это уже точно, влиять на инициализирование точно будет. Я прописывал какие-то свойства ошибочные, даже без NBandEQ, Core Audio говорила что не верный формат, когда я пытался что-то изменить в нем.
Yandex
Объявления
13.05.2013, 22:06     Core Audio
Ответ Создать тему
Опции темы

Текущее время: 23:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru