Громкость аудиопотокa

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
Gotha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 20.04.2006 (Чт) 10:55
Откуда: Красногорск

Громкость аудиопотокa

Сообщение Gotha » 21.02.2007 (Ср) 15:25

Доброе время суток, коллеги!

Столкнулся с проблемой: читаю AVI файл с помощью ф-ций avifil32.dll, получаю звуковой поток, вывожу его с помощью waveOutWrite (winmm.dll).
Трабла в том, что звук можно изменить только с помощью waveOutSetVolume, но при этом меняется общая громкость.
Как изменить громкость именно этого потока (буфера звука)?

з.ы.

1. создавал такую же тему на другом форуме, там пока не решили ситуацию, может тут кто сможет?
2. к посту прилепил аттач с моим примером, чтобы понятно было что и куда :D
Вложения
player.rar
(18.89 Кб) Скачиваний: 293
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

Gotha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 20.04.2006 (Чт) 10:55
Откуда: Красногорск

Сообщение Gotha » 23.02.2007 (Пт) 13:59

RamMerlabs писал(а):Хех! Сейчас ещё один топик будет забит хренью.
Amed, закрывай!

не закрывайте пожалуйста топик!
directsound не поможет, он играет только PCM формат, хотя в принципе можно было бы декодировать мп3 с помощью acm* ф-ций, только вот не представляю как там возиться с потоками. Единственное не пойму почему waveOutWrite не играет звук с измененной амплитудой, как в примере. Вобщем тема актуальна и я буду полюбому с ней возиться. :( (я делаю криптовалку авишек чтобы их не воровали а именно криптовалку звуковой дорожки, это у меня на работе такая задача)
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

Gotha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 20.04.2006 (Чт) 10:55
Откуда: Красногорск

Сообщение Gotha » 26.02.2007 (Пн) 8:54

fmod это примерно тоже самое что и bass. вместо звука получается шипение, скорее всего что-то с форматом звукового буфера. кто может подсказать, какая структура буфера - там только чистые данные или есть еще и заголовок какой? (при AVIStreamRead звуковой дорожки) :?:
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.02.2007 (Пн) 9:06

Флуд удален.
Lasciate ogni speranza, voi ch'entrate.

Gotha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 20.04.2006 (Чт) 10:55
Откуда: Красногорск

Сообщение Gotha » 09.03.2007 (Пт) 9:05

Ок, решил решать задачу путем directsound'а. Сей интерфейс играет звук в PCM формате поэтому пытаюсь декодировать его из мп3 audio compression manager api функциями. Странно, все проходит без ошибок и размер выходного буфера изменяется на количество сконвертированных байт, но сам выходной буффер забит нулями. Отчего это?

вот функция конвертирования. апи не декларировал, а остальное вроде все есть.
Код: Выделить всё
Public Function Convert(ByVal lngInLen As Long, lngInUsed() As Byte) As Byte()
    Dim hStream&, lngRet&
    Dim udtHdr As ACMSTREAMHEADER
    Dim whdr As WAVEHDR
    Dim lngOutUsed() As Byte, lngOutLen&
   
    pwFXout.wFormatTag = WAVE_FORMAT_PCM
    pwFXout.nSamplesPerSec = wfx.nSamplesPerSec
    pwFXout.wBitsPerSample = 16
    pwFXout.nChannels = 1
   
   
    If (acmFormatSuggest(0, wfx, pwFXout, Len(pwFXout), ACM_FORMATSUGGESTF_WFORMATTAG Or ACM_FORMATSUGGESTF_NSAMPLESPERSEC Or ACM_FORMATSUGGESTF_WBITSPERSAMPLE Or ACM_FORMATSUGGESTF_NCHANNELS) = 0) Then
        If (acmStreamOpen(hStream, 0&, wfx, pwFXout, 0&, 0&, 0&, 0&) = 0) Then
            lngOutLen = 0
            If (acmStreamSize(hStream, lngInLen, lngOutLen, ACM_STREAMSIZEF_SOURCE) = 0) Then
                ReDim lngOutUsed(lngOutLen - 1) As Byte
               
                With udtHdr
                    .cbStruct = Len(udtHdr)
                    .cbSrcLength = lngInLen
                    .pbSrc = VarPtr(lngInUsed(0))
                    .cbDstLength = lngOutLen
                    .pbDst = VarPtr(lngOutUsed(0))
                End With
               
           
                lngRet = acmStreamPrepareHeader(hStream, udtHdr, 0&)
           
                If (acmStreamConvert(hStream, udtHdr, &H4&) <> 0) Then
                     MsgBox "Error!"
                End If
           
                lngRet = acmStreamUnprepareHeader(hStream, udtHdr, 0&)
            End If
           
            If (udtHdr.cbDstLengthUsed > 0) Then ReDim Preserve lngOutUsed(udtHdr.cbDstLengthUsed - 1) As Byte
           
            acmStreamClose hStream, 0
            Convert = lngOutUsed
        End If
    End If
End Function

что-то в последнее время в разделе профи тихо, неужто все еще восьмое отмечаем? :D
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.


Вернуться в Раздел для Профессионалов

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

    TopList