воспроизведение WAV в Win7
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
воспроизведение WAV в Win7
Раз уж сегодня день вопросов и ответов про Win7, не знает ли уважаемое сообщество,
как воспроизвести wav-файл программно Кларионом под Win7?
К сожалению, способ, использовавшийся под XP, под Семёркой не работает.
как воспроизвести wav-файл программно Кларионом под Win7?
К сожалению, способ, использовавшийся под XP, под Семёркой не работает.
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: воспроизведение WAV в Win7
А какой был способ. Я использую WinApi-шную sndPlaySound. Вроде проблем нет, уточнить могу завтра например.
We are hard at work… for you. 

- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: воспроизведение WAV в Win7
sndPlaySound под Windows 7 прекрасно работает
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Re: воспроизведение WAV в Win7
Мы использовали PlaySoundA из winmm.dll.
Дайте, пож., прототип sndPlaySound и пример вызова. Уж не в этой ли же библиотеке она находится?
Дайте, пож., прототип sndPlaySound и пример вызова. Уж не в этой ли же библиотеке она находится?
Re: воспроизведение WAV в Win7
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')
Для проигрывания звуков (любых, лишь бы был встроенный кодек) лучше использовать функцию 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
Cool, Yufil, персональное спасибо!
Сегодня определённо удачный день!
У меня, правда, задача более простая -- лишь воспроизводить звуковые сигналы к сообщениям,
поэтому сгодился бы и sndPlaySound.

Сегодня определённо удачный день!

У меня, правда, задача более простая -- лишь воспроизводить звуковые сигналы к сообщениям,
поэтому сгодился бы и sndPlaySound.

Re: воспроизведение WAV в Win7
Ну да, звук вроде в WAV - а не воспроизводится.
WAV'ы - они разные бывают.
Плавали-знаем...
WAV'ы - они разные бывают.
Плавали-знаем...
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: воспроизведение WAV в Win7
Оказывается - sndPlaySound уже устарело, надо использовать PlaySound. У неё немного другой прототип.
We are hard at work… for you. 
