Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прямое взаимодействие с выходным звуковым каналом
DF2 :: ФОРУМЫ > Основные форумы > Софт и железо > Программирование / Coding
ChASnock
Собственно, subject.

Например, если хочешь сделать синусоидальный звук, делай что-нть такое:
repeat
Sleep(0.0001);
Записать_в_выход(sin(t));
inc(t, dt);
until what;

Так вот: что есть это такое?
FBX
o_O
Etoprostoya
Пользуйся лучше стандартным API. DirectSound.
Guevara-chan
Цитата(etoprostoya @ 19 Dec 2010, 00:29) *
Пользуйся лучше стандартным API. DirectSound.

Так есть же BASS и FMod ? Но вообще, конечно, можно и так: http://forums.purebasic.com/english/viewtopic.php?t=8786
Как вариант (ну, не для ОПа, конечно), стоит еще ознакомиться с http://forums.purebasic.com/english/viewto...=12&t=41844
ChASnock
Цитата(etoprostoya @ 19 Dec 2010, 02:29) *
Пользуйся лучше стандартным API. DirectSound.

А вот с этого места поподробнее...
Etoprostoya
Что подробнее? Читай мануал к DirectX, смотри примеры, пользуйся готовыми библиотеками. Сам я DirectSound никогда не пробовал, так что больше посоветовать ничего не могу, разве что посоветую воспользоваться предыдущим советом (примером) Хроно smile.gif
FBX
Нафига нужен синусоидальный звук?
Etoprostoya
Чтоб послушать как он звучит)) Интересно же, типа.
FBX
отвратительно звучит, мерзко и скучно... прога для генерации его где-то валялась, в инете полно таких.
tolich
Не мерзко, но таки скучно, чистый тон не может быть мерзким по определению.
FBX
Вообще, тут уже зависит от слушателя и от частоты...
Shurup
a виндозный beep(частота, длительность) не подходит?

ЕМНИП, в винде старше NT напрямую с портами могут работать лишь драйвера.


Код
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
    tone:integer;
begin
  Canvas.FillRect(ClientRect);
  Canvas.Pen.Width:=2;
  Canvas.MoveTo(0,0);

  for i:=0 to 300 do
  begin
    tone:=Floor ( sin(i/20) * 100 +100);
      Canvas.Pen.Color:=RGB(255,255-tone,255);
      Canvas.lineTo(i*2, tone);

      Application.ProcessMessages;
      Windows.Beep(tone+100,60);
  end;
end;
Etoprostoya
Beep - это встроенный динамик, а нужен звук в колонках.
ChASnock
Я уже давно слышал синусоидальный звук. Чистенький такой, типа "уууу". Но привел я его исключительно в качестве примера. Мне надо вообще управлять уровнем звука

Цитата(FBX @ 27 Dec 2010, 03:20) *
Ууу...
Иии...
Ыыы...
Ззз...
Ааа...
Эээ...
Рррррррр...
Цыц, FBX!

ты чо?
FBX
Ууу...
Иии...
Ыыы...
Ззз...
Ааа...
Эээ...
Рррррррр...
Цыц, FBX!
Guevara-chan
Цитата
Мне надо вообще управлять уровнем звука

Кто-то мешает ?
ChASnock
Короче как в своей программе воспроизводить звуки из, так скажем, данного массива с wave-формой, не используя сторонние библиотеки?
tolich
PlaySound( danniyMassivSWaveformoj, NULL, SND_MEMORY );
ChASnock
И в каком формате должен быть массив
Guevara-chan
Цитата(ChASnock @ 16 Mar 2011, 11:33) *
И в каком формате должен быть массив

Полное (включая "RIFF"-сигнатуру) представление стандартного WAV-файла в оперативной памяти. Заголовок там, если не ошибаюсь:

Код
Structure WaveHeader; WAVE File header structure.
RIFF.l      ; RIFF Identification - Value: 'RIFF'
Length.l    ; Length of the file minus 8 bytes.
WAVE.l      ; RIFF Type Identification - Value: 'WAVE'
FMT.l       ; Type of the following header - Value: 'fmt '
HLen.l      ; Length of the following header - Value: 16
PCM.u       ; PCM Identification - Value: 1 (for PCM sound)
Channels.u  ; Number of Channels - Value: 1(mono)|2(stereo)
SR.l        ; Sampling Rate - Value: 22050, 44100, etc.
BS.l        ; Average number of Bytes/Second - Value: 22050, 44100, etc.
SL.u        ; Sample Lenght - Value: 1 (1 byte per sample)
BR.u        ; Bit Recording - Value: 8 or 16
HS.l        ; Start of Data Header - Value: 'data'
Samples.l   ; Number of Data Samples (1 per byte).
BinData.a[0]; Actual Data Samples (binary stream).
EndStructure
ChASnock
А ведь PlaySound работает с задержкой вроде... И если играется один звук то при воспроизведении другого первый закончится...
Guevara-chan
Цитата
И если играется один звук то при воспроизведении другого первый закончится...

Не обязательно - можно использовать флаг #SND_NOSTOP:

Цитата(MSDN)
The specified sound event will yield to another sound event that is already playing in the same process. If a sound cannot be played because the resource needed to generate that sound is busy playing another sound, the function immediately returns FALSE without playing the requested sound.

If this flag is not specified, PlaySound attempts to stop any sound that is currently playing in the same process. Sounds played in other processes are not affected.
ChASnock
Ну тогда всем спасибо smile.gif Чего-то не обращал на эту функцию внимание, а в самоучителе было объяснение какое-то корявое..
ChASnock
А не подскажете вот как и в какой порт писать уровень звука чтоб проигрывать музыку?

И еще обратная сторона медали: как записывать звук с микрофона?
Guevara-chan
Цитата
как и в какой порт писать уровень звука чтоб проигрывать музыку?

waveOutWrite подойдет, или нужно все-таки уровнем повыше ?

Цитата
как записывать звук с микрофона?

Ну, допустим, можно через MCI (бывают проблемы с качеством, но удобно):

Код
#Second = 1000  ; Миллисекунд.
#Length  = 5    ; Время записи (секунд).
#Samples = 44100; 44.1 kHz (samples/second).
Define Buffer.s{#MAXBYTE}; Буффер выходных данных MCI.
Define Elapsed           ; Прошедшее время по данным MCI.
#Pattern = "Sound files (*.wav)|*.wav|All files (*.*)|*.*"; Шаблон.
Macro MCI(command) : mciSendString_(command, @buffer, #MAXBYTE, 0) : EndMacro; Pseudo-procedure
Macro IntSize : SizeOf(Integer) : EndMacro : Macro BPS : Str(#Samples * IntSize) : EndMacro; Partializers.
MCI("open new type waveaudio alias recsound") : MCI("set recsound time format ms"); Первичная подготовка записи.
MCI("set recsound alignment "+Str(IntSize)+" bitspersample 16 samplespersec "+Str(#Samples)+" channels 2 bytespersec "+BPS)
MCI("record recsound") : Debug "==[Record intitated (" + Str(#Length) + " seconds)]=="; Начинаем цикл записи:
While Elapsed < 5 * #Second : MCI("status recsound position") : Elapsed = Val(Buffer) : Delay(20) : Wend
Debug "==[Record complete]=="; Рапортуем конец записи и спрашиваем, куда сохранить:
Define Clip.s = Trim(SaveFileRequester("Choose location to save sound:", "", #Pattern, 0))
MCI("save recsound " + #DQUOTE$ + Clip + #DQUOTE$) : MCI("close recsound")
ChASnock
о боже что это за язык
Guevara-chan
Цитата
о боже

Можно просто «Виктория».

Цитата
что это за язык

PureBasic v4.51, надо полагать.
Flashback
ты ж видела, что он пишет явно не на барсике. хотя можно устроить тандем с ним, если, конечно, в этом чудном компиляторе можно запилить гай-приложение без формы, работающее через консоль, и запускать его через основную программу, когда надо. хотя проще просто запилить либу, но еще проще написать это на том, чем надо.
Guevara-chan
Цитата
ты ж видела, что он пишет явно не на барсике.

Честно говоря, я имею большие сомнения что он вообще там что-то пишет: за почти 4 прошедших с создания темы месяца можно было не только запилить генератор фрактального звука, но еще и успеть организовать продажи в пределах СНГ. Вопросы, впрочем, от этого менее интересными не становятся.
Flashback
Хрон, не может такого быть, Чеснок точно что-то замышляет.

Цитата
Вопросы, впрочем, от этого менее интересными не становятся.

а вот код, написанный на пьюр бейсике, он, к сожалению, не сможет использовать.
Guevara-chan
Цитата
Чеснок точно что-то замышляет.

Он сколько я его помню что-то замышляет. Напомни, с февраля прошлого года были какие-то продвижения ? Нет, мне правда интересно.

Цитата
а вот код, написанный на пьюр бейсике, он, к сожалению, не сможет использовать.

У нас кто-то обязывался выдавать по первому капризу готовые к использованию библиотеки ? Пример на то и пример, что его надо разбирать.
Flashback
Цитата
У нас кто-то обязывался выдавать по первому капризу готовые к использованию библиотеки ?

нет, но было бы супер

Цитата
Пример на то и пример, что его надо разбирать.

он же не знает бейсик
Guevara-chan
Цитата
было бы супер

Так приступай, если супер. Кто мешает-то ?

Цитата
он же не знает бейсик

Пусть учится видеть алгоритм, а не язык – тогда, глядишь, может еще и достигнет чего.
ChASnock
Да какой-то странный у вас Бейсик, совсем на Бейсик не похож
tolich
Можно подумать, ты много Бейсиков на своём веку повидал.

laugh.gif
ChASnock
Нет, немного. Всего-то один

laugh.gif
Guevara-chan
...И тот старше тебя...
ChASnock
Что за намёки
Guevara-chan
Idle talks, не обращай внимания. У тебя еще вопросы по теме есть ?
ChASnock
Не знаю, нет наверно smile.gif
Guevara-chan
Ну вот и славно. Closed.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.