Я пытался использовать AvaudioEngine для планирования нескольких аудиофайлов для воспроизведения в идеальной синхронизации, но при прослушивании вывода, кажется, очень небольшая задержка между входными узлами. Аудио двигатель реализован с использованием следующего графика: < /p>
//
//AVAudioPlayerNode1 -->
//AVAudioPlayerNode2 -->
//AVAudioPlayerNode3 --> AVAudioMixerNode --> AVAudioUnitVarispeed ---> AvAudioOutputNode
//AVAudioPlayerNode4 --> |
//AVAudioPlayerNode5 --> AudioTap
// |
//AVAudioPCMBuffers
//
< /code>
И я использую следующий код для загрузки образцов и планирования их одновременно: < /p>
- (void)scheduleInitialAudioBlock:(SBScheduledAudioBlock *)block {
for (int i = 0; i < 5; i++) {
NSString *path = [self assetPathForChannel:i trackItem:block.trackItem]; //this fetches the right audio file path to be played
AVAudioPCMBuffer *buffer = [self bufferFromFile:path];
[block.buffers addObject:buffer];
}
AVAudioTime *time = [[AVAudioTime alloc] initWithSampleTime:0 atRate:1.0];
for (int i = 0; i < 5; i++) {
[inputNodes scheduleBuffer:block.buffers
atTime:time
options:AVAudioPlayerNodeBufferInterrupts
completionHandler:nil];
}
}
- (AVAudioPCMBuffer *)bufferFromFile:(NSString *)filePath {
NSURL *fileURl = [NSURL fileURLWithPath:filePath];
NSError *error;
AVAudioFile *audioFile = [[AVAudioFile alloc] initForReading:fileURl commonFormat:AVAudioPCMFormatFloat32 interleaved:NO error:&error];
if (error) {
return nil;
}
AVAudioPCMBuffer *buffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:audioFile.processingFormat frameCapacity:audioFile.length];
[audioFile readIntoBuffer:buffer frameCount:audioFile.length error:&error];
if (error) {
return nil;
}
return buffer;
}
< /code>
Я заметил, что проблема может быть воспринята только на устройствах, я тестирую с iPhone5s, но я не могу выяснить, почему аудиофайлы играют из синхронизации, любая помощь будет высоко оценена. < /p>
** Ответ ** < /p>
Мы в итоге сортировали проблему со следующим кодом: < /p>
AVAudioTime *startTime = nil;
for (AVAudioPlayerNode *node in inputNodes) {
if(startTime == nil) {
const float kStartDelayTime = 0.1; // sec
AVAudioFormat *outputFormat = [node outputFormatForBus:0];
AVAudioFramePosition startSampleTime = node.lastRenderTime.sampleTime + kStartDelayTime * outputFormat.sampleRate;
startTime = [AVAudioTime timeWithSampleTime:startSampleTime atRate:outputFormat.sampleRate];
}
[node playAtTime:startTime];
}
< /code>
Это дало каждому avaudioinputnode достаточно времени, чтобы загрузить буферы и исправить все наши проблемы с синхронизацией звука. Hope this helps others!
Подробнее здесь: https://stackoverflow.com/questions/273 ... rfect-sync
AvaudioEngine Несколько avaudioinputnodes не играют в идеальной синхронизации ⇐ IOS
Программируем под IOS
1742151468
Anonymous
Я пытался использовать AvaudioEngine для планирования нескольких аудиофайлов для воспроизведения в идеальной синхронизации, но при прослушивании вывода, кажется, очень небольшая задержка между входными узлами. Аудио двигатель реализован с использованием следующего графика: < /p>
//
//AVAudioPlayerNode1 -->
//AVAudioPlayerNode2 -->
//AVAudioPlayerNode3 --> AVAudioMixerNode --> AVAudioUnitVarispeed ---> AvAudioOutputNode
//AVAudioPlayerNode4 --> |
//AVAudioPlayerNode5 --> AudioTap
// |
//AVAudioPCMBuffers
//
< /code>
И я использую следующий код для загрузки образцов и планирования их одновременно: < /p>
- (void)scheduleInitialAudioBlock:(SBScheduledAudioBlock *)block {
for (int i = 0; i < 5; i++) {
NSString *path = [self assetPathForChannel:i trackItem:block.trackItem]; //this fetches the right audio file path to be played
AVAudioPCMBuffer *buffer = [self bufferFromFile:path];
[block.buffers addObject:buffer];
}
AVAudioTime *time = [[AVAudioTime alloc] initWithSampleTime:0 atRate:1.0];
for (int i = 0; i < 5; i++) {
[inputNodes[i] scheduleBuffer:block.buffers[i]
atTime:time
options:AVAudioPlayerNodeBufferInterrupts
completionHandler:nil];
}
}
- (AVAudioPCMBuffer *)bufferFromFile:(NSString *)filePath {
NSURL *fileURl = [NSURL fileURLWithPath:filePath];
NSError *error;
AVAudioFile *audioFile = [[AVAudioFile alloc] initForReading:fileURl commonFormat:AVAudioPCMFormatFloat32 interleaved:NO error:&error];
if (error) {
return nil;
}
AVAudioPCMBuffer *buffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:audioFile.processingFormat frameCapacity:audioFile.length];
[audioFile readIntoBuffer:buffer frameCount:audioFile.length error:&error];
if (error) {
return nil;
}
return buffer;
}
< /code>
Я заметил, что проблема может быть воспринята только на устройствах, я тестирую с iPhone5s, но я не могу выяснить, почему аудиофайлы играют из синхронизации, любая помощь будет высоко оценена. < /p>
** Ответ ** < /p>
Мы в итоге сортировали проблему со следующим кодом: < /p>
AVAudioTime *startTime = nil;
for (AVAudioPlayerNode *node in inputNodes) {
if(startTime == nil) {
const float kStartDelayTime = 0.1; // sec
AVAudioFormat *outputFormat = [node outputFormatForBus:0];
AVAudioFramePosition startSampleTime = node.lastRenderTime.sampleTime + kStartDelayTime * outputFormat.sampleRate;
startTime = [AVAudioTime timeWithSampleTime:startSampleTime atRate:outputFormat.sampleRate];
}
[node playAtTime:startTime];
}
< /code>
Это дало каждому avaudioinputnode достаточно времени, чтобы загрузить буферы и исправить все наши проблемы с синхронизацией звука. Hope this helps others!
Подробнее здесь: [url]https://stackoverflow.com/questions/27316322/avaudioengine-multiple-avaudioinputnodes-do-not-play-in-perfect-sync[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия