С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
14 / 14 / 1
Регистрация: 13.02.2011
Сообщений: 104

Ощибка в WinAPI

16.03.2011, 01:24. Показов 1824. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
// Ch2p1_ToneGenerator.cpp : Defines the entry point for the console application.
//
#include <stdafx.h>
#include <iostream>
#include <sstream>
#include <string>
#include <math.h>
#include <conio.h>
#include <conio.h>
#include <dsound.h>
#include <DxErr.h>
#include "dxutil.h"
 
using namespace std;
#define PI 3.14159
 
// tone frequencies: (C0 = lowest)
 
// C0      16.35      C#0/Db0 17.32      D0      18.35 
// D#0/Eb0 19.45      E0      20.60      F0      21.83 
// F#0/Gb0 23.12      G0      24.50      G#0/Ab0 25.96 
// A0      27.50      A#0/Bb0 29.14      B0      30.87 
 
// C1      32.70      C#1/Db1 34.65      D1      36.71 
// D#1/Eb1 38.89      E1      41.20      F1      43.65 
// F#1/Gb1 46.25      G1      49.00      G#1/Ab1 51.91 
// A1      55.00      A#1/Bb1 58.27      B1      61.74 
 
// C2      65.41      C#2/Db2 69.30      D2      73.42 
// D#2/Eb2 77.78      E2      82.41      F2      87.31 
// F#2/Gb2 92.50      G2      98.00      G#2/Ab2 103.83 
// A2      110.00     A#2/Bb2 116.54     B2      123.47 
 
// C3      130.81     C#3/Db3 138.59     D3      146.83  
// D#3/Eb3 155.56     E3      164.81     F3      174.61  
// F#3/Gb3 185.00     G3      196.00     G#3/Ab3 207.65 
// A3      220.00     A#3/Bb3 233.08     B3      246.94 
 
// C4      261.63     C#4/Db4 277.18     D4      293.66 
// D#4/Eb4 311.13     E4      329.63     F4      349.23  
// F#4/Gb4 369.99     G4      392.00     G#4/Ab4 415.30  
// A4      440.00     A#4/Bb4 466.16     B4      493.88  
 
// C5      523.25     C#5/Db5 554.37     D5      587.33  
// D#5/Eb5 622.25     E5      659.26     F5      698.46  
// F#5/Gb5 739.99     G5      783.99     G#5/Ab5 830.61  
// A5      880.00     A#5/Bb5 932.33     B5      987.77  
 
// C6      1046.50    C#6/Db6 1108.73    D6      1174.66  
// D#6/Eb6 1244.51    E6      1318.51    F6      1396.91  
// F#6/Gb6 1479.98    G6      1567.98    G#6/Ab6 1661.22  
// A6      1760.00    A#6/Bb6 1864.66    B6      1975.53  
 
// C7      2093.00    C#7/Db7 2217.46    D7      2349.32  
// D#7/Eb7 2489.02    E7      2637.02    F7      2793.83  
// F#7/Gb7 2959.96    G7      3135.96    G#7/Ab7 3322.44 
// A7      3520.00    A#7/Bb7 3729.31    B7      3951.07  
 
// C8      4186.01    C#8/Db8 4434.92    D8      4698.64  
// D#8/Eb8 4978.03
 
// global variables /////////////////////////////////////////////////////////
 
LPDIRECTSOUND g_pDS = NULL;
 
 
// code /////////////////////////////////////////////////////////////////////
HWND GetConsoleWindowHandle()
{
  TCHAR title[512];
  HWND hWnd;
 
  GetConsoleTitle(title, sizeof(title));
  hWnd = FindWindow(NULL, title);
  return(hWnd);
}
 
// InitAudio: initializes DirectX Audio
void InitAudio()
{
  HRESULT hr;
  stringstream err;
 
  // step 1: create primary DS interface
 /* if (FAILED(hr = DirectSoundCreate(NULL, &g_pDS, NULL))) {
    err << "DirectSoundCreate8 failed: " << DXGetErrorString(hr) << endl;
    throw(err.str());
  }*/
 
  // step 2: Set cooperative level                  
 /* if(FAILED(hr = g_pDS->SetCooperativeLevel(GetConsoleWindowHandle(), DSSCL_PRIORITY))) {
    err << "SetCooperativeLevel failed: " << DXGetErrorString(hr) << endl;
    throw(err.str());
  }*/
 
  // step 3: Set primary buffer's format (stereo, 22050 Hz, 16 bits)
  {
    LPDIRECTSOUNDBUFFER pDSBPrimary = NULL;
 
    // Get the primary buffer 
    DSBUFFERDESC dsbd;
    ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
    dsbd.dwSize        = sizeof(DSBUFFERDESC);
    dsbd.dwFlags       = DSBCAPS_PRIMARYBUFFER;
    dsbd.dwBufferBytes = 0;
    dsbd.lpwfxFormat   = NULL;
       
    // "create it" (or get it if it already exists, which it does)
   /* if( FAILED( hr = g_pDS->CreateSoundBuffer( &dsbd, &pDSBPrimary, NULL ) ) ) {
      err << "CreateSoundBuffer failed: " << DXGetErrorString(hr) << endl;
      throw(err.str());
    }*/
 
    // set its format
    WAVEFORMATEX wfx;
    ZeroMemory( &wfx, sizeof(WAVEFORMATEX) ); 
    wfx.wFormatTag      = WAVE_FORMAT_PCM; 
    wfx.nChannels       = (WORD)2; 
    wfx.nSamplesPerSec  = 22050; // 22 Khz (CD quality is ~ 44 Khz, so this is "half-CD" quality)
    wfx.wBitsPerSample  = (WORD) 16; // 2 bytes per sample * 22050 samples/sec = 44100 bytes/sec)
    wfx.nBlockAlign     = (WORD) (wfx.wBitsPerSample / 8 * wfx.nChannels);
    wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;
 
   /* if( FAILED( hr = pDSBPrimary->SetFormat(&wfx) ) ) {
      err << "pSDBPrimary->SetFormat() failed: " << DXGetErrorString(hr) << endl;
      throw(err.str());
    }*/
 
    // we're done with it, so release!
    SAFE_RELEASE( pDSBPrimary );
  } 
}
 
int CreateSecondaryBuffer(LPDIRECTSOUNDBUFFER *ppBuffer, int channels, 
                           int secs, int samplerate, int bitspersample, DWORD flags)
{
  HRESULT hr;
  stringstream err;
  
  DSBUFFERDESC dsbd;
  WAVEFORMATEX wfx;
  
  ZeroMemory( &wfx, sizeof(WAVEFORMATEX) ); 
  wfx.wFormatTag      = WAVE_FORMAT_PCM; 
  wfx.nChannels       = channels; 
  wfx.nSamplesPerSec  = samplerate; 
  wfx.wBitsPerSample  = bitspersample; 
  wfx.nBlockAlign     = (WORD) (wfx.wBitsPerSample / 8 * wfx.nChannels);
  wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;
 
  ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
  dsbd.dwSize          = sizeof(DSBUFFERDESC);
  dsbd.dwFlags         = flags;
  dsbd.dwBufferBytes   = samplerate * bitspersample / 8 * channels * secs;
  dsbd.guid3DAlgorithm = GUID_NULL;
  dsbd.lpwfxFormat     = &wfx;
 
 /* if( FAILED( hr = g_pDS->CreateSoundBuffer( &dsbd, ppBuffer, NULL ) ) )
  {
      err << "CreateSecondaryBuffer: CreateSoundBuffer failed: " << DXGetErrorString(hr) << endl;
      throw(err.str());;
  }*/
  return(dsbd.dwBufferBytes); // return size of buffer
}
 
void FillBuffer(LPDIRECTSOUNDBUFFER pBuffer, float frequency, int buffersize, int samplerate)
{
  HRESULT hr;
  unsigned char *pBufferBytes;
  DWORD lockedsize;
 
  // Lock the buffer down
pBuffer->Lock(0, buffersize, (void ** )(&pBufferBytes), &lockedsize, NULL, NULL, 0L);
  for (DWORD q=0; q < lockedsize; q++) {
    /* What cycle are we in? */
    float pos = frequency/(float)samplerate*(float)q;
    /* Take fractional part of cycle and convert to degrees */
    float r = (pos - floor(pos)) * 2 * PI;
    float value = sin(r); // we now have a value somewhere between -1 and 1
 
    // change multiplier to change amplitude of wave aka volume
    pBufferBytes[q] = 127+(value * 127); 
  }
 
  // Unlock the buffer
  pBuffer->Unlock( pBufferBytes, lockedsize, NULL, 0 );
}
 
void PlayBuffer(LPDIRECTSOUNDBUFFER pBuffer)
{
  pBuffer->Play(0, 0, DSBPLAY_LOOPING);
}
 
void Exit(int errorcode)
{
  #ifdef _DEBUG
  cout << endl << endl << "(Program ended, press a key to exit.)";
  // so that the console window doesn't disappear before we have
  // a chance to look at it.
  getchar(); 
#endif
 
  exit(errorcode);
} 
 
 
void main()
{
  LPDIRECTSOUNDBUFFER soundbuf;
  bool audioinited = false;
 
  try {
 
      cout << "ToneGenerator" << endl << "=========================================" << endl;
 
    cout << "Initializing Audio..." << endl;
    // initialize DirectX Audio
    InitAudio();
    audioinited = true;
 
    // create secondary buffer
    cout << "Creating sound buffer..." << endl;
    int buffersize = CreateSecondaryBuffer(&soundbuf, 1, 1, 22010, 8, 0);
 
    // fill secondary buffer with tone data
    cout << "Filling sound buffer with data..." << endl;
    FillBuffer(soundbuf, 440.0, buffersize, 22010);  // 4th octave A note
    
    // tell user to turn down speakers
    cout << endl << endl << "*** TURN YOUR VOLUME DOWN ALL THE WAY! *** (then press a key)" << endl;
    getch();
 
    // play secondary buffer
    cout << "Playing buffer (slowly increase your volume, then hit a key to stop)..." << endl;
    PlayBuffer(soundbuf);
    getch();
 
    // stop secondary buffer
    soundbuf->Stop();
 
    // release secondary buffer
    cout << "Releasing sound buffer..." << endl;
    SAFE_RELEASE(soundbuf);
 
    // un-init DirectSound
    cout << "Un-Initializing Audio..." << endl;
    SAFE_RELEASE(g_pDS);
 
  }
  catch(string err) {
    cerr << err;
    Exit(-1);
  }
 
  Exit(0);
}
Собственно разбираю данный код,который пришлось переделывать т.к он написан был для ДХ8.Так вот ошибка возникает на функции заполнения буфера вторичного.Тоесть программа работает до строки блокировки буфера где пишет что неправильный указатель.Помогите разобраться пожалуйста

Добавлено через 1 минуту
pBuffer->Lock(0, buffersize, (void ** )(&pBufferBytes), &lockedsize, NULL, NULL, 0L);

вот в данной строке неправильный 3 параметр
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2011, 01:24
Ответы с готовыми решениями:

Ощибка в С++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; int main() { char x; cin.getline (x, 1000); int i=0, y=0, a={0}, l=0, min=0; ...

Ощибка в коде
Подскажите, пожалуйста что неправельно в этом коде #include &lt;iostream.h&gt; int chet(int, int); main() { int a,b,S; ...

Подскажите где ощибка.
#include &lt;iostream&gt; using namespace std; #include &lt;math.h&gt; int main () { double a,b,c; cout &lt;&lt; ''Vvedite katet'' &lt;&lt;endl; ...

1
72 / 72 / 5
Регистрация: 03.11.2009
Сообщений: 492
22.03.2011, 10:19
Очень удобно разбираться от рабочего кода, здесь на форуме их много, пользуясь поиском
1. Пример DSRecord в Builder6C++
https://www.cyberforum.ru/cpp-... 06725.html
2. Пример DSRecord Visual C++
https://www.cyberforum.ru/cpp-... page2.html
3. Пример генератор в Builder6C++
C++
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
void SuperBeep(DWORD dwFrequency, DWORD dwMilliSeconds)
{   // ÷àñòîòà äèñêðåòèçàöèè = 44100 Ãö
    // êîë-âî áèò íà ñýìïë = 8
    // åñëè òðåáóåìàÿ ÷àñòîòà > 44100 èëè ðàâíà íóëþ, òî âûõîäèì
    if(!dwFrequency || dwFrequency>44100)
        return;
    // äëèíà äîðîæêè â áàéòàõ
    DWORD numSamples = 44100 / dwFrequency;
 
    // âûäåëÿåì ïàìÿòü ïîä äîðîæêó
    DWORD size = sizeof(WAVHEADER) + numSamples;
    void *buff = new char[size ];
 
    // çàïîëíÿåì WAV-header
    WAVHEADER *head = (WAVHEADER*)buff;
    strcpy(head->sigRIFF, "RIFF");
    strcpy(head->sigWAVE, "WAVE");
    head->sizeRIFFch = size - 8;
    strcpy(head->sigFMT, "fmt ");
    head->sizeFMTch = 16;
    head->wFormatTag = 1;
    head->wChannels = 1; // ìîíî
    head->dwSamplesPerSec = 44100;
    head->dwAvgBytesPerSec = 44100;
    head->wBlockAlign = 1;
    head->wBitPerSample = 8;
    strcpy(head->sigDATA, "data");
    head->sizeDATAch = size;
    // çàïîëíÿåì äîðîæêó ïåðèîäîì ñèíóñà
    BYTE *samples = (BYTE*)(head+1);
    for(DWORD i=0; i<numSamples; i++){
        samples[i] = BYTE(255*sin(6.28*double(i)/double(size)));
        Form1->Canvas->Pen->Color = clRed;
        Form1->Canvas->LineTo(i,samples[i]+100);
    // ïðîèãðûâàåì çâóê
    PlaySound((const char*)buff, 0, SND_ASYNC|SND_LOOP|SND_MEMORY);
    // æä¸ì çàäàííîå êîëè÷åñòâî ìèëëèñåêóíä
    Sleep(dwMilliSeconds);
    // îñòàíàâëèâàåì çâóê
    PlaySound(0, 0, SND_ASYNC);
}
 void __fastcall TForm1::Button5Click(TObject *Sender)
{   Timer1->Enabled = true;
    SuperBeep(900, 1000);
    return ;
    Timer1->Enabled = false;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2011, 10:19
Помогаю со студенческими работами здесь

Ощибка error: non-lvalue in assignment
....... char op; while ((op = *token) == '*' || op=='/' || op='%'){ ....... почиму вылезает такая ошибка тут на...

Ощибка в массиве
arr = array of integer; ошибка из-за него

Ощибка в SQL
Доброго времени суток, ребят помогите по боротся с ошибкой, сам только начал осваивать SQL form5.ADOQuery1.Active:=false; ...

Ощибка Биос
Помогите когда мой компьютер заглючил я его перезагрузил. Я его начал включать и биос начал грузится дольше обычного. ...

Где ощибка?
Для каждой строки прямоугольной целочисленной матрицы определить сумму ее положительных элементов. После чего строку с минимальной суммой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru