Вот со звуком надо бы поработать....

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Вот со звуком надо бы поработать....

Сообщение Джентельмен » 19.06.2007 09:56:25

есть такая проблемпа... мне нужно... что бы по нажатию на кнопку через звуковую карту проиграть какой то звуковой файл... работаеть это все под виндой... как это зделать???
Джентельмен
постоялец
 
Сообщения: 162
Зарегистрирован: 16.10.2005 10:47:26
Откуда: Украина Донбасс Краматорск

Сообщение Sniper » 19.06.2007 11:00:37

так пойдёт?

PlaySound('c:\....\*.wav',0,SND_FILENAME);

можно так

const
FileName = 'C:\YourFile.mid';
....
MCISendString(PChar('play ' + FileName), nil, 0, 0);
....
MCISendString(PChar('stop ' + FileName), nil, 0, 0);
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Sniper » 19.06.2007 11:04:20

Как вывести звук через звуковую карту?
взято из DRKB (http://www.drkb.ru)

Код: Выделить всё
uses
MMSystem;

type
TVolumeLevel = 0..127;

procedure MakeSound(Frequency{Hz}, Duration{mSec}: Integer; Volume: TVolumeLevel);
{writes tone to memory and plays it}
var
WaveFormatEx: TWaveFormatEx;
MS: TMemoryStream;
i, TempInt, DataCount, RiffCount: integer;
SoundValue: byte;
w: double; // omega ( 2 * pi * frequency)
const
Mono: Word = $0001;
SampleRate: Integer = 11025; // 8000, 11025, 22050, or 44100
RiffId: string = 'RIFF';
WaveId: string = 'WAVE';
FmtId: string = 'fmt ';
DataId: string = 'data';
begin
if Frequency > (0.6 * SampleRate) then
begin
   ShowMessage(Format('Sample rate of %d is too Low to play a tone of %dHz', [SampleRate, Frequency]));
Exit;

end;

with WaveFormatEx do
begin
   wFormatTag := WAVE_FORMAT_PCM;
   nChannels := Mono;
   nSamplesPerSec := SampleRate;
   wBitsPerSample := $0008;
   nBlockAlign := (nChannels * wBitsPerSample) div 8;
   nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
   cbSize := 0;
end;

MS := TMemoryStream.Create;

with MS do
begin
   {Calculate length of sound data and of file data}
   DataCount := (Duration * SampleRate) div 1000; // sound data
   RiffCount := Length(WaveId) + Length(FmtId) + SizeOf(DWORD) +
     SizeOf(TWaveFormatEx) + Length(DataId) + SizeOf(DWORD) + DataCount; // file data
   {write out the wave header}
   Write(RiffId[1], 4); // 'RIFF'
   Write(RiffCount, SizeOf(DWORD)); // file data size
   Write(WaveId[1], Length(WaveId)); // 'WAVE'
   Write(FmtId[1], Length(FmtId)); // 'fmt '
   TempInt := SizeOf(TWaveFormatEx);
   Write(TempInt, SizeOf(DWORD)); // TWaveFormat data size
   Write(WaveFormatEx, SizeOf(TWaveFormatEx)); // WaveFormatEx record
   Write(DataId[1], Length(DataId)); // 'data'
   Write(DataCount, SizeOf(DWORD)); // sound data size
   {calculate and write out the tone signal} // now the data values
   w := 2 * Pi * Frequency; // omega
   for i := 0 to DataCount - 1 do
   begin
     SoundValue := 127 + trunc(Volume * sin(i * w / SampleRate)); // wt = w * i / SampleRate
     Write(SoundValue, SizeOf(Byte));
   end;
   {now play the sound}
   sndPlaySound(MS.Memory, SND_MEMORY or SND_SYNC);
   MS.Free;
end;
end; 
// How to call the function:
procedure TForm1.Button1Click(Sender: TObject);
begin
MakeSound(1200, 1000, 60);
end;
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Re: Вот со звуком надо бы поработать....

Сообщение haword » 19.06.2007 12:28:04

Джентельмен писал(а):есть такая проблемпа... мне нужно... что бы по нажатию на кнопку через звуковую карту проиграть какой то звуковой файл... работаеть это все под виндой... как это зделать???

сюда смотрел acs.ullihome.de?
haword
постоялец
 
Сообщения: 301
Зарегистрирован: 02.03.2006 11:34:40

Сообщение YouROK » 29.01.2008 15:28:57

А как насчет Win CE?
У меня почемуто не находит mmsystem когда включаю в настройках компилятора целевую платформу для КПК.
А когда снова переключаю опять находит.
В чем проблема?
YouROK
незнакомец
 
Сообщения: 7
Зарегистрирован: 07.01.2008 11:55:42
Откуда: Сергиев Посад

Re: Вот со звуком надо бы поработать....

Сообщение kotompazb » 07.09.2015 16:40:47

Здрасьте.
А подскажите, как зациклить проигрывание mid?
так играет:
MCISendString(PChar('play ' + FileName), nil, 0, 0);
а вот так:
MCISendString(PChar('play ' + FileName+ 'repeat'), nil, 0, 0);
ни в какую! И, я так понял, так у всех.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: Вот со звуком надо бы поработать....

Сообщение pupsik » 07.09.2015 21:12:25

pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Вот со звуком надо бы поработать....

Сообщение Снег Север » 07.09.2015 22:06:50

http://wiki.lazarus.freepascal.org/ACS
ACS is an freeware crossplatform set of components designed to perform different sound-processing tasks. It supports reading the audio data from CD, different fileformats at example wav,mp3,wma,ogg,mac and others, output to soundcard and files are sure also possible.

В СТ уже установлена.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Вот со звуком надо бы поработать....

Сообщение kotompazb » 07.09.2015 22:43:21

pupsik писал(а):https://github.com/fredvs/uos

Что-то все время одно и то же во всех examples
Да и таскать с собой 3 мб библиотек ради проигрывания 20 килобайтной мидишки как-то черезчур.
Снег Север писал(а):http://wiki.lazarus.freepascal.org/ACS
ACS is an freeware crossplatform set of components designed to perform different sound-processing tasks. It supports reading the audio data from CD, different fileformats at example wav,mp3,wma,ogg,mac and others, output to soundcard and files are sure also possible.

А как ее скачать-то?
Снег Север писал(а):В СТ уже установлена.

Извиняюсь. А это что?
Последний раз редактировалось kotompazb 21.09.2015 21:39:26, всего редактировалось 1 раз.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: Вот со звуком надо бы поработать....

Сообщение pupsik » 07.09.2015 23:05:13

ради
20 килобайтной мидишки
используйте стандартный (в вики есть) способ.
Если не ошибаюсь , если "поковырятся" в фпс можно найти еще несколько вариантов.

Снег Север советует вам скачать альтернативный вариант лазаря - codetyphon.

п.с.
По поводу ошибки. Если память не изменяет там "интересность" с одной библиотекой.
Но:
1. Я в винду давненько не хаживал (поэтому точно не могу сказать).
2. uos - вполне нормальный кросс вариант (там не только проиграть звук..).
3. кроме предложенных вариантов существует: bass, fmod и ...
По поводу зацикливания. А при окончании проигрывания проиграть снова? Хотя для этого надо узнать: когда оно закончит играть :roll:
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Вот со звуком надо бы поработать....

Сообщение kotompazb » 08.09.2015 00:00:44

Ладно. Всем спасибо. Буду разбираться.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: Вот со звуком надо бы поработать....

Сообщение Снег Север » 08.09.2015 08:14:40

kotompazb писал(а):А как ее скачать-то?

По ссылке, см. секцию Download
kotompazb писал(а):Извиняюсь. А это что?

http://www.pilotlogic.com/sitejoom/
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Вот со звуком надо бы поработать....

Сообщение pupsik » 08.09.2015 17:21:58

Хм..м: по поводу ошибки.
Поставил я uos в винде (правда 32 - битка) демки нормально работают.
Возможно у вас такое сообщение из-за битности.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Вот со звуком надо бы поработать....

Сообщение kotompazb » 08.09.2015 17:46:00

pupsik писал(а):Возможно у вас такое сообщение из-за битности.

Система у меня 32-я. Возможно, потому что XP. Играет из демок только консольный плеер.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: Вот со звуком надо бы поработать....

Сообщение McLion » 08.09.2015 18:44:11

Джентельмен писал(а):есть такая проблемпа... мне нужно... что бы по нажатию на кнопку через звуковую карту проиграть какой то звуковой файл... работаеть это все под виндой... как это зделать???


Не много подробнее проект описать можешь?
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 26

Рейтинг@Mail.ru