Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


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

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

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

icq: 216409213
По умолчанию

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

Цитата:
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, 14:03   #3
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Адрес: Россия, г.Челябинск
Сообщений: 191
Репутация: 16
По умолчанию

Я читал доки, и в курсе про 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, 14:27   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,278
Репутация: 2073

icq: 216409213
По умолчанию

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

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

icq: 216409213
По умолчанию

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

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

Для кнопки 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, 14:58   #8
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Адрес: Россия, г.Челябинск
Сообщений: 191
Репутация: 16
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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


03:59.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru