Supporto AUDIO ( a partire dalla 0.38 )

Moderators: gabrielilardi, forart, Davy Bartoloni

User avatar
Davy Bartoloni
Posts: 1485
Joined: Wed Jan 04, 2006 11:31 pm
Location: Cuneo
Contact:

Supporto AUDIO ( a partire dalla 0.38 )

Post by Davy Bartoloni »

Scusate, apro un nuovo Topic, un po' piu' generico ( quello riguardo i driver Creative era ormai un miscuglio d' ogni.. http://www.reactos.org/forum/viewtopic.php?f=15&t=6429 ) riguardante gli sviluppi dell' AUDIO a partire dalla 0.38...

Il commit quotato da Ey3.. riguardava all' emissione di un suono di TEST ( non un file WAV reale ) ... posto il codice relativo al player di TEST.. che si trova al momento in:
\reactos\drivers\wdm\audio\backpln\audio_test\audio_test.c

Code: Select all

#define _UNICODE
#define UNICODE
#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
#include <math.h>

#define _2pi                6.283185307179586476925286766559

#include <ks.h>
#include <ksmedia.h>
#include "interface.h"

int
__cdecl
main(int argc, char* argv[])
{
    ULONG Length;
    PSHORT SoundBuffer;
    ULONG i = 0;
    BOOL Status;
    OVERLAPPED Overlapped;
    DWORD BytesReturned;
    HANDLE hWdmAud;
    WDMAUD_DEVICE_INFO DeviceInfo;


    hWdmAud = CreateFileW(L"\\\\.\\wdmaud",
                          GENERIC_READ | GENERIC_WRITE,
                          0,
                          NULL,
                          OPEN_EXISTING,
                          FILE_FLAG_OVERLAPPED,
                          NULL);
     if (!hWdmAud)
     {
         printf("Failed to open wdmaud with %lx\n", GetLastError());
         return -1;
     }

     printf("WDMAUD: opened\n");
     /* clear device info */
     RtlZeroMemory(&DeviceInfo, sizeof(WDMAUD_DEVICE_INFO));

     ZeroMemory(&Overlapped, sizeof(OVERLAPPED));
     Overlapped.hEvent = CreateEventW(NULL, FALSE, FALSE, NULL);

     DeviceInfo.DeviceType = WAVE_OUT_DEVICE_TYPE;


     Status = DeviceIoControl(hWdmAud, IOCTL_GETNUMDEVS_TYPE, (LPVOID)&DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), (LPVOID)&DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), &BytesReturned, &Overlapped);

     if (!Status)
     {
         if (WaitForSingleObject(&Overlapped.hEvent, 5000) != WAIT_OBJECT_0)
         {
            printf("Failed to get num of wave out devices with %lx\n", GetLastError());
            CloseHandle(hWdmAud);
            return -1;
         }
     }

     printf("WDMAUD: Num Devices %lu\n", DeviceInfo.DeviceCount);
     if (!DeviceInfo.DeviceCount)
     {
        CloseHandle(hWdmAud);
        return 0;
    }

    DeviceInfo.u.WaveFormatEx.cbSize = sizeof(WAVEFORMATEX);
    DeviceInfo.u.WaveFormatEx.wFormatTag = 0x1; //WAVE_FORMAT_PCM;
    DeviceInfo.u.WaveFormatEx.nChannels = 2;
    DeviceInfo.u.WaveFormatEx.nSamplesPerSec = 48000;
    DeviceInfo.u.WaveFormatEx.nBlockAlign = 4;
    DeviceInfo.u.WaveFormatEx.nAvgBytesPerSec = 48000 * 4;
    DeviceInfo.u.WaveFormatEx.wBitsPerSample = 16;

    Status = DeviceIoControl(hWdmAud, IOCTL_GETCAPABILITIES, (LPVOID)&DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), (LPVOID)&DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), &BytesReturned, &Overlapped);

    if (!Status)
    {
        if (WaitForSingleObject(&Overlapped.hEvent, 5000) != WAIT_OBJECT_0)
        {
           printf("Failed to get iocaps %lx\n", GetLastError());
        }
    }


     Status = DeviceIoControl(hWdmAud, IOCTL_OPEN_WDMAUD, (LPVOID)&DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), &DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), &BytesReturned, &Overlapped);
     if (!Status)
     {
         if (WaitForSingleObject(&Overlapped.hEvent, 5000) != WAIT_OBJECT_0)
         {
             printf("Failed to open device with %lx\n", GetLastError());
             CloseHandle(hWdmAud);
             return -1;
         }
     }




    //
    // Allocate a buffer for 1 second
    //
    Length = 48000 * 4;
    SoundBuffer = (PSHORT)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, Length);

    //
    // Fill the buffer with a 500 Hz sine tone
    //
    while (i < Length / 2)
    {
        //
        // Generate the wave for each channel:
        // Amplitude * sin( Sample * Frequency * 2PI / SamplesPerSecond )
        //
        SoundBuffer[i] = 0x7FFF * sin(0.5 * (i - 1) * 500 * _2pi / 48000);
        i++;
        SoundBuffer[i] = 0x7FFF * sin((0.5 * i - 2) * 500 * _2pi / 48000);
        i++;
    }

    DeviceInfo.State = KSSTATE_RUN;
    Status = DeviceIoControl(hWdmAud, IOCTL_SETDEVICE_STATE, (LPVOID)&DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), &DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), &BytesReturned, &Overlapped);
    if (!Status)
    {
         if (WaitForSingleObject(&Overlapped.hEvent, 5000) != WAIT_OBJECT_0)
         {
             printf("Failed to set device into run state %lx\n", GetLastError());
             CloseHandle(hWdmAud);
             return -1;
         }
    }
    
    //
    // Play our 1-second buffer
    //
    DeviceInfo.Buffer = (PUCHAR)SoundBuffer;
    DeviceInfo.BufferSize = Length;
    Status = DeviceIoControl(hWdmAud, IOCTL_WRITEDATA, (LPVOID)&DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), &DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), &BytesReturned, &Overlapped);
    if (!Status)
    {
         if (WaitForSingleObject(&Overlapped.hEvent, 5000) != WAIT_OBJECT_0)
         {
             printf("Failed to play buffer %lx\n", GetLastError());
             CloseHandle(hWdmAud);
             return -1;
         }
    }

    printf("WDMAUD:  Played buffer\n");

    DeviceInfo.State = KSSTATE_STOP;
    Status = DeviceIoControl(hWdmAud, IOCTL_SETDEVICE_STATE, (LPVOID)&DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), &DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), &BytesReturned, &Overlapped);
    if (!Status)
    {
         if (WaitForSingleObject(&Overlapped.hEvent, 5000) != WAIT_OBJECT_0)
         {
             printf("Failed to set device into stop state %lx\n", GetLastError());
             CloseHandle(hWdmAud);
            return -1;
         }
    }
    printf("WDMAUD:  STOPPED\n");
    CloseHandle(hWdmAud);
    CloseHandle(&Overlapped.hEvent);
    printf("WDMAUD:  COMPLETE\n");
    return 0;
}
Ey3
Posts: 790
Joined: Thu Nov 15, 2007 9:13 pm
Location: Italy

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by Ey3 »

Proporrei, oltre alla normale discussione sull'audio, che se qualcuno vede dei commit degni di nota relativi all'argomento in questo topic trattato, li quoti qua, in modo che possano rimanere (anche perchè io non ho ancora trovato modo di vedere i commit più vecchi di un tot... e quindi a volte me ne perdo qualcuno).
DivXMan
Posts: 59
Joined: Sat Feb 16, 2008 12:58 am

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by DivXMan »

Ho visto questo link sul forum Inglese:
http://stuff.silverblade.co.uk/reactos/

Tra le altre cose è presente una sorta di RoadMap per lo sviluppo dell'audio.
Francesco19
Posts: 28
Joined: Sat Jan 24, 2009 8:39 pm

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by Francesco19 »

non ho capito...
quel programma emette un suono audio virtualizzato?
Ey3
Posts: 790
Joined: Thu Nov 15, 2007 9:13 pm
Location: Italy

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by Ey3 »

janderwald wrote: * Add sanity checks
* Fix memory leaks
* Implement enumerating devices for wave in devices
* Implement mapping virtual device id to real filter id and pin id
* Wdmaud can now select the correct pin
* Complete missing irp
* Handle all properties of KSPROPSETID
* Initialize filter properties in a deferred routine
* Add more error checks
* Ignore the failure of device interface registration as a audio might not have been initialized yet
* Disable checking of nonactive device interface because the code is not working yet (IoSetDeviceInterfaceState requires more work)
* Change service type of RosAudioSrv to automatically start when an audio adapter is installed
* Also start RosAudioSrv
* Start automatically sysaudio / wdmaud when audiosrv is started
* Implement CMP_RegisterNotification stubs
* Fixes audiosrv crash
Ho unito un po' di commit recenti tra ieri e oggi dello zelante janderwald :)
User avatar
Davy Bartoloni
Posts: 1485
Joined: Wed Jan 04, 2006 11:31 pm
Location: Cuneo
Contact:

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by Davy Bartoloni »

Quel programma genera una forma d'onda adatta ad essere riprodotta ( prendendola dalla memoria ) in formato WAV..

nel codice la creazione avviene usando un SENO ( non quello delle femmine ), quindi creando una forma d'onda sinusoidale... ovvero , quella che produrrebbe uno strumento a CORDE ( una chitarra.. un liuto )

ecco una linea che descrive il metodo di creazione:

Code: Select all

        SoundBuffer[i] = 0x7FFF * sin(0.5 * (i - 1) * 500 * _2pi / 48000);
con il "SENO" hihi

diciamo lo stesso principio che distingue un "CAMPIONATORE" da un "SINTETIZZATORE" .... ottimo Ey3.. posta di tanto in tanto questi "RESOCONTI" che ci eviti di scartabellare nei commit :)
User avatar
Davy Bartoloni
Posts: 1485
Joined: Wed Jan 04, 2006 11:31 pm
Location: Cuneo
Contact:

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by Davy Bartoloni »

Scusate il doppio Reply...

nulla.. l'ho gia' scritto nel topic della distro... ma mirrorizzo qua'...
ho l'idea che la SB16 emulata dal QEMU sia "diversa" da quella del VMWARE ( per VBOX nn so quale delle 2 possa essere..ma penso quella del Vmware )
le 2 versioni si distinguono, per la mancanza del PnP ( che difatti all' epoca POTEVA esserci.. o POTEVA NON ESSERCI ).. e forse pure dal tipo di COnenssione. ( ISA E PCI )

quella del Qemu.. per esempio deve essere forzata cm driver... ( pure su XP... e provoca una mancanza di ZITTIMENTO al termine di un Play... come facevano proprio le ISA alcuni secoli fa ).. mentre su VBOX playa normalmente ( in XP ).. ora... visto che fino ad ORA il Preloaded e' stato per QEMU.. dormo tranquillo e' "SO" che nn potra' accadere che il qemu nn possa supportare la prima versione di ROS+AUDIO... ma contemporaneamente, sapendo che chi sviluppa usa Vmware... ho paura che il "porting" per la SB16 del QEMU venga fatto in extremis... prima del rilascio della 0.39... quindi.. in ritardo...

Boh.. mi raccomando chi LEGGE QUALCOSA o SCOPRE QUALCOSA su novita' AUDIO.. POSTI!
lumo
Posts: 48
Joined: Tue Jun 17, 2008 12:24 pm

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by lumo »

@ Davy:
Per quanto riguarda la "riproduzione" di segnali audio , confermo che le schede audio di vmware e Qemu sono diverse come suono prodotto (e quella emulata da QEMU ti fà saltare dalla sedia :lol: ).

Invece su Virtualbox non si può ancora sentire niente (o almeno io che ho una realtek integrata nella scheda madre non ci riesco) ...le schede audio che fa sono finte :( (il SO virtuale la vede , ma non c'è nessuna interazione con l' hardware reale del pc)
RobertoAlbano
Posts: 75
Joined: Fri Jan 23, 2009 9:13 am
Contact:

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by RobertoAlbano »

Invece su Virtualbox non si può ancora sentire niente (o almeno io che ho una realtek integrata nella scheda madre non ci riesco) ...le schede audio che fa sono finte (il SO virtuale la vede , ma non c'è nessuna interazione con l' hardware reale del pc)
Quoto, uso VirtualBox 2.1.4 e... nessun risultato :(
ReactOs: 0.3.9 LiveCD
Ram: 2 Gb
CPU: Intel Pentium Dual Core 1.60 GHz
User avatar
Davy Bartoloni
Posts: 1485
Joined: Wed Jan 04, 2006 11:31 pm
Location: Cuneo
Contact:

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by Davy Bartoloni »

Ahhh.. e beh.. buono a sapersi.. cmq ho visto che su Qemu ( per lo meno la versione ricompilata di Febbraio che useremo per React-IT ).. la scheda SB16 viene vista cm multimedia audio device per fortuna... :) e mi sta venendo il dubbio che la fantomatica system-device.. sia invece il controller USB... ( ma di questo nn ne sn assolutamenet sicuro.. nn ho fatto ancora prove )
Ey3
Posts: 790
Joined: Thu Nov 15, 2007 9:13 pm
Location: Italy

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by Ey3 »

Vai Davy! Tanto lo so che andrai avanti fino alle 2.... quindi dommattina darò un'occhiata qua per vedere i tuoi risultati :D :mrgreen: :mrgreen:
User avatar
Davy Bartoloni
Posts: 1485
Joined: Wed Jan 04, 2006 11:31 pm
Location: Cuneo
Contact:

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by Davy Bartoloni »

12 min ago ReactOS
Commit by janderwald :: r39877 reactos/drivers/wdm/audio/ (7 files in 3 dirs):

* Start implementing kmixer
ottimo!
lumo
Posts: 48
Joined: Tue Jun 17, 2008 12:24 pm

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by lumo »

kmixer ?? spero che non sia di Kde (implementarlo sarebbe un problema) ... :lol:
User avatar
Davy Bartoloni
Posts: 1485
Joined: Wed Jan 04, 2006 11:31 pm
Location: Cuneo
Contact:

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by Davy Bartoloni »

19:14 today ReactOS
Commit by janderwald :: r39894 reactos/dll/win32/wdmaud.drv/wdmaud.c:

* Fix a few issues to open wdmaud / write to
* Under lucky circunstances, you might be able to now to play an mp3 with winamp ;)
Ey3
Posts: 790
Joined: Thu Nov 15, 2007 9:13 pm
Location: Italy

Re: Supporto AUDIO ( a partire dalla 0.38 )

Post by Ey3 »

Wowowowoowowow! :mrgreen: :mrgreen: :mrgreen: :shock: :shock: :shock: :shock: :shock: 8) 8) 8) 8)
Post Reply

Who is online

Users browsing this forum: No registered users and 8 guests