Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

1

25.03.2012, 13:17

Lautstärke verändert sich nicht

Hallo. Nachdem ich OGG-Vorbis zum laufen gebracht habe, wollte ich noch eine Lautstärkenreglung einbauen. Ich habe den Soundpuffer mit diesen Flags erzeugt:

Quellcode

1
DSBCAPS_STATIC | DSBCAPS_LOCDEFER | DSBCAPS_CTRLVOLUME

Wenn ich nun einfach die Lautstärke mit LPDIRECTSOUNDBUFFER->SetVolume(-10000); änder, geht alles. Doch wenn ich Faden will,

C-/C++-Quelltext

1
2
3
4
5
if( FadeAlpha > 0.0f )
{
    FadeAlpha -= 0.2f * fTime;
    ogg->SetVolume((LONG) (FadeAlpha - 1) * 10000);
}

stockt die Musik kurz und sonst passiert nichts. FadeAlpha hat Werte zwischen 0 und 1. Es verändert den Wert auch denn ich Fade damit ja auch Bilder.
Musik wird abgespielt, auch mit veränderter Lautstärke, allerdings nicht wenn ich Faden will. Was mache ich Falsch?
Laden der OGG Datei:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
FILE    *f;

    f = fopen(filename, "rb");
    if (!f) return false;

    ov_open(f, &vf, NULL, 0);
    vorbis_info *vi = ov_info(&vf,-1);

    WAVEFORMATEX        wfm;

    memset(&wfm, 0, sizeof(wfm));

    wfm.cbSize          = sizeof(wfm);
    wfm.nChannels       = vi->channels;
    wfm.wBitsPerSample  = 16;                    // ogg vorbis 16 bit
    wfm.nSamplesPerSec  = vi->rate;
    wfm.nAvgBytesPerSec = wfm.nSamplesPerSec*wfm.nChannels*2;
    wfm.nBlockAlign     = 2*wfm.nChannels;
    wfm.wFormatTag      = 1;

    DSBUFFERDESC desc;

    desc.dwSize         = sizeof(DSBUFFERDESC);
    desc.dwFlags        = DSBCAPS_STATIC | DSBCAPS_LOCDEFER | DSBCAPS_CTRLVOLUME;
    desc.lpwfxFormat    = &wfm;
    desc.dwReserved     = 0;
    desc.dwBufferBytes  = BUFSIZE*2;

    pDS->CreateSoundBuffer(&desc, &pDSB, NULL );

    DWORD   pos = 0;
    int     sec = 0;
    int     ret = 1;
    DWORD   size = BUFSIZE*2;

    char    *buf;

    pDSB->Lock(0, 0, (LPVOID*)&buf, &size, NULL, NULL, DSBLOCK_ENTIREBUFFER);
    
    // Bits
    while(ret && pos<size)
    {
        ret = ov_read(&vf, buf+pos, size-pos, 0, 2, 1, &sec);
        pos += ret;
    }

    pDSB->Unlock( buf, size, NULL, NULL );

Danke

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

2

25.03.2012, 15:08

wenn ogg->SetVolume(0.0) die Wiedergabe nicht unhörbar macht, bist du vielleicht an der falschen Stelle. Kenne die Audiowiedergabe mit Soundbuffer und Playbuffer. Der Soundbuffer repräsentiert die Audiodaten und der Playbuffer das Abspielen derselben auf einem eigenen Audiokanal. Also bliebe der Soundbuffer unangetastet und am Playbuffer wird die Lautstärke eingestellt, bzw. an zwei verschiedenen Playbuffer für den Verlauf.
Musikvisualisierungsprojekt Soundbild 2

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

3

25.03.2012, 15:23

SetVolume(0) würde volle Lautstärke sein ;) 0- -10000. Aber ich glaube ich habe den Fehler gefunden. Rundungsfehler :dash:
Mal sehen...

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

4

25.03.2012, 20:21

Ja war ein Rundungsfehler :dash:

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Werbeanzeige