Вот со звуком надо бы поработать....
Модератор: Модераторы
-
Джентельмен
- постоялец
- Сообщения: 162
- Зарегистрирован: 16.10.2005 10:47:26
- Откуда: Украина Донбасс Краматорск
- Контактная информация:
Вот со звуком надо бы поработать....
есть такая проблемпа... мне нужно... что бы по нажатию на кнопку через звуковую карту проиграть какой то звуковой файл... работаеть это все под виндой... как это зделать???
Как вывести звук через звуковую карту?
взято из DRKB (http://www.drkb.ru)
взято из 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;Джентельмен писал(а):есть такая проблемпа... мне нужно... что бы по нажатию на кнопку через звуковую карту проиграть какой то звуковой файл... работаеть это все под виндой... как это зделать???
сюда смотрел acs.ullihome.de?
Здрасьте.
А подскажите, как зациклить проигрывание mid?
так играет:
MCISendString(PChar('play ' + FileName), nil, 0, 0);
а вот так:
MCISendString(PChar('play ' + FileName+ 'repeat'), nil, 0, 0);
ни в какую! И, я так понял, так у всех.
А подскажите, как зациклить проигрывание mid?
так играет:
MCISendString(PChar('play ' + FileName), nil, 0, 0);
а вот так:
MCISendString(PChar('play ' + FileName+ 'repeat'), nil, 0, 0);
ни в какую! И, я так понял, так у всех.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
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.
В СТ уже установлена.
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.
В СТ уже установлена.
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 20:39:26, всего редактировалось 1 раз.
ради
Если не ошибаюсь , если "поковырятся" в фпс можно найти еще несколько вариантов.
Снег Север советует вам скачать альтернативный вариант лазаря - codetyphon.
п.с.
По поводу ошибки. Если память не изменяет там "интересность" с одной библиотекой.
Но:
1. Я в винду давненько не хаживал (поэтому точно не могу сказать).
2. uos - вполне нормальный кросс вариант (там не только проиграть звук..).
3. кроме предложенных вариантов существует: bass, fmod и ...
По поводу зацикливания. А при окончании проигрывания проиграть снова? Хотя для этого надо узнать: когда оно закончит играть
используйте стандартный (в вики есть) способ.20 килобайтной мидишки
Если не ошибаюсь , если "поковырятся" в фпс можно найти еще несколько вариантов.
Снег Север советует вам скачать альтернативный вариант лазаря - codetyphon.
п.с.
По поводу ошибки. Если память не изменяет там "интересность" с одной библиотекой.
Но:
1. Я в винду давненько не хаживал (поэтому точно не могу сказать).
2. uos - вполне нормальный кросс вариант (там не только проиграть звук..).
3. кроме предложенных вариантов существует: bass, fmod и ...
По поводу зацикливания. А при окончании проигрывания проиграть снова? Хотя для этого надо узнать: когда оно закончит играть
Ладно. Всем спасибо. Буду разбираться.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
kotompazb писал(а):А как ее скачать-то?
По ссылке, см. секцию Download
kotompazb писал(а):Извиняюсь. А это что?
http://www.pilotlogic.com/sitejoom/
Хм..м: по поводу ошибки.
Поставил я uos в винде (правда 32 - битка) демки нормально работают.
Возможно у вас такое сообщение из-за битности.
Поставил я uos в винде (правда 32 - битка) демки нормально работают.
Возможно у вас такое сообщение из-за битности.
pupsik писал(а):Возможно у вас такое сообщение из-за битности.
Система у меня 32-я. Возможно, потому что XP. Играет из демок только консольный плеер.
Джентельмен писал(а):есть такая проблемпа... мне нужно... что бы по нажатию на кнопку через звуковую карту проиграть какой то звуковой файл... работаеть это все под виндой... как это зделать???
Не много подробнее проект описать можешь?
