Tinto |
Отправлено: 23.05.2004, 09:34 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
WaveHdr.lpData — указатель на буфер записи заполненный двоичными данными. Как прочитать этот буфер (блок памяти ), например в бинари файл, перед последующей командой — очистки буфера:
free(WaveHdr.lpData);
пробовал так:
char*Buffer = NULL;
memmove(Buffer,WaveHdr.lpData,n);
компилер ругается Access Violation address ....Help me!!! |
|
klen |
Отправлено: 23.05.2004, 10:18 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
Ты память для буффера Buffer невыделил
CODE |
// выделение памяти
char* Buffer = new char[n];
WaveHdr.lpData = new char[n];
..... какойто код (запись звука например) ..........
// копирование буфера (ТОЛЬКО НЕ ПОЙМУ НАКОЙ ХЕР МОЖЕТ ПОНАДОБИТСЯ ДАННЫЕ ГОНЯТЬ ПО ПАМЯТИ ?????????? ЭТО НЕПРАВИЛЬНЫЙ АЛГОРИТМ, ПРАВИЛЬНЫЙ — СОЗДАТЬ НЕСКОЛЬКО БУФЕРОВ И РАБОТАТЬ НА НА НИХ БЕЗ КОПИРОВАНИЯ — выше скорость, меньше ресурсов )
memcpy(Buffer,WaveHdr.lpData,n);
...используешь Buffer....
delete Buffer;
delete WaveHdr.lpData;
|
Отредактировано klen — 23/05/2004, 11:21 |
|
Tinto |
Отправлено: 23.05.2004, 10:40 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
WaveHdr.lpData = (char*)malloc(BufferSize);//память выделена
.
.
.
Как здесь скопировать WaveHdr.lpData в файло?
.
.
.
free(WaveHdr.lpData);//память освобождена |
|
klen |
Отправлено: 23.05.2004, 12:13 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
тип файла то какой, если просто сырой формат(без заголовков) то можно так:
CODE |
TFileStream* File = new TFileStream ("FileName" , fmCreate );
// если не сырой формат то здесь пишешь заголовки
...........................
File -> WriteBuffer ( WaveHdr.lpData , n );
delete File;
| |
|
Tinto |
Отправлено: 23.05.2004, 15:33 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
Попробовал таким вот способом:
FILE*f=fopen("d:\Sound2.bin","wb");
fwrite(WaveHdr.lpData,WaveHdr.dwBufferLength,1000,f);
fclose(f);
Записывает 0 байтов. |
|
Tinto |
Отправлено: 23.05.2004, 16:09 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
А вот так получилось:
int Handle = FileOpen("d:\speclab\wave\Sound2.bin", fmOpenWrite);
FileWrite(Handle, WaveHdr.lpData, WaveHdr.dwBufferLength);
FileClose(Handle);
Не пойму в чем разница? |
|
Tinto |
Отправлено: 23.05.2004, 20:38 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
Всем кому интересно, как я решил эту задачу (захват зука или запись аудиосигнала в бинарный файл) могут посмотреть готовую программу на форуме XPortal в разделе МультиМедиа. Всем спасибо за участие. |
|