Как изменить записанный голос на мужской голос в Core Audio (Audio Unit / Remote IO) для iPhone - PullRequest
1 голос
/ 18 августа 2010

Я новичок в Core Audio и действительно потерян, я пытаюсь записать звук, а затем применить голосовую модуляцию к этой записи и воспроизвести ее. Я посмотрел на пример Speak Here, который использует Audio Queue для записи звука. Я застрял в части, как изменить аудио образцы. Я понимаю, что это можно сделать с помощью Audio Unit в функции обратного вызова для изменения сэмплов аудио, но я понятия не имею, что применить к этим сэмплам, чтобы изменить их (поможет ли изменение высоты звука?).

Если бы вы могли направить меня к какому-либо исходному коду или учебнику или любому сайту, который объясняет модуляцию голоса для цели C, действительно очень поможет мне. Спасибо всем заранее.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2010

Во-первых, чтобы действительно ответить на ваш вопрос: когда вы вызываете функцию AudioQueueNewInput (), вы передаете ей имя подпрограммы, которая будет вызываться каждый раз, когда вам доступны данные. Вы, вероятно, назвали это MyInputBufferHandler () или что-то. Третий аргумент - AudioQueueBufferRef, который содержит входящие данные.

Имейте в виду, что это не так просто, как смотреть на каждый образец (амплитуду) и понижать или поднимать его. Вы получаете образцы во временной (временной) области в виде амплитуд. Там нет информации о высоте или частоте. Что вам нужно сделать, это переместить входящие выборки (форму волны) в частотную область, где каждая «точка» в этом пространстве является частотой и сопровождающей ее мощностью и фазой. Вы можете сделать это с помощью БПФ (быстрого преобразования Фурье), но математика несколько сложна. Apple действительно предоставляет процедуры FFT в рамках Acceleration, но имейте в виду, что вы погружаетесь здесь в очень глубокие воды.

2 голосов
/ 30 августа 2010

То, что вы пытаетесь сделать здесь, не так просто. По сути, вам придется реализовать вокодер («голосовой кодер»), чтобы изменить голос. Ссылки Википедии должны помочь вам в этом.

Тогда вы все еще должны манипулировать этими образцами в CoreAudio. Вы можете сделать это, используя Audio Queue Services , но это не совсем простой в использовании API. На самом деле может быть меньше проблем, если использовать один из более простых API-интерфейсов CoreAudio и обернуть вокодер в аудиоустройство.

Есть ли у вас опыт работы с аудио? Реализация вокодера без каких-либо предварительных знаний об обработке звука в целом является сложной задачей.

...