Записвайте и изпращайте аудио данни към c++ функция

Трябва да изпратя аудио данни в реално време в PCM формат 8 KHz 16 бита моно.

Аудиото трябва да бъде изпратено като масив от знаци с дължина (‹#char *data#>, ‹#int len#>).

Сега съм начинаещ в обработката на аудио и не мога да разбера как да постигна това. Най-добрият ми опит беше да конвертирам във формат iLBC и да опитам, но не можа да работи. Има ли някакъв пример как се записва и конвертира аудио във всеки формат. Вече прочетох Learning Core Audio от Крис Адамсън и Кевин Авила, но наистина не намерих решение, което да работи.

Просто това, което ми трябва:

(запис)->(конвертиране?)-> изпращане(char *data, int length);

Тъй като трябва да изпратя данни като масиви от знаци, не мога да използвам плейър.

РЕДАКТИРАНЕ: Успях да накарам всичко да работи със запис и с буфери за четене. Това, което не мога да управлявам е:

 if (ref[i]->mAudioDataByteSize != 0){
       char * data = (char*)ref[i]->mAudioData;
       sendData(mHandle, data, ref[i]->mAudioDataByteSize);
        }

person Izudin Zudda Vragić    schedule 10.05.2017    source източник
comment
comment
наистина не мога да работя с AVAudioRecorder, защото имам нужда от буферни данни, след което компресирам и след това изпращам мисловен сокет в реално време.   -  person Izudin Zudda Vragić    schedule 10.05.2017
comment
Възможен дубликат на Как да запиша аудио на iPhone с AVAudioRecorder?   -  person Mingebag    schedule 10.05.2017
comment
Не, не продължавам да използвам AVAudioRecorder за запис, конвертиране и изпращане на буфери в реално време.   -  person Izudin Zudda Vragić    schedule 10.05.2017
comment
AVAudioEngine може да ви помогне с това.   -  person Rhythmic Fistman    schedule 11.05.2017


Отговори (1)


Това всъщност не е задача за начинаещи. Решенията са да се използва или RemoteIO Audio Unit, Audio Queue API, или блок AVAudioEngine installTapOnBus. Те ще ви дадат почти в реално време (в зависимост от размера на буфера) буфери на аудио проби (Int16 или Floats и т.н.), които можете да конвертирате, компресирате, пакетирате в други типове данни или масиви и т.н. Обикновено чрез извикване на функция за обратно извикване или блокирайте, който предоставяте, за да правите каквото искате с входящите буфери за записани аудио проби.

person hotpaw2    schedule 11.05.2017
comment
Да, но когато получа масив от аудио проби и просто преобразувам int-s или float в знаци, това всъщност не е този звук от другата страна (просто някакъв шум). Така че може би друг въпрос има ли някаква функция или някакъв конвертор, който връща аудио данни като масив от знаци. - person Izudin Zudda Vragić; 12.05.2017
comment
Публикувайте кода за това как правите преобразуването на типа и отпечатайте някои примери. - person hotpaw2; 12.05.2017
comment
Добре, поради редактиране на код и липса на версии (понеже опитвам код в демо проект) не мога да го публикувам преди понеделник. - person Izudin Zudda Vragić; 12.05.2017
comment
Здравейте, съжалявам за късния отговор, не мога да възстановя стар код (работя върху това около месец без версия на кода), но публикувах проблемна част. - person Izudin Zudda Vragić; 16.05.2017