2010-03-11 3 views
2

Я хотел бы иметь возможность воспроизводить аудиозапись, записанную мной с использованием скорости AVAudioRecorder @ 1.5x или 2.0x. Я ничего не вижу в AVAudioPlayer, который будет поддерживать это. Я был бы признателен за некоторые предложения, с кодом, если это возможно, о том, как это сделать с iPhone 3.x SDK. Я не слишком беспокоюсь о понижении высоты тона, чтобы компенсировать увеличенную скорость воспроизведения, но быть в состоянии сделать это было бы оптимальным.iPhone SDK: изменение скорости воспроизведения с использованием основного звука AVAudioPlayer

ответ

1

См. this question. Другими словами, вам придется использовать другой API, например Audio Queue Services. Если вы хотите попробовать простой взлом, вы можете попробовать удвоить свойство частоты дискретизации аудиофайла. Вероятно, это не сработает. Кроме того, следует предупредить, что довольно требовательный процессор, чтобы настроить скорость воспроизведения, сохраняя тот же шаг. Вам нужно будет использовать один из доступных методов, который называется "time stretching". Кроме того, в случае, если вы этого еще не осознали, делать сложные вещи с аудио на iPhone является серьезной проблемой, потому что документация Apple, как правило, либо очень плохая, либо несуществующая.

+0

Благодарим за ответ. – memmons

+0

Итак, если я записываю с частотой дискретизации 8000, то теоретически изменение частоты дискретизации до 12000 для воспроизведения должно приводить к 1,5-кратной скорости? – memmons

+0

Да, если он будет принимать произвольные частоты дискретизации, а не только обычные (44100, 22050 и т. Д.). Я думаю, что так будет, но я не пробовал. –

2

Изменение частоты дискретизации должно работать так же, как и магнитофон, если бы вы играли быстрее. Все становится выше в поле. Чтобы сохранить высоту тона, вам необходимо настроить диаграмму звукового блока, которая включает эффект AUPitch, и снизить высоту тона на тот же коэффициент, при котором вы увеличиваете частоту дискретизации.

+0

Спасибо за это. – memmons

0

Если вы хотите воспроизводить звук быстрее или медленнее, в avAudioPlayer есть встроенный метод. Вы пробовали свойство AudioPlayer Rate? в Swift это будет так:

audioP = try! AVAudioPlayer(contentsOf: URL(fileURLWithPath: selectedPath), fileTypeHint: "caf") 
    audioP.enableRate = true 
    audioP.prepareToPlay() 
    audioP.rate = 1.5 
    audioP.play() 
Смежные вопросы