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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2011, 09:16   #11
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Спасибо ZuBy за подсказку!!!

Я понял в каком направлении работать, пока тишина нужно BitsPerSample 8 бит задать в атрибутах Bass, почитаю примеры как изменить 16 бит на 8 бит
С модема звуковые данные частота 8000, BitsPerSample 8 бит

stream значение 0 выдает
Сделал так, но все равно тишина.
Цитата:
procedure TForm1.OnReadComPort(Sender: TObject; ComPort: TComPort);
var
stream : HSTREAM;
begin
if Plays then
begin
stream:=BASS_StreamCreateFile(true, ComPort.Buf, 0, ComPort.BufSize, BASS_DEVICE_8BITS or BASS_DEVICE_MONO);
BASS_ChannelPlay(stream,true);
end;
end;

Заработало вот таким образом
Цитата:
procedure TForm1.OnReadComPort(Sender: TObject; ComPort: TComPort);
var
header: TWaveHeader;
Buf: array of char;
stream : HSTREAM;
begin
if Plays then
begin
//Заполняем заголовок
with header do
begin
idRiff :='RIFF';
RiffLen :=ComPort.BufSize;
idWave :='WAVE';
idFmt :='fmt ';
InfoLen :=16;
FormatTag :=1;
Channels :=1;
Freq :=8000;
BitsPerSample :=8;
BlockAlign :=Channels * (BitsPerSample div 8);
BytesPerSec :=Freq * BlockAlign;
idData :='data';
DataBytes :=0;
end;
//Определяем размер общего буфера
size:=SizeOf(TWaveHeader) + ComPort.BufSize;
//Создаем общий буфер
getmem(Buf,size);
//перемещаем заголовок в общий буфер
Move(Pointer(@header)^, Pointer(Buf)^, SizeOf(TWaveHeader));
//перемещаем буфер модема в общий буфер
Move(Pointer(ComPort.buf)^, Buf[SizeOf(TWaveHeader)], ComPort.BufSize);
//И затем Bass читая заголовок понимает данные общего буфера
stream:=BASS_StreamCreateFile(true, Buf, 0, Size, 0);
BASS_ChannelPlay(stream, true);
freemem(Buf);
end;
end;
Создает при принятии данных каждый раз заголовок.

А можно ли один раз создать заголовок чтобы в буфер его не копировать, как это делает модуль ACMWaveOut в нем один раз открывается диалоговое окно выбора звуковых кодеков и все, затем буфер без заголовков воспроизводит звуковые данные, там прописывается одна строка?

Последний раз редактировалось Aliens_wolfs; 15.06.2011 в 07:50.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как воспроизвести звук с модема используя BASS Aliens_wolfs Компоненты Delphi 0 20.05.2011 13:50
Bass. Проиграть потоковое аудио с прокруткой Delphi_ProGer Помощь студентам 0 25.02.2011 21:07
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
BASS DLL ygy Мультимедиа в Delphi 4 29.09.2009 04:39
BASS.DLL VintProg Мультимедиа в Delphi 2 21.09.2009 16:36