Hallo Zusammen,
ich habe hier ein Problem und brauche drigend eine Hilfe.
ich versuche ein Sinussignal über Soundkarte zu generieren.die Sample
bei Soundkarte darf entweder 8 oder 16 bits sein, daher habe ich die
Werte als ganz Zahl berechnet und dann von jede Sample die erste und
die zweite Byte kopiert in char Buffer wenn es die Wert 16 bits ist. bei
8 Bits wird nur die erst byte kopiert.
Bei Verwendung von 8 bits für die Sample bekomme ich ein sauberes
Sinussignal über die Soundkarte und auch im Osziloskop aber wenn ich 16
Bits verwende bekomme ich eine Kommisches Signal.
hier ist eine Abschnitt meine C++ Code:
1 | int values;
|
2 | int* pvalues;
|
3 | char byte = 0;
|
4 | char* pByte = 0;
|
5 | char low_part;
|
6 | char high_part;
|
7 | int fs=44100;
|
8 | double T =0.008;
|
9 | int anzahl= (int)fs*T; //Anzahl der Samples
|
10 | int sampleBits,i; // jede Sample bei Soundkarte darf entweder 8 oder 16 Bits größ sein
|
11 |
|
12 | std::vector<char> charBuf;
|
13 |
|
14 | std::cout<<"Geben Sie die Anzahl der Bits von jeder Sample"<<std::endl;
|
15 | std::cin >> sampleBits; //die Größe der Sample 8 oder 16 Bits
|
16 |
|
17 | for(i=0; i< anzahl; i++)
|
18 | {
|
19 | //die Wert der Sample ersmal als intger brechnen
|
20 | values=(int)floor( (pow(2,sampleBits)-1)*sin(T*i/anzahl) );
|
21 |
|
22 | pvalues= &values ;
|
23 | pByte = reinterpret_cast<char*>(pvalues); // einen char pointer auf den int pointer zeigen lassen
|
24 |
|
25 | if(sampleBits == 8) // Sample 8 Bits Größe
|
26 | {
|
27 | charBuf.push_back(*pByte); // erste Byte von der integer Wert in Buffer kopieren
|
28 |
|
29 | }
|
30 | if(sampleBits == 16) // Sample 16 Bits Größe
|
31 | {
|
32 | low_part=(*pByte); //die ereste Byte der intger- Samples von Recht gezählt
|
33 | high_part=*(pByte+1); // die zweite Byte der integer-Sample von Recht gezäht
|
34 |
|
35 | charBuf.push_back(low_part); // kopieren der int Sample in Buffer der Karte
|
36 |
|
37 | charBuf.push_back(high_part);
|
38 | }
|
39 | }
|
40 |
|
41 | status = write(fd_,&(charBuf[0]), charBuf.size()); // signalwerte auf Soundkarte schreiben
|
weis jemand wie die Daten in Buffer der SoundKarte geschrieben werden
soll?
ich hoffe dass, da jemend der mir weiterhelfen kann.
Danke schön mal im Voraus