Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Raf-9600

Старожил


Сообщения: 398
Благодарности: 21

Профиль | Отправить PM | Цитировать


Johny777, Спасибо! Никаких особых проблем не возникло. Единственная мелочь: в твоём коде проверка в процедуре BASS_PlayFile такая if Channel <> 0 then, а должно быть if Channel = 0 then.

Собственно вот как эта часть выглядит у меня:
читать дальше »
Код: Выделить весь код
// Просто процедура которая открывает файл и проигривает его
function BASS_PlayFile(const Sounds: array of String): boolean;
var
    TempSoundName, uSoundPath: String;
    i: integer;

begin
    i := GetArrayLength(Sounds);
    TempSoundName := Sounds[Random(i)];

    // Не воспроизводим один файл два раза под ряд если их хотябы два.
    if i >= 1 then
        if TempSoundName = uSoundName then
            BASS_PlayFile(Sounds)
        else
            uSoundName := TempSoundName;

    if not FileExists(AddBackslash(RemoveBackslash(ExpandConstant('{tmp}'))) + 'BASS.dll') then ExtractTemporaryFile('BASS.dll');
    uSoundPath := ExpandConstant(AddBackslash(RemoveBackslash(ExpandConstant('{tmp}'))) + uSoundName);
    if not FileExists(uSoundPath) then ExtractTemporaryFile(uSoundName);

    if Channel = 0 then
    begin
        // Открываем файл...
        Channel := BASS_StreamCreateFile(False, uSoundPath, 0, 0, 0, 0,
        #ifdef UNICODE
            BASS_UNICODE
        #else
            0
        #endif
        );

        // Начинаем его воспроизведение
        Result := BASS_ChannelPlay(Channel, False);

        // А вот здесь используем флаг BASS_SYNC_END и указываем на нашу процедуру
        // ChannelEndSync котора будет запущена по окончанию проигривания файла
        PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, 0, CallbackAddr('ChannelEndSync'), 0);
    end else
    begin
        // Если файл уже играет, то отключаем его
        BASS_ChannelRemoveSync(Channel, PlaySync);
        BASS_StreamFree(Channel);

        // Открываем файл...
        Channel := BASS_StreamCreateFile(False, uSoundPath, 0, 0, 0, 0,
        #ifdef UNICODE
            BASS_UNICODE
        #else
            0
        #endif
        );

        // Начинаем его воспроизведение
        Result := BASS_ChannelPlay(Channel, False);

        // А вот здесь используем флаг BASS_SYNC_END и указываем на нашу процедуру
        // ChannelEndSync котора будет запущена по окончанию проигривания файла
        PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, 0, CallbackAddr('ChannelEndSync'), 0);
    end;
end;

Последний раз редактировалось Raf-9600, 04-12-2013 в 01:46.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:53, 03-12-2013 | #1595