Страница 1 из 1

воспроизведение WAV в Win7

Добавлено: 24 Январь 2013, 15:53
Shur
Раз уж сегодня день вопросов и ответов про Win7, не знает ли уважаемое сообщество,
как воспроизвести wav-файл программно Кларионом под Win7?

К сожалению, способ, использовавшийся под XP, под Семёркой не работает.

Re: воспроизведение WAV в Win7

Добавлено: 24 Январь 2013, 17:05
kreator
А какой был способ. Я использую WinApi-шную sndPlaySound. Вроде проблем нет, уточнить могу завтра например.

Re: воспроизведение WAV в Win7

Добавлено: 25 Январь 2013, 4:24
Admin
sndPlaySound под Windows 7 прекрасно работает

Re: воспроизведение WAV в Win7

Добавлено: 25 Январь 2013, 9:26
Shur
Мы использовали PlaySoundA из winmm.dll.

Дайте, пож., прототип sndPlaySound и пример вызова. Уж не в этой ли же библиотеке она находится?

Re: воспроизведение WAV в Win7

Добавлено: 25 Январь 2013, 12:00
Yufil
SndPlaySound не всякий Wav воспроизводит, например RIFF файлы с упакованным звуком не играет.
Для проигрывания звуков (любых, лишь бы был встроенный кодек) лучше использовать функцию mciSendString

Несколько отрывков из программы:

Module('windows api')
mciGetErrorString(ULONG,*CSTRING,USHORT),SHORT,PASCAL,RAW,PROC,NAME('mciGetErrorStringA')
mciSendString(*CSTRING,*CSTRING,USHORT,USHORT),ULONG,PASCAL,RAW,PROC,NAME('mciSendStringA')
End


OPENMEDIA FUNCTION(STRING,Long=0,Long=0),String,Proc !Исполнить звук

OpenMedia(FileName) - запуск файла на проигрывание
OpenMedia('') - остановка проигрывания
OpenMedia('#') - пауза
OpenMedia('>') - дальше

Второй и третий параметры - начало и продолжительность (в кларионовских единицах 0.1 сек), если не указаны-весь файл

OPENMEDIA PROCEDURE (LOC:FILE,Loc:From,Loc:Duration) ! Declare Procedure
SoundName Cstring(256),AUTO
MCICommand Cstring(256)
MCIReturn Cstring(256)
Ext Cstring(4)

Error Long,Static

CODE
! Вкдючение или выключение звука
! Пауза
If Loc:File='#'
MCICommand='pause sound'
MCISendString(MCICommand,MCIReturn,128,0)
Return('1')
Elsif Loc:File='>'
MCICommand='play sound'
MCISendString(MCICommand,MCIReturn,128,0)
Return('1')
End

! Проверим, есть ли вообще звуковые каналы
MCICommand='capability waveaudio can play'
MCISendString(MCICommand,MCIReturn,128,0)
If Upper(MCIReturn)<>'TRUE'
Return('0')
End

MCICommand='status sound mode'
MCISendString(MCICommand,MCIReturn,128,0)
MCICommand='stop sound'
MCISendString(MCICommand,MCIReturn,128,0)
MCICommand='close all'
MCISendString(MCICommand,MCIReturn,128,0)

If Loc:File='' Then Return('0').

SoundName=Clip(Loc:File)

Ext=UPPER(Sub(Loc:File,Len(Clip(Loc:File))-2,3))
CASE EXT
OF 'WAV' OROF 'MP3' OROF 'OGG' OROF 'MP4' OROF 'M4A' OROF 'WMA'
MCICommand='open "'&soundname&'" alias sound'
MCISendString(MCICommand,MCIReturn,128,0)
MCICommand='play sound'
If Loc:From
MCICommand=MCICommand & ' from ' & Loc:From*10
End
If Loc:Duration
MCICommand=MCICommand & ' to ' & (Loc:From+Loc:Duration)*10
End
MCISendString(MCICommand,MCIReturn,128,0)
OF 'AVI'
MCICommand='open "'&soundname&'" alias sound'
MCISendString(MCICommand,MCIReturn,128,0)
MCICommand='play sound fullscreen'
MCISendString(MCICommand,MCIReturn,128,0)
END
Return('1')

Re: воспроизведение WAV в Win7

Добавлено: 25 Январь 2013, 14:09
Shur
Cool, Yufil, персональное спасибо!
Сегодня определённо удачный день!
:D
У меня, правда, задача более простая -- лишь воспроизводить звуковые сигналы к сообщениям,
поэтому сгодился бы и sndPlaySound.
:)

Re: воспроизведение WAV в Win7

Добавлено: 25 Январь 2013, 14:58
Yufil
Ну да, звук вроде в WAV - а не воспроизводится.
WAV'ы - они разные бывают.
Плавали-знаем...

Re: воспроизведение WAV в Win7

Добавлено: 25 Январь 2013, 15:19
kreator
Оказывается - sndPlaySound уже устарело, надо использовать PlaySound. У неё немного другой прототип.