Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2016, 12:28   #1
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Сообщений: 191
По умолчанию BASS.dll - Пауза во время записи звука

Доброго времени суток! Подскажите пожалуйста, как реализовать паузу во время записи с помощью библиотеки BASS.dll ?

С обычной записью проблем нет, начали - остановили - сохранили. А как быть, если необходимо прервать запись а потом продолжить дописывать в тот же файл ?
Чаще всего, у большенства людей, поиск Истины заканчивается набором слова в Гугле
DenProx вне форума Ответить с цитированием
Старый 28.11.2016, 12:47   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Доки не читай, вопрос задавай...

Цитата:
Use BASS_ChannelStop to stop the recording and free its resources. BASS_ChannelPause can be used to pause the recording; it can also be started in a paused state via the BASS_RECORD_PAUSE flag, which allows DSP/FX to be set on it before any data reaches the callback function.
p51x вне форума Ответить с цитированием
Старый 28.11.2016, 13:03   #3
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Сообщений: 191
По умолчанию

Я читал доки, и в курсе про BASS_RECORD_PAUSE ... Но грамотного применения не смог найти.

Грубый пример:

Код:
//Начали запись
rchan := BASS_RecordStart(44100, 2, BASS_RECORD_PAUSE, @RecordingCallback, nil);

//Приостановили
BASS_ChannelPause(rchan);

//Продолжили
BASS_ChannelPlay(rchan, False);
В таком виде не работает. Примеров в инете с использованием паузы найти не получилось. Хотя сам флаг BASS_RECORD_PAUSE встречается.
Чаще всего, у большенства людей, поиск Истины заканчивается набором слова в Гугле
DenProx вне форума Ответить с цитированием
Старый 28.11.2016, 13:27   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Я читал доки, и в курсе про BASS_RECORD_PAUSE ...
По примеру не видно. Из той же офф доки:
Цитата:
BASS_RECORD_PAUSE Start the recording paused. Use BASS_ChannelPlay to resume it.
Т.е. вы запустили запись на паузе, еще раз запаузили и продолжили. Что это было?
p51x вне форума Ответить с цитированием
Старый 28.11.2016, 14:20   #5
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Сообщений: 191
По умолчанию

p51x Если бы я знал как правильно применить информацию из документации, я бы не задавал вопрос на форуме.
Чаще всего, у большенства людей, поиск Истины заканчивается набором слова в Гугле
DenProx вне форума Ответить с цитированием
Старый 28.11.2016, 14:25   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

О, уже огрызания пошли. Может тогда бред в качестве примеров кода перестанете писать?
p51x вне форума Ответить с цитированием
Старый 29.11.2016, 12:33   #7
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Сообщений: 191
По умолчанию

Все таки, опытным путем добился Паузы:

Для кнопки Record (начать запись), такой кусочек:

Код:
procedure TForm1.StartRecording;
begin
    // generate header for WAV file
    with WaveHdr do
    begin
        riff := 'RIFF';
        len := 36;
        cWavFmt := 'WAVEfmt ';
        dwHdrLen := 16;
        wFormat := 1;
        wNumChannels := 2;
        dwSampleRate := 44100;
        wBlockAlign := 4;
        dwBytesPerSec := 176400;
        wBitsPerSample := 16;
        cData := 'data';
        dwDataLen := 0;
    end;
    WaveStream.Write(WaveHdr, SizeOf(WAVHDR));
    // start recording @ 44100hz 16-bit stereo
    rchan := BASS_RecordStart(44100, 2, BASS_RECORD_PAUSE, @RecordingCallback, nil);
    if rchan = 0 then
    begin
        MessageDlg('Couldn''t start recording!', mtError, [mbOk], 0);
        WaveStream.Clear;
    end
    else
    begin
        bPlay.Enabled := False;
    BASS_ChannelPlay(rchan, False);
    end;
end;

Для Паузы:

Код:
BASS_ChannelPause(rchan);

Остановить запись:

Код:
procedure TForm1.StopRecording;
var
    i: integer;
begin
    BASS_ChannelStop(rchan);
    bRecord.Caption := 'Record';
    // complete the WAV header
    WaveStream.Position := 4;
    i := WaveStream.Size - 8;
    WaveStream.Write(i, 4);
    i := i - $24;
    WaveStream.Position := 40;
    WaveStream.Write(i, 4);
    WaveStream.Position := 0;
    // create a stream from the recorded data
    chan := BASS_StreamCreateFile(True, WaveStream.Memory, 0, WaveStream.Size, 0);
    if chan <> 0 then
    begin
        // enable "Play" & "Save" buttons
        bPlay.Enabled := True;
    end
    else
        MessageDlg('Error creating stream from recorded data!', mtError, [mbOk], 0);
end;
Но есть проблема с появлением Щелчка, в месте где была пауза.
Чаще всего, у большенства людей, поиск Истины заканчивается набором слова в Гугле
DenProx вне форума Ответить с цитированием
Старый 29.11.2016, 13:58   #8
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Сообщений: 191
По умолчанию

В BASS есть функция - BASS_ChannelSlideAttribute(channel, BASS_ATTRIB_VOL, 0, 1000);

Которая позволяет сделать плавное затухание - появление ... вопрос - как применить затухание, для последних 250 мс "предыдущего" отрезка ?
Чаще всего, у большенства людей, поиск Истины заканчивается набором слова в Гугле
DenProx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Bass.dll время трека в LisxBox Alex2009 Мультимедиа в Delphi 1 20.02.2013 19:51
Трансляция звука по локальной сети (UDP и BASS.DLL) cactus628 Работа с сетью в Delphi 10 04.12.2012 14:32
Передача звука по сети с использованием UDP и BASS.DLL cactus628 Работа с сетью в Delphi 6 02.02.2012 14:11
Bass.dll -непрерывное воспроизведение звука werrey Мультимедиа в Delphi 9 13.06.2011 15:23
Требование к воспроизведению звука по нажатию клавиши клавиатуры в Bass.dll Fluffy123 Мультимедиа в Delphi 8 15.05.2010 21:48