Заморочка с *.wav

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Заморочка с *.wav

Сообщение Dummiel » 22.12.2006 (Пт) 16:07

Други мои, привет всем!

Объясните такую непонятку: я загоняю в файл ресурсов звук в формате *.wav, проигрываю его нижеприведенным кодом, но, почему-то, звук проигрывается по настроению компа, причем "слышно/не слышно" зависит от регулятора громкости акустики. На полной громкости играет, на средней или совсем тихой - "ФигВам"! :) Иногда два звука в одном модуле - один проигрывает, второй не слышно. Особенно в скомпилированном проекте.

Код взят из пакета примеров VB5, работаю на VB6.


Код: Выделить всё
'константы взяты из VB5-примера - воспроизведение *.wav из *.res
Public Const SND_ASYNC = &H1        'асинхронное воспроизведение
Public Const SND_NODEFAULT = &H2    'заданный по умолчанию звук не используется
Public Const SND_MEMORY = &H4       'lpszSoundName указывает на файл памяти

'воспроизведение *.wav из *.res
Declare Function sndPlaySound Lib "winmm" Alias "sndPlaySoundA" _
        (ByVal lpszSoundName As Any, ByVal uFlags As Long) As Long

Public Sub Sound(ByVal ResourceId As Integer)
    Dim Ret As Variant
    'возвращаемая строка конвертируется к Уникоду
    SoundBuffer = StrConv(LoadResData(ResourceId, "CUSTOM"), vbUnicode)
    Ret = sndPlaySound(SoundBuffer, SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY)
    DoEvents 'Важно: эта функция необходима для асинхронно играющего звука
End Sub


Почему так, просветите!

С уважением - Dummiel

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 22.12.2006 (Пт) 16:15

значит такой был уровень записи в этих wav-файлах, попробуй его поднять , есть специальные утилиты для этого

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 22.12.2006 (Пт) 16:16

:D
А не проще ли играть звук сразу из ресурсов, без тупого извлечения?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 22.12.2006 (Пт) 16:46

1. Во-первых, не понял, причём здесь Юникод?

А нельзя ли так?

Код: Выделить всё
Public Sub Sound(ByVal ResourceId As Integer)
    Dim Ret As Variant

dim SoundBuffer() as Byte

    'возвращаемая строка конвертируется к Уникоду
    SoundBuffer =LoadResData(ResourceId, "CUSTOM")
    Ret = sndPlaySound(SoundBuffer(0), SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY)
    DoEvents 'Важно: эта функция необходима для асинхронно играющего звука
End Sub


2. Попробуй сохранить SoundBuffer в файл, и посмотреть, чего внутри этого файла. Может быть, какие-то бай1ты лишние в начале файла.

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 27.12.2006 (Ср) 15:29

Здравствуйте!

Alexanbar писал(а):1. Во-первых, не понял, причём здесь Юникод?

А нельзя ли так?

Код: Выделить всё
Public Sub Sound(ByVal ResourceId As Integer)
    Dim Ret As Variant

dim SoundBuffer() as Byte

    'возвращаемая строка конвертируется к Уникоду
    SoundBuffer =LoadResData(ResourceId, "CUSTOM")
    Ret = sndPlaySound(SoundBuffer(0), SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY)
    DoEvents 'Важно: эта функция необходима для асинхронно играющего звука
End Sub


2. Попробуй сохранить SoundBuffer в файл, и посмотреть, чего внутри этого файла. Может быть, какие-то бай1ты лишние в начале файла.


1. Тупо перевод с примера с пакета VB5. Пример попоробую.
2. А как это делается? Не сталкивался ни разу.

Хакер, земеля! :D
А каким образом его вытащить?

Konst_One!
А какие утилиты?

С НОВЫМ ГОДОМ!!! :lol:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 27.12.2006 (Ср) 16:48

вот ведь, мой пост не сохранился :?
еще раз напишу:

Cool Edit юзать , а вообще это проблема нормализации или loudness level normalization :wink:

есть два метода : по пиковым сигналам и по среднему уровню (выбирать звукорежисеру) :D

ссылки:
http://www.muzoborudovanie.ru/equip/studio/sndedit/soundedit/soundedit.php
http://ru.infocom.uz/kompas_uz/issues/3/soundforge2.html
https://neon1.net/prog/normalizer.html

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 30.12.2006 (Сб) 6:07

Konst_One писал(а):еще раз напишу:

Cool Edit юзать , а вообще это проблема нормализации или loudness level normalization :wink:

есть два метода : по пиковым сигналам и по среднему уровню (выбирать звукорежисеру) :D


Блин! Тут еще и звукорежиссером необходимо быть! :)
Может, переквалифицироваться, да для Фили Киркорова клипы ваять? :)

Спасибо за подсказку, буду пробовать.

С НОВЫМ ГОДОМ!!!


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: SemrushBot и гости: 99

    TopList