Собственно, столкнулся со следующим. Нужно ПОСЛЕДОВАТЕЛЬНО проиграть несколько небольших звуковых файлов. Изначально я их загружаю и храню в массиве сэмплов
arsmp:= BASS_SampleLoad(FALSE, PChar(FileNameI), 0, 0, 1, BASS_SAMPLE_OVER_POS);
В ходе работы задаю канал воспроизведения для первого сэмпла
chan:= BASS_SampleGetChannel(arsmp[0], False);
устанавливаю синхронизатор на данный канал
BASS_ChannelSetSync(chan, BASS_SYNC_END or BASS_SYNC_MIXTIME, 0, SyncProc, nil);
и проигрываю его
BASS_ChannelPlay(chan, FALSE);
Однако синхронизации по завершению проигрывания данного канала не происходит. Если заменить массив сэмплов (samples) на массив потоков (streams), то все прекрасно работает. Очевидно, что синхронизируемый канал в первом случае отличается от второго, но чем? Если атрибутами, то какими? Впервые работаю с библиотекой, изучение коплектной справки по BASS не внесло ясности.
Дополнительный вопрос: корректно ли хранить множество мелких файлов в виде потоков. Насколько это накладнее по сравнению с массивом сэмплов.
Судя по доке синхронизация работает только для "MOD music, stream or recording channel", так что придется использовать потоки (streams). Разница в том, что семплы сразу загружаются в память, а поток грузит файл порциями, что позволяет, например, проигрывать большие файлы. Я не знаю, конечно, их реализации, но возможно маленькие файлы в потоке сразу попадают в память и разницу вы не почувствуете.
Тема в архиве.