Как установить высоту звука в аудиофайле или записанном аудиофайле в iphone SDK? - PullRequest
2 голосов
/ 19 апреля 2011

Я записываю файл или у меня есть аудиофайл. Я хочу изменить высоту звука и воспроизвести аудиофайл.Как я могу установить высоту звука в программе iphone, которая использует target-c.

Пожалуйста, помогите мне в этом.

Спасибо, Мадан Мохан.

Ответы [ 3 ]

0 голосов
/ 26 апреля 2011

Вы можете использовать проект с открытым исходным кодом soundtouch, чтобы изменить высоту звука

Вот ссылка: http://www.surina.net/soundtouch/

После того, как вы добавите soundtouch в свой проект, вы должны предоставить входной звуковой файлpath, выходной звуковой файл, путь и изменение высоты звука в качестве входных данных.

Поскольку обработка звука требует больше времени, лучше изменить soundtouch, чтобы при записи голоса непосредственно передавать данные для обработки.Это сделает ваше приложение лучше.

Ссылки

Изменение высоты звука в реальном времени на iPhone

Создатькод изменения высоты тона?

0 голосов
/ 05 сентября 2017

Вы можете воспроизводить звук с измененной высотой тона, используя AVAudioEngine, AVAudioPlayerNode. Образец проверенного кода приведен ниже.

@interface ViewController (){

    AVAudioEngine *engine;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [self playAudio];
}

-(void)playAudio{

    engine = [[AVAudioEngine alloc] init];
    NSString* path=[[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp3"];
    NSURL *soundUrl = [NSURL fileURLWithPath:path];
    AVAudioFile* File = [[AVAudioFile alloc] initForReading: soundUrl error: nil];
    AVAudioPlayerNode* node = [AVAudioPlayerNode new];

    [node stop];
    [engine stop];
    [engine reset];
    [engine attachNode: node];
    AVAudioUnitTimePitch* changeAudioUnitTime = [AVAudioUnitTimePitch new];


    //change this rate variable to play fast or slow .         
    changeAudioUnitTime.rate = 1;

    //change pitch variable to according your requirement.
    changeAudioUnitTime.pitch = 100;
    [engine attachNode: changeAudioUnitTime];
    [engine connect:node to: changeAudioUnitTime format: nil];
    [engine connect:changeAudioUnitTime to: engine.outputNode format:nil];
    [node scheduleFile:File atTime: nil completionHandler: nil];
    [engine startAndReturnError: nil];
    [node play];


}

Убедитесь, что переменная пути имеет правильный путь к файлу

Примечание :: этокод протестирован на реальном устройстве и работает нормально в моем проекте. Не забудьте добавить CoreAudio.framework, AVFoundation.framework.

0 голосов
/ 26 апреля 2011

Наивный подход - воспроизвести его, используя другую частоту дискретизации по сравнению с частотой дискретизации, используемой для записи файла. Например, если файл был записан с Fs = 44100 Гц, то воспроизведение его с Fs = 22050 Гц даст вам половину исходного шага.

Конечно, этот наивный подход предполагает изменение продолжительности файла и других связанных со звуком артефактов. Если вам нужно что-то менее наивное, вам придется самостоятельно реализовать алгоритм смещения высоты тона, и это огромная тема.

...