Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Ansprechen der Soundkarte in Konsoleprogramm

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
06.11.2003, 11:06 Uhr
~schneire
Gast


Hallo!

Möchte in meiner Konsoleanwendung (!) (erstellt mit MS Visual C++) die Soundkarte ansprechen, so daß sie mir in definierter Weise Samples in einen Speicher-Buffer liefert (Bits pro Sample, Einzelkanal o. Stereo, Samplerate etc. sollen einstellbar sein). Betriebssystem: Windows NT 4.0. Soundkarte: "Sound Blaster live!"

Kann mir da irgendjemand sagen, welche Befehle (und dazugehörige Libraries) ich dazu brauche und evtl. ein ganz einfaches Beispielprogramm posten?

Danke für die Hilfe.

schneire
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.11.2003, 12:37 Uhr
virtual
Sexiest Bit alive
(Operator)



--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.11.2003, 14:10 Uhr
~schneire
Gast


Hab jetzt herausbekommen, wie das ungefähr funktioniert!

Man kann die Funktionen "waveInOpen(..)", "waveInStart(...)", "waveInAddBuffer(...)" etc. verwenden, muß aber unbedingt die Bibliothek "winmm.lib" (bei Linker-Options) aufnehmen, sonst gibts einen entsprechenden Linker-Fehler!

Falls noch irgendjemand weitere Anregungen hat, bin ich trotzdem dankbar, da ich auf diesem Gebiet ein absoluter Anfänger bin.


schneire
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.07.2005, 15:38 Uhr
~chri_aut
Gast


kann mir vielleicht jemand die parameter der waveIn... Funktionen verständlich erklären? Aus der MSDN werd ich einfach nicht schlau!

lg chri
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.07.2005, 16:01 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi wenn du reine Wav-dateien abspielen willst, kann ich dir auch fmod (www.fmod.org) empfehlen, ansonsten musste dich durch die wave*-Methoden "wurschteln", evtl findeste in google irgendein beispiel dazu
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.07.2005, 08:06 Uhr
~chri_aut
Gast


also i hab das jetzt mal so gebastelt:


C++:
int _tmain(int argc, _TCHAR* argv[])
{
    const int NUMPTS = 44100 * 5;   // 5 Sekunden
    int sampleRate = 44100;
    short int waveIn[NUMPTS];   // 'short int' is a 16-bit type; I request 16-bit samples below
                                // for 8-bit capture, you'd use 'unsigned char' or 'BYTE' 8-bit types

    HWAVEIN hWaveIn;
    WAVEHDR WaveInHdr;
    
    
    // Specify recording parameters
    WAVEFORMATEX pFormat;
    pFormat.wFormatTag=WAVE_FORMAT_PCM;     // simple, uncompressed format
    pFormat.nChannels=2;                    //  1=mono, 2=stereo
    pFormat.nSamplesPerSec=sampleRate;      // 44100
    pFormat.nAvgBytesPerSec=sampleRate*2;   // = nSamplesPerSec * n.Channels * wBitsPerSample/8
    pFormat.nBlockAlign=2;                  // = n.Channels * wBitsPerSample/8
    pFormat.wBitsPerSample=16;              //  16 for high quality, 8 for telephone-grade
    pFormat.cbSize=0;

    waveInOpen(&hWaveIn, WAVE_MAPPER,&pFormat,0L, 0L, WAVE_FORMAT_DIRECT);
    

    // Set up and prepare header for input
    WaveInHdr.lpData = (LPSTR)waveIn;
    WaveInHdr.dwBufferLength = NUMPTS/**2*/;
    WaveInHdr.dwBytesRecorded=0;
    WaveInHdr.dwUser = 0L;
    WaveInHdr.dwFlags = 0L;
    WaveInHdr.dwLoops = 0L;
    waveInPrepareHeader(hWaveIn, &WaveInHdr, sizeof(WAVEHDR));

    // Insert a wave input buffer
    waveInAddBuffer(hWaveIn, &WaveInHdr, sizeof(WAVEHDR));

    printf("Sinus_1KHz.wav\n");
    GetWaveVolumePercent(true);
    SetWaveVolumePercent(25.0,true);
    GetWaveVolumePercent(false);
    SetWaveVolumePercent(25.0,false);
    

    printf("Aufnahme\n");
    PlaySound(TEXT("sinus_1KHz.wav"), NULL, SND_FILENAME);
    waveInStart(hWaveIn);
    // Warten bis Aufnahme fertig
    do {} while (waveInUnprepareHeader(hWaveIn, &WaveInHdr, sizeof(WAVEHDR))==WAVERR_STILLPLAYING);

    waveInClose(hWaveIn);
    printf("Aufnahme fertig\n");

    
    return 0;    
}



das dürfte ja soweit funktionieren, aber wo stehen jetzt die Daten meiner Aufnahme? In einer bestimmten struct oder wie funktioniert das genau???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.07.2005, 09:09 Uhr
ao

(Operator)



Zitat von ~chri_aut:
das dürfte ja soweit funktionieren, aber wo stehen jetzt die Daten meiner Aufnahme?

In WaveInHdr.lpData bzw. in waveIn[], was in deinem Programm dasselbe ist. Aber noch was anderes: Für ne 5-Sekunden-Stereo-Aufnahme musst du die Speichergröße noch mal verdoppeln.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.07.2005, 09:51 Uhr
~chri_aut
Gast


Meinst du so:


C++:
WaveInHdr.dwBufferLength = NUMPTS*2;


???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.07.2005, 10:14 Uhr
~chri_aut
Gast


und eine frage hab ich noch:

wie müsste ich das implementierien wenn ich sozusagen eine Tabelle mit der Zeit und dem jeweiligen Wert der Amplitude aufstellen will (ich nehme ja ein sinussignal auf)?
also es sollte ungefähr so aussehen:
Zeit Amplitude
0.0 0.0
0.125 3.3465
...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.07.2005, 11:30 Uhr
ao

(Operator)



Zitat von ~chri_aut:
Meinst du so:

C++:
WaveInHdr.dwBufferLength = NUMPTS*2;


???

Den Puffer selber nicht verlängern, aber behaupten, er wäre verlängert: Das ist der sichere Weg zum Absturz. Nein, ich meine so:

C++:

const int NUMPTS = 44100 * 2 * 5; // 44.1 kHz, 2 Kanäle, 5 Sekunden



ao

Dieser Post wurde am 20.07.2005 um 11:30 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: