Форум программистов, компьютерный форум CyberForum.ru

Запись звука - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
ExeiLj
 Аватар для ExeiLj
8 / 8 / 1
Регистрация: 02.08.2012
Сообщений: 128
09.08.2012, 18:18     Запись звука #1
Кто-нибудь писал подобные программки, для захвата звука?
Если кто писал, помогите пожалуйста, а то я дико туплю.

Накидал тут по статье (http://www.junglewin.narod.ru/sound.html):

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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    WAVEFORMATEX WaveFormat;
 
    WaveFormat.wFormatTag = WAVE_FORMAT_PCM;
    WaveFormat.nChannels = 1;
    WaveFormat.nSamplesPerSec = 16000L;
    WaveFormat.nBlockAlign = 2;
    WaveFormat.nAvgBytesPerSec = WaveFormat.nSamplesPerSec*WaveFormat.nBlockAlign;
    WaveFormat.wBitsPerSample = 16;
    WaveFormat.cbSize = 0;
 
    MMRESULT mmRes =
    waveInOpen(&hWaveIn, WAVE_MAPPER, &WaveFormat, NULL, 0L, CALLBACK_WINDOW);
 
    ULONG BufferSize = WaveFormat.nBlockAlign*WaveFormat.nSamplesPerSec*10;
    WaveHdr.lpData = (char*)malloc(BufferSize);
    WaveHdr.dwBufferLength = BufferSize;
 
    waveInPrepareHeader(hWaveIn, &WaveHdr, sizeof(WAVEHDR));
 
    waveInAddBuffer(hWaveIn, &WaveHdr, sizeof(WAVEHDR));
 
    waveInStart(hWaveIn);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    waveInReset(hWaveIn);
    waveInUnprepareHeader(hWaveIn, &WaveHdr, sizeof(WAVEHDR));
     //WaveHdr.lpData - указывают на буфер, где хранять записанные данные.
     //После вызова waveInUnprepareHeader ими можно распоряжаться
     //по собственному усмотрению
    free(WaveHdr.lpData);
    waveInClose(hWaveIn);
}
Но не понял, ни как воспроизвести (прям из буфера), ни как сохранить в файл.
Может кто делал себе такую штуку, знает как и чего тут изменить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2012, 18:18     Запись звука
Посмотрите здесь:

C++ Запись звука с помощью bass
Нет вывода и неправильная запись (запись) C++
. Дана строка, изображающая десятичную запись целого положительного числа. Вывести строку, изображающую двоичную запись этого же числа C++
C++ люди добрые! нужно программа инверсная запись чисел, запись из инверсной в обычную
Запись звука в Windows C++
C++ Дана строка. Определить, представляет ли она собой запись целого числа или запись дробного числа
[Файлы] Запись-чтение-запись. Почему не прокатывает? C++
C++ Запись звука с микрофона в файл

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
09.08.2012, 19:37     Запись звука #2
Вам нужно использовать какую-нибудь библиотеку для работы со звуком (DirectX, а именно DirectSound) или еще есть кроссплатфоременная OpenAL.
Если использовать DirectSound, то необходмы следующие функции:
DirectSoundCreate8
IDirectSound8::CreateSoundBuffer
IDirectSoundBuffer8::SetFormat

Добавлено через 22 минуты
еще есть функция waveOutOpen function
Я неуверен, но может так подойдет:
Код
// после waveInStart
HWAVEOUT hWaveOut;
if(waveOutOpen(&hWaveOut, WAVE_MAPPER, &WaveFormat, 0, 0, WAVE_FORMAT_DIRECT))
{
  MessageBoxA(NULL, "Failed to replay", NULL, MB_OK | MB_ICONEXCLAMATION );
};
waveOutWrite(hWaveOut, &WaveHdr, sizeof(WaveInHdr)); /
Yandex
Объявления
09.08.2012, 19:37     Запись звука
Ответ Создать тему
Опции темы

Текущее время: 10:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru