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

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

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

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

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

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

Core Graphics анимация - Программирование iOS
Новичек в программировании на ios, но все бывает впервые. Уже простенькие приложения получаются, вот возникла проблемка: Приводу...

Нужно разъяснение с Core Data - Программирование iOS
Всем привет! Толи я идиот тупой, толи с возрастом соображалка перестает работать нормально, но я никак ни по книжкам, ни по примерам...

core data, две сущности - Программирование iOS
Привет. Есть база, в ней две сущности, предположим «факультет» и «студент» между ними связь много к одному и обратно). Требуется ...

core data newManagedObject setValue: - Программирование iOS
Уважаемые форумчане! Возникла следующая проблема: создаю DataModel, добавляю Entity, добавляю attribute string. Когда выполняю ......

Improve Core Data skills - Программирование iOS
Привет всем. Как-то так печально у меня складывался рабочий опыт, что с CoreData особо проектов и не было. А если и было (две штуки),...

Core Data проверка уникальности записи - Программирование iOS
Добрый вечер! Вливаюсь в CoreData потихоньку, почти все понятно, кроме вот чего: не могу до конца понять, как работает проверка данных. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
12.05.2013, 22:05 #2
Не пробовали сразу описать проблему? А то какая помощь Вам нужна то?
Если "как с ним работать" - то сюда.
Death
4 / 4 / 1
Регистрация: 18.10.2009
Сообщений: 44
13.05.2013, 00:52  [ТС] #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
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
13.05.2013, 12:39 #4
А почему сначала вы делаете добавление kAudioUnitType_Output, а потом kAudioUnitType_Mixer?
Нелогично... Или я что не так понимаю?
Попробуйте изменить, если нет - гляньте туториал, может поможет, если нет, будем дальше копать.
Death
4 / 4 / 1
Регистрация: 18.10.2009
Сообщений: 44
13.05.2013, 22:06  [ТС] #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 говорила что не верный формат, когда я пытался что-то изменить в нем.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2013, 22:06
Привет! Вот еще темы с ответами:

Использование Core Data в статической библиотеке - Программирование iOS
Доброго времени суток. Прошу у вас помощи в разъяснение важного мне вопроса. Я пишу статическую библиотеку для iOS. Всё бы хороше, да...

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

Муки выбора: core data или работа "напрямую" с sqlite - Программирование iOS
Здравствуйте! Я новичок в разработке под osx и ios, но так как база на сях и плюсах была (когда-то давно), то идет это дело у меня довольно...

Multimedia Audio Adapfer Realtek ALC655@SiS 7012 Audio Device - Звук, акустика
материнка типа P4S8X-MX ,Multimedia Audio Adapfer Realtek ALC655@SiS 7012 Audio Device ПРОБЛЕМА!Были подключены динамики к компу...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.05.2013, 22:06
Ответ Создать тему
Опции темы

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